### Question:
FSMProtocol extends Protocol { @Override public Conversation spawn() { try { return spawnAsInititor(new ConversationSpawnEvent()); } catch (FSMException e) { throw new RuntimeException(e); } } FSMProtocol(String name, FSMDescription description,
			NetworkAdaptor network); @Override Conversation spawn(); @Override Conversation spawn(NetworkAddress with); @Override Conversation spawn(Set<NetworkAddress> with); @Override void spawn(Message m); @Step void incrementTime(int t);  }### Answer:
@Test public void test() throws UnavailableServiceException { final ConversationalAgent p1 = new ConversationalAgent( UUID.randomUUID(), "p1", ping); final ConversationalAgent p2 = new ConversationalAgent( UUID.randomUUID(), "p2", ping); final ConversationalAgent p3 = new ConversationalAgent( UUID.randomUUID(), "p3", ping); RunnableSimulation sim = new RunnableSimulation() { @Override public void initialiseScenario(Scenario s) { addModule(new AbstractEnvironmentModule() .addParticipantEnvironmentService(BasicNetworkConnector.class)); addModule(NetworkModule.fullyConnectedNetworkModule()); s.addAgent(p1); s.addAgent(p2); s.addAgent(p3); } }; sim.initialise(); sim.step(); p1.proto.spawn(); sim.step(); assertEquals(0, responders.size()); sim.step(); sim.step(); assertEquals(2, responders.size()); sim.step(); sim.step(); sim.step(); assertEquals(2, responders.size()); }