Committed by
Gerrit Code Review
[ONOS-4621] Unit Tests for Snmp provider and protocol
Change-Id: If70c701478762201b3739d9bd017c9f7eec75db1
Showing
11 changed files
with
826 additions
and
18 deletions
| 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 | + | ||
| 17 | +package org.onosproject.net.device; | ||
| 18 | + | ||
| 19 | +import org.onosproject.net.provider.ProviderId; | ||
| 20 | + | ||
| 21 | +import java.util.Set; | ||
| 22 | + | ||
| 23 | +/** | ||
| 24 | + * Testing adapter for the DeviceProviderRegistry API. | ||
| 25 | + */ | ||
| 26 | +public class DeviceProviderRegistryAdapter implements DeviceProviderRegistry { | ||
| 27 | + @Override | ||
| 28 | + public DeviceProviderService register(DeviceProvider provider) { | ||
| 29 | + return null; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + @Override | ||
| 33 | + public void unregister(DeviceProvider provider) { | ||
| 34 | + | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @Override | ||
| 38 | + public Set<ProviderId> getProviders() { | ||
| 39 | + return null; | ||
| 40 | + } | ||
| 41 | +} |
| 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 | + | ||
| 17 | +package org.onosproject.net.device; | ||
| 18 | + | ||
| 19 | +import org.onosproject.net.DeviceId; | ||
| 20 | +import org.onosproject.net.MastershipRole; | ||
| 21 | + | ||
| 22 | +import java.util.Collection; | ||
| 23 | +import java.util.List; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * Test Adapter for DeviceProviderService API. | ||
| 27 | + */ | ||
| 28 | +public class DeviceProviderServiceAdapter implements DeviceProviderService { | ||
| 29 | + @Override | ||
| 30 | + public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) { | ||
| 31 | + | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + @Override | ||
| 35 | + public void deviceDisconnected(DeviceId deviceId) { | ||
| 36 | + | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @Override | ||
| 40 | + public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) { | ||
| 41 | + | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + @Override | ||
| 45 | + public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) { | ||
| 46 | + | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) { | ||
| 51 | + | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + @Override | ||
| 55 | + public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) { | ||
| 56 | + | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + @Override | ||
| 60 | + public DeviceProvider provider() { | ||
| 61 | + return null; | ||
| 62 | + } | ||
| 63 | +} |
| 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 | + | ||
| 17 | +package org.onosproject.net.device; | ||
| 18 | + | ||
| 19 | +import org.onosproject.net.Device; | ||
| 20 | +import org.onosproject.net.DeviceId; | ||
| 21 | +import org.onosproject.net.Port; | ||
| 22 | +import org.onosproject.net.PortNumber; | ||
| 23 | +import org.onosproject.net.provider.ProviderId; | ||
| 24 | + | ||
| 25 | +import java.util.Collection; | ||
| 26 | +import java.util.List; | ||
| 27 | + | ||
| 28 | +/** | ||
| 29 | + * Test adapter for the DeviceStore API. | ||
| 30 | + */ | ||
| 31 | +public class DeviceStoreAdapter implements DeviceStore { | ||
| 32 | + @Override | ||
| 33 | + public int getDeviceCount() { | ||
| 34 | + return 0; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + @Override | ||
| 38 | + public Iterable<Device> getDevices() { | ||
| 39 | + return null; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public Iterable<Device> getAvailableDevices() { | ||
| 44 | + return null; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public Device getDevice(DeviceId deviceId) { | ||
| 49 | + return null; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + @Override | ||
| 53 | + public DeviceEvent createOrUpdateDevice(ProviderId providerId, DeviceId deviceId, | ||
| 54 | + DeviceDescription deviceDescription) { | ||
| 55 | + return null; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @Override | ||
| 59 | + public DeviceEvent markOffline(DeviceId deviceId) { | ||
| 60 | + return null; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @Override | ||
| 64 | + public List<DeviceEvent> updatePorts(ProviderId providerId, DeviceId deviceId, | ||
| 65 | + List<PortDescription> portDescriptions) { | ||
| 66 | + return null; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Override | ||
| 70 | + public DeviceEvent updatePortStatus(ProviderId providerId, DeviceId deviceId, | ||
| 71 | + PortDescription portDescription) { | ||
| 72 | + return null; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + @Override | ||
| 76 | + public List<Port> getPorts(DeviceId deviceId) { | ||
| 77 | + return null; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + @Override | ||
| 81 | + public DeviceEvent updatePortStatistics(ProviderId providerId, DeviceId deviceId, | ||
| 82 | + Collection<PortStatistics> portStats) { | ||
| 83 | + return null; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + @Override | ||
| 87 | + public List<PortStatistics> getPortStatistics(DeviceId deviceId) { | ||
| 88 | + return null; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + @Override | ||
| 92 | + public List<PortStatistics> getPortDeltaStatistics(DeviceId deviceId) { | ||
| 93 | + return null; | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + @Override | ||
| 97 | + public Port getPort(DeviceId deviceId, PortNumber portNumber) { | ||
| 98 | + return null; | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + @Override | ||
| 102 | + public boolean isAvailable(DeviceId deviceId) { | ||
| 103 | + return false; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + @Override | ||
| 107 | + public DeviceEvent removeDevice(DeviceId deviceId) { | ||
| 108 | + return null; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + @Override | ||
| 112 | + public void setDelegate(DeviceStoreDelegate delegate) { | ||
| 113 | + | ||
| 114 | + } | ||
| 115 | + | ||
| 116 | + @Override | ||
| 117 | + public void unsetDelegate(DeviceStoreDelegate delegate) { | ||
| 118 | + | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + @Override | ||
| 122 | + public boolean hasDelegate() { | ||
| 123 | + return false; | ||
| 124 | + } | ||
| 125 | +} |
| ... | @@ -52,10 +52,10 @@ public class DefaultSnmpController implements SnmpController { | ... | @@ -52,10 +52,10 @@ public class DefaultSnmpController implements SnmpController { |
| 52 | private final Logger log = LoggerFactory | 52 | private final Logger log = LoggerFactory |
| 53 | .getLogger(getClass()); | 53 | .getLogger(getClass()); |
| 54 | 54 | ||
| 55 | - private ISnmpSessionFactory sessionFactory; | 55 | + protected ISnmpSessionFactory sessionFactory; |
| 56 | 56 | ||
| 57 | - private final Map<DeviceId, ISnmpSession> sessionMap = new HashMap<>(); | 57 | + protected final Map<DeviceId, ISnmpSession> sessionMap = new HashMap<>(); |
| 58 | - protected Map<DeviceId, SnmpDevice> snmpDeviceMap = new ConcurrentHashMap<>(); | 58 | + protected final Map<DeviceId, SnmpDevice> snmpDeviceMap = new ConcurrentHashMap<>(); |
| 59 | 59 | ||
| 60 | @Activate | 60 | @Activate |
| 61 | public void activate(ComponentContext context) { | 61 | public void activate(ComponentContext context) { |
| ... | @@ -66,6 +66,7 @@ public class DefaultSnmpController implements SnmpController { | ... | @@ -66,6 +66,7 @@ public class DefaultSnmpController implements SnmpController { |
| 66 | 66 | ||
| 67 | @Deactivate | 67 | @Deactivate |
| 68 | public void deactivate() { | 68 | public void deactivate() { |
| 69 | + sessionMap.clear(); | ||
| 69 | snmpDeviceMap.clear(); | 70 | snmpDeviceMap.clear(); |
| 70 | log.info("Stopped"); | 71 | log.info("Stopped"); |
| 71 | } | 72 | } | ... | ... |
| 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 | + | ||
| 17 | +package org.onosproject.snmp.ctl; | ||
| 18 | + | ||
| 19 | +import com.btisystems.pronx.ems.core.snmp.ISnmpConfiguration; | ||
| 20 | +import com.btisystems.pronx.ems.core.snmp.ISnmpConfigurationFactory; | ||
| 21 | +import com.btisystems.pronx.ems.core.snmp.ISnmpSession; | ||
| 22 | +import com.btisystems.pronx.ems.core.snmp.ISnmpSessionFactory; | ||
| 23 | +import org.junit.Before; | ||
| 24 | +import org.junit.Test; | ||
| 25 | +import org.onosproject.incubator.net.faultmanagement.alarm.Alarm; | ||
| 26 | +import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm; | ||
| 27 | + | ||
| 28 | +import java.io.IOException; | ||
| 29 | + | ||
| 30 | +import static org.junit.Assert.*; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * DefaultSnmpController test class. | ||
| 34 | + */ | ||
| 35 | +public class DefaultSnmpControllerTest { | ||
| 36 | + | ||
| 37 | + ISnmpSessionFactory mockSnmpSessionFactory = new MockISnmpSessionFactory(); | ||
| 38 | + | ||
| 39 | + DefaultSnmpController snmpController = new DefaultSnmpController(); | ||
| 40 | + | ||
| 41 | + DefaultSnmpDevice device = new DefaultSnmpDevice("1.1.1.1", 1, "test", "test"); | ||
| 42 | + | ||
| 43 | + ISnmpSession snmpSession = new ISnmpSessionAdapter(); | ||
| 44 | + | ||
| 45 | + DefaultAlarm alarm = new DefaultAlarm.Builder( | ||
| 46 | + device.deviceId(), "SNMP alarm retrieval failed", | ||
| 47 | + Alarm.SeverityLevel.CRITICAL, | ||
| 48 | + System.currentTimeMillis()).build(); | ||
| 49 | + | ||
| 50 | + @Before | ||
| 51 | + public void setUp() { | ||
| 52 | + snmpController.sessionFactory = mockSnmpSessionFactory; | ||
| 53 | + } | ||
| 54 | + | ||
| 55 | + @Test | ||
| 56 | + public void testActivate() { | ||
| 57 | + snmpController.activate(null); | ||
| 58 | + assertNotNull("Incorrect sessionFactory", snmpController.sessionFactory); | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + @Test | ||
| 62 | + public void testDeactivate() { | ||
| 63 | + snmpController.deactivate(); | ||
| 64 | + assertEquals("Device map should be clear", 0, snmpController.getDevices().size()); | ||
| 65 | + assertEquals("Session map should be clear", 0, snmpController.sessionMap.size()); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Test | ||
| 69 | + public void addDevice() { | ||
| 70 | + snmpController.addDevice(device.deviceId(), device); | ||
| 71 | + assertEquals("Controller should contain device", device, snmpController.getDevice(device.deviceId())); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + /** | ||
| 75 | + * tests session creation and get from map if already exists. | ||
| 76 | + */ | ||
| 77 | + @Test | ||
| 78 | + public void getNotExistingSession() throws Exception { | ||
| 79 | + addDevice(); | ||
| 80 | + assertEquals("Session should be created", snmpSession, snmpController.getSession(device.deviceId())); | ||
| 81 | + assertEquals("Map should contain session", 1, snmpController.snmpDeviceMap.size()); | ||
| 82 | + assertEquals("Session should be fetched from map", snmpSession, snmpController.getSession(device.deviceId())); | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + @Test | ||
| 86 | + public void removeDevice() { | ||
| 87 | + addDevice(); | ||
| 88 | + snmpController.removeDevice(device.deviceId()); | ||
| 89 | + assertNull("Device shoudl not be present", snmpController.getDevice(device.deviceId())); | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + @Test | ||
| 93 | + public void walkFailedAlarm() { | ||
| 94 | + assertEquals("Alarms should be equals", alarm, snmpController.buildWalkFailedAlarm(device.deviceId())); | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + public class MockISnmpSessionFactory implements ISnmpSessionFactory { | ||
| 98 | + | ||
| 99 | + @Override | ||
| 100 | + public ISnmpSession createSession(ISnmpConfiguration configuration, String ipAddress) throws IOException { | ||
| 101 | + new ISnmpSessionAdapter(); | ||
| 102 | + return snmpSession; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + @Override | ||
| 106 | + public ISnmpSession createSession(String ipAddress, String community) | ||
| 107 | + throws IOException { | ||
| 108 | + return snmpSession; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + @Override | ||
| 112 | + public ISnmpSession createSession(String ipAddress, String community, | ||
| 113 | + String factoryName, | ||
| 114 | + ISnmpConfigurationFactory.AccessType accessType) | ||
| 115 | + throws IOException { | ||
| 116 | + return snmpSession; | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 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 | + | ||
| 17 | +package org.onosproject.snmp.ctl; | ||
| 18 | + | ||
| 19 | +import org.junit.Test; | ||
| 20 | +import org.onosproject.net.DeviceId; | ||
| 21 | + | ||
| 22 | +import static org.junit.Assert.*; | ||
| 23 | + | ||
| 24 | +/** | ||
| 25 | + * Test class for DefaultSnmpDevice. | ||
| 26 | + */ | ||
| 27 | +public class DefaultSnmpDeviceTest { | ||
| 28 | + | ||
| 29 | + private final String snmpHost = "1.1.1.1"; | ||
| 30 | + private int snmpPort = 1; | ||
| 31 | + private final String username = "test"; | ||
| 32 | + private final String community = "test"; | ||
| 33 | + private final DeviceId deviceId = DeviceId.deviceId("snmp:1.1.1.1:1"); | ||
| 34 | + private final String deviceInfo = "host: 1.1.1.1. port: 1"; | ||
| 35 | + | ||
| 36 | + DefaultSnmpDevice device = new DefaultSnmpDevice("1.1.1.1", 1, "test", "test"); | ||
| 37 | + | ||
| 38 | + @Test | ||
| 39 | + public void basics() throws Exception { | ||
| 40 | + assertTrue("Device should be reachable", device.isReachable()); | ||
| 41 | + assertEquals("Incorrect host", snmpHost, device.getSnmpHost()); | ||
| 42 | + assertEquals("Incorrect port", snmpPort, device.getSnmpPort()); | ||
| 43 | + assertEquals("Incorrect username", username, device.getUsername()); | ||
| 44 | + assertEquals("Incorrect community", community, device.getCommunity()); | ||
| 45 | + assertEquals("Incorrect deviceID", deviceId, device.deviceId()); | ||
| 46 | + assertEquals("Incorrect deviceInfo", deviceInfo, device.deviceInfo()); | ||
| 47 | + device.disconnect(); | ||
| 48 | + assertFalse("Device should not be reachable", device.isReachable()); | ||
| 49 | + | ||
| 50 | + } | ||
| 51 | +} |
| 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 | + | ||
| 17 | +package org.onosproject.snmp.ctl; | ||
| 18 | + | ||
| 19 | +import com.btisystems.pronx.ems.core.model.DeviceEntityDescription; | ||
| 20 | +import com.btisystems.pronx.ems.core.snmp.ISnmpSession; | ||
| 21 | +import com.btisystems.pronx.ems.core.snmp.IVariableBindingHandler; | ||
| 22 | +import com.btisystems.pronx.ems.core.snmp.SnmpIoException; | ||
| 23 | +import com.btisystems.pronx.ems.core.snmp.WalkResponse; | ||
| 24 | +import org.snmp4j.smi.OID; | ||
| 25 | +import org.snmp4j.smi.VariableBinding; | ||
| 26 | + | ||
| 27 | +import java.io.IOException; | ||
| 28 | +import java.net.InetAddress; | ||
| 29 | +import java.util.List; | ||
| 30 | +import java.util.Map; | ||
| 31 | + | ||
| 32 | +/** | ||
| 33 | + * AdapterClass for ISnmpSession. | ||
| 34 | + */ | ||
| 35 | +public class ISnmpSessionAdapter implements ISnmpSession { | ||
| 36 | + @Override | ||
| 37 | + public String identifyDevice() { | ||
| 38 | + return null; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Override | ||
| 42 | + public String getVariable(String oid) { | ||
| 43 | + return null; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + @Override | ||
| 47 | + public Integer getVariableAsInt(String oid) { | ||
| 48 | + return null; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @Override | ||
| 52 | + public WalkResponse walkDevice(IVariableBindingHandler networkDevice, List<OID> oids) | ||
| 53 | + throws IOException { | ||
| 54 | + return null; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public WalkResponse getTableRows(IVariableBindingHandler networkDevice, | ||
| 59 | + Map<DeviceEntityDescription, List<OID>> tableIndexes) | ||
| 60 | + throws IOException { | ||
| 61 | + return null; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + @Override | ||
| 65 | + public InetAddress getAddress() { | ||
| 66 | + return null; | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Override | ||
| 70 | + public void close() throws IOException { | ||
| 71 | + | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + @Override | ||
| 75 | + public void setVariables(VariableBinding[] bindings) { | ||
| 76 | + | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + @Override | ||
| 80 | + public void checkErrorCodeAndDescription() throws SnmpIoException { | ||
| 81 | + | ||
| 82 | + } | ||
| 83 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -57,7 +57,6 @@ | ... | @@ -57,7 +57,6 @@ |
| 57 | </exclusion> | 57 | </exclusion> |
| 58 | </exclusions> | 58 | </exclusions> |
| 59 | </dependency> | 59 | </dependency> |
| 60 | - | ||
| 61 | <dependency> | 60 | <dependency> |
| 62 | <groupId>com.btisystems</groupId> | 61 | <groupId>com.btisystems</groupId> |
| 63 | <artifactId>snmp-core</artifactId> | 62 | <artifactId>snmp-core</artifactId> |
| ... | @@ -80,15 +79,21 @@ | ... | @@ -80,15 +79,21 @@ |
| 80 | <artifactId>onos-core-net</artifactId> | 79 | <artifactId>onos-core-net</artifactId> |
| 81 | <version>1.6.0-SNAPSHOT</version> | 80 | <version>1.6.0-SNAPSHOT</version> |
| 82 | </dependency> | 81 | </dependency> |
| 82 | + <dependency> | ||
| 83 | + <groupId>org.onosproject</groupId> | ||
| 84 | + <artifactId>onos-api</artifactId> | ||
| 85 | + <version>1.6.0-SNAPSHOT</version> | ||
| 86 | + <classifier>tests</classifier> | ||
| 87 | + <scope>test</scope> | ||
| 88 | + </dependency> | ||
| 83 | </dependencies> | 89 | </dependencies> |
| 84 | - <build> | 90 | + <build> |
| 85 | - <plugins> | 91 | + <plugins> |
| 86 | - <plugin> | 92 | + <plugin> |
| 87 | - <groupId>org.apache.felix</groupId> | 93 | + <groupId>org.apache.felix</groupId> |
| 88 | - <artifactId>maven-scr-plugin</artifactId> | 94 | + <artifactId>maven-scr-plugin</artifactId> |
| 89 | - </plugin> | 95 | + </plugin> |
| 90 | - </plugins> | 96 | + </plugins> |
| 91 | - </build> | 97 | + </build> |
| 92 | - | ||
| 93 | </project> | 98 | </project> |
| 94 | 99 | ... | ... |
| ... | @@ -74,8 +74,6 @@ public class SnmpDeviceProvider extends AbstractProvider | ... | @@ -74,8 +74,6 @@ public class SnmpDeviceProvider extends AbstractProvider |
| 74 | private static final String APP_NAME = "org.onosproject.snmp"; | 74 | private static final String APP_NAME = "org.onosproject.snmp"; |
| 75 | private static final String SCHEME = "snmp"; | 75 | private static final String SCHEME = "snmp"; |
| 76 | 76 | ||
| 77 | - private DeviceProviderService providerService; | ||
| 78 | - | ||
| 79 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 77 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 80 | protected SnmpController controller; | 78 | protected SnmpController controller; |
| 81 | 79 | ||
| ... | @@ -94,14 +92,17 @@ public class SnmpDeviceProvider extends AbstractProvider | ... | @@ -94,14 +92,17 @@ public class SnmpDeviceProvider extends AbstractProvider |
| 94 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 92 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 95 | protected NetworkConfigRegistry netCfgService; | 93 | protected NetworkConfigRegistry netCfgService; |
| 96 | 94 | ||
| 95 | + protected DeviceProviderService providerService; | ||
| 96 | + | ||
| 97 | + protected ApplicationId appId; | ||
| 98 | + | ||
| 97 | private final ExecutorService deviceBuilderExecutor = Executors | 99 | private final ExecutorService deviceBuilderExecutor = Executors |
| 98 | .newFixedThreadPool(5, groupedThreads("onos/snmp", "device-creator", log)); | 100 | .newFixedThreadPool(5, groupedThreads("onos/snmp", "device-creator", log)); |
| 99 | 101 | ||
| 100 | - private final NetworkConfigListener cfgLister = new InternalNetworkConfigListener(); | 102 | + protected final NetworkConfigListener cfgLister = new InternalNetworkConfigListener(); |
| 101 | 103 | ||
| 102 | - private ApplicationId appId; | ||
| 103 | 104 | ||
| 104 | - private final ConfigFactory factory = | 105 | + protected final ConfigFactory factory = |
| 105 | new ConfigFactory<ApplicationId, SnmpProviderConfig>(APP_SUBJECT_FACTORY, | 106 | new ConfigFactory<ApplicationId, SnmpProviderConfig>(APP_SUBJECT_FACTORY, |
| 106 | SnmpProviderConfig.class, | 107 | SnmpProviderConfig.class, |
| 107 | "devices", | 108 | "devices", | ... | ... |
| 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 | + | ||
| 17 | +package org.onosproject.provider.snmp.device.impl; | ||
| 18 | + | ||
| 19 | +import com.btisystems.pronx.ems.core.snmp.ISnmpSession; | ||
| 20 | +import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm; | ||
| 21 | +import org.onosproject.net.DeviceId; | ||
| 22 | +import org.onosproject.snmp.*; | ||
| 23 | +import org.onosproject.snmp.SnmpDevice; | ||
| 24 | + | ||
| 25 | +import java.io.IOException; | ||
| 26 | +import java.util.ArrayList; | ||
| 27 | +import java.util.Collection; | ||
| 28 | +import java.util.HashMap; | ||
| 29 | +import java.util.List; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Test Adapter for SnmpController API. | ||
| 33 | + */ | ||
| 34 | +public class SnmpControllerAdapter implements SnmpController { | ||
| 35 | + | ||
| 36 | + protected HashMap<DeviceId, SnmpDevice> devices = new HashMap<>(); | ||
| 37 | + @Override | ||
| 38 | + public Collection<SnmpDevice> getDevices() { | ||
| 39 | + return devices.values(); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public SnmpDevice getDevice(DeviceId deviceId) { | ||
| 44 | + return devices.get(deviceId); | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public void removeDevice(DeviceId deviceId) { | ||
| 49 | + devices.remove(deviceId); | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + @Override | ||
| 53 | + public void addDevice(DeviceId deviceId, SnmpDevice snmpDevice) { | ||
| 54 | + devices.put(deviceId,snmpDevice); | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public ISnmpSession getSession(DeviceId deviceId) throws IOException { | ||
| 59 | + return null; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + @Override | ||
| 63 | + public DefaultAlarm buildWalkFailedAlarm(DeviceId deviceId) { | ||
| 64 | + return null; | ||
| 65 | + } | ||
| 66 | +} |
| 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 | + | ||
| 17 | +package org.onosproject.provider.snmp.device.impl; | ||
| 18 | + | ||
| 19 | +import com.google.common.collect.ImmutableSet; | ||
| 20 | +import org.junit.Before; | ||
| 21 | +import org.junit.Test; | ||
| 22 | +import org.onlab.packet.IpAddress; | ||
| 23 | +import org.onosproject.TestApplicationId; | ||
| 24 | +import org.onosproject.core.ApplicationId; | ||
| 25 | +import org.onosproject.core.CoreService; | ||
| 26 | +import org.onosproject.core.CoreServiceAdapter; | ||
| 27 | +import org.onosproject.incubator.net.config.basics.ConfigException; | ||
| 28 | +import org.onosproject.net.AbstractProjectableModel; | ||
| 29 | +import org.onosproject.net.DefaultAnnotations; | ||
| 30 | +import org.onosproject.net.DefaultDevice; | ||
| 31 | +import org.onosproject.net.Device; | ||
| 32 | +import org.onosproject.net.DeviceId; | ||
| 33 | +import org.onosproject.net.config.Config; | ||
| 34 | +import org.onosproject.net.config.ConfigFactory; | ||
| 35 | +import org.onosproject.net.config.NetworkConfigEvent; | ||
| 36 | +import org.onosproject.net.config.NetworkConfigListener; | ||
| 37 | +import org.onosproject.net.config.NetworkConfigRegistry; | ||
| 38 | +import org.onosproject.net.config.NetworkConfigRegistryAdapter; | ||
| 39 | +import org.onosproject.net.config.basics.BasicDeviceConfig; | ||
| 40 | +import org.onosproject.net.device.DeviceDescription; | ||
| 41 | +import org.onosproject.net.device.DeviceEvent; | ||
| 42 | +import org.onosproject.net.device.DeviceProvider; | ||
| 43 | +import org.onosproject.net.device.DeviceProviderRegistry; | ||
| 44 | +import org.onosproject.net.device.DeviceProviderRegistryAdapter; | ||
| 45 | +import org.onosproject.net.device.DeviceProviderService; | ||
| 46 | +import org.onosproject.net.device.DeviceProviderServiceAdapter; | ||
| 47 | +import org.onosproject.net.device.DeviceService; | ||
| 48 | +import org.onosproject.net.device.DeviceServiceAdapter; | ||
| 49 | +import org.onosproject.net.device.DeviceStore; | ||
| 50 | +import org.onosproject.net.device.DeviceStoreAdapter; | ||
| 51 | +import org.onosproject.net.driver.DriverService; | ||
| 52 | +import org.onosproject.net.driver.DriverServiceAdapter; | ||
| 53 | +import org.onosproject.net.provider.ProviderId; | ||
| 54 | +import org.onosproject.snmp.SnmpController; | ||
| 55 | + | ||
| 56 | +import java.util.HashMap; | ||
| 57 | +import java.util.HashSet; | ||
| 58 | +import java.util.Set; | ||
| 59 | + | ||
| 60 | +import static org.junit.Assert.*; | ||
| 61 | +import static org.onlab.junit.TestTools.assertAfter; | ||
| 62 | + | ||
| 63 | +/** | ||
| 64 | + * Testing class for SnmpDeviceProvider. | ||
| 65 | + */ | ||
| 66 | +public class SnmpDeviceProviderTest { | ||
| 67 | + | ||
| 68 | + private final SnmpDeviceProvider provider = new SnmpDeviceProvider(); | ||
| 69 | + private final SnmpController controller = new SnmpControllerAdapter(); | ||
| 70 | + private final DeviceProviderRegistry providerRegistry = new MockDeviceProviderRegistry(); | ||
| 71 | + private final DeviceService deviceService = new MockDeviceService(); | ||
| 72 | + private final NetworkConfigRegistry netCfgService = new MockNetworkConfigRegistry(); | ||
| 73 | + private final DeviceStore deviceStore = new MockDeviceStore(); | ||
| 74 | + protected CoreService coreService = new MockCoreService(); | ||
| 75 | + private final DeviceProviderService deviceProviderService = new MockDeviceProviderService(); | ||
| 76 | + private final TestApplicationId applicationId = new TestApplicationId("TestAppId"); | ||
| 77 | + private final NetworkConfigEvent deviceAddedEvent = | ||
| 78 | + new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED, | ||
| 79 | + null, SnmpProviderConfig.class); | ||
| 80 | + private final SnmpProviderConfig snmpProviderConfig = new MockSnmpProviderConfig(); | ||
| 81 | + private final NetworkConfigEvent deviceAddedIrrelevantEvent = | ||
| 82 | + new NetworkConfigEvent(NetworkConfigEvent.Type.CONFIG_ADDED, | ||
| 83 | + null, BasicDeviceConfig.class); | ||
| 84 | + private final DeviceId deviceId = DeviceId.deviceId("snmp:1.1.1.1:1"); | ||
| 85 | + private final DeviceId wrongDeviceId = DeviceId.deviceId("snmp:2.2.2.2:2"); | ||
| 86 | + | ||
| 87 | + | ||
| 88 | + @Before | ||
| 89 | + public void setUp() throws Exception { | ||
| 90 | + provider.controller = controller; | ||
| 91 | + provider.providerRegistry = providerRegistry; | ||
| 92 | + provider.deviceService = deviceService; | ||
| 93 | + provider.netCfgService = netCfgService; | ||
| 94 | + provider.deviceStore = deviceStore; | ||
| 95 | + provider.coreService = coreService; | ||
| 96 | + provider.activate(null); | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + @Test | ||
| 100 | + public void testActivate() { | ||
| 101 | + assertEquals("Incorrect provider service", deviceProviderService, provider.providerService); | ||
| 102 | + assertEquals("Incorrect application id", applicationId, provider.appId); | ||
| 103 | + assertEquals("Incorrect config factory", cfgFactory, provider.factory); | ||
| 104 | + assertTrue("Incorrect network config listener", netCfgListeners.contains(provider.cfgLister)); | ||
| 105 | + | ||
| 106 | + | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + @Test | ||
| 110 | + public void testDeactivate() { | ||
| 111 | + this.addDevice(); | ||
| 112 | + provider.deactivate(null); | ||
| 113 | + assertAfter(500, () -> | ||
| 114 | + assertNull("Device should be removed", controller.getDevice(deviceId))); | ||
| 115 | + assertNull("Network config factory not removed", cfgFactory); | ||
| 116 | + assertFalse("Network config listener not removed", netCfgListeners.contains(provider.cfgLister)); | ||
| 117 | + assertFalse("Provider not unregistered", providerRegistry.getProviders().contains(provider.id())); | ||
| 118 | + assertNull("Provider registry not removed", provider.providerService); | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + @Test | ||
| 122 | + public void eventNotRelevant() { | ||
| 123 | + assertFalse("Event should not be relevant", provider.cfgLister.isRelevant(deviceAddedIrrelevantEvent)); | ||
| 124 | + assertFalse("Device should not be reachable", provider.isReachable(wrongDeviceId)); | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + @Test | ||
| 128 | + public void addDevice() { | ||
| 129 | + assertTrue("Event should be relevant", provider.cfgLister.isRelevant(deviceAddedEvent)); | ||
| 130 | + provider.cfgLister.event(deviceAddedEvent); | ||
| 131 | + AbstractProjectableModel.setDriverService(null, new MockDriverService()); | ||
| 132 | + //FIXME this needs sleep | ||
| 133 | + assertAfter(500, () -> | ||
| 134 | + assertNotNull("Device should be added to controller", controller.getDevice(deviceId))); | ||
| 135 | + assertTrue("Device should be reachable", provider.isReachable(deviceId)); | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + private class MockDeviceProviderRegistry extends DeviceProviderRegistryAdapter { | ||
| 139 | + | ||
| 140 | + Set<ProviderId> providers = new HashSet<>(); | ||
| 141 | + | ||
| 142 | + @Override | ||
| 143 | + public DeviceProviderService register(DeviceProvider provider) { | ||
| 144 | + providers.add(provider.id()); | ||
| 145 | + return deviceProviderService; | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + @Override | ||
| 149 | + public void unregister(DeviceProvider provider) { | ||
| 150 | + providers.remove(provider.id()); | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + @Override | ||
| 154 | + public Set<ProviderId> getProviders() { | ||
| 155 | + return providers; | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + private class MockDeviceService extends DeviceServiceAdapter { | ||
| 161 | + @Override | ||
| 162 | + public Device getDevice(DeviceId deviceId) { | ||
| 163 | + return deviceStore.getDevice(deviceId); | ||
| 164 | + } | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + private ConfigFactory cfgFactory; | ||
| 168 | + private Set<NetworkConfigListener> netCfgListeners = new HashSet<>(); | ||
| 169 | + | ||
| 170 | + private class MockNetworkConfigRegistry extends NetworkConfigRegistryAdapter { | ||
| 171 | + | ||
| 172 | + @Override | ||
| 173 | + public void registerConfigFactory(ConfigFactory configFactory) { | ||
| 174 | + cfgFactory = configFactory; | ||
| 175 | + } | ||
| 176 | + | ||
| 177 | + @Override | ||
| 178 | + public void unregisterConfigFactory(ConfigFactory configFactory) { | ||
| 179 | + cfgFactory = null; | ||
| 180 | + } | ||
| 181 | + | ||
| 182 | + @Override | ||
| 183 | + public void addListener(NetworkConfigListener listener) { | ||
| 184 | + netCfgListeners.add(listener); | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + @Override | ||
| 188 | + public void removeListener(NetworkConfigListener listener) { | ||
| 189 | + netCfgListeners.remove(listener); | ||
| 190 | + } | ||
| 191 | + | ||
| 192 | + | ||
| 193 | + @Override | ||
| 194 | + public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) { | ||
| 195 | + if (configClass.equals(SnmpProviderConfig.class)) { | ||
| 196 | + return (C) snmpProviderConfig; | ||
| 197 | + } else { | ||
| 198 | + return (C) new BasicDeviceConfig(); | ||
| 199 | + } | ||
| 200 | + } | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + private class MockDeviceStore extends DeviceStoreAdapter { | ||
| 204 | + protected HashMap<DeviceId, Device> devices = new HashMap<>(); | ||
| 205 | + | ||
| 206 | + @Override | ||
| 207 | + public DeviceEvent createOrUpdateDevice(ProviderId providerId, DeviceId deviceId, | ||
| 208 | + DeviceDescription desc) { | ||
| 209 | + | ||
| 210 | + devices.put(deviceId, new DefaultDevice(providerId, deviceId, desc.type(), | ||
| 211 | + desc.manufacturer(), desc.hwVersion(), | ||
| 212 | + desc.swVersion(), desc.serialNumber(), | ||
| 213 | + desc.chassisId(), DefaultAnnotations.builder().build())); | ||
| 214 | + return null; | ||
| 215 | + } | ||
| 216 | + | ||
| 217 | + @Override | ||
| 218 | + public Device getDevice(DeviceId deviceId) { | ||
| 219 | + return devices.get(deviceId); | ||
| 220 | + } | ||
| 221 | + | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + private class MockCoreService extends CoreServiceAdapter { | ||
| 225 | + @Override | ||
| 226 | + public ApplicationId registerApplication(String name) { | ||
| 227 | + return applicationId; | ||
| 228 | + } | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + private class MockDeviceProviderService extends DeviceProviderServiceAdapter { | ||
| 232 | + DeviceStore store = deviceStore; | ||
| 233 | + | ||
| 234 | + @Override | ||
| 235 | + public void deviceConnected(DeviceId deviceId, DeviceDescription desc) { | ||
| 236 | + store.createOrUpdateDevice(ProviderId.NONE, deviceId, desc); | ||
| 237 | + } | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + private class MockSnmpProviderConfig extends SnmpProviderConfig { | ||
| 241 | + protected SnmpDeviceInfo deviceInfo = new SnmpDeviceInfo(IpAddress.valueOf("1.1.1.1"), 1, "test", "test"); | ||
| 242 | + | ||
| 243 | + @Override | ||
| 244 | + public Set<SnmpProviderConfig.SnmpDeviceInfo> getDevicesInfo() throws ConfigException { | ||
| 245 | + return ImmutableSet.of(deviceInfo); | ||
| 246 | + } | ||
| 247 | + | ||
| 248 | + } | ||
| 249 | + | ||
| 250 | + private class MockDriverService extends DriverServiceAdapter { | ||
| 251 | + | ||
| 252 | + } | ||
| 253 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment