You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by km...@apache.org on 2012/06/14 20:25:03 UTC

svn commit: r1350361 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java

Author: kmarsden
Date: Thu Jun 14 18:25:03 2012
New Revision: 1350361

URL: http://svn.apache.org/viewvc?rev=1350361&view=rev
Log:
DERBY-5424 On z/OS testConnectWrongSubprotocolWithSystemProperty(org.apache.derbyTesting.functionTests.tests.tools.ConnectWrongSubprotocolTest)junit.framework.AssertiFailedError

Fix code and test to read and write to service.properties with a consistent 
encoding 


Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java?rev=1350361&r1=1350360&r2=1350361&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/StorageFactoryService.java Thu Jun 14 18:25:03 2012
@@ -47,6 +47,7 @@ import java.io.FileReader;
 import java.io.InputStream;
 import java.io.BufferedInputStream;
 import java.io.BufferedWriter;
+import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.IOException;
 import java.io.FileNotFoundException;
@@ -359,8 +360,10 @@ final class StorageFactoryService implem
                             properties.store(os, serviceName +
                                 MessageService.getTextMessage(
                                     MessageId.SERVICE_PROPERTIES_DONT_EDIT));
+                            // The eof token should match the ISO-8859-1 encoding 
+                            // of the rest of the properties file written with store.
                             BufferedWriter bOut = new BufferedWriter(
-                                    new OutputStreamWriter(os));
+                                    new OutputStreamWriter(os,"ISO-8859-1"));
                             bOut.write(SERVICE_PROPERTIES_EOF_TOKEN);
                             bOut.newLine();
                             storageFactory.sync( os, false);
@@ -520,7 +523,9 @@ final class StorageFactoryService implem
             BufferedReader bin = null;
             String lastLine = null;
             try {
-                bin = new BufferedReader(new FileReader(spf.getPath()));
+                //service.properties always in ISO-8859-1 because written with Properties.store()
+                bin = new BufferedReader(new InputStreamReader(
+                        new FileInputStream(spf.getPath()),"ISO-8859-1"));
                 String line;
                 while ((line = bin.readLine()) != null) {
                     if (line.trim().length() != 0) {

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java?rev=1350361&r1=1350360&r2=1350361&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/ServicePropertiesFileTest.java Thu Jun 14 18:25:03 2012
@@ -25,6 +25,8 @@ import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -49,6 +51,9 @@ import org.apache.derbyTesting.junit.Tes
 public class ServicePropertiesFileTest
         extends BaseJDBCTestCase {
     
+    //Service Properties File is always encoded in US-ASCII
+    // because it is written with Properties.store
+    private static final String SPF_ENCODING = "ISO-8859-1";
     private static final String LOG_A_MODE =
             "derby.storage.logArchiveMode";
     /**
@@ -175,7 +180,7 @@ public class ServicePropertiesFileTest
         // Recover and assert
         connectThenShutdown(db);
         assertNormalPresence();
-        assertEOFToken(spf);
+        assertEOFToken(spf,SPF_ENCODING);
     }
 
     /**
@@ -196,13 +201,13 @@ public class ServicePropertiesFileTest
         String db = "spfTestSPFCWB";
         copyDbAs(db);
         createSPFBackup(true);
-        removeEOFToken(spf);
+        removeEOFToken(spf, SPF_ENCODING);
         assertPresence(true, true);
 
         // Recover and assert
         connectThenShutdown(db);
         assertNormalPresence();
-        assertEOFToken(spf);
+        assertEOFToken(spf,SPF_ENCODING);
     }
 
     /**
@@ -261,10 +266,10 @@ public class ServicePropertiesFileTest
     /**
      * Asserts that the specified file ends with the end-of-file token.
      */
-    private void assertEOFToken(File file)
+    private void assertEOFToken(File file, String encoding)
             throws IOException {
-        BufferedReader in = new BufferedReader(
-                PrivilegedFileOpsForTests.getFileReader(file));
+        BufferedReader in = new BufferedReader(new InputStreamReader(
+                PrivilegedFileOpsForTests.getFileInputStream(file), encoding));
         String prev = null;
         String cur;
         while ((cur = in.readLine()) != null) {
@@ -272,23 +277,25 @@ public class ServicePropertiesFileTest
         }
         in.close();
         assertNotNull("last line is null - empty file?", prev);
-        assertTrue(prev.startsWith(END_TOKEN));
+        assertTrue("prev:" + prev +": does not equal " + END_TOKEN, 
+                prev.startsWith(END_TOKEN));
     }
 
     /**
      * Removes the end-of-file token from the specified file.
      */
-    private void removeEOFToken(File original)
+    private void removeEOFToken(File original, String encoding)
             throws IOException {
         // Move file, then rewrite by removing last line (the token).
         File renamed = new File(original.getAbsolutePath() + "-renamed");
         PrivilegedFileOpsForTests.copy(original, renamed);
         PrivilegedFileOpsForTests.delete(original);
-        BufferedReader in = new BufferedReader(
-                PrivilegedFileOpsForTests.getFileReader(renamed));
-        // Default charset should be 8859_1.
-        BufferedWriter out = new BufferedWriter(
-                PrivilegedFileOpsForTests.getFileWriter(original));
+        BufferedReader in = new BufferedReader(new InputStreamReader(
+                PrivilegedFileOpsForTests.getFileInputStream(renamed),
+                encoding));
+        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
+                PrivilegedFileOpsForTests.getFileOutputStream(original),
+                encoding));
         String prev = null;
         String line;
         while ((line = in.readLine()) != null) {
@@ -316,8 +323,9 @@ public class ServicePropertiesFileTest
     private int grepForToken(String token, File file)
             throws IOException {
         int matchingLines = 0;
-        BufferedReader in = new BufferedReader(
-                PrivilegedFileOpsForTests.getFileReader(file));    
+        BufferedReader in = new BufferedReader(new InputStreamReader(
+                PrivilegedFileOpsForTests.getFileInputStream(file),
+                SPF_ENCODING));    
         String line;
         while ((line = in.readLine()) != null) {
             if (line.indexOf(token) != -1) {
@@ -350,6 +358,7 @@ public class ServicePropertiesFileTest
             PrivilegedFileOpsForTests.delete(spf);
         }
     }
+    
 
     /**
      * Connects to the specified database, then shuts it down.