Committed by
Gerrit Code Review
Add more unit tests for control plane manager
- Add unit test for ControlMessageMetricMapper - Add unit test for ControlMessageManager Change-Id: I83e2eda8ca5ed3dabae2fb262a20b7d45de4c75d
Showing
3 changed files
with
263 additions
and
2 deletions
| ... | @@ -15,6 +15,8 @@ | ... | @@ -15,6 +15,8 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.cpman.impl; | 16 | package org.onosproject.cpman.impl; |
| 17 | 17 | ||
| 18 | +import org.junit.After; | ||
| 19 | +import org.junit.Before; | ||
| 18 | import org.junit.Test; | 20 | import org.junit.Test; |
| 19 | import org.onosproject.core.CoreServiceAdapter; | 21 | import org.onosproject.core.CoreServiceAdapter; |
| 20 | import org.onosproject.cpman.impl.message.ControlMessageServiceAdaptor; | 22 | import org.onosproject.cpman.impl.message.ControlMessageServiceAdaptor; |
| ... | @@ -30,7 +32,7 @@ public class ControlPlaneManagerTest { | ... | @@ -30,7 +32,7 @@ public class ControlPlaneManagerTest { |
| 30 | /** | 32 | /** |
| 31 | * Sets up the services required by the CPMan application. | 33 | * Sets up the services required by the CPMan application. |
| 32 | */ | 34 | */ |
| 33 | - //@Before | 35 | + @Before |
| 34 | public void setUp() { | 36 | public void setUp() { |
| 35 | cpMan = new ControlPlaneManager(); | 37 | cpMan = new ControlPlaneManager(); |
| 36 | cpMan.coreService = new CoreServiceAdapter(); | 38 | cpMan.coreService = new CoreServiceAdapter(); |
| ... | @@ -42,7 +44,7 @@ public class ControlPlaneManagerTest { | ... | @@ -42,7 +44,7 @@ public class ControlPlaneManagerTest { |
| 42 | /** | 44 | /** |
| 43 | * Tears down the CPMan application. | 45 | * Tears down the CPMan application. |
| 44 | */ | 46 | */ |
| 45 | - //@After | 47 | + @After |
| 46 | public void tearDown() { | 48 | public void tearDown() { |
| 47 | cpMan.deactivate(); | 49 | cpMan.deactivate(); |
| 48 | } | 50 | } | ... | ... |
apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlMessageManagerTest.java
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright 2016 Open Networking Laboratory | ||
| 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 | + */ | ||
| 16 | +package org.onosproject.cpman.impl.message; | ||
| 17 | + | ||
| 18 | +import com.google.common.collect.Sets; | ||
| 19 | +import org.junit.After; | ||
| 20 | +import org.junit.Before; | ||
| 21 | +import org.junit.Test; | ||
| 22 | +import org.onosproject.cpman.ControlMessage; | ||
| 23 | +import org.onosproject.cpman.DefaultControlMessage; | ||
| 24 | +import org.onosproject.cpman.message.ControlMessageEvent; | ||
| 25 | +import org.onosproject.cpman.message.ControlMessageListener; | ||
| 26 | +import org.onosproject.cpman.message.ControlMessageProvider; | ||
| 27 | +import org.onosproject.cpman.message.ControlMessageProviderRegistry; | ||
| 28 | +import org.onosproject.cpman.message.ControlMessageProviderService; | ||
| 29 | +import org.onosproject.cpman.message.ControlMessageService; | ||
| 30 | +import org.onosproject.event.DefaultEventSinkRegistry; | ||
| 31 | +import org.onosproject.event.Event; | ||
| 32 | +import org.onosproject.event.EventDeliveryService; | ||
| 33 | +import org.onosproject.event.EventSink; | ||
| 34 | +import org.onosproject.net.DeviceId; | ||
| 35 | +import org.onosproject.net.provider.AbstractProvider; | ||
| 36 | +import org.onosproject.net.provider.ProviderId; | ||
| 37 | + | ||
| 38 | +import java.util.ArrayList; | ||
| 39 | +import java.util.List; | ||
| 40 | +import java.util.Set; | ||
| 41 | + | ||
| 42 | +import static com.google.common.base.Preconditions.checkState; | ||
| 43 | +import static org.junit.Assert.assertEquals; | ||
| 44 | +import static org.junit.Assert.assertFalse; | ||
| 45 | +import static org.junit.Assert.assertTrue; | ||
| 46 | +import static org.onosproject.net.DeviceId.deviceId; | ||
| 47 | +import static org.onosproject.net.NetTestTools.injectEventDispatcher; | ||
| 48 | + | ||
| 49 | +/** | ||
| 50 | + * Unit test for control message manager. | ||
| 51 | + */ | ||
| 52 | +public class ControlMessageManagerTest { | ||
| 53 | + | ||
| 54 | + private static final ProviderId PID = new ProviderId("of", "foo"); | ||
| 55 | + private static final DeviceId DID = deviceId("of:foo"); | ||
| 56 | + | ||
| 57 | + private ControlMessageManager manager; | ||
| 58 | + private ControlMessageService service; | ||
| 59 | + private ControlMessageProviderRegistry registry; | ||
| 60 | + private ControlMessageProviderService providerService; | ||
| 61 | + protected TestProvider provider; | ||
| 62 | + protected TestListener listener = new TestListener(); | ||
| 63 | + | ||
| 64 | + /** | ||
| 65 | + * Initializes all variables for unit test. | ||
| 66 | + */ | ||
| 67 | + @Before | ||
| 68 | + public void setUp() { | ||
| 69 | + manager = new ControlMessageManager(); | ||
| 70 | + service = manager; | ||
| 71 | + registry = manager; | ||
| 72 | + manager.store = new DefaultControlMessageStore(); | ||
| 73 | + injectEventDispatcher(manager, new TestEventDispatcher()); | ||
| 74 | + manager.activate(); | ||
| 75 | + | ||
| 76 | + service.addListener(listener); | ||
| 77 | + | ||
| 78 | + provider = new TestProvider(); | ||
| 79 | + providerService = registry.register(provider); | ||
| 80 | + assertTrue("provider should be registered", | ||
| 81 | + registry.getProviders().contains(provider.id())); | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + /** | ||
| 85 | + * Tear down the control message manager. | ||
| 86 | + */ | ||
| 87 | + @After | ||
| 88 | + public void tearDown() { | ||
| 89 | + registry.unregister(provider); | ||
| 90 | + assertFalse("provider should not be registered", | ||
| 91 | + registry.getProviders().contains(provider.id())); | ||
| 92 | + service.removeListener(listener); | ||
| 93 | + manager.deactivate(); | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + /** | ||
| 97 | + * Tests the updateStatsInfo method. | ||
| 98 | + */ | ||
| 99 | + @Test | ||
| 100 | + public void updateStatsInfo() { | ||
| 101 | + Set<ControlMessage> cms = Sets.newHashSet(); | ||
| 102 | + ControlMessage.Type in = ControlMessage.Type.INBOUND_PACKET; | ||
| 103 | + ControlMessage.Type out = ControlMessage.Type.OUTBOUND_PACKET; | ||
| 104 | + ControlMessage.Type mod = ControlMessage.Type.FLOW_MOD_PACKET; | ||
| 105 | + ControlMessage.Type rmv = ControlMessage.Type.FLOW_REMOVED_PACKET; | ||
| 106 | + ControlMessage.Type req = ControlMessage.Type.REQUEST_PACKET; | ||
| 107 | + ControlMessage.Type rep = ControlMessage.Type.REPLY_PACKET; | ||
| 108 | + | ||
| 109 | + cms.add(new DefaultControlMessage(in, DID, 0, 0, 0, 0)); | ||
| 110 | + cms.add(new DefaultControlMessage(out, DID, 0, 0, 0, 0)); | ||
| 111 | + cms.add(new DefaultControlMessage(mod, DID, 0, 0, 0, 0)); | ||
| 112 | + cms.add(new DefaultControlMessage(rmv, DID, 0, 0, 0, 0)); | ||
| 113 | + cms.add(new DefaultControlMessage(req, DID, 0, 0, 0, 0)); | ||
| 114 | + cms.add(new DefaultControlMessage(rep, DID, 0, 0, 0, 0)); | ||
| 115 | + | ||
| 116 | + providerService.updateStatsInfo(DID, cms); | ||
| 117 | + validateEvents(ControlMessageEvent.Type.STATS_UPDATE); | ||
| 118 | + cms.clear(); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + /** | ||
| 122 | + * Validates whether the manager receives the right events. | ||
| 123 | + * | ||
| 124 | + * @param types a set of types of control message event | ||
| 125 | + */ | ||
| 126 | + protected void validateEvents(Enum... types) { | ||
| 127 | + int i = 0; | ||
| 128 | + assertEquals("wrong events received", types.length, listener.events.size()); | ||
| 129 | + for (Event event : listener.events) { | ||
| 130 | + assertEquals("incorrect event type", types[i], event.type()); | ||
| 131 | + i++; | ||
| 132 | + } | ||
| 133 | + listener.events.clear(); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + /** | ||
| 137 | + * A mock of control message provider. | ||
| 138 | + */ | ||
| 139 | + private class TestProvider extends AbstractProvider implements ControlMessageProvider { | ||
| 140 | + | ||
| 141 | + public TestProvider() { | ||
| 142 | + super(PID); | ||
| 143 | + } | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + /** | ||
| 147 | + * A mock of control message listener. | ||
| 148 | + */ | ||
| 149 | + private static class TestListener implements ControlMessageListener { | ||
| 150 | + final List<ControlMessageEvent> events = new ArrayList<>(); | ||
| 151 | + | ||
| 152 | + @Override | ||
| 153 | + public void event(ControlMessageEvent event) { | ||
| 154 | + events.add(event); | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + /** | ||
| 159 | + * A mock of event dispatcher. | ||
| 160 | + */ | ||
| 161 | + private class TestEventDispatcher extends DefaultEventSinkRegistry | ||
| 162 | + implements EventDeliveryService { | ||
| 163 | + @Override | ||
| 164 | + @SuppressWarnings("unchecked") | ||
| 165 | + public synchronized void post(Event event) { | ||
| 166 | + EventSink sink = getSink(event.getClass()); | ||
| 167 | + checkState(sink != null, "No sink for event %s", event); | ||
| 168 | + sink.process(event); | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + @Override | ||
| 172 | + public void setDispatchTimeLimit(long millis) { | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + @Override | ||
| 176 | + public long getDispatchTimeLimit() { | ||
| 177 | + return 0; | ||
| 178 | + } | ||
| 179 | + } | ||
| 180 | +} |
apps/cpman/app/src/test/java/org/onosproject/cpman/impl/message/ControlMessageMetricMapperTest.java
0 → 100644
| 1 | +/* | ||
| 2 | + * Copyright 2016 Open Networking Laboratory | ||
| 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 | + */ | ||
| 16 | +package org.onosproject.cpman.impl.message; | ||
| 17 | + | ||
| 18 | +import org.junit.Test; | ||
| 19 | +import org.onosproject.cpman.ControlMessage; | ||
| 20 | +import org.onosproject.cpman.ControlMetricType; | ||
| 21 | + | ||
| 22 | +import static org.hamcrest.Matchers.is; | ||
| 23 | +import static org.junit.Assert.assertThat; | ||
| 24 | +import static org.onosproject.cpman.impl.ControlMessageMetricMapper.lookupControlMessageType; | ||
| 25 | +import static org.onosproject.cpman.impl.ControlMessageMetricMapper.lookupControlMetricType; | ||
| 26 | + | ||
| 27 | +/** | ||
| 28 | + * Unit test for control message metric mapper. | ||
| 29 | + */ | ||
| 30 | +public final class ControlMessageMetricMapperTest { | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * Tests whether control message metric mapper returns right control metric type. | ||
| 34 | + */ | ||
| 35 | + @Test | ||
| 36 | + public void testLookupControlMetricType() { | ||
| 37 | + assertThat(lookupControlMetricType(ControlMessage.Type.INBOUND_PACKET), | ||
| 38 | + is(ControlMetricType.INBOUND_PACKET)); | ||
| 39 | + | ||
| 40 | + assertThat(lookupControlMetricType(ControlMessage.Type.OUTBOUND_PACKET), | ||
| 41 | + is(ControlMetricType.OUTBOUND_PACKET)); | ||
| 42 | + | ||
| 43 | + assertThat(lookupControlMetricType(ControlMessage.Type.FLOW_MOD_PACKET), | ||
| 44 | + is(ControlMetricType.FLOW_MOD_PACKET)); | ||
| 45 | + | ||
| 46 | + assertThat(lookupControlMetricType(ControlMessage.Type.FLOW_REMOVED_PACKET), | ||
| 47 | + is(ControlMetricType.FLOW_REMOVED_PACKET)); | ||
| 48 | + | ||
| 49 | + assertThat(lookupControlMetricType(ControlMessage.Type.REQUEST_PACKET), | ||
| 50 | + is(ControlMetricType.REQUEST_PACKET)); | ||
| 51 | + | ||
| 52 | + assertThat(lookupControlMetricType(ControlMessage.Type.REPLY_PACKET), | ||
| 53 | + is(ControlMetricType.REPLY_PACKET)); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + /** | ||
| 57 | + * Tests whether control message metric mapper returns right control message type. | ||
| 58 | + */ | ||
| 59 | + @Test | ||
| 60 | + public void testLookupControlMessageType() { | ||
| 61 | + assertThat(lookupControlMessageType(ControlMetricType.INBOUND_PACKET), | ||
| 62 | + is(ControlMessage.Type.INBOUND_PACKET)); | ||
| 63 | + | ||
| 64 | + assertThat(lookupControlMessageType(ControlMetricType.OUTBOUND_PACKET), | ||
| 65 | + is(ControlMessage.Type.OUTBOUND_PACKET)); | ||
| 66 | + | ||
| 67 | + assertThat(lookupControlMessageType(ControlMetricType.FLOW_MOD_PACKET), | ||
| 68 | + is(ControlMessage.Type.FLOW_MOD_PACKET)); | ||
| 69 | + | ||
| 70 | + assertThat(lookupControlMessageType(ControlMetricType.FLOW_REMOVED_PACKET), | ||
| 71 | + is(ControlMessage.Type.FLOW_REMOVED_PACKET)); | ||
| 72 | + | ||
| 73 | + assertThat(lookupControlMessageType(ControlMetricType.REQUEST_PACKET), | ||
| 74 | + is(ControlMessage.Type.REQUEST_PACKET)); | ||
| 75 | + | ||
| 76 | + assertThat(lookupControlMessageType(ControlMetricType.REPLY_PACKET), | ||
| 77 | + is(ControlMessage.Type.REPLY_PACKET)); | ||
| 78 | + } | ||
| 79 | +} |
-
Please register or login to post a comment