1 package cz.cuni.amis.pogamut.base.agent.impl;
2
3 import java.util.logging.Level;
4
5 import junit.framework.Assert;
6
7 import org.junit.Test;
8
9 import cz.cuni.amis.pogamut.base.agent.IAgentId;
10 import cz.cuni.amis.pogamut.base.agent.MockAgent;
11 import cz.cuni.amis.pogamut.base.agent.module.MockModule;
12 import cz.cuni.amis.pogamut.base.agent.state.level1.IAgentStateDown;
13 import cz.cuni.amis.pogamut.base.agent.state.level1.IAgentStateUp;
14 import cz.cuni.amis.pogamut.base.agent.state.level2.IAgentStateFailed;
15 import cz.cuni.amis.pogamut.base.agent.state.level2.IAgentStateInstantiated;
16 import cz.cuni.amis.pogamut.base.agent.state.level2.IAgentStatePaused;
17 import cz.cuni.amis.pogamut.base.agent.state.level2.IAgentStateRunning;
18 import cz.cuni.amis.pogamut.base.agent.state.level2.IAgentStateStopped;
19 import cz.cuni.amis.pogamut.base.agent.state.level3.IAgentStateResumed;
20 import cz.cuni.amis.pogamut.base.agent.state.level3.IAgentStateStarted;
21 import cz.cuni.amis.pogamut.base.agent.state.level3.IAgentStateStartedPaused;
22 import cz.cuni.amis.pogamut.base.component.bus.ComponentBus;
23 import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
24 import cz.cuni.amis.pogamut.base.component.bus.event.impl.FatalErrorEvent;
25 import cz.cuni.amis.pogamut.base.component.controller.ComponentState;
26 import cz.cuni.amis.pogamut.base.component.stub.component.ComponentStub;
27 import cz.cuni.amis.pogamut.base.utils.logging.AgentLogger;
28
29 import cz.cuni.amis.tests.BaseTest;
30
31 public class Test07_AbstractAgent_StartPaused_WithModule_FatalErrors extends BaseTest {
32
33 @Test
34 public void test() {
35 IAgentId agentId = new AgentId("Test");
36 AgentLogger logger = new AgentLogger(agentId);
37 logger.setLevel(Level.ALL);
38 logger.addDefaultConsoleHandler();
39 IComponentBus bus = new ComponentBus(logger);
40 MockAgent agent = new MockAgent(agentId, bus, logger);
41 MockModule module = new MockModule(agent);
42 ComponentStub stub = new ComponentStub(logger, bus);
43
44 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
45 Assert.assertTrue("agent not in instantiated-state", agent.inState(IAgentStateInstantiated.class));
46 Assert.assertTrue("module not in instantiated-state", module.getState().getFlag() == ComponentState.INSTANTIATED);
47
48 for (int i = 0; i < 10; ++i) {
49 agent.startPaused();
50 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
51 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
52 Assert.assertTrue("agent not in started-paused-state", agent.inState(IAgentStateStartedPaused.class));
53 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
54
55 bus.event(new FatalErrorEvent(stub, "failure"));
56 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
57 Assert.assertTrue("agent not in stopped-state", agent.inState(IAgentStateFailed.class));
58 Assert.assertTrue("module not in stopped-state", module.getState().getFlag() == ComponentState.KILLED);
59 }
60
61 agent.startPaused();
62 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
63 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
64 Assert.assertTrue("agent not in started-paused-state", agent.inState(IAgentStateStartedPaused.class));
65 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
66
67 for (int i = 0; i < 10; ++i) {
68 agent.resume();
69 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
70 Assert.assertTrue("agent not in resumed-state", agent.inState(IAgentStateResumed.class));
71 Assert.assertTrue("module not in running-state", module.getState().getFlag() == ComponentState.RUNNING);
72
73 agent.pause();
74 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
75 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
76 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
77 }
78
79 for (int i = 0; i < 10; ++i) {
80 bus.event(new FatalErrorEvent(stub, "failure"));
81 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
82 Assert.assertTrue("agent not in stopped-state", agent.inState(IAgentStateFailed.class));
83 Assert.assertTrue("module not in killed-state", module.getState().getFlag() == ComponentState.KILLED);
84
85
86 agent.start();
87 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
88 Assert.assertTrue("agent not in started-state", agent.inState(IAgentStateStarted.class));
89 Assert.assertTrue("agent not in running-state", agent.inState(IAgentStateRunning.class));
90 Assert.assertTrue("module not in running-state", module.getState().getFlag() == ComponentState.RUNNING);
91 }
92
93 bus.event(new FatalErrorEvent(stub, "failure"));
94 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
95 Assert.assertTrue("agent not in stopped-state", agent.inState(IAgentStateFailed.class));
96 Assert.assertTrue("module not in killed-state", module.getState().getFlag() == ComponentState.KILLED);
97
98 agent.startPaused();
99 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
100 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
101 Assert.assertTrue("agent not in started-paused-state", agent.inState(IAgentStateStartedPaused.class));
102 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
103
104 for (int i = 0; i < 10; ++i) {
105 agent.resume();
106 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
107 Assert.assertTrue("agent not in resumed-state", agent.inState(IAgentStateResumed.class));
108 Assert.assertTrue("module not in running-state", module.getState().getFlag() == ComponentState.RUNNING);
109
110 agent.pause();
111 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
112 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
113 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
114
115 bus.event(new FatalErrorEvent(stub, "failure"));
116 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
117 Assert.assertTrue("agent not in stopped-state", agent.inState(IAgentStateFailed.class));
118 Assert.assertTrue("module not in killed-state", module.getState().getFlag() == ComponentState.KILLED);
119
120 agent.startPaused();
121 Assert.assertTrue("agent not in up-state", agent.inState(IAgentStateUp.class));
122 Assert.assertTrue("agent not in paused-state", agent.inState(IAgentStatePaused.class));
123 Assert.assertTrue("agent not in started-paused-state", agent.inState(IAgentStateStartedPaused.class));
124 Assert.assertTrue("module not in paused-state", module.getState().getFlag() == ComponentState.PAUSED);
125 }
126
127 agent.stop();
128 Assert.assertTrue("agent not in down-state", agent.inState(IAgentStateDown.class));
129 Assert.assertTrue("agent not in stopped-state", agent.inState(IAgentStateStopped.class));
130 Assert.assertTrue("module not in stopped-state", module.getState().getFlag() == ComponentState.STOPPED);
131
132 System.out.println("---/// TEST OK ///---");
133 }
134
135 }