public void testRecordingControls() throws Exception {
    final ConsoleConnection consoleConnection = new ConsoleConnectionImplementation(m_sender);

    consoleConnection.startRecording();
    m_senderStubFactory.assertSuccess("blockingSend", StartRecordingMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    consoleConnection.stopRecording();
    m_senderStubFactory.assertSuccess("blockingSend", StopRecordingMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    consoleConnection.resetRecording();
    m_senderStubFactory.assertSuccess("blockingSend", ResetRecordingMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    final CommunicationException communicationException = new CommunicationException("");
    m_senderStubFactory.setThrows("blockingSend", communicationException);

    try {
      consoleConnection.resetRecording();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    try {
      consoleConnection.stopRecording();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    try {
      consoleConnection.startRecording();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    consoleConnection.close();
  }
  public void testProcessMessages() throws Exception {
    final ConsoleConnection consoleConnection = new ConsoleConnectionImplementation(m_sender);

    m_senderStubFactory.setResult("blockingSend", new ResultMessage(new Integer(10)));
    assertEquals(10, consoleConnection.getNumberOfAgents());
    m_senderStubFactory.assertSuccess("blockingSend", GetNumberOfAgentsMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    final GrinderProperties properties = new GrinderProperties();
    consoleConnection.startWorkerProcesses(properties);
    final CallData data =
        m_senderStubFactory.assertSuccess("blockingSend", StartWorkerProcessesMessage.class);
    assertSame(properties, ((StartWorkerProcessesMessage) data.getParameters()[0]).getProperties());
    m_senderStubFactory.assertNoMoreCalls();

    consoleConnection.resetWorkerProcesses();
    m_senderStubFactory.assertSuccess("blockingSend", ResetWorkerProcessesMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    consoleConnection.stopAgents();
    m_senderStubFactory.assertSuccess("blockingSend", StopAgentAndWorkerProcessesMessage.class);
    m_senderStubFactory.assertNoMoreCalls();

    m_senderStubFactory.setResult("blockingSend", null);

    try {
      consoleConnection.getNumberOfAgents();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
    }

    m_senderStubFactory.setResult("blockingSend", new ResultMessage(new Serializable() {}));

    try {
      consoleConnection.getNumberOfAgents();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
    }

    final CommunicationException communicationException = new CommunicationException("");
    m_senderStubFactory.setThrows("blockingSend", communicationException);

    try {
      consoleConnection.getNumberOfAgents();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    try {
      consoleConnection.startWorkerProcesses(new GrinderProperties());
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    try {
      consoleConnection.resetWorkerProcesses();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    try {
      consoleConnection.stopAgents();
      fail("Expected ConsoleConnectionException");
    } catch (ConsoleConnectionException e) {
      assertSame(communicationException, e.getCause());
    }

    consoleConnection.close();
  }