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);
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 @Override
109 public void handle(String target, Request baseRequest, HttpServletRequest request,
110 HttpServletResponse response) throws IOException, ServletException {
111 try {
112 for (;;) {
113 try {
114 active.acquire();
115 break;
116 } catch (InterruptedException e) {
117 continue;
118 }
119 }
120
121 super.handle(target, baseRequest, request, response);
122
123 if (DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()))
124 log((Request) request, (Response) response);
125
126 } finally {
127 active.release();
128 }
129 }
130
131 private void log(Request request, Response response) {
132 synchronized (events) {
133 events.add(new AccessEvent(request, response));
134 }
135 }
136 }