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