001: /*
002: *
003: * Derby - Class org.apache.derbyTesting.junit.NetworkServerTestSetup
004: *
005: * Licensed to the Apache Software Foundation (ASF) under one or more
006: * contributor license agreements. See the NOTICE file distributed with
007: * this work for additional information regarding copyright ownership.
008: * The ASF licenses this file to You under the Apache License, Version 2.0
009: * (the "License"); you may not use this file except in compliance with
010: * the License. You may obtain a copy of the License at
011: *
012: * http://www.apache.org/licenses/LICENSE-2.0
013: *
014: * Unless required by applicable law or agreed to in writing,
015: * software distributed under the License is distributed on an
016: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
017: * either express or implied. See the License for the specific
018: * language governing permissions and limitations under the License.
019: */
020: package org.apache.derbyTesting.junit;
021:
022: import java.io.FileNotFoundException;
023: import java.net.InetAddress;
024: import java.io.FileOutputStream;
025: import java.io.PrintWriter;
026: import java.security.AccessController;
027: import java.security.PrivilegedAction;
028: import junit.extensions.TestSetup;
029: import junit.framework.Test;
030: import org.apache.derby.drda.NetworkServerControl;
031:
032: /**
033: * Test decorator that starts the network server on startup
034: * and stops it on teardown.
035: *
036: * It does not start it if the test is configured to run in
037: * embedded mode.
038: *
039: * Currently it will start the network server in the same VM
040: * and it does not support starting it from a remote
041: * machine.
042: */
043: final public class NetworkServerTestSetup extends TestSetup {
044:
045: private FileOutputStream serverOutput;
046:
047: /**
048: * Decorator this test with the NetworkServerTestSetup
049: */
050: public NetworkServerTestSetup(Test test) {
051: super (test);
052: }
053:
054: /**
055: * Start the network server.
056: */
057: protected void setUp() throws Exception {
058:
059: TestConfiguration config = TestConfiguration.getCurrent();
060:
061: if (!config.getJDBCClient().isEmbedded()) {
062: BaseTestCase.println("Starting network server:");
063:
064: serverOutput = (FileOutputStream) AccessController
065: .doPrivileged(new PrivilegedAction() {
066: public Object run() {
067: String fileName = System
068: .getProperty("derby.system.home")
069: + "serverConsoleOutput.log";
070: FileOutputStream fos = null;
071: try {
072: fos = (new FileOutputStream(fileName));
073: } catch (FileNotFoundException ex) {
074: ex.printStackTrace();
075: }
076: return fos;
077: }
078: });
079:
080: networkServerController = new NetworkServerControl(
081: InetAddress.getByName(config.getHostName()), config
082: .getPort());
083:
084: networkServerController
085: .start(new PrintWriter(serverOutput));
086:
087: final long startTime = System.currentTimeMillis();
088: while (true) {
089: Thread.sleep(SLEEP_TIME);
090: try {
091: networkServerController.ping();
092: break;
093: } catch (Exception e) {
094: if (System.currentTimeMillis() - startTime > WAIT_TIME) {
095: e.printStackTrace();
096: fail("Timed out waiting for network server to start");
097: }
098: }
099: }
100: }
101: }
102:
103: /**
104: * Stop the network server.
105: */
106: protected void tearDown() throws Exception {
107: if (networkServerController != null) {
108: networkServerController.shutdown();
109: serverOutput.close();
110: }
111: }
112:
113: /* Network Server Control */
114: private NetworkServerControl networkServerController;
115:
116: /** Wait maximum 1 minute for server to start */
117: private static final int WAIT_TIME = 60000;
118:
119: /** Sleep for 50 ms before pinging the network server (again) */
120: private static final int SLEEP_TIME = 50;
121: }
|