[SEBA-144] Operational Status DHCP L2 Relay.
Cherry-picked from dhcpl2relay-1.6
Change-Id: I58aab083152793af36dfd34fa91cd78385fd2ed7
Signed-off-by: Marcos Aurelio Carrero <mcarrero@furukawalatam.com>
diff --git a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayCountersStoreTest.java b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayCountersStoreTest.java
new file mode 100644
index 0000000..32bb0d3
--- /dev/null
+++ b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayCountersStoreTest.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.opencord.dhcpl2relay.impl;
+
+import org.easymock.EasyMock;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.junit.TestUtils;
+import org.onlab.osgi.ComponentContextAdapter;
+import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.common.event.impl.TestEventDispatcher;
+import org.onosproject.net.flowobjective.FlowObjectiveServiceAdapter;
+import org.opencord.dhcpl2relay.DhcpL2RelayEvent;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class DhcpL2RelayCountersStoreTest extends DhcpL2RelayTestBase {
+
+ private DhcpL2Relay dhcpL2Relay;
+ private SimpleDhcpL2RelayCountersStore store;
+
+ ComponentConfigService mockConfigService =
+ EasyMock.createMock(ComponentConfigService.class);
+
+ /**
+ * Sets up the services required by the dhcpl2relay app.
+ */
+ @Before
+ public void setUp() {
+ dhcpL2Relay = new DhcpL2Relay();
+ dhcpL2Relay.cfgService = new DhcpL2RelayConfigTest.TestNetworkConfigRegistry();
+ dhcpL2Relay.coreService = new MockCoreServiceAdapter();
+ dhcpL2Relay.flowObjectiveService = new FlowObjectiveServiceAdapter();
+ dhcpL2Relay.packetService = new MockPacketService();
+ dhcpL2Relay.componentConfigService = mockConfigService;
+ dhcpL2Relay.deviceService = new MockDeviceService();
+ dhcpL2Relay.sadisService = new MockSadisService();
+ dhcpL2Relay.mastershipService = new MockMastershipService();
+ TestUtils.setField(dhcpL2Relay, "eventDispatcher", new TestEventDispatcher());
+ dhcpL2Relay.activate(new ComponentContextAdapter());
+ store = new SimpleDhcpL2RelayCountersStore();
+ TestUtils.setField(store, "eventDispatcher", new TestEventDispatcher());
+ store.activate();
+ dhcpL2Relay.dhcpL2RelayCounters = this.store;
+ }
+
+ /**
+ * Tears down the dhcpL2Relay application.
+ */
+ @After
+ public void tearDown() {
+ dhcpL2Relay.deactivate();
+ }
+
+ /**
+ * Tests the initialization of the counter.
+ */
+ @Test
+ public void testInitCounter() {
+ // Init the supported global counter
+ dhcpL2Relay.dhcpL2RelayCounters.initCounters(DhcpL2RelayEvent.GLOBAL_COUNTER);
+ // Init the supported counter for a specific subscriber
+ dhcpL2Relay.dhcpL2RelayCounters.initCounters(CLIENT_ID_1);
+
+ Map<DhcpL2RelayCountersIdentifier, AtomicLong> countersMap = dhcpL2Relay.dhcpL2RelayCounters.getCountersMap();
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ DhcpL2RelayCounters counterType = it.next();
+ long globalCounterValue = countersMap.get(new DhcpL2RelayCountersIdentifier(
+ DhcpL2RelayEvent.GLOBAL_COUNTER, counterType)).longValue();
+ long perSubscriberValue = countersMap.get(new DhcpL2RelayCountersIdentifier(CLIENT_ID_1,
+ counterType)).longValue();
+ assertEquals((long) 0, globalCounterValue);
+ assertEquals((long) 0, perSubscriberValue);
+ }
+ }
+
+ /**
+ * Tests the insertion of the counter entry if it is not already in the set
+ * otherwise increment the existing counter entry.
+ */
+ @Test
+ public void testIncrementCounter() {
+ // Init the supported global counter
+ dhcpL2Relay.dhcpL2RelayCounters.initCounters(DhcpL2RelayEvent.GLOBAL_COUNTER);
+
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ DhcpL2RelayCounters counterType = it.next();
+ // Increment of existing supported global counter
+ dhcpL2Relay.dhcpL2RelayCounters.incrementCounter(DhcpL2RelayEvent.GLOBAL_COUNTER, counterType);
+ // Add of a Subscriber entry that is not already in the set
+ dhcpL2Relay.dhcpL2RelayCounters.incrementCounter(CLIENT_ID_1, counterType);
+ }
+
+ Map<DhcpL2RelayCountersIdentifier, AtomicLong> countersMap = dhcpL2Relay.dhcpL2RelayCounters.getCountersMap();
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ DhcpL2RelayCounters counterType = it.next();
+ long globalCounterValue = countersMap.get(new DhcpL2RelayCountersIdentifier(
+ DhcpL2RelayEvent.GLOBAL_COUNTER, counterType)).longValue();
+ long perSubscriberValue = countersMap.get(new DhcpL2RelayCountersIdentifier(CLIENT_ID_1,
+ counterType)).longValue();
+ assertEquals((long) 1, globalCounterValue);
+ assertEquals((long) 1, perSubscriberValue);
+ }
+ }
+
+ /**
+ * Tests the increment and reset functions of the counters map for the given counter class.
+ */
+ @Test
+ public void testIncrementAndResetCounter() {
+ DhcpL2RelayCounters counterType;
+ long subscriberValue;
+ Map<DhcpL2RelayCountersIdentifier, AtomicLong> countersMap;
+
+ // First start incrementing the counter of a specific subscriber
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ counterType = it.next();
+ // Insert of a Subscriber entry that is not already in the set
+ dhcpL2Relay.dhcpL2RelayCounters.incrementCounter(CLIENT_ID_1, counterType);
+ }
+
+ // Make sure that the counter is incremented
+ countersMap = dhcpL2Relay.dhcpL2RelayCounters.getCountersMap();
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ counterType = it.next();
+ subscriberValue = countersMap.get(new DhcpL2RelayCountersIdentifier(CLIENT_ID_1,
+ counterType)).longValue();
+ assertEquals((long) 1, subscriberValue);
+ }
+
+ // Reset the counter
+ dhcpL2Relay.dhcpL2RelayCounters.resetCounters(CLIENT_ID_1);
+ countersMap = dhcpL2Relay.dhcpL2RelayCounters.getCountersMap();
+ for (Iterator<DhcpL2RelayCounters> it = DhcpL2RelayCounters.SUPPORTED_COUNTERS.iterator();
+ it.hasNext();) {
+ counterType = it.next();
+ subscriberValue = countersMap.get(new DhcpL2RelayCountersIdentifier(CLIENT_ID_1,
+ counterType)).longValue();
+ assertEquals((long) 0, subscriberValue);
+ }
+ }
+
+ /**
+ * Tests the insert of the counter value for a subscriber entry if it is not already in the set
+ * otherwise update the existing counter entry.
+ */
+ @Test
+ public void testInsertOrUpdateCounter() {
+ dhcpL2Relay.dhcpL2RelayCounters.setCounter(CLIENT_ID_1, DhcpL2RelayCounters.valueOf("DHCPDISCOVER"), (long) 50);
+
+ Map<DhcpL2RelayCountersIdentifier, AtomicLong> countersMap = dhcpL2Relay.dhcpL2RelayCounters.getCountersMap();
+ long subscriberValue = countersMap.get(new DhcpL2RelayCountersIdentifier(
+ CLIENT_ID_1, DhcpL2RelayCounters.valueOf("DHCPDISCOVER"))).longValue();
+
+ assertEquals((long) 50, subscriberValue);
+ }
+
+}
\ No newline at end of file