1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package testtools.servicetests; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XBridgeFactory; 27*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XInstanceProvider; 28*b1cdbd2cSJim Jagielski import com.sun.star.bridge.UnoUrlResolver; 29*b1cdbd2cSJim Jagielski import com.sun.star.comp.helper.Bootstrap; 30*b1cdbd2cSJim Jagielski import com.sun.star.connection.Acceptor; 31*b1cdbd2cSJim Jagielski import com.sun.star.connection.XConnection; 32*b1cdbd2cSJim Jagielski import com.sun.star.container.XSet; 33*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 34*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 35*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 36*b1cdbd2cSJim Jagielski import complexlib.ComplexTestCase; 37*b1cdbd2cSJim Jagielski import java.io.BufferedReader; 38*b1cdbd2cSJim Jagielski import java.io.InputStream; 39*b1cdbd2cSJim Jagielski import java.io.InputStreamReader; 40*b1cdbd2cSJim Jagielski import java.io.PrintStream; 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski public final class RemoteServiceTest extends TestBase { getTestServiceFactory()43*b1cdbd2cSJim Jagielski protected TestServiceFactory getTestServiceFactory() throws Exception { 44*b1cdbd2cSJim Jagielski final Process p = Runtime.getRuntime().exec(new String[] { 45*b1cdbd2cSJim Jagielski "java", "-classpath", System.getProperty("java.class.path"), 46*b1cdbd2cSJim Jagielski Server.class.getName() }); 47*b1cdbd2cSJim Jagielski pipe(p.getInputStream(), System.out, "CO> "); 48*b1cdbd2cSJim Jagielski pipe(p.getErrorStream(), System.err, "CE> "); 49*b1cdbd2cSJim Jagielski Thread.sleep(5000); // wait for server to start accepting 50*b1cdbd2cSJim Jagielski return new TestServiceFactory() { 51*b1cdbd2cSJim Jagielski public Object get() throws Exception { 52*b1cdbd2cSJim Jagielski return (UnoUrlResolver.create( 53*b1cdbd2cSJim Jagielski Bootstrap.createInitialComponentContext(null))). 54*b1cdbd2cSJim Jagielski resolve( 55*b1cdbd2cSJim Jagielski "uno:" + CONNECTION_DESCRIPTION + ";" 56*b1cdbd2cSJim Jagielski + PROTOCOL_DESCRIPTION 57*b1cdbd2cSJim Jagielski + ";testtools.servicetests.TestService2"); 58*b1cdbd2cSJim Jagielski } 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski public void dispose() throws Exception { 61*b1cdbd2cSJim Jagielski p.waitFor(); 62*b1cdbd2cSJim Jagielski } 63*b1cdbd2cSJim Jagielski }; 64*b1cdbd2cSJim Jagielski } 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski public static final class Server { 67*b1cdbd2cSJim Jagielski public static void main(String[] arguments) throws Exception { 68*b1cdbd2cSJim Jagielski XComponentContext context 69*b1cdbd2cSJim Jagielski = Bootstrap.createInitialComponentContext(null); 70*b1cdbd2cSJim Jagielski XMultiComponentFactory serviceManager 71*b1cdbd2cSJim Jagielski = context.getServiceManager(); 72*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XSet.class, serviceManager). 73*b1cdbd2cSJim Jagielski insert(new TestService()); 74*b1cdbd2cSJim Jagielski final Object instance = serviceManager.createInstanceWithContext( 75*b1cdbd2cSJim Jagielski "testtools.servicetests.TestService2", context); 76*b1cdbd2cSJim Jagielski XBridgeFactory bridgeFactory 77*b1cdbd2cSJim Jagielski = UnoRuntime.queryInterface( 78*b1cdbd2cSJim Jagielski XBridgeFactory.class, 79*b1cdbd2cSJim Jagielski serviceManager.createInstanceWithContext( 80*b1cdbd2cSJim Jagielski "com.sun.star.bridge.BridgeFactory", context)); 81*b1cdbd2cSJim Jagielski XConnection connection = Acceptor.create(context).accept( 82*b1cdbd2cSJim Jagielski CONNECTION_DESCRIPTION); 83*b1cdbd2cSJim Jagielski bridgeFactory.createBridge( 84*b1cdbd2cSJim Jagielski "", PROTOCOL_DESCRIPTION, connection, 85*b1cdbd2cSJim Jagielski new XInstanceProvider() { 86*b1cdbd2cSJim Jagielski public Object getInstance(String instanceName) { 87*b1cdbd2cSJim Jagielski return instance; 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski }); 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski } 92*b1cdbd2cSJim Jagielski 93*b1cdbd2cSJim Jagielski private void pipe(final InputStream in, final PrintStream out, 94*b1cdbd2cSJim Jagielski final String prefix) { 95*b1cdbd2cSJim Jagielski new Thread("Pipe: " + prefix) { 96*b1cdbd2cSJim Jagielski public void run() { 97*b1cdbd2cSJim Jagielski BufferedReader r 98*b1cdbd2cSJim Jagielski = new BufferedReader(new InputStreamReader(in)); 99*b1cdbd2cSJim Jagielski try { 100*b1cdbd2cSJim Jagielski for (;;) { 101*b1cdbd2cSJim Jagielski String s = r.readLine(); 102*b1cdbd2cSJim Jagielski if (s == null) { 103*b1cdbd2cSJim Jagielski break; 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski out.println(prefix + s); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski } catch (java.io.IOException e) { 108*b1cdbd2cSJim Jagielski e.printStackTrace(System.err); 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski }.start(); 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski private static final String CONNECTION_DESCRIPTION 115*b1cdbd2cSJim Jagielski = "socket,host=localhost,port=12345"; 116*b1cdbd2cSJim Jagielski private static final String PROTOCOL_DESCRIPTION = "urp"; 117*b1cdbd2cSJim Jagielski } 118