1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.junit.http;
12
13 import java.io.IOException;
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.concurrent.Semaphore;
17
18 import javax.servlet.DispatcherType;
19 import javax.servlet.ServletException;
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.eclipse.jetty.server.Request;
24 import org.eclipse.jetty.server.Response;
25 import org.eclipse.jetty.server.handler.HandlerWrapper;
26
27
28 class TestRequestLog extends HandlerWrapper {
29 private static final int MAX = 16;
30
31 private final List<AccessEvent> events = new ArrayList<>();
32
33 private final Semaphore active = new Semaphore(MAX, true);
34
35
36 void clear() {
37 try {
38 for (;;) {
39 try {
40 active.acquire(MAX);
41 break;
42 } catch (InterruptedException e) {
43 continue;
44 }
45 }
46
47 synchronized (events) {
48 events.clear();
49 }
50 } finally {
51 active.release(MAX);
52 }
53 }
54
55
56 List<AccessEvent> getEvents() {
57 try {
58 for (;;) {
59 try {
60 active.acquire(MAX);
61 break;
62 } catch (InterruptedException e) {
63 continue;
64 }
65 }
66
67 synchronized (events) {
68 return events;
69 }
70 } finally {
71 active.release(MAX);
72 }
73 }
74
75
76 @Override
77 public void handle(String target, Request baseRequest,
78 HttpServletRequest request, HttpServletResponse response)
79 throws IOException, ServletException {
80 try {
81 for (;;) {
82 try {
83 active.acquire();
84 break;
85 } catch (InterruptedException e) {
86 continue;
87 }
88 }
89
90 super.handle(target, baseRequest, request, response);
91
92 if (DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()))
93 log((Request) request, (Response) response);
94
95 } finally {
96 active.release();
97 }
98 }
99
100 private void log(Request request, Response response) {
101 synchronized (events) {
102 events.add(new AccessEvent(request, response));
103 }
104 }
105 }