blob: e66a5f3ec306d2155f7bb147e8815be6a9b6ff77 [file] [log] [blame]
Ari Saha89831742015-06-26 10:31:48 -07001/*
Amit Ghoshc9ac1e52017-07-28 12:31:18 +01002 * Copyright 2017-present Open Networking Foundation
Ari Saha89831742015-06-26 10:31:48 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
Matteo Scandolocf847b82019-04-26 15:00:00 -070017package org.opencord.aaa.impl;
Ari Saha89831742015-06-26 10:31:48 -070018
19import org.junit.After;
Ari Saha89831742015-06-26 10:31:48 -070020import org.junit.Before;
21import org.junit.Test;
Jonathan Hart612651f2019-11-25 09:21:43 -080022
23import java.util.concurrent.Executors;
David K. Bainbridge62019492017-07-28 17:02:10 -070024
Ray Milkey967776a2015-10-07 14:37:17 -070025import static org.junit.Assert.assertEquals;
Ari Saha89831742015-06-26 10:31:48 -070026
27public class StateMachineTest {
28 StateMachine stateMachine = null;
29
30 @Before
31 public void setUp() {
32 System.out.println("Set Up.");
Jonathan Hart5db44532018-07-12 18:13:54 -070033 StateMachine.setDelegate(e -> { });
Jonathan Hart612651f2019-11-25 09:21:43 -080034 stateMachine = new StateMachine("session0", Executors.newSingleThreadScheduledExecutor());
Ari Saha89831742015-06-26 10:31:48 -070035 }
36
37 @After
38 public void tearDown() {
39 System.out.println("Tear Down.");
Ari Saha89831742015-06-26 10:31:48 -070040 stateMachine = null;
41 }
42
43 @Test
44 /**
45 * Test all the basic inputs from state to state: IDLE -> STARTED -> PENDING -> AUTHORIZED -> IDLE
46 */
Jonathan Hart612651f2019-11-25 09:21:43 -080047 public void basic() {
Ari Saha89831742015-06-26 10:31:48 -070048 System.out.println("======= BASIC =======.");
alshabib6d527452016-06-01 18:00:47 -070049 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070050
51 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -070052 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070053
54 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -070055 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -070056
57 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -070058 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -070059
60 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -070061 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070062 }
63
64 @Test
65 /**
66 * Test all inputs from an IDLE state (starting with the ones that are not impacting the current state)
67 */
Jonathan Hart612651f2019-11-25 09:21:43 -080068 public void testIdleState() {
Ari Saha89831742015-06-26 10:31:48 -070069 System.out.println("======= IDLE STATE TEST =======.");
70 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -070071 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070072
73 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -070074 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070075
76 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -070077 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070078
79 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -070080 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070081
82 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -070083 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070084 }
85
86 @Test
87 /**
88 * Test all inputs from an STARTED state (starting with the ones that are not impacting the current state)
89 */
Jonathan Hart612651f2019-11-25 09:21:43 -080090 public void testStartedState() {
Ari Saha89831742015-06-26 10:31:48 -070091 System.out.println("======= STARTED STATE TEST =======.");
92 stateMachine.start();
93
94 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -070095 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070096
97 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -070098 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070099
100 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700101 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700102
103 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700104 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700105
106 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700107 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700108 }
109
110 @Test
111 /**
112 * Test all inputs from a PENDING state (starting with the ones that are not impacting the current state).
113 * The next valid state for this test is AUTHORIZED
114 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800115 public void testPendingStateToAuthorized() {
Ari Saha89831742015-06-26 10:31:48 -0700116 System.out.println("======= PENDING STATE TEST (AUTHORIZED) =======.");
117 stateMachine.start();
118 stateMachine.requestAccess();
119
120 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700121 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700122
123 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700124 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700125
126 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700127 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700128
129 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700130 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700131
132 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700133 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700134 }
135
136 @Test
137 /**
138 * Test all inputs from an PENDING state (starting with the ones that are not impacting the current state).
139 * The next valid state for this test is UNAUTHORIZED
140 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800141 public void testPendingStateToUnauthorized() {
Ari Saha89831742015-06-26 10:31:48 -0700142 System.out.println("======= PENDING STATE TEST (DENIED) =======.");
143 stateMachine.start();
144 stateMachine.requestAccess();
145
146 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700147 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700148
149 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700150 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700151
152 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700153 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700154
155 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700156 assertEquals(stateMachine.state(), StateMachine.STATE_UNAUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700157
158 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700159 assertEquals(stateMachine.state(), StateMachine.STATE_UNAUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700160 }
161
162 @Test
163 /**
164 * Test all inputs from an AUTHORIZED state (starting with the ones that are not impacting the current state).
165 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800166 public void testAuthorizedState() {
Ari Saha89831742015-06-26 10:31:48 -0700167 System.out.println("======= AUTHORIZED STATE TEST =======.");
168 stateMachine.start();
169 stateMachine.requestAccess();
170 stateMachine.authorizeAccess();
171
172 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700173 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700174
175 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700176 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700177
178 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700179 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700180
181 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700182 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700183
184 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700185 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -0700186 }
187
188 @Test
189 /**
190 * Test all inputs from an UNAUTHORIZED state (starting with the ones that are not impacting the current state).
191 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800192 public void testUnauthorizedState() {
Ari Saha89831742015-06-26 10:31:48 -0700193 System.out.println("======= UNAUTHORIZED STATE TEST =======.");
194 stateMachine.start();
195 stateMachine.requestAccess();
196 stateMachine.denyAccess();
197
198 stateMachine.start();
ke han04e47f32016-10-28 14:15:43 +0800199 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700200
201 stateMachine.requestAccess();
ke han04e47f32016-10-28 14:15:43 +0800202 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700203
204 stateMachine.authorizeAccess();
ke han04e47f32016-10-28 14:15:43 +0800205 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700206
207 stateMachine.denyAccess();
ke han04e47f32016-10-28 14:15:43 +0800208 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700209
210 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700211 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -0700212 }
213
Ari Saha89831742015-06-26 10:31:48 -0700214}