/** Tests for consistent internal status before and after the update method is called. */
  public void testUpdate() {
    long testStartTime = System.currentTimeMillis();

    Mockery context =
        new Mockery() {
          {
            setImposteriser(ClassImposteriser.INSTANCE);
          }
        };

    final RoutedConnection connection = context.mock(RoutedConnection.class);

    context.checking(
        new Expectations() {
          {
            one(connection).isOutgoing();
            will(returnValue(false));
            one(connection).isOutgoing();
            will(returnValue(true));

            allowing(connection).getConnectionTime();
            will(returnValue(101010L));

            allowing(connection);
          }
        });

    CoreConnectionItem item = new CoreConnectionItem(connection);

    assertSame(connection, item.getRoutedConnection());

    assertTrue(item.isConnecting());
    assertFalse(item.isConnected());
    assertEquals(Status.CONNECTING, item.getStatus());

    // Ensure the initialisation time value is somewhat sane, aka something bigger
    //  than the start time of the test.
    assertGreaterThanOrEquals(testStartTime, item.getTime());

    item.update();
    assertFalse(item.isConnecting());
    assertTrue(item.isConnected());
    assertEquals(Status.INCOMING, item.getStatus());

    item.update();
    assertFalse(item.isConnecting());
    assertTrue(item.isConnected());
    assertEquals(Status.OUTGOING, item.getStatus());
    assertEquals(101010, item.getTime());

    context.assertIsSatisfied();
  }