/atlassian-plugins-core/src/test/java/com/atlassian/plugin/manager/TestStateTracker.java

https://bitbucket.org/purewind/atlassian-plugins · Java · 126 lines · 104 code · 19 blank · 3 comment · 3 complexity · 3bb4db4b2a7fa5d7088fe6e58a77cc21 MD5 · raw file

  1. package com.atlassian.plugin.manager;
  2. import com.atlassian.plugin.manager.StateTracker.State;
  3. import org.junit.After;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.mockito.runners.MockitoJUnitRunner;
  8. import static com.atlassian.plugin.manager.StateTracker.State.DELAYED;
  9. import static com.atlassian.plugin.manager.StateTracker.State.NOT_STARTED;
  10. import static com.atlassian.plugin.manager.StateTracker.State.RESUMING;
  11. import static com.atlassian.plugin.manager.StateTracker.State.SHUTDOWN;
  12. import static com.atlassian.plugin.manager.StateTracker.State.SHUTTING_DOWN;
  13. import static com.atlassian.plugin.manager.StateTracker.State.STARTED;
  14. import static com.atlassian.plugin.manager.StateTracker.State.STARTING;
  15. import static com.atlassian.plugin.manager.StateTracker.State.WARM_RESTARTING;
  16. import static org.hamcrest.MatcherAssert.assertThat;
  17. import static org.hamcrest.core.Is.is;
  18. import static org.junit.Assert.fail;
  19. @RunWith(MockitoJUnitRunner.class)
  20. public class TestStateTracker {
  21. private StateTracker stateTracker;
  22. @Before
  23. public void setup() {
  24. stateTracker = new StateTracker();
  25. }
  26. @After
  27. public void tearDown() {
  28. stateTracker = null;
  29. }
  30. @Test
  31. public void testStandardTransitions() throws Exception {
  32. assertThat(stateTracker.get(), is(NOT_STARTED));
  33. // The standardTransitions is one loop of the path StateTracker usually runs through.
  34. // This is not just State.values() - it omits the start point NOT_STARTED, and also
  35. // WARM_RESTARTING which is tested independently later.
  36. final State[] standardTransitions = {STARTING, DELAYED, RESUMING, STARTED, SHUTTING_DOWN, SHUTDOWN, STARTING};
  37. for (final State state : standardTransitions) {
  38. stateTracker.setState(state);
  39. assertThat(stateTracker.get(), is(state));
  40. }
  41. }
  42. private void performStateSequence(final State... desiredStates) {
  43. for (final State state : desiredStates) {
  44. stateTracker.setState(state);
  45. }
  46. }
  47. @Test
  48. public void testIllegalNotStartedTransitions() throws Exception {
  49. performStateSequence();
  50. validateIllegalStates(NOT_STARTED, DELAYED, RESUMING, STARTED, WARM_RESTARTING, SHUTDOWN);
  51. }
  52. @Test
  53. public void testIllegalStartingTransitions() throws Exception {
  54. performStateSequence(STARTING);
  55. validateIllegalStates(NOT_STARTED, STARTING, RESUMING, STARTED, WARM_RESTARTING, SHUTTING_DOWN, SHUTDOWN);
  56. }
  57. @Test
  58. public void testIllegalDelayedTransitions() throws Exception {
  59. performStateSequence(STARTING, DELAYED);
  60. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, STARTED, WARM_RESTARTING, SHUTDOWN);
  61. }
  62. @Test
  63. public void testIllegalResumingTransitions() throws Exception {
  64. performStateSequence(STARTING, DELAYED, RESUMING);
  65. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, RESUMING, WARM_RESTARTING, SHUTTING_DOWN, SHUTDOWN);
  66. }
  67. @Test
  68. public void testIllegalStartedTransitions() throws Exception {
  69. performStateSequence(STARTING, DELAYED, RESUMING, STARTED);
  70. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, RESUMING, STARTED, SHUTDOWN);
  71. }
  72. @Test
  73. public void testIllegalWarmRestartingTransitions() throws Exception {
  74. performStateSequence(STARTING, DELAYED, RESUMING, STARTED, WARM_RESTARTING);
  75. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, RESUMING, WARM_RESTARTING, SHUTTING_DOWN, SHUTDOWN);
  76. }
  77. @Test
  78. public void testIllegalWarmRestartTransitions() throws Exception {
  79. performStateSequence(STARTING, DELAYED, RESUMING, STARTED, WARM_RESTARTING, STARTED);
  80. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, RESUMING, STARTED, SHUTDOWN);
  81. }
  82. @Test
  83. public void testIllegalShuttingDownTransitions() throws Exception {
  84. performStateSequence(STARTING, DELAYED, RESUMING, STARTED, SHUTTING_DOWN);
  85. validateIllegalStates(NOT_STARTED, STARTING, DELAYED, RESUMING, STARTED, WARM_RESTARTING, SHUTTING_DOWN);
  86. }
  87. @Test
  88. public void testIllegalShutdownTransitions() throws Exception {
  89. performStateSequence(STARTING, DELAYED, RESUMING, STARTED, SHUTTING_DOWN, SHUTDOWN);
  90. validateIllegalStates(NOT_STARTED, DELAYED, RESUMING, STARTED, WARM_RESTARTING, SHUTTING_DOWN, SHUTDOWN);
  91. }
  92. @Test
  93. public void canShutdownDirectlyFromEarlyStartup() {
  94. performStateSequence(STARTING, DELAYED, SHUTTING_DOWN, SHUTDOWN);
  95. }
  96. private void validateIllegalStates(final State... illegalStates) {
  97. final State initialState = stateTracker.get();
  98. for (final State illegalState : illegalStates) {
  99. try {
  100. stateTracker.setState(illegalState);
  101. fail(initialState + " should not be allowed to transition to: " + illegalState);
  102. } catch (final IllegalStateException expected) {
  103. assertThat(stateTracker.get(), is(initialState));
  104. }
  105. }
  106. }
  107. }