/**
   * Times the other servlet execution looping the given number of times and returns the elapsed
   * time.
   *
   * @param count the number of times to loop.
   * @return the elapsed time, in nanoseconds.
   */
  private long timeOtherServlet(final int count) throws Exception {
    final SimpleServlet servlet = new SimpleServlet();
    servlet.init(new MockServletConfig());
    final MockHttpSession simpleServletSession = new MockHttpSession();

    // JIT warm-up
    for (int i = 0; i < count; i++) {
      sendOtherServletRequest(servlet, simpleServletSession, i);
    }

    simpleServletSession.getAttributes().clear();

    Runnable runnable =
        new Runnable() {
          public void run() {
            try {
              for (int i = 0; i < count; i++) {
                sendOtherServletRequest(servlet, simpleServletSession, i);
              }
            } catch (Exception e) {
              log.error("Failed to execute test", e);
            }
          }
        };

    return time(runnable);
  }
  /**
   * Basic sanity-test to ensure that the other app is performing all the processing that it should.
   */
  @Test
  public void testOtherServletAppCorrectness() throws Exception {
    SimpleServlet servlet = new SimpleServlet();
    servlet.init(new MockServletConfig());
    MockHttpSession session = new MockHttpSession();

    sendOtherServletRequest(servlet, session, 0);
    sendOtherServletRequest(servlet, session, 1);

    SimpleFormBean bean = servlet.getFormBean(new MockHttpServletRequest(session));
    Assert.assertEquals("Incorrect property1 value", "p1_1", bean.getProperty1());
    Assert.assertEquals("Incorrect property2 value", "p2_1", bean.getProperty2());
  }