blob: 7415e2b53f75e3f36d1dbcd14db273d54b6d43ef [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;
Matteo Scandolobbc1ffb2020-10-16 15:56:20 -070022import org.junit.runner.RunWith;
23import org.junit.runners.Parameterized;
Jonathan Hart612651f2019-11-25 09:21:43 -080024
25import java.util.concurrent.Executors;
David K. Bainbridge62019492017-07-28 17:02:10 -070026
Ray Milkey967776a2015-10-07 14:37:17 -070027import static org.junit.Assert.assertEquals;
Ari Saha89831742015-06-26 10:31:48 -070028
Matteo Scandolobbc1ffb2020-10-16 15:56:20 -070029@RunWith(Parameterized.class)
Ari Saha89831742015-06-26 10:31:48 -070030public class StateMachineTest {
Matteo Scandolobbc1ffb2020-10-16 15:56:20 -070031
32 // Change this to have more run with mvn
33 @Parameterized.Parameters
34 public static Object[][] data() {
35 return new Object[1][0];
36 }
37
Ari Saha89831742015-06-26 10:31:48 -070038 StateMachine stateMachine = null;
39
40 @Before
41 public void setUp() {
42 System.out.println("Set Up.");
Jonathan Hart5db44532018-07-12 18:13:54 -070043 StateMachine.setDelegate(e -> { });
Jonathan Hart612651f2019-11-25 09:21:43 -080044 stateMachine = new StateMachine("session0", Executors.newSingleThreadScheduledExecutor());
Ari Saha89831742015-06-26 10:31:48 -070045 }
46
47 @After
48 public void tearDown() {
49 System.out.println("Tear Down.");
Ari Saha89831742015-06-26 10:31:48 -070050 stateMachine = null;
51 }
52
53 @Test
54 /**
55 * Test all the basic inputs from state to state: IDLE -> STARTED -> PENDING -> AUTHORIZED -> IDLE
56 */
Jonathan Hart612651f2019-11-25 09:21:43 -080057 public void basic() {
Ari Saha89831742015-06-26 10:31:48 -070058 System.out.println("======= BASIC =======.");
alshabib6d527452016-06-01 18:00:47 -070059 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070060
61 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -070062 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070063
64 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -070065 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -070066
67 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -070068 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -070069
70 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -070071 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070072 }
73
74 @Test
75 /**
76 * Test all inputs from an IDLE state (starting with the ones that are not impacting the current state)
77 */
Jonathan Hart612651f2019-11-25 09:21:43 -080078 public void testIdleState() {
Ari Saha89831742015-06-26 10:31:48 -070079 System.out.println("======= IDLE STATE TEST =======.");
80 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -070081 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070082
83 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -070084 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070085
86 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -070087 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070088
89 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -070090 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -070091
92 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -070093 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -070094 }
95
96 @Test
97 /**
98 * Test all inputs from an STARTED state (starting with the ones that are not impacting the current state)
99 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800100 public void testStartedState() {
Ari Saha89831742015-06-26 10:31:48 -0700101 System.out.println("======= STARTED STATE TEST =======.");
102 stateMachine.start();
103
104 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700105 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700106
107 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700108 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700109
110 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700111 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700112
113 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700114 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700115
116 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700117 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700118 }
119
120 @Test
121 /**
122 * Test all inputs from a PENDING state (starting with the ones that are not impacting the current state).
123 * The next valid state for this test is AUTHORIZED
124 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800125 public void testPendingStateToAuthorized() {
Ari Saha89831742015-06-26 10:31:48 -0700126 System.out.println("======= PENDING STATE TEST (AUTHORIZED) =======.");
127 stateMachine.start();
128 stateMachine.requestAccess();
129
130 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700131 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700132
133 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700134 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700135
136 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700137 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700138
139 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700140 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700141
142 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700143 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700144 }
145
146 @Test
147 /**
148 * Test all inputs from an PENDING state (starting with the ones that are not impacting the current state).
149 * The next valid state for this test is UNAUTHORIZED
150 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800151 public void testPendingStateToUnauthorized() {
Ari Saha89831742015-06-26 10:31:48 -0700152 System.out.println("======= PENDING STATE TEST (DENIED) =======.");
153 stateMachine.start();
154 stateMachine.requestAccess();
155
156 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700157 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700158
159 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700160 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700161
162 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700163 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700164
165 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700166 assertEquals(stateMachine.state(), StateMachine.STATE_UNAUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700167
168 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700169 assertEquals(stateMachine.state(), StateMachine.STATE_UNAUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700170 }
171
172 @Test
173 /**
174 * Test all inputs from an AUTHORIZED state (starting with the ones that are not impacting the current state).
175 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800176 public void testAuthorizedState() {
Ari Saha89831742015-06-26 10:31:48 -0700177 System.out.println("======= AUTHORIZED STATE TEST =======.");
178 stateMachine.start();
179 stateMachine.requestAccess();
180 stateMachine.authorizeAccess();
181
182 stateMachine.start();
alshabib6d527452016-06-01 18:00:47 -0700183 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700184
185 stateMachine.requestAccess();
alshabib6d527452016-06-01 18:00:47 -0700186 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700187
188 stateMachine.authorizeAccess();
alshabib6d527452016-06-01 18:00:47 -0700189 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700190
191 stateMachine.denyAccess();
alshabib6d527452016-06-01 18:00:47 -0700192 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700193
194 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700195 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -0700196 }
197
198 @Test
199 /**
200 * Test all inputs from an UNAUTHORIZED state (starting with the ones that are not impacting the current state).
201 */
Jonathan Hart612651f2019-11-25 09:21:43 -0800202 public void testUnauthorizedState() {
Ari Saha89831742015-06-26 10:31:48 -0700203 System.out.println("======= UNAUTHORIZED STATE TEST =======.");
204 stateMachine.start();
205 stateMachine.requestAccess();
206 stateMachine.denyAccess();
207
208 stateMachine.start();
ke han04e47f32016-10-28 14:15:43 +0800209 assertEquals(stateMachine.state(), StateMachine.STATE_STARTED);
Ari Saha89831742015-06-26 10:31:48 -0700210
211 stateMachine.requestAccess();
ke han04e47f32016-10-28 14:15:43 +0800212 assertEquals(stateMachine.state(), StateMachine.STATE_PENDING);
Ari Saha89831742015-06-26 10:31:48 -0700213
214 stateMachine.authorizeAccess();
ke han04e47f32016-10-28 14:15:43 +0800215 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700216
217 stateMachine.denyAccess();
ke han04e47f32016-10-28 14:15:43 +0800218 assertEquals(stateMachine.state(), StateMachine.STATE_AUTHORIZED);
Ari Saha89831742015-06-26 10:31:48 -0700219
220 stateMachine.logoff();
alshabib6d527452016-06-01 18:00:47 -0700221 assertEquals(stateMachine.state(), StateMachine.STATE_IDLE);
Ari Saha89831742015-06-26 10:31:48 -0700222 }
223
Ari Saha89831742015-06-26 10:31:48 -0700224}