KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > de > uka > ipd > coverage > plugin > remote > CoverageRemoteTestRunner


1 /*
2  * Created on Apr 7, 2005
3  *
4  * written by Matthias Kempka
5  */

6 package de.uka.ipd.coverage.plugin.remote;
7
8 import java.io.IOException JavaDoc;
9 import java.io.ObjectOutputStream JavaDoc;
10 import java.lang.reflect.Constructor JavaDoc;
11 import java.lang.reflect.InvocationTargetException JavaDoc;
12 import java.net.Socket JavaDoc;
13 import java.net.UnknownHostException JavaDoc;
14
15 import org.eclipse.jdt.internal.junit.runner.RemoteTestRunner;
16
17 import de.uka.ipd.coverage.junit.CoverageTestResult;
18 import de.uka.ipd.coverage.recording.CoverageClassLoader;
19 import de.uka.ipd.coverage.utils.Logger;
20
21 /**
22  * Created on Apr 7, 2005
23  * @author Matthias Kempka
24  */

25 public class CoverageRemoteTestRunner {
26
27     public CoverageRemoteTestRunner(String JavaDoc[] completeArgs) {
28         run(completeArgs);
29     }
30     
31     public static void main(String JavaDoc[] args) {
32         String JavaDoc[] completeArgs = completeTestRunnerArguments(args);
33         ClassLoader JavaDoc loader = new CoverageClassLoader();
34         Class JavaDoc printerClass;
35         try {
36             printerClass = loader.loadClass(CoverageRemoteTestRunner.class.getName());
37             Constructor JavaDoc constr = printerClass.getDeclaredConstructor(new Class JavaDoc[] { String JavaDoc[].class });
38             constr.newInstance(new Object JavaDoc[] { completeArgs });
39         } catch (ClassNotFoundException JavaDoc e) {
40             e.printStackTrace();
41         } catch (SecurityException JavaDoc e) {
42             e.printStackTrace();
43         } catch (NoSuchMethodException JavaDoc e) {
44             e.printStackTrace();
45         } catch (IllegalArgumentException JavaDoc e) {
46             e.printStackTrace();
47         } catch (InstantiationException JavaDoc e) {
48             e.printStackTrace();
49         } catch (IllegalAccessException JavaDoc e) {
50             e.printStackTrace();
51         } catch (InvocationTargetException JavaDoc e) {
52             e.printStackTrace();
53         }
54     }
55     
56     private void run(String JavaDoc[] completeArgs) {
57         Logger.getInstance().debug("CoverageRemoteTestRunner: instanciating CoverageClassLoader."); //$NON-NLS-1$
58
// client.startListening()
59
createAndAddShutdownHook(completeArgs);
60         
61         RemoteTestRunner.main(completeArgs);
62     }
63
64
65
66     private void createAndAddShutdownHook(final String JavaDoc[] completeArgs) {
67         Runnable JavaDoc shutdownHook = new Runnable JavaDoc() {
68             public void run() {
69                 Logger logger = new Logger(CoverageRemoteTestRunner.this);
70                 logger.info("JUnit is finished. Entering ShutdownHook."); //$NON-NLS-1$
71
int port = Integer.MIN_VALUE;
72                 for (int i = 0; i < completeArgs.length; i++) {
73                     if (completeArgs[i].equals("-coveragePort")) { //$NON-NLS-1$
74
port = Integer.parseInt(completeArgs[i + 1]);
75                     }
76                 }
77                 String JavaDoc host = null;
78                 try {
79                     Socket JavaDoc socket = initSocket(logger, port, host);
80                     logger.info("Sending RegisteredMethods to the client..."); //$NON-NLS-1$
81
ObjectOutputStream JavaDoc out = new ObjectOutputStream JavaDoc(socket.getOutputStream());
82                     out.writeObject(CoverageTestResult.getRegisteredMethods());
83                     out.close();
84                     logger.info("Finished sending."); //$NON-NLS-1$
85
socket.close();
86                 } catch (UnknownHostException JavaDoc e) {
87                     logger.log(e);
88                     e.printStackTrace();
89                 } catch (IOException JavaDoc e) {
90                     logger.log(e);
91                     e.printStackTrace();
92                 }
93                 logger.info("ShutdownHook done."); //$NON-NLS-1$
94
}
95
96             /**
97              * @param logger
98              * @param port
99              * @param host
100              */

101             private Socket JavaDoc initSocket(Logger logger, int port, String JavaDoc host) {
102                 logger.debug("Trying to connect to port: " + port + "..."); //$NON-NLS-1$ //$NON-NLS-2$
103
Socket JavaDoc socket = null;
104                 final long TIMEOUT = 10000;
105                 long giveUpTime = TIMEOUT + System.currentTimeMillis();
106                 while (System.currentTimeMillis() < giveUpTime) {
107                     try {
108                         socket = new Socket JavaDoc(host, port);
109                         return socket;
110                     } catch (UnknownHostException JavaDoc e) {
111                     } catch (IOException JavaDoc e) {
112                     }
113                 }
114                 throw new RuntimeException JavaDoc("Could not connect to socket!"); //$NON-NLS-1$
115
}
116             
117         };
118         Runtime.getRuntime().addShutdownHook(new Thread JavaDoc(shutdownHook));
119     }
120
121
122
123     /**
124      * @param args
125      */

126     private static String JavaDoc[] completeTestRunnerArguments(String JavaDoc[] args) {
127         String JavaDoc[] remoteTestRunnerArgs = new String JavaDoc[args.length + 1];
128         System.arraycopy(args, 0, remoteTestRunnerArgs, 0, args.length);
129         
130         //TODO: Remove this!
131
remoteTestRunnerArgs[args.length] = "-debugging"; //$NON-NLS-1$
132
return remoteTestRunnerArgs;
133     }
134 }
135
Popular Tags