diff --git a/.classpath b/.classpath index 6b9b5d96..feb78b0c 100755 --- a/.classpath +++ b/.classpath @@ -1,6 +1,7 @@ + @@ -14,5 +15,7 @@ + + diff --git a/src/net/azib/ipscan/core/state/ScanningState.java b/src/net/azib/ipscan/core/state/ScanningState.java index 0aa254a6..ce6b7bd8 100644 --- a/src/net/azib/ipscan/core/state/ScanningState.java +++ b/src/net/azib/ipscan/core/state/ScanningState.java @@ -35,6 +35,10 @@ public enum ScanningState { listeners.add(listener); } + public void clearListeners() { + listeners.clear(); + } + /** * Notifies all registered listeners of the transition to this state. */ diff --git a/src/net/azib/ipscan/core/state/StateMachine.java b/src/net/azib/ipscan/core/state/StateMachine.java index ab64d9ec..09f40203 100644 --- a/src/net/azib/ipscan/core/state/StateMachine.java +++ b/src/net/azib/ipscan/core/state/StateMachine.java @@ -42,8 +42,10 @@ public class StateMachine { * @param newState */ public void transitionTo(ScanningState newState) { - state = newState; - state.notifyOnEntry(); + if (state != newState) { + state = newState; + state.notifyOnEntry(); + } } /** diff --git a/test/net/azib/ipscan/core/state/StateMachineTest.java b/test/net/azib/ipscan/core/state/StateMachineTest.java new file mode 100644 index 00000000..e57ac124 --- /dev/null +++ b/test/net/azib/ipscan/core/state/StateMachineTest.java @@ -0,0 +1,90 @@ +/** + * This file is a part of Angry IP Scanner source code, + * see http://www.azib.net/ for more information. + * Licensed under GPLv2. + */ +package net.azib.ipscan.core.state; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +/** + * StateMachineTest + * + * @author Anton Keks + */ +public class StateMachineTest { + + private StateMachine stateMachine; + + @Before + public void createStateMachine() { + stateMachine = new StateMachine(); + } + + @Test + public void inState() throws Exception { + assertTrue(stateMachine.inState(ScanningState.IDLE)); + assertFalse(stateMachine.inState(ScanningState.KILLING)); + stateMachine.transitionTo(ScanningState.KILLING); + assertTrue(stateMachine.inState(ScanningState.KILLING)); + } + + @Test + public void transitionTo() throws Exception { + final boolean[] called = {false}; + ScanningState.IDLE.addTransitionListener(new StateTransitionListener() { + public void transitionTo(ScanningState state) { + fail("no transition if changing to the same state"); + } + }); + ScanningState.STOPPING.addTransitionListener(new StateTransitionListener() { + public void transitionTo(ScanningState state) { + called[0] = true; + } + }); + + assertEquals(ScanningState.IDLE, stateMachine.getState()); + stateMachine.transitionTo(ScanningState.IDLE); + assertEquals(ScanningState.IDLE, stateMachine.getState()); + stateMachine.transitionTo(ScanningState.STOPPING); + assertEquals(ScanningState.STOPPING, stateMachine.getState()); + assertTrue(called[0]); + + ScanningState.IDLE.clearListeners(); + ScanningState.STOPPING.clearListeners(); + } + + @Test + public void transitionToNext() throws Exception { + assertEquals(ScanningState.IDLE, stateMachine.getState()); + stateMachine.transitionToNext(); + assertEquals(ScanningState.SCANNING, stateMachine.getState()); + stateMachine.transitionToNext(); + assertEquals(ScanningState.STOPPING, stateMachine.getState()); + stateMachine.transitionToNext(); + assertEquals(ScanningState.KILLING, stateMachine.getState()); + stateMachine.transitionToNext(); + assertEquals(ScanningState.KILLING, stateMachine.getState()); + } + + @Test + public void stop() throws Exception { + stateMachine.transitionTo(ScanningState.SCANNING); + stateMachine.stop(); + assertEquals(ScanningState.STOPPING, stateMachine.getState()); + } + + @Test + public void complete() throws Exception { + stateMachine.transitionTo(ScanningState.STOPPING); + stateMachine.complete(); + assertEquals(ScanningState.IDLE, stateMachine.getState()); + + stateMachine.transitionTo(ScanningState.KILLING); + stateMachine.complete(); + assertEquals(ScanningState.IDLE, stateMachine.getState()); + } +} diff --git a/test/net/azib/ipscan/core/values/NumericListValueTest.java b/test/net/azib/ipscan/core/values/NumericListValueTest.java index 260a06b2..59bd486e 100755 --- a/test/net/azib/ipscan/core/values/NumericListValueTest.java +++ b/test/net/azib/ipscan/core/values/NumericListValueTest.java @@ -19,12 +19,12 @@ public class NumericListValueTest { @Test public void testToString() { - assertEquals("", new NumericListValue(Collections.EMPTY_LIST, true).toString()); - assertEquals("1", new NumericListValue(Arrays.asList(new Object[] {1}), true).toString()); - assertEquals("1-3", new NumericListValue(Arrays.asList(new Object[] {1, 2, 3}), true).toString()); - assertEquals("1-3", new NumericListValue(new TreeSet(Arrays.asList(new Integer[] {2, 3, 1})), true).toString()); - assertEquals("1,2,3", new NumericListValue(Arrays.asList(new Object[] {1, 2, 3}), false).toString()); - assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(new Object[] {1, 5, 6, 15}), true).toString()); - assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(new Object[] {103, 85, 89, 1}), true).toString()); + assertEquals("", new NumericListValue(Collections.emptyList(), true).toString()); + assertEquals("1", new NumericListValue(Arrays.asList(1), true).toString()); + assertEquals("1-3", new NumericListValue(Arrays.asList(1, 2, 3), true).toString()); + assertEquals("1-3", new NumericListValue(new TreeSet(Arrays.asList(2, 3, 1)), true).toString()); + assertEquals("1,2,3", new NumericListValue(Arrays.asList(1, 2, 3), false).toString()); + assertEquals("1,5-6,15", new NumericListValue(Arrays.asList(1, 5, 6, 15), true).toString()); + assertEquals("103,85,89,1", new NumericListValue(Arrays.asList(103, 85, 89, 1), true).toString()); } } diff --git a/test/net/azib/ipscan/exporters/ExportProcessorTest.java b/test/net/azib/ipscan/exporters/ExportProcessorTest.java index f4487a47..2f491437 100755 --- a/test/net/azib/ipscan/exporters/ExportProcessorTest.java +++ b/test/net/azib/ipscan/exporters/ExportProcessorTest.java @@ -21,6 +21,7 @@ import net.azib.ipscan.config.Labels; import net.azib.ipscan.core.ScanningResult; import net.azib.ipscan.core.ScanningResultList; import net.azib.ipscan.exporters.ExportProcessor.ScanningResultSelector; +import net.azib.ipscan.fetchers.Fetcher; import net.azib.ipscan.fetchers.FetcherRegistry; import net.azib.ipscan.fetchers.IPFetcher; @@ -41,7 +42,7 @@ public class ExportProcessorTest { public void setUp() { fetcherRegistry = createMock(FetcherRegistry.class); expect(fetcherRegistry.getSelectedFetchers()) - .andReturn(Collections.singletonList(new IPFetcher())).anyTimes(); + .andReturn(Collections.singletonList(new IPFetcher())).anyTimes(); replay(fetcherRegistry); }