You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TestRequestLog.java 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * Copyright (C) 2010, Google Inc. and others
  3. *
  4. * This program and the accompanying materials are made available under the
  5. * terms of the Eclipse Distribution License v. 1.0 which is available at
  6. * https://www.eclipse.org/org/documents/edl-v10.php.
  7. *
  8. * SPDX-License-Identifier: BSD-3-Clause
  9. */
  10. package org.eclipse.jgit.junit.http;
  11. import java.io.IOException;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.concurrent.Semaphore;
  15. import javax.servlet.DispatcherType;
  16. import javax.servlet.ServletException;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import org.eclipse.jetty.server.Request;
  20. import org.eclipse.jetty.server.Response;
  21. import org.eclipse.jetty.server.handler.HandlerWrapper;
  22. /** Logs request made through {@link AppServer}. */
  23. class TestRequestLog extends HandlerWrapper {
  24. private static final int MAX = 16;
  25. private final List<AccessEvent> events = new ArrayList<>();
  26. private final Semaphore active = new Semaphore(MAX, true);
  27. /** Reset the log back to its original empty state. */
  28. void clear() {
  29. try {
  30. for (;;) {
  31. try {
  32. active.acquire(MAX);
  33. break;
  34. } catch (InterruptedException e) {
  35. continue;
  36. }
  37. }
  38. synchronized (events) {
  39. events.clear();
  40. }
  41. } finally {
  42. active.release(MAX);
  43. }
  44. }
  45. /** @return all of the events made since the last clear. */
  46. List<AccessEvent> getEvents() {
  47. try {
  48. for (;;) {
  49. try {
  50. active.acquire(MAX);
  51. break;
  52. } catch (InterruptedException e) {
  53. continue;
  54. }
  55. }
  56. synchronized (events) {
  57. return events;
  58. }
  59. } finally {
  60. active.release(MAX);
  61. }
  62. }
  63. /** {@inheritDoc} */
  64. @Override
  65. public void handle(String target, Request baseRequest,
  66. HttpServletRequest request, HttpServletResponse response)
  67. throws IOException, ServletException {
  68. try {
  69. for (;;) {
  70. try {
  71. active.acquire();
  72. break;
  73. } catch (InterruptedException e) {
  74. continue;
  75. }
  76. }
  77. super.handle(target, baseRequest, request, response);
  78. if (DispatcherType.REQUEST.equals(baseRequest.getDispatcherType()))
  79. log((Request) request, (Response) response);
  80. } finally {
  81. active.release();
  82. }
  83. }
  84. private void log(Request request, Response response) {
  85. synchronized (events) {
  86. events.add(new AccessEvent(request, response));
  87. }
  88. }
  89. }