From 5883189b599acad3c3cea665315774e9a447d2d6 Mon Sep 17 00:00:00 2001 From: Icaro Camelo Date: Mon, 14 Dec 2015 17:22:58 -0500 Subject: [PATCH] MappingServiceManager: pass VPN info to intents Change-Id: I53d9a72d6cb6b7cbe0d78ec0faf1d5fb1d87006b Signed-off-by: Icaro Camelo --- vpnintent/impl/pom.xml | 16 ++++ .../impl/MappingServiceManager.java | 85 +++++++++++++++++++ .../impl/MappingServiceManagerTests.java | 81 ++++++++++++++++++ 3 files changed, 182 insertions(+) create mode 100644 vpnintent/impl/src/main/java/org/opendaylight/vpnservice/impl/MappingServiceManager.java create mode 100644 vpnintent/impl/src/test/java/org/opendaylight/vpnservice/impl/MappingServiceManagerTests.java diff --git a/vpnintent/impl/pom.xml b/vpnintent/impl/pom.xml index 51cb833d..546b1e13 100644 --- a/vpnintent/impl/pom.xml +++ b/vpnintent/impl/pom.xml @@ -18,7 +18,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL vpnintent-impl ${vpnservices.version} bundle + + + 1.2.0-SNAPSHOT + + + + org.opendaylight.vpnservice + mdsalutil-api + ${project.version} + ${project.groupId} vpnintent-api @@ -36,6 +46,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL mockito-all test + + + org.opendaylight.nic + intent-mapping-interface + ${nic.version} + diff --git a/vpnintent/impl/src/main/java/org/opendaylight/vpnservice/impl/MappingServiceManager.java b/vpnintent/impl/src/main/java/org/opendaylight/vpnservice/impl/MappingServiceManager.java new file mode 100644 index 00000000..e025b917 --- /dev/null +++ b/vpnintent/impl/src/main/java/org/opendaylight/vpnservice/impl/MappingServiceManager.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2016 Inocybe Technologies and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.vpnservice.impl; + +import java.util.HashMap; +import java.util.Map; + +import org.opendaylight.nic.mapping.api.IntentMappingService; + +import com.google.common.base.Preconditions; + +public class MappingServiceManager { + + private IntentMappingService intentMappingService; + private String IP_PREFIX_PROPERTY = "ip_prefix"; + private String SWITCH_PORT_ID_PROPERTY = "switch_port"; + private String MPLS_LABEL_PROPERTY = "mpls_label"; + private String NEXT_HOP_PROPERTY = "next_hop"; + + public MappingServiceManager(IntentMappingService intentMappingService) { + Preconditions.checkNotNull(intentMappingService); + this.intentMappingService = intentMappingService; + } + + /** + * @param siteName + * Name of the member + * @param ipPrefix + * Ip prefix of the member + * @param switchPortId + * Switch ID and port ID (i.e. openflow:1:2) + * @param mplsLabel + * MPLS label, if needed + * @param nextHop + * Next hop in the route + */ + public void add(final String siteName, final String ipPrefix, final String switchPortId, final Long mplsLabel, + final String nextHop) { + Preconditions.checkNotNull(siteName); + Preconditions.checkNotNull(ipPrefix); + Preconditions.checkNotNull(switchPortId); + + Map objs = new HashMap<>(); + objs.put(IP_PREFIX_PROPERTY, ipPrefix); + objs.put(SWITCH_PORT_ID_PROPERTY, switchPortId); + + if (mplsLabel != null) + objs.put(MPLS_LABEL_PROPERTY, String.valueOf(mplsLabel)); + if (nextHop != null) + objs.put(NEXT_HOP_PROPERTY, nextHop); + + intentMappingService.add(siteName, objs); + } + + /** + * @param siteName + * Name of the member + * @return Map of parameters related to the member + */ + public Map get(String siteName) { + return intentMappingService.get(siteName); + } + + /** + * @param siteName + * Name of the member + * @return Return true if transaction succeed, otherwise false + */ + public boolean delete(String siteName) { + try { + // TODO: Implement delete() in mapping service + // By now, it's going to overwrite data for this key + intentMappingService.add(siteName, null); + return true; + } catch (Exception e) { + throw e; + } + } +} diff --git a/vpnintent/impl/src/test/java/org/opendaylight/vpnservice/impl/MappingServiceManagerTests.java b/vpnintent/impl/src/test/java/org/opendaylight/vpnservice/impl/MappingServiceManagerTests.java new file mode 100644 index 00000000..2fa5cb37 --- /dev/null +++ b/vpnintent/impl/src/test/java/org/opendaylight/vpnservice/impl/MappingServiceManagerTests.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2016 Inocybe Technologies and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.vpnservice.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import org.opendaylight.nic.mapping.api.IntentMappingService; + +public class MappingServiceManagerTests { + + @Test + public void addInfo() { + // Arrange + String siteName = "UoR"; + String ipPrefix = "16.101.233.2/8"; + String switchPortId = "openflow:1:3"; + long mplsLabel = 10L; + String nextHop = "16.101.233.1/8"; + + Map map = new HashMap<>(); + map.put("ip_prefix", ipPrefix); + map.put("switch_port", switchPortId); + map.put("mpls_label", String.valueOf(mplsLabel)); + map.put("next_hop", nextHop); + + IntentMappingService mapSvc = mock(IntentMappingService.class); + when(mapSvc.get(any(String.class))).thenReturn(map); + + MappingServiceManager manager = new MappingServiceManager(mapSvc); + + // Act + manager.add(siteName, ipPrefix, switchPortId, mplsLabel, nextHop); + + Map returnedObjs = manager.get(siteName); + + // Assert + assertEquals(ipPrefix, returnedObjs.get("ip_prefix")); + assertEquals(switchPortId, returnedObjs.get("switch_port")); + assertEquals(mplsLabel, Long.parseLong(returnedObjs.get("mpls_label"))); + assertEquals(nextHop, returnedObjs.get("next_hop")); + } + + @Test + public void removeInfo() { + // Arrange + String siteName = "UoR"; + String ipPrefix = "16.101.233.2/8"; + String switchPortId = "openflow:1:3"; + + Map map = new HashMap<>(); + map.put("ip_prefix", ipPrefix); + map.put("switch_port", switchPortId); + + IntentMappingService mapSvc = mock(IntentMappingService.class); + + MappingServiceManager manager = new MappingServiceManager(mapSvc); + + // Add first to delete next + manager.add(siteName, ipPrefix, switchPortId, null, null); + + // Act + boolean result = manager.delete(siteName); + + // Assert + assertTrue(result); + } +} -- 2.36.6