You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2013/12/06 02:30:12 UTC

svn commit: r1548358 - in /tomee/tomee/trunk: ./ server/openejb-derbynet/ server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/ server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/

Author: tveronezi
Date: Fri Dec  6 01:30:11 2013
New Revision: 1548358

URL: http://svn.apache.org/r1548358
Log:
Improving DerbyNetworkService tests.

Modified:
    tomee/tomee/trunk/pom.xml
    tomee/tomee/trunk/server/openejb-derbynet/pom.xml
    tomee/tomee/trunk/server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/DerbyNetworkService.java
    tomee/tomee/trunk/server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/DerbyNetworkServiceTest.java

Modified: tomee/tomee/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/pom.xml?rev=1548358&r1=1548357&r2=1548358&view=diff
==============================================================================
--- tomee/tomee/trunk/pom.xml (original)
+++ tomee/tomee/trunk/pom.xml Fri Dec  6 01:30:11 2013
@@ -1693,6 +1693,11 @@
         <artifactId>derbynet</artifactId>
         <version>10.9.1.0</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.derby</groupId>
+        <artifactId>derbyclient</artifactId>
+        <version>10.9.1.0</version>
+      </dependency>
     </dependencies>
   </dependencyManagement>
   <distributionManagement>

Modified: tomee/tomee/trunk/server/openejb-derbynet/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-derbynet/pom.xml?rev=1548358&r1=1548357&r2=1548358&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-derbynet/pom.xml (original)
+++ tomee/tomee/trunk/server/openejb-derbynet/pom.xml Fri Dec  6 01:30:11 2013
@@ -20,7 +20,8 @@
 
 <!-- $Rev$ $Date$ -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
     <artifactId>server</artifactId>
     <groupId>org.apache.openejb</groupId>
@@ -51,6 +52,11 @@
       <artifactId>derbynet</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derbyclient</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>

