blob: c4f390c8dd71a0d03fea4a0d56d6b737b33ab815 [file] [log] [blame]
Shubham Sharmacf5e5032019-11-26 11:09:21 +00001/*
2 * Copyright 2015-present Open Networking Foundation
3 *
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 */
16package org.opencord.aaa.impl;
17
Shubham Sharmacf5e5032019-11-26 11:09:21 +000018import org.junit.After;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.junit.TestUtils;
22import org.onlab.packet.BasePacket;
23import org.onlab.packet.DeserializationException;
24import org.onlab.packet.EAP;
25import org.onlab.packet.Ethernet;
26import org.onlab.packet.IpAddress;
27import org.onlab.packet.RADIUS;
28import org.onlab.packet.RADIUSAttribute;
Jonathan Hartc41227c2020-01-28 16:56:49 -080029import org.onosproject.cluster.ClusterServiceAdapter;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000030import org.onosproject.core.ApplicationId;
31import org.onosproject.core.CoreServiceAdapter;
32import org.onosproject.event.DefaultEventSinkRegistry;
33import org.onosproject.event.Event;
34import org.onosproject.event.EventDeliveryService;
35import org.onosproject.event.EventSink;
36import org.onosproject.net.config.Config;
37import org.onosproject.net.config.NetworkConfigRegistryAdapter;
38import org.onosproject.net.packet.DefaultInboundPacket;
39import org.onosproject.net.packet.InboundPacket;
40import org.onosproject.net.packet.PacketContext;
41import org.onosproject.net.packet.PacketService;
Jonathan Hartc41227c2020-01-28 16:56:49 -080042import org.onosproject.store.cluster.messaging.ClusterCommunicationServiceAdapter;
Jonathan Hart9d1ce802020-01-28 10:45:08 -080043import org.onosproject.store.service.TestStorageService;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000044import org.opencord.aaa.AaaConfig;
45import org.slf4j.Logger;
46
Shubham Sharmacf5e5032019-11-26 11:09:21 +000047import java.net.InetAddress;
48import java.net.UnknownHostException;
49import java.nio.ByteBuffer;
50
51import static com.google.common.base.Preconditions.checkState;
Matteo Scandolo9510e5d2020-09-24 17:31:52 -070052import static junit.framework.TestCase.fail;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000053import static org.hamcrest.Matchers.is;
54import static org.hamcrest.Matchers.notNullValue;
Shubham Sharma2b3fb692019-12-12 10:19:10 +000055import static org.junit.Assert.assertNotEquals;
Shubham Sharma8d7a9822020-01-28 10:04:01 +000056import static org.junit.Assert.assertEquals;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000057import static org.junit.Assert.assertThat;
58import static org.onosproject.net.NetTestTools.connectPoint;
Matteo Scandolo9510e5d2020-09-24 17:31:52 -070059import static org.onosproject.net.intent.TestTools.assertAfter;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000060import static org.slf4j.LoggerFactory.getLogger;
61
62/**
63 * Set of tests of the ONOS application component for AAA Statistics.
64 */
65public class AaaStatisticsTest extends AaaTestBase {
66
67 static final String BAD_IP_ADDRESS = "198.51.100.0";
Shubham Sharma2b3fb692019-12-12 10:19:10 +000068 static final Long ZERO = (long) 0;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000069
Matteo Scandolo9510e5d2020-09-24 17:31:52 -070070
Shubham Sharmacf5e5032019-11-26 11:09:21 +000071 private final Logger log = getLogger(getClass());
72 private AaaManager aaaManager;
73 private AaaStatisticsManager aaaStatisticsManager;
Kartikey Dubeyadeb26e2019-10-01 12:18:35 +000074 private AaaSupplicantMachineStatsManager aaaSupplicantStatsManager;
Shubham Sharmacf5e5032019-11-26 11:09:21 +000075
76 class AaaManagerWithoutRadiusServer extends AaaManager {
Jonathan Hart612651f2019-11-25 09:21:43 -080077 protected void sendRadiusPacket(RADIUS radiusPacket, InboundPacket inPkt) {
78 super.sendRadiusPacket(radiusPacket, inPkt);
79 aaaManager.aaaStatisticsManager.putOutgoingIdentifierToMap(radiusPacket.getIdentifier());
80 savePacket(radiusPacket);
81 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +000082
Jonathan Hart612651f2019-11-25 09:21:43 -080083 // changed the configuration of parent method to protected
84 protected void configureRadiusCommunication() {
85 PacketService pktService = new MockPacketService();
86 ApplicationId appId = new CoreServiceAdapter().registerApplication("org.opencord.aaa");
87 aaaManager.impl = new TestSocketBasedRadiusCommunicator(appId, pktService, aaaManager);
88 }
89 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +000090
91 /**
92 * Mocks the AAAConfig class to force usage of an unroutable address for the
93 * RADIUS server.
94 */
95 static class MockAaaConfig extends AaaConfig {
96 @Override
97 public InetAddress radiusIp() {
Jonathan Hart612651f2019-11-25 09:21:43 -080098 try {
Shubham Sharmacf5e5032019-11-26 11:09:21 +000099 return InetAddress.getByName(BAD_IP_ADDRESS);
Jonathan Hart612651f2019-11-25 09:21:43 -0800100 } catch (UnknownHostException ex) {
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000101 throw new IllegalStateException(ex);
Jonathan Hart612651f2019-11-25 09:21:43 -0800102 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000103 }
Jonathan Hart612651f2019-11-25 09:21:43 -0800104 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000105
106 /**
107 * Mocks the network config registry.
108 */
109 @SuppressWarnings("unchecked")
110 private static final class TestNetworkConfigRegistry extends NetworkConfigRegistryAdapter {
111 @Override
112 public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
113 AaaConfig aaaConfig = new MockAaaConfig();
114 return (C) aaaConfig;
Jonathan Hart612651f2019-11-25 09:21:43 -0800115 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000116 }
117
118 public static class TestEventDispatcher extends DefaultEventSinkRegistry implements EventDeliveryService {
119
Jonathan Hart612651f2019-11-25 09:21:43 -0800120 @Override
121 @SuppressWarnings("unchecked")
122 public synchronized void post(Event event) {
123 EventSink sink = getSink(event.getClass());
124 checkState(sink != null, "No sink for event %s", event);
125 sink.process(event);
126 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000127
Jonathan Hart612651f2019-11-25 09:21:43 -0800128 @Override
129 public void setDispatchTimeLimit(long millis) {
130 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000131
Jonathan Hart612651f2019-11-25 09:21:43 -0800132 @Override
133 public long getDispatchTimeLimit() {
134 return 0;
135 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000136 }
137
Jonathan Hart612651f2019-11-25 09:21:43 -0800138 /**
139 * Set up the services required by the AAA application.
140 */
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000141 @Before
142 public void setUp() {
143 aaaManager = new AaaManagerWithoutRadiusServer();
Shubham Sharma4900ce62019-06-19 14:18:50 +0000144 aaaManager.radiusOperationalStatusService = new RadiusOperationalStatusManager();
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000145 aaaManager.netCfgService = new TestNetworkConfigRegistry();
146 aaaManager.coreService = new CoreServiceAdapter();
147 aaaManager.packetService = new MockPacketService();
148 aaaManager.deviceService = new TestDeviceService();
149 aaaManager.sadisService = new MockSadisService();
150 aaaManager.cfgService = new MockCfgService();
Jonathan Hart9d1ce802020-01-28 10:45:08 -0800151 aaaManager.storageService = new TestStorageService();
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000152 aaaStatisticsManager = new AaaStatisticsManager();
Jonathan Hartc41227c2020-01-28 16:56:49 -0800153 aaaStatisticsManager.storageService = new TestStorageService();
154 aaaStatisticsManager.clusterService = new ClusterServiceAdapter();
155 aaaStatisticsManager.leadershipService = new AaaManagerTest.TestLeadershipService();
156 aaaStatisticsManager.clusterCommunicationService = new ClusterCommunicationServiceAdapter();
Kartikey Dubeyadeb26e2019-10-01 12:18:35 +0000157 aaaSupplicantStatsManager = new AaaSupplicantMachineStatsManager();
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000158 TestUtils.setField(aaaStatisticsManager, "eventDispatcher", new TestEventDispatcher());
Jonathan Hartc41227c2020-01-28 16:56:49 -0800159 aaaStatisticsManager.activate(new MockComponentContext());
Kartikey Dubeyadeb26e2019-10-01 12:18:35 +0000160 TestUtils.setField(aaaSupplicantStatsManager, "eventDispatcher", new TestEventDispatcher());
161 aaaSupplicantStatsManager.activate();
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000162 aaaManager.aaaStatisticsManager = this.aaaStatisticsManager;
Kartikey Dubeyadeb26e2019-10-01 12:18:35 +0000163 aaaManager.aaaSupplicantStatsManager = this.aaaSupplicantStatsManager;
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000164 TestUtils.setField(aaaManager, "eventDispatcher", new TestEventDispatcher());
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700165
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000166 aaaManager.activate(new AaaTestBase.MockComponentContext());
167 }
168
Jonathan Hart612651f2019-11-25 09:21:43 -0800169 /**
170 * Tear down the AAA application.
171 */
172 @After
173 public void tearDown() {
174 aaaManager.deactivate(new AaaTestBase.MockComponentContext());
175 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000176
Jonathan Hart612651f2019-11-25 09:21:43 -0800177 /**
178 * Extracts the RADIUS packet from a packet sent by the supplicant.
179 *
180 * @param radius RADIUS packet sent by the supplicant
181 * @throws DeserializationException if deserialization of the packet contents fails.
182 */
183 private void checkRadiusPacketFromSupplicant(RADIUS radius) throws DeserializationException {
184 assertThat(radius, notNullValue());
185 EAP eap = radius.decapsulateMessage();
186 assertThat(eap, notNullValue());
187 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000188
Jonathan Hart612651f2019-11-25 09:21:43 -0800189 /**
190 * Fetches the sent packet at the given index. The requested packet must be the
191 * last packet on the list.
192 *
193 * @param index index into sent packets array
194 * @return packet
195 */
196 private BasePacket fetchPacket(int index) {
197 BasePacket packet = savedPackets.get(index);
198 assertThat(packet, notNullValue());
199 return packet;
200 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000201
Jonathan Hart612651f2019-11-25 09:21:43 -0800202 /**
203 * Tests the authentication path through the AAA application.
204 * And counts the aaa Stats for successful transmission.
205 *
206 * @throws DeserializationException if packed deserialization fails.
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000207 */
208 @Test
209 public void testAaaStatisticsForAcceptedPackets() throws Exception {
210
211 // (1) Supplicant start up
212 Ethernet startPacket = constructSupplicantStartPacket();
213 sendPacket(startPacket);
214
215 Ethernet responsePacket = (Ethernet) fetchPacket(0);
216 checkRadiusPacket(aaaManager, responsePacket, EAP.ATTR_IDENTITY);
217
218 // (2) Supplicant identify
219
220 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
221 sendPacket(identifyPacket);
222
223 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
224 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
225
226 assertThat(radiusIdentifyPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
227 assertThat(new String(radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_USERNAME).getValue()),
228 is("testuser"));
229 IpAddress nasIp = IpAddress.valueOf(IpAddress.Version.INET,
Jonathan Hart612651f2019-11-25 09:21:43 -0800230 radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP).getValue());
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000231 assertThat(nasIp.toString(), is(aaaManager.nasIpAddress.getHostAddress()));
232
233 // State machine should have been created by now
234
Jonathan Hart612651f2019-11-25 09:21:43 -0800235 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000236 assertThat(stateMachine, notNullValue());
237 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
238
239 // (3) RADIUS MD5 challenge
240
Jonathan Hart612651f2019-11-25 09:21:43 -0800241 RADIUS radiusCodeAccessChallengePacket = constructRadiusCodeAccessChallengePacket(
242 RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_MD5, radiusIdentifyPacket.getIdentifier(),
243 aaaManager.radiusSecret.getBytes());
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000244 aaaManager.handleRadiusPacket(radiusCodeAccessChallengePacket);
245
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700246 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
247 Ethernet radiusChallengeMD5Packet = (Ethernet) fetchPacket(2);
248 checkRadiusPacket(aaaManager, radiusChallengeMD5Packet, EAP.ATTR_MD5);
249 // (4) Supplicant MD5 response
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000250
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700251 Ethernet md5RadiusPacket = null;
252 try {
253 md5RadiusPacket = constructSupplicantIdentifyPacket(stateMachine, EAP.ATTR_MD5,
254 stateMachine.challengeIdentifier(), radiusChallengeMD5Packet);
255 } catch (Exception e) {
256 log.error(e.getMessage());
257 fail();
258 }
259 sendPacket(md5RadiusPacket);
260 });
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000261
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000262
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700263 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
264 RADIUS responseMd5RadiusPacket = (RADIUS) fetchPacket(3);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000265
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700266 try {
267 checkRadiusPacketFromSupplicant(responseMd5RadiusPacket);
268 } catch (DeserializationException e) {
269 log.error(e.getMessage());
270 fail();
271 }
272 //assertThat(responseMd5RadiusPacket.getIdentifier(), is((byte) 9));
273 assertThat(responseMd5RadiusPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000274
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700275 // State machine should be in pending state
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000276
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700277 assertThat(stateMachine, notNullValue());
278 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000279
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700280 // (5) RADIUS Success
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000281
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700282 RADIUS successPacket =
283 constructRadiusCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_ACCEPT, EAP.SUCCESS,
284 responseMd5RadiusPacket.getIdentifier(),
285 aaaManager.radiusSecret.getBytes());
286 aaaManager.handleRadiusPacket((successPacket));
287 });
288 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
289 Ethernet supplicantSuccessPacket = (Ethernet) fetchPacket(4);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000290
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700291 checkRadiusPacket(aaaManager, supplicantSuccessPacket, EAP.SUCCESS);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000292
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700293 // State machine should be in authorized state
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000294
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700295 assertThat(stateMachine, notNullValue());
296 assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED));
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000297
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700298 //Check for increase of Stats
299 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolResIdentityMsgTrans(), ZERO);
300 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolAuthSuccessTrans(), ZERO);
301 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolStartReqTrans(), ZERO);
302 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolTransRespNotNak(), ZERO);
303 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapPktTxauthChooseEap(), ZERO);
304 assertNotEquals(aaaStatisticsManager.getAaaStats().getValidEapolFramesRx(), ZERO);
305 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolFramesTx(), ZERO);
306 assertNotEquals(aaaStatisticsManager.getAaaStats().getReqEapFramesTx(), ZERO);
307 assertNotEquals(aaaStatisticsManager.getAaaStats().getRequestIdFramesTx(), ZERO);
308 assertEquals(aaaStatisticsManager.getAaaStats().getInvalidBodyLength(), ZERO);
309 assertEquals(aaaStatisticsManager.getAaaStats().getInvalidPktType(), ZERO);
310 assertEquals(aaaStatisticsManager.getAaaStats().getPendingResSupp(), ZERO);
311 // Counts the aaa Statistics count and displays in the log
312 countAaaStatistics();
313 });
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000314
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000315 }
316
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000317 /** Tests invalid packets reaching AAA.
318 * And counts the aaa Stats for successful transmission.
319 * @throws DeserializationException
320 * if packed deserialization fails.
321 */
322 @Test
323 public void testStatisticsForInvalidPackets() throws Exception {
324
325 //Test Authenticator State Machine Status. Should be Pending
326 // (1) Supplicant start up
327 Ethernet startPacket = constructSupplicantStartPacket();
328 sendPacket(startPacket);
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700329 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
330 Ethernet responsePacket = (Ethernet) fetchPacket(0);
331 checkRadiusPacket(aaaManager, responsePacket, EAP.ATTR_IDENTITY);
332 });
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000333
334 // (2) Supplicant identify
335
336 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
337 sendPacket(identifyPacket);
338
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700339 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
340 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
341 try {
342 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
343 } catch (DeserializationException e) {
344 log.error(e.getMessage());
345 fail();
346 }
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000347
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700348 assertThat(radiusIdentifyPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
349 assertThat(new String(radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_USERNAME).getValue()),
350 is("testuser"));
351 IpAddress nasIp = IpAddress.valueOf(IpAddress.Version.INET,
352 radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP)
353 .getValue());
354 assertThat(nasIp.toString(), is(aaaManager.nasIpAddress.getHostAddress()));
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000355
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700356 // State machine should have been created by now
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000357
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700358 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
359 assertThat(stateMachine, notNullValue());
360 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000361
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700362 // (3) RADIUS NAK challenge
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000363
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700364 RADIUS radiusCodeAccessChallengePacket = constructRadiusCodeAccessChallengePacket(
365 RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_NAK, radiusIdentifyPacket.getIdentifier(),
366 aaaManager.radiusSecret.getBytes());
367 aaaManager.handleRadiusPacket(radiusCodeAccessChallengePacket);
368 });
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000369
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700370 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
371 Ethernet radiusChallengeNakPacket = (Ethernet) fetchPacket(2);
372 checkRadiusPacket(aaaManager, radiusChallengeNakPacket, EAP.ATTR_NAK);
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000373
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700374 // (4) Supplicant NAK response
375 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
376 assertThat(stateMachine, notNullValue());
377 Ethernet nakRadiusPacket = null;
378 try {
379 nakRadiusPacket = constructSupplicantIdentifyPacket(stateMachine, EAP.ATTR_NAK,
380 stateMachine.challengeIdentifier(),
381 radiusChallengeNakPacket);
382 } catch (Exception e) {
383 log.error(e.getMessage());
384 fail();
385 }
386 sendPacket(nakRadiusPacket);
387 });
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000388
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700389 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
390 //Statistic Should be increased.
391 assertNotEquals(aaaStatisticsManager.getAaaStats().getPendingResSupp(), ZERO);
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000392
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700393 //Test if packet with invalid eapol type recieved.
394 // Supplicant ASF Packet
395 Ethernet invalidPacket = constructSupplicantAsfPacket();
396 sendPacket(invalidPacket);
397 });
398 //Statistic Should be increased.
399 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
400 assertNotEquals(aaaStatisticsManager.getAaaStats().getInvalidPktType(), ZERO);
401 assertNotEquals(aaaStatisticsManager.getAaaStats().getAccessRequestsTx(), ZERO);
402 assertNotEquals(aaaStatisticsManager.getAaaStats().getChallengeResponsesRx(), ZERO);
403 assertNotEquals(aaaStatisticsManager.getAaaStats().getDroppedResponsesRx(), ZERO);
404 assertNotEquals(aaaStatisticsManager.getAaaStats().getInvalidValidatorsRx(), ZERO);
405 // Counts the aaa Statistics count and displays in the log
406 countAaaStatistics();
407 });
Shubham Sharma8d7a9822020-01-28 10:04:01 +0000408 }
409
410
411 /** Tests the count for defected packets.
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000412 *
Jonathan Hart612651f2019-11-25 09:21:43 -0800413 * @throws DeserializationException if packed deserialization fails.
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000414 */
415 @Test
416 public void testAaaStatisticsForDefectivePackets() throws Exception {
417 // (1) Supplicant start up
418 Ethernet startPacket = constructSupplicantStartPacket();
419 sendPacket(startPacket);
420
421 // (2) Supplicant identify
422
423 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
424 sendPacket(identifyPacket);
425
426 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
427
428 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
429
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000430 // State machine should have been created by now
431
Jonathan Hart612651f2019-11-25 09:21:43 -0800432 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000433
434 // (3) RADIUS MD5 challenge
435
436 RADIUS radiusCodeAccessChallengePacket = constructRadiusCodeAccessChallengePacket(
Jonathan Hart612651f2019-11-25 09:21:43 -0800437 RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_MD5, radiusIdentifyPacket.getIdentifier(),
438 aaaManager.radiusSecret.getBytes());
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000439 aaaManager.handleRadiusPacket(radiusCodeAccessChallengePacket);
440
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700441 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
442 Ethernet radiusChallengeMD5Packet = (Ethernet) fetchPacket(2);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000443
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700444 // (4) Supplicant MD5 response
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000445
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700446 Ethernet md5RadiusPacket = null;
447 try {
448 md5RadiusPacket = constructSupplicantIdentifyPacket(stateMachine, EAP.ATTR_MD5,
449 stateMachine.challengeIdentifier(),
450 radiusChallengeMD5Packet);
451 } catch (Exception e) {
452 log.error(e.getMessage());
453 fail();
454 }
455 sendPacket(md5RadiusPacket);
456 });
Jonathan Hart612651f2019-11-25 09:21:43 -0800457
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700458 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
459 aaaManager.aaaStatisticsManager.calculatePacketRoundtripTime();
Jonathan Hart612651f2019-11-25 09:21:43 -0800460
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700461 RADIUS responseMd5RadiusPacket = (RADIUS) fetchPacket(3);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000462
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700463 // (5) RADIUS Rejected
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000464
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700465 RADIUS rejectedPacket =
466 constructRadiusCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_REJECT, EAP.FAILURE,
467 responseMd5RadiusPacket.getIdentifier(),
468 aaaManager.radiusSecret.getBytes());
469 aaaManager.handleRadiusPacket((rejectedPacket));
470 });
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000471
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700472 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
473 Ethernet supplicantRejectedPacket = (Ethernet) fetchPacket(4);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000474
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700475 checkRadiusPacket(aaaManager, supplicantRejectedPacket, EAP.FAILURE);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000476
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700477 // State machine should be in unauthorized state
478 assertThat(stateMachine, notNullValue());
479 assertThat(stateMachine.state(), is(StateMachine.STATE_UNAUTHORIZED));
480 // Calculated the total round trip time
481 aaaManager.aaaStatisticsManager.calculatePacketRoundtripTime();
Shubham Sharma80214c62019-12-18 07:09:59 +0000482
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700483 //Check for increase of Stats
484 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolResIdentityMsgTrans(), ZERO);
485 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolAuthFailureTrans(), ZERO);
486 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolStartReqTrans(), ZERO);
487 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapPktTxauthChooseEap(), ZERO);
488 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolTransRespNotNak(), ZERO);
489
490 assertNotEquals(aaaStatisticsManager.getAaaStats().getAccessRequestsTx(), ZERO);
491 assertNotEquals(aaaStatisticsManager.getAaaStats().getChallengeResponsesRx(), ZERO);
492 assertNotEquals(aaaStatisticsManager.getAaaStats().getDroppedResponsesRx(), ZERO);
493 assertNotEquals(aaaStatisticsManager.getAaaStats().getInvalidValidatorsRx(), ZERO);
494 assertNotEquals(aaaStatisticsManager.getAaaStats().getRejectResponsesRx(), ZERO);
495
496 // Counts the aaa Statistics count
497 countAaaStatistics();
498 });
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000499
Jonathan Hart612651f2019-11-25 09:21:43 -0800500 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000501
502 /*
503 * Tests the retransmitted packet and malformed packet count
504 *
505 * @throws DeserializationException
506 * if packed deserialization fails.
507 */
508 @Test
509 public void testRequestRetransmittedCount() throws Exception {
510
511 // (1) Supplicant start up
512 Ethernet startPacket = constructSupplicantStartPacket();
513 sendPacket(startPacket);
514
515 // (2) Supplicant identify
516
517 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
518 sendPacket(identifyPacket);
519
520 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
521 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
522
523 // again creating pending state for same packet
524 constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
525 sendPacket(identifyPacket);
526 aaaManager.impl.handlePacketFromServer(null);
527 aaaManager.aaaStatisticsManager.calculatePacketRoundtripTime();
528
529 // creating malformed packet
530 final ByteBuffer byteBuffer = ByteBuffer.wrap(startPacket.serialize());
531 InboundPacket inPacket = new DefaultInboundPacket(connectPoint("1", 1),
Jonathan Hart612651f2019-11-25 09:21:43 -0800532 startPacket, byteBuffer);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000533
534 PacketContext context = new TestPacketContext(127L, inPacket, null, false);
535 aaaManager.impl.handlePacketFromServer(context);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000536
537 // Check for increase of Stats
538 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolResIdentityMsgTrans(), ZERO);
539 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolStartReqTrans(), ZERO);
540
Shubham Sharma80214c62019-12-18 07:09:59 +0000541 assertNotEquals(aaaStatisticsManager.getAaaStats().getAccessRequestsTx(), ZERO);
542 assertNotEquals(aaaStatisticsManager.getAaaStats().getDroppedResponsesRx(), ZERO);
543 assertNotEquals(aaaStatisticsManager.getAaaStats().getPendingRequests(), ZERO);
544 assertNotEquals(aaaStatisticsManager.getAaaStats().getMalformedResponsesRx(), ZERO);
545 assertNotEquals(aaaStatisticsManager.getAaaStats().getRequestReTx(), ZERO);
546 assertNotEquals(aaaStatisticsManager.getAaaStats().getUnknownTypeRx(), ZERO);
547 assertNotEquals(aaaStatisticsManager.getAaaStats().getUnknownServerRx(), ZERO);
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000548
Shubham Sharma80214c62019-12-18 07:09:59 +0000549 countAaaStatistics();
550 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000551
Jonathan Hart612651f2019-11-25 09:21:43 -0800552 /**
553 * Tests the authentication path through the AAA application.
554 * And counts the aaa Stats for logoff transactionXZ.
555 *
556 * @throws DeserializationException if packed deserialization fails.
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000557 */
558 @Test
559 public void testAaaStatisticsForLogoffPackets() throws Exception {
560
561 // (1) Supplicant start up
562 Ethernet startPacket = constructSupplicantStartPacket();
563 sendPacket(startPacket);
564
565 Ethernet responsePacket = (Ethernet) fetchPacket(0);
566 checkRadiusPacket(aaaManager, responsePacket, EAP.ATTR_IDENTITY);
567
568 // (2) Supplicant identify
569
570 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
571 sendPacket(identifyPacket);
572
573 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
574 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
575
576 assertThat(radiusIdentifyPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
577 assertThat(new String(radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_USERNAME).getValue()),
578 is("testuser"));
579 IpAddress nasIp = IpAddress.valueOf(IpAddress.Version.INET,
Jonathan Hart612651f2019-11-25 09:21:43 -0800580 radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP).getValue());
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000581 assertThat(nasIp.toString(), is(aaaManager.nasIpAddress.getHostAddress()));
582
583 // State machine should have been created by now
584
Jonathan Hart612651f2019-11-25 09:21:43 -0800585 //StateMachine stateMachine = StateMachine.lookupStateMachineBySessionId(SESSION_ID);
586 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000587 assertThat(stateMachine, notNullValue());
588 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
589
590 // (3) RADIUS MD5 challenge
591
Jonathan Hart612651f2019-11-25 09:21:43 -0800592 RADIUS radiusCodeAccessChallengePacket = constructRadiusCodeAccessChallengePacket(
593 RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_MD5,
594 radiusIdentifyPacket.getIdentifier(), aaaManager.radiusSecret.getBytes());
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000595 aaaManager.handleRadiusPacket(radiusCodeAccessChallengePacket);
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700596 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
597 Ethernet radiusChallengeMD5Packet = (Ethernet) fetchPacket(2);
598 checkRadiusPacket(aaaManager, radiusChallengeMD5Packet, EAP.ATTR_MD5);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000599
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700600 // (4) Supplicant MD5 response
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000601
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700602 Ethernet md5RadiusPacket = null;
603 try {
604 md5RadiusPacket = constructSupplicantIdentifyPacket(stateMachine, EAP.ATTR_MD5,
605 stateMachine.challengeIdentifier(),
606 radiusChallengeMD5Packet);
607 } catch (Exception e) {
608 log.error(e.getMessage());
609 fail();
610 }
611 sendPacket(md5RadiusPacket);
612 });
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000613
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700614 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
615 RADIUS responseMd5RadiusPacket = (RADIUS) fetchPacket(3);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000616
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700617 try {
618 checkRadiusPacketFromSupplicant(responseMd5RadiusPacket);
619 } catch (DeserializationException e) {
620 log.error(e.getMessage());
621 fail();
622 }
623 assertThat(responseMd5RadiusPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000624
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700625 // State machine should be in pending state
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000626
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700627 assertThat(stateMachine, notNullValue());
628 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000629
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700630 // (5) RADIUS Success
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000631
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700632 RADIUS successPacket =
633 constructRadiusCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_ACCEPT, EAP.SUCCESS,
634 responseMd5RadiusPacket.getIdentifier(),
635 aaaManager.radiusSecret.getBytes());
636 aaaManager.handleRadiusPacket((successPacket));
637 });
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000638
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700639 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
640 Ethernet supplicantSuccessPacket = (Ethernet) fetchPacket(4);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000641
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700642 checkRadiusPacket(aaaManager, supplicantSuccessPacket, EAP.SUCCESS);
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000643
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700644 // State machine should be in authorized state
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000645
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700646 assertThat(stateMachine, notNullValue());
647 assertThat(stateMachine.state(), is(StateMachine.STATE_AUTHORIZED));
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000648
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700649 // Supplicant trigger EAP Logoff
650 Ethernet logoffPacket = constructSupplicantLogoffPacket();
651 sendPacket(logoffPacket);
652 });
653 assertAfter(ASSERTION_DELAY, ASSERTION_LENGTH, () -> {
654 // State machine should be in logoff state
655 assertThat(stateMachine, notNullValue());
656 assertThat(stateMachine.state(), is(StateMachine.STATE_IDLE));
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000657
Matteo Scandolo9510e5d2020-09-24 17:31:52 -0700658 //Check for increase in stats
659 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolLogoffRx(), ZERO);
660 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolResIdentityMsgTrans(), ZERO);
661 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolAuthSuccessTrans(), ZERO);
662 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolStartReqTrans(), ZERO);
663 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolTransRespNotNak(), ZERO);
664 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapPktTxauthChooseEap(), ZERO);
665 assertNotEquals(aaaStatisticsManager.getAaaStats().getAuthStateIdle(), ZERO);
666 // Counts the aaa Statistics count
667 countAaaStatistics();
668 });
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000669
670 }
671
Andrea Campanellae66466a2020-02-03 14:05:45 +0000672
673 /** Tests the authentication path through the AAA application.
674 * And counts the aaa Stats for timeout.
675 * @throws DeserializationException
676 * if packed deserialization fails.
677 */
678 @Test
679 public void testAaaStatisticsForTimeoutPackets() throws Exception {
680
681 // (1) Supplicant start up
682 Ethernet startPacket = constructSupplicantStartPacket();
683 sendPacket(startPacket);
684
685 Ethernet responsePacket = (Ethernet) fetchPacket(0);
686 checkRadiusPacket(aaaManager, responsePacket, EAP.ATTR_IDENTITY);
687
688 // (2) Supplicant identify
689
690 Ethernet identifyPacket = constructSupplicantIdentifyPacket(null, EAP.ATTR_IDENTITY, (byte) 1, null);
691 sendPacket(identifyPacket);
692
693 RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
694 checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
695
696 assertThat(radiusIdentifyPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
697 assertThat(new String(radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_USERNAME).getValue()),
698 is("testuser"));
699 IpAddress nasIp = IpAddress.valueOf(IpAddress.Version.INET,
700 radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP).getValue());
701 assertThat(nasIp.toString(), is(aaaManager.nasIpAddress.getHostAddress()));
702
703 // State machine should have been created by now
704
705 StateMachine stateMachine = aaaManager.getStateMachine(SESSION_ID);
706 assertThat(stateMachine, notNullValue());
707 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
708 Thread.sleep((aaaManager.cleanupTimerTimeOutInMins / 2) + 1);
709
710 // State machine should be in timeout state
711 assertThat(stateMachine, notNullValue());
712 assertThat(stateMachine.state(), is(StateMachine.STATE_PENDING));
713
714 //Check for increase in stats
715 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolResIdentityMsgTrans(), ZERO);
716 assertNotEquals(aaaStatisticsManager.getAaaStats().getEapolStartReqTrans(), ZERO);
717 countAaaStatistics();
718
719 }
720
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000721 // Calculates the AAA statistics count.
722 public void countAaaStatistics() {
723 assertThat(aaaStatisticsManager.getAaaStats().getAcceptResponsesRx(), notNullValue());
724 assertThat(aaaStatisticsManager.getAaaStats().getAccessRequestsTx(), notNullValue());
725 assertThat(aaaStatisticsManager.getAaaStats().getChallengeResponsesRx(), notNullValue());
726 assertThat(aaaStatisticsManager.getAaaStats().getDroppedResponsesRx(), notNullValue());
727 assertThat(aaaStatisticsManager.getAaaStats().getInvalidValidatorsRx(), notNullValue());
728 assertThat(aaaStatisticsManager.getAaaStats().getMalformedResponsesRx(), notNullValue());
729 assertThat(aaaStatisticsManager.getAaaStats().getPendingRequests(), notNullValue());
730 assertThat(aaaStatisticsManager.getAaaStats().getRejectResponsesRx(), notNullValue());
731 assertThat(aaaStatisticsManager.getAaaStats().getRequestReTx(), notNullValue());
732 assertThat(aaaStatisticsManager.getAaaStats().getRequestRttMilis(), notNullValue());
733 assertThat(aaaStatisticsManager.getAaaStats().getUnknownServerRx(), notNullValue());
734 assertThat(aaaStatisticsManager.getAaaStats().getUnknownTypeRx(), notNullValue());
Shubham Sharma2b3fb692019-12-12 10:19:10 +0000735
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000736 }
737
738 /*
Andrea Campanella7e0e7e32020-02-13 14:39:55 +0100739 * Mock implementation of SocketBasedRadiusCommunicator class.
740 *
741 */
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000742 class TestSocketBasedRadiusCommunicator extends SocketBasedRadiusCommunicator {
743
Jonathan Hart612651f2019-11-25 09:21:43 -0800744 TestSocketBasedRadiusCommunicator(ApplicationId appId, PacketService pktService, AaaManager aaaManager) {
745 super(appId, pktService, aaaManager);
746 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000747
Andrea Campanella7e0e7e32020-02-13 14:39:55 +0100748 /**
749 * Wait 10 millis to simulate a non 0 rtt.
750 *
751 * @throws InterruptedException
752 */
753 private void waitPacket() throws InterruptedException {
754 synchronized (this) {
755 this.wait(10);
756 }
757 }
758
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000759 // Implementation of socketBasedRadiusCommunicator--> run() method
760 public void handlePacketFromServer(PacketContext context) {
Jonathan Hart612651f2019-11-25 09:21:43 -0800761 RADIUS incomingPkt = (RADIUS) fetchPacket(savedPackets.size() - 1);
762 try {
Andrea Campanella7e0e7e32020-02-13 14:39:55 +0100763 // wait a couple of millis to avoid rtt being 0
764 waitPacket();
Jonathan Hart612651f2019-11-25 09:21:43 -0800765 if (context == null) {
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000766 aaaStatisticsManager.handleRoundtripTime(incomingPkt.getIdentifier());
767 aaaManager.handleRadiusPacket(incomingPkt);
768 } else if (null != context) {
769 aaaManager.checkForPacketFromUnknownServer("100.100.100.0");
770 aaaStatisticsManager.handleRoundtripTime(incomingPkt.getIdentifier());
771 aaaManager.handleRadiusPacket(incomingPkt);
772 incomingPkt =
773 RADIUS.deserializer().deserialize(incomingPkt.generateAuthCode(), 0, 1);
774 }
Jonathan Hart612651f2019-11-25 09:21:43 -0800775 } catch (DeserializationException dex) {
776 aaaManager.aaaStatisticsManager.getAaaStats().increaseMalformedResponsesRx();
777 aaaStatisticsManager.getAaaStats().countDroppedResponsesRx();
778 log.error("Cannot deserialize packet", dex);
Andrea Campanella7e0e7e32020-02-13 14:39:55 +0100779 } catch (InterruptedException inte) {
780 Thread.currentThread().interrupt();
Jonathan Hart612651f2019-11-25 09:21:43 -0800781 }
Shubham Sharmacf5e5032019-11-26 11:09:21 +0000782 }
783
784 }
785
Kartikey Dubeyadeb26e2019-10-01 12:18:35 +0000786}