1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.http.functional;
12
13 import java.io.BufferedReader;
14 import java.io.InputStream;
15 import java.io.InputStreamReader;
16 import java.io.OutputStream;
17 import java.net.ServerSocket;
18 import java.net.Socket;
19
20 import edu.emory.mathcs.backport.java.util.concurrent.CountDownLatch;
21
22 public abstract class MockHttpServer extends Object implements Runnable
23 {
24 private int listenPort;
25 private CountDownLatch startupLatch;
26 private CountDownLatch testCompleteLatch;
27
28 public MockHttpServer(int listenPort, CountDownLatch startupLatch, CountDownLatch testCompleteLatch)
29 {
30 this.listenPort = listenPort;
31 this.startupLatch = startupLatch;
32 this.testCompleteLatch = testCompleteLatch;
33 }
34
35 protected abstract void readHttpRequest(BufferedReader reader) throws Exception;
36
37 public void run()
38 {
39 try
40 {
41 ServerSocket serverSocket = new ServerSocket(listenPort);
42
43
44 startupLatch.countDown();
45
46 Socket socket = serverSocket.accept();
47 InputStream in = socket.getInputStream();
48 BufferedReader reader = new BufferedReader(new InputStreamReader(in));
49
50
51 readHttpRequest(reader);
52
53 OutputStream out = socket.getOutputStream();
54 out.write("HTTP/1.1 200 OK\n\n".getBytes());
55
56 in.close();
57 out.close();
58 socket.close();
59 serverSocket.close();
60 }
61 catch (Exception ex)
62 {
63 throw new RuntimeException(ex);
64 }
65 finally
66 {
67 testCompleteLatch.countDown();
68 }
69 }
70 }
71
72