Modified: tomee/tomee/trunk/server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/DerbyNetworkService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/DerbyNetworkService.java?rev=1548358&r1=1548357&r2=1548358&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/DerbyNetworkService.java (original)
+++ tomee/tomee/trunk/server/openejb-derbynet/src/main/java/org/apache/openejb/server/derbynet/DerbyNetworkService.java Fri Dec  6 01:30:11 2013
@@ -59,31 +59,33 @@ public class DerbyNetworkService impleme
     @Override
     public void init(final Properties properties) throws Exception {
         final Options options = new Options(properties);
-
         this.port = options.get("port", 1527);
         this.disabled = options.get("disabled", false);
-
-        host = InetAddress.getByName("0.0.0.0");
-        System.setProperty("derby.system.home", SystemInstance.get().getBase().getDirectory().getAbsolutePath());
+        this.host = InetAddress.getByName("0.0.0.0");
+        System.setProperty(
+                "derby.system.home",
+                options.get("derby.system.home", SystemInstance.get().getBase().getDirectory().getAbsolutePath())
+        );
     }
 
     @Override
     public void service(final InputStream inputStream, final OutputStream outputStream) throws ServiceException, IOException {
+        // no-op
     }
 
     @Override
     public void service(final Socket socket) throws ServiceException, IOException {
+        // no-op
     }
 
     @Override
     public void start() throws ServiceException {
-        if (disabled)
+        if (this.disabled) {
             return;
+        }
         try {
-            serverControl = new NetworkServerControl(host, port);
-            //serverControl.setMaxThreads(threads);
-
-            serverControl.start(new LoggingPrintWriter("Derby"));
+            this.serverControl = new NetworkServerControl(host, port);
+            this.serverControl.start(new LoggingPrintWriter("Derby"));
         } catch (Exception e) {
             throw new ServiceException(e);
         }
@@ -91,15 +93,15 @@ public class DerbyNetworkService impleme
 
     @Override
     public void stop() throws ServiceException {
-        if (serverControl == null) {
+        if (this.serverControl == null) {
             return;
         }
         try {
-            serverControl.shutdown();
+            this.serverControl.shutdown();
         } catch (Exception e) {
             throw new ServiceException(e);
         } finally {
-            serverControl = null;
+            this.serverControl = null;
         }
     }
 

Modified: tomee/tomee/trunk/server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/DerbyNetworkServiceTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/DerbyNetworkServiceTest.java?rev=1548358&r1=1548357&r2=1548358&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/DerbyNetworkServiceTest.java (original)
+++ tomee/tomee/trunk/server/openejb-derbynet/src/test/java/org/apache/openejb/server/derbynet/DerbyNetworkServiceTest.java Fri Dec  6 01:30:11 2013
@@ -17,6 +17,7 @@
 package org.apache.openejb.server.derbynet;
 
 
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.ServerService;
 import org.apache.openejb.server.ServiceFinder;
 import org.apache.openejb.server.SimpleServiceManager;
@@ -24,9 +25,14 @@ import org.apache.openejb.util.NetworkUt
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.io.File;
 import java.io.IOException;
-import java.net.ConnectException;
 import java.net.Socket;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -36,26 +42,49 @@ import java.util.Properties;
  */
 public class DerbyNetworkServiceTest {
 
-    private static final long RETRY_TIMEOUT = 10000;
+    private static final long RETRY_TIMEOUT = 250;
+    private long timeoutLeftover = 10000;
 
-    private void connectSocket(int port) {
+    private void waitForDerby(int port) {
         try {
+            Socket socket = new Socket("localhost", port);
+            socket.close();
+        } catch (IOException e) {
+            timeoutLeftover -= RETRY_TIMEOUT;
+            if (timeoutLeftover < 0) {
+                Assert.fail("Impossible to connect using port\"" + port + "\". Message: " + e.getMessage());
+            }
             try {
-                new Socket("localhost", port);
-            } catch (ConnectException e) {
-                // OK it didn't fully started yet. Wait a bit and try it again.
                 Thread.sleep(RETRY_TIMEOUT);
-                new Socket("localhost", port);
+            } catch (InterruptedException ignore) {
+                // no-op
+            }
+            waitForDerby(port);
+        }
+    }
+
+    private void assertConnection(int port) throws ClassNotFoundException, SQLException {
+        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+        final String connectionStr = "jdbc:derby://localhost:" + port + "/testDB;create=true;user=tomee;password=tomee";
+        final Connection conn = DriverManager.getConnection(connectionStr);
+        try {
+            final Statement stmt = conn.createStatement();
+            final ResultSet rs = stmt.executeQuery("values(1)"); // Derby doesn't like "SELECT 1" as validation query
+            boolean valueFound = false;
+            while (rs.next()) {
+                valueFound = true;
+                Assert.assertEquals("1", rs.getString(1));
             }
-        } catch (Exception e) {
-            Assert.fail("Impossible to connect using port\"" + port + "\". Message: " + e.getMessage());
+            Assert.assertTrue("No value found.", valueFound);
+            stmt.close();
+        } finally {
+            conn.close();
         }
     }
 
     @Test
     public void test() throws Exception {
         final int port = NetworkUtil.getNextAvailablePort();
-
         final SimpleServiceManager serviceManager = new SimpleServiceManager(new ServiceFinder() {
             @Override
             public Map<String, Properties> mapAvailableServices(Class interfase) throws IOException, ClassNotFoundException {
@@ -64,15 +93,19 @@ public class DerbyNetworkServiceTest {
                 properties.setProperty("port", port + "");
                 properties.setProperty("disabled", "false");
                 properties.put(ServerService.class, DerbyNetworkService.class);
+                properties.put(
+                        "derby.system.home",
+                        new File(SystemInstance.get().getBase().getDirectory(), "target").getAbsolutePath()
+                );
                 final Map<String, Properties> services = new HashMap<String, Properties>();
                 services.put("derbynet", properties);
                 return services;
             }
         });
-
         serviceManager.init();
         serviceManager.start(false);
-        connectSocket(port);
+        waitForDerby(port);
+        assertConnection(port);
         serviceManager.stop();
     }
 }