private void assertOnlyLastTwoRequestsLeft(RequestJournal journal) {
   assertThat(
       journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging1")).build()), is(0));
   assertThat(
       journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging2")).build()), is(1));
   assertThat(
       journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging3")).build()), is(1));
 }
  @Test
  public void resettingTheJournalClearsAllEntries() throws Exception {
    Mockery context = new Mockery();
    LoggedRequest loggedRequest = createFrom(aRequest(context).withUrl("/for/logging").build());

    RequestJournal journal = new InMemoryRequestJournal(Optional.of(1));
    journal.requestReceived(loggedRequest);
    assertThat(journal.countRequestsMatching(everything()), is(1));
    journal.reset();
    assertThat(journal.countRequestsMatching(everything()), is(0));
  }
  @Test
  public void returnsAllLoggedRequestsWhenNoJournalSizeLimit() {
    RequestJournal journal = new InMemoryRequestJournal(Optional.<Integer>absent());

    journal.requestReceived(request1);
    journal.requestReceived(request1);
    journal.requestReceived(request2);

    assertThat(
        journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging1")).build()), is(2));
    assertThat(
        journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging2")).build()), is(1));
  }
  @Test
  public void discardsOldRequestsWhenJournalSizeIsLimited() throws Exception {
    RequestJournal journal = new InMemoryRequestJournal(Optional.of(2));

    journal.requestReceived(request1);
    journal.requestReceived(request2);

    assertThat(journal.countRequestsMatching(everything()), is(2));
    assertThat(
        journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging1")).build()), is(1));
    assertThat(
        journal.countRequestsMatching(getRequestedFor(urlEqualTo("/logging2")).build()), is(1));

    journal.requestReceived(request3);
    assertOnlyLastTwoRequestsLeft(journal);
  }