summaryrefslogtreecommitdiff
path: root/java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java')
-rw-r--r--java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java325
1 files changed, 325 insertions, 0 deletions
diff --git a/java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java b/java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java
new file mode 100644
index 00000000000..c90efc8e272
--- /dev/null
+++ b/java-compat/test/controller/src/main/java/Test/Common/ControllerServer.java
@@ -0,0 +1,325 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+package Test.Common;
+
+import Test.Common._ControllerDisp;
+import Test.Common._ServerDisp;
+import Test.Common.ServerPrx;
+
+import java.io.File;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+import java.util.regex.Pattern;
+
+public class ControllerServer extends Ice.Application
+{
+ class ServerI extends _ServerDisp
+ {
+ public ServerI(Process process, String name)
+ {
+ _process = process;
+ _processOutput = new StringBuffer();
+ _name = name;
+ _started = 0;
+ _terminated = false;
+
+ class Reader extends Thread
+ {
+ Reader(java.io.InputStream is)
+ {
+ _is = is;
+ }
+
+ public void run()
+ {
+ try
+ {
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(_is));
+
+ String line = reader.readLine();
+ while(line != null)
+ {
+ if(_started == 0)
+ {
+ _processOutput.append(line + "\n");
+ }
+
+ if(line.matches(Pattern.quote("starting server...") + ".*ok.*") ||
+ line.matches(Pattern.quote("starting serveramd...") + ".*ok.*") ||
+ line.matches(Pattern.quote("starting servertie...") + ".*ok.*") ||
+ line.matches(Pattern.quote("starting serveramdtie...") + ".*ok.*") ||
+ line.matches("starting test.*" + Pattern.quote("Server...") + ".*ok.*"))
+ {
+ synchronized(ServerI.this)
+ {
+ _started++;
+ ServerI.this.notifyAll();
+ }
+ }
+ else if(line.matches(Pattern.quote("starting server...") + ".*") ||
+ line.matches(Pattern.quote("starting serveramd...") + ".*") ||
+ line.matches(Pattern.quote("starting servertie...") + ".*") ||
+ line.matches(Pattern.quote("starting serveramdtie...") + ".*") ||
+ line.matches("starting test.*" + Pattern.quote("Server...") + ".*"))
+ {
+ String s = reader.readLine();
+ if(s == null)
+ {
+ System.out.println(line);
+ break;
+ }
+ line += s;
+ continue;
+ }
+ System.out.println(line);
+ line = reader.readLine();
+ }
+ }
+ catch(java.io.IOException ex)
+ {
+ System.out.println("server start failed!\n" + ex);
+ }
+
+ // Make sure to unblock thread waiting for server start.
+ synchronized(ServerI.this)
+ {
+ _terminated = true;
+ ServerI.this.notifyAll();
+ }
+ }
+
+ private java.io.InputStream _is;
+ }
+ new Reader(_process.getInputStream()).start();
+ }
+
+ public synchronized void terminate(Ice.Current current)
+ {
+ try
+ {
+ _process.exitValue();
+ return;
+ }
+ catch(IllegalThreadStateException ex)
+ {
+ //
+ // process is still running.
+ //
+ System.out.print("terminating " + _name + "... ");
+ System.out.flush();
+
+ _process.destroy();
+ while(true)
+ {
+ try
+ {
+ _process.waitFor();
+ break;
+ }
+ catch(InterruptedException e)
+ {
+ }
+ }
+ current.adapter.remove(current.id);
+ System.out.println("ok");
+ }
+ }
+
+ public void waitTestSuccess(Ice.Current current)
+ {
+ Process p = null;
+ synchronized(this)
+ {
+ p = _process;
+ }
+
+ if(p != null)
+ {
+ while(true)
+ {
+ try
+ {
+ p.waitFor();
+ break;
+ }
+ catch(InterruptedException ex)
+ {
+ }
+ }
+ }
+ }
+
+ public synchronized void waitForServer(Ice.Current current)
+ throws ServerFailedException
+ {
+ while(!_terminated)
+ {
+ try
+ {
+ if(_started > 0)
+ {
+ _started--;
+ break;
+ }
+ wait();
+ }
+ catch(InterruptedException ex)
+ {
+ continue;
+ }
+ }
+ if(_terminated && _started == 0)
+ {
+ throw new ServerFailedException(_processOutput.toString());
+ }
+ }
+
+ private Process _process;
+ private StringBuffer _processOutput;
+ private String _name;
+ private int _started;
+ private boolean _terminated;
+ }
+
+ public class ControllerI extends _ControllerDisp
+ {
+ public ControllerI(String[] args)
+ {
+ _args = args;
+ }
+
+ @Override
+ public ServerPrx runServer(String lang, final String name, String protocol, String host,
+ boolean winrt, String configName, String[] options, Ice.Current current)
+ {
+ if(_server != null)
+ {
+ try
+ {
+ _server.terminate();
+ }
+ catch(Ice.LocalException ex)
+ {
+ }
+ }
+
+ String script = lang + (lang.equals("java") ? "/test/src/main/java/" : "/") + "test/" + name + "/run.py";
+
+ java.util.List<String> args = new java.util.ArrayList<String>();
+ args.add("python");
+ args.add(script);
+ args.add("--server");
+ args.add("--protocol");
+ args.add(protocol);
+ if(!host.isEmpty())
+ {
+ args.add("--host");
+ args.add(host);
+ }
+
+ if(winrt)
+ {
+ args.add("--winrt");
+ }
+
+ if(!configName.isEmpty())
+ {
+ args.add("--configName");
+ args.add(configName);
+ }
+
+ for(String option : options)
+ {
+ args.add("--arg");
+ args.add(option);
+ }
+
+ for(String a : _args)
+ {
+ args.add(a);
+ }
+
+ try
+ {
+ System.out.print("starting " + name + "... ");
+ System.out.flush();
+
+ final Process process = new ProcessBuilder(args)
+ .directory(_toplevel)
+ .redirectErrorStream(true)
+ .start();
+ _server = ServerPrxHelper.uncheckedCast(current.adapter.addWithUUID(new ServerI(process, name)));
+ }
+ catch(java.io.IOException ex)
+ {
+ throw new RuntimeException("failed to start server `" + name + "'", ex);
+ }
+ return _server;
+ }
+
+ private ServerPrx _server;
+ private String[] _args;
+ }
+
+ @Override
+ public int
+ run(String[] args)
+ {
+ Ice.ObjectAdapter adapter = communicator().createObjectAdapter("ControllerAdapter");
+ adapter.add(new ControllerI(args), Ice.Util.stringToIdentity("controller"));
+ adapter.activate();
+ communicator().waitForShutdown();
+ return 0;
+ }
+
+ public ControllerServer(File toplevel)
+ {
+ _toplevel = toplevel;
+ }
+
+ public static void
+ main(String[] args)
+ {
+ try
+ {
+ File toplevel = new File(
+ new File(ControllerServer.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent(),
+ "../../../../../");
+
+ ControllerServer app = new ControllerServer(toplevel);
+ Ice.InitializationData initData = new Ice.InitializationData();
+ initData.properties = Ice.Util.createProperties(args);
+ initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory");
+ initData.properties.setProperty("IceSSL.DefaultDir", new File(toplevel, "certs").getCanonicalPath());
+ initData.properties.setProperty("IceSSL.Keystore", "server.jks");
+ initData.properties.setProperty("IceSSL.Password", "password");
+ initData.properties.setProperty("IceSSL.VerifyPeer", "0");
+ initData.properties.setProperty("Ice.ThreadPool.Server.SizeMax", "10");
+ initData.properties.setProperty("ControllerAdapter.Endpoints",
+ "tcp -p 15000:ssl -p 15001: ws -p 15002:wss -p 15003");
+
+ int status = app.main("ControllerServer", args, initData);
+ System.exit(status);
+ }
+ catch(java.net.URISyntaxException ex)
+ {
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ catch(java.io.IOException ex)
+ {
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ private final File _toplevel;
+}