2 * Copyright © 2017 Ericsson, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.sfc.classifier.providers;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.controller.md.sal.binding.test.ConstantSchemaAbstractDataBrokerTest;
19 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
20 import org.opendaylight.genius.mdsalutil.MDSALUtil;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkMaps;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMap;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.networkmaps.NetworkMapKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.sfc.acl.rev150105.NeutronNetworkBuilder;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 public class NetvirtProviderTest extends ConstantSchemaAbstractDataBrokerTest {
34 private static final String NW_UUID_STR = "177bef73-514e-4922-990f-d7aba0f3b0f4";
35 private static final String NW_UUID_NOEXIST_STR = "177bef73-5555-2222-0000-d7aba0f3b0f4";
36 private static final String SUBNET_UUID_STR = "33333333-514e-4922-990f-d7aba0f3b0f4";
37 private static final String PORT_UUID_STR = "44444444-5555-2222-0000-d7aba0f3b0f4";
38 private static final String EMPTY_STR = "";
40 private NetvirtProvider netvirtProvider;
43 public void setUp() throws Exception {
44 this.netvirtProvider = new NetvirtProvider(getDataBroker());
48 public void getLogicalInterfacesFromNeutronNetwork() {
50 // Network doesnt exist
51 NeutronNetworkBuilder nwBuilder = new NeutronNetworkBuilder();
52 nwBuilder.setNetworkUuid(NW_UUID_NOEXIST_STR);
53 List<String> interfaces = netvirtProvider.getLogicalInterfacesFromNeutronNetwork(nwBuilder.build());
54 assertTrue(interfaces.isEmpty());
56 // Network exists, subnet list empty
57 createNetworkMap(NW_UUID_STR);
58 nwBuilder = new NeutronNetworkBuilder();
59 nwBuilder.setNetworkUuid(NW_UUID_STR);
60 interfaces = netvirtProvider.getLogicalInterfacesFromNeutronNetwork(nwBuilder.build());
61 assertTrue(interfaces.isEmpty());
63 // Network exists, subnet does not exist
64 createNetworkMap(NW_UUID_STR, SUBNET_UUID_STR, false, EMPTY_STR);
65 nwBuilder = new NeutronNetworkBuilder();
66 nwBuilder.setNetworkUuid(NW_UUID_STR);
67 interfaces = netvirtProvider.getLogicalInterfacesFromNeutronNetwork(nwBuilder.build());
68 assertTrue(interfaces.isEmpty());
70 // Network exists, subnet exists, no ports
71 createNetworkMap(NW_UUID_STR, SUBNET_UUID_STR, true, EMPTY_STR);
72 nwBuilder = new NeutronNetworkBuilder();
73 nwBuilder.setNetworkUuid(NW_UUID_STR);
74 interfaces = netvirtProvider.getLogicalInterfacesFromNeutronNetwork(nwBuilder.build());
75 assertTrue(interfaces.isEmpty());
77 // Network exists, subnet exists, port exists
78 createNetworkMap(NW_UUID_STR, SUBNET_UUID_STR, true, PORT_UUID_STR);
79 nwBuilder = new NeutronNetworkBuilder();
80 nwBuilder.setNetworkUuid(NW_UUID_STR);
81 interfaces = netvirtProvider.getLogicalInterfacesFromNeutronNetwork(nwBuilder.build());
82 assertFalse(interfaces.isEmpty());
85 private NetworkMapBuilder createNetworkMap(String nwUuidStr) {
86 Uuid nwUuid = new Uuid(nwUuidStr);
87 NetworkMapBuilder nwMapBuilder = new NetworkMapBuilder();
88 nwMapBuilder.setNetworkId(nwUuid);
89 storeNetworkMap(nwUuid, nwMapBuilder.build());
94 private void createNetworkMap(String nwUuidStr, String subnetUuidStr, boolean storeSubnet, String portUuidStr) {
95 SubnetmapBuilder subnetBuilder = new SubnetmapBuilder();
96 if (!portUuidStr.isEmpty()) {
97 List<Uuid> portIdList = new ArrayList<>();
98 portIdList.add(new Uuid(portUuidStr));
99 subnetBuilder.setPortList(portIdList);
102 Uuid subnetUuid = new Uuid(subnetUuidStr);
103 subnetBuilder.setId(subnetUuid);
104 List<Uuid> subnetIdList = new ArrayList<>();
105 subnetIdList.add(subnetUuid);
107 NetworkMapBuilder nwMapBuilder = createNetworkMap(nwUuidStr);
108 nwMapBuilder.setSubnetIdList(subnetIdList);
109 storeNetworkMap(new Uuid(nwUuidStr), nwMapBuilder.build());
111 // Simulates NetworkMap has subnet list, but subnets dont exist
113 storeSubnetMap(subnetUuid, subnetBuilder.build());
117 @SuppressWarnings("deprecation")
118 private void storeNetworkMap(Uuid nwUuid, NetworkMap nwMap) {
119 InstanceIdentifier<NetworkMap> networkMapIdentifier =
120 InstanceIdentifier.builder(NetworkMaps.class)
121 .child(NetworkMap.class,new NetworkMapKey(nwUuid)).build();
123 MDSALUtil.syncWrite(getDataBroker(), LogicalDatastoreType.CONFIGURATION, networkMapIdentifier, nwMap);
126 @SuppressWarnings("deprecation")
127 private void storeSubnetMap(Uuid subnetUuid, Subnetmap subnetMap) {
128 InstanceIdentifier<Subnetmap> subnetId =
129 InstanceIdentifier.builder(Subnetmaps.class)
130 .child(Subnetmap.class, new SubnetmapKey(subnetUuid)).build();
132 MDSALUtil.syncWrite(getDataBroker(), LogicalDatastoreType.CONFIGURATION, subnetId, subnetMap);