/* * Copyright (c) 2016 Cisco Systems, Inc. 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.groupbasedpolicy.ne.location.provider; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Collection; import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest; import org.opendaylight.groupbasedpolicy.util.IidFactory; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainment; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainmentBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.AddressEndpoints; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.NetworkElements; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.NetworkElementsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.NetworkElement; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.NetworkElementBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.NetworkElementKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element.InterfaceBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element.InterfaceKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element._interface.EndpointNetwork; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element._interface.EndpointNetworkBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.network.elements.rev160407.network.elements.network.element._interface.EndpointNetworkKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProviders; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.LocationProvidersBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.ProviderName; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.location.providers.LocationProviderBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint_location_provider.rev160419.location.providers.location.provider.ProviderAddressEndpointLocationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.CheckedFuture; public class NeLocationProviderTest extends CustomDataBrokerTest { private DataBroker dataBroker; private NeLocationProvider neProvider; private String L3_CONTEXT_ID = "l3Context"; private String IPv4_HOST_ADDRESS_1 = "192.168.50.71/24"; private String IPv4_HOST_ADDRESS_2 = "192.168.50.72/24"; private String IPv4_NETWORK_ADDRESS_1 = "192.168.50.0/24"; private String IPv4_NETWORK_ADDRESS_2 = "192.168.51.0/24"; private String NODE_ID_1 = "node1"; private String NODE_ID_2 = "node2"; private String CONNECTOR_ID_1 = "connector:1"; private String CONNECTOR_ID_2 = "connector:2"; @Override public Collection<Class<?>> getClassesFromModules() { return ImmutableList.<Class<?>>of(NetworkElements.class, LocationProviders.class, Endpoints.class, L3Context.class, Nodes.class); } @Before public void init() { dataBroker = getDataBroker(); neProvider = new NeLocationProvider(dataBroker); } @Test public void test_NetworkElementsListenerRegistration() { DataBroker dataBroker = mock(DataBroker.class); NeLocationProvider provider = new NeLocationProvider(dataBroker); verify(dataBroker).registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(NetworkElements.class).build()), provider); } @Test public void test_EndpointsListenerRegistration() { DataBroker dataBroker = mock(DataBroker.class); new NeLocationProvider(dataBroker); verify(dataBroker) .registerDataTreeChangeListener(eq(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.builder(Endpoints.class).child(AddressEndpoints.class) .child(AddressEndpoint.class).build())), isA(EndpointsListener.class)); } @Test public void test_ListenersUnregistration() { DataBroker dataBroker = mock(DataBroker.class); ListenerRegistration<EndpointsListener> endpointsListenerRegistration = mock(ListenerRegistration.class); when(dataBroker.registerDataTreeChangeListener(any(), isA(EndpointsListener.class))) .thenReturn(endpointsListenerRegistration); ListenerRegistration<NeLocationProvider> NEListenerRegistration = mock(ListenerRegistration.class); when(dataBroker.registerDataTreeChangeListener(any(), isA(NeLocationProvider.class))) .thenReturn(NEListenerRegistration); NeLocationProvider provider = new NeLocationProvider(dataBroker); provider.close(); verify(endpointsListenerRegistration).close(); verify(NEListenerRegistration).close(); } @Test public void test_AddressEndpointWrite_NoNE_NoOverwrite() throws Exception { AddressEndpoint endpoint = writeBaseAddrEndpoint(); List<AddressEndpoint> endpoints = neProvider.getEndpoints(); assertEquals(1, endpoints.size()); assertEquals(endpoint, endpoints.get(0)); verifyEmptyLocations(); } @Test public void test_AddressEndpointWrite_NoNE_Overwrite() throws Exception { writeBaseAddrEndpoint(); NetworkContainment nc = new NetworkContainmentBuilder() .setContainment(new NetworkDomainContainmentBuilder().setNetworkDomainId(new NetworkDomainId(L3_CONTEXT_ID)).build()) .build(); AddressEndpoint endpoint = new AddressEndpointBuilder().setKey( new AddressEndpointKey(IPv4_HOST_ADDRESS_1, IpPrefixType.class, new ContextId(L3_CONTEXT_ID), L3Context.class)) .setNetworkContainment(nc) .build(); InstanceIdentifier<AddressEndpoint> iid = IidFactory.addressEndpointIid(endpoint.getKey()); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, endpoint, true); wtx.submit().get(); List<AddressEndpoint> endpoints = neProvider.getEndpoints(); assertEquals(1, endpoints.size()); assertEquals(endpoint, endpoints.get(0)); verifyEmptyLocations(); } @Test public void test_AddressEndpointModified_NoNE() throws Exception { writeBaseAddrEndpoint(); NetworkContainment nc = new NetworkContainmentBuilder() .setContainment(new NetworkDomainContainmentBuilder().setNetworkDomainId(new NetworkDomainId(L3_CONTEXT_ID)).build()) .build(); InstanceIdentifier<NetworkContainment> iid = InstanceIdentifier .builder(Endpoints.class) .child(AddressEndpoints.class) .child(AddressEndpoint.class, new AddressEndpointKey(IPv4_HOST_ADDRESS_1, IpPrefixType.class, new ContextId(L3_CONTEXT_ID), L3Context.class)) .child(NetworkContainment.class) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, nc); wtx.submit().get(); List<AddressEndpoint> l3Endpoint = neProvider.getEndpoints(); assertEquals(1, l3Endpoint.size()); assertNotNull(l3Endpoint.get(0).getNetworkContainment()); assertEquals(nc, l3Endpoint.get(0).getNetworkContainment()); verifyEmptyLocations(); } @Test public void test_EndpointsDelete_NoNE() throws Exception { writeBaseAddrEndpoint(); InstanceIdentifier<Endpoints> iid = InstanceIdentifier.builder(Endpoints.class) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.OPERATIONAL, iid); wtx.submit().get(); List<AddressEndpoint> l3Endpoint = neProvider.getEndpoints(); assertEquals(0, l3Endpoint.size()); verifyEmptyLocations(); } @Test public void test_EndpointsModify_NoNE() throws Exception { writeBaseAddrEndpoint(); InstanceIdentifier<Endpoints> iid = InstanceIdentifier.builder(Endpoints.class) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.OPERATIONAL, iid); wtx.submit().get(); List<AddressEndpoint> l3Endpoint = neProvider.getEndpoints(); assertEquals(0, l3Endpoint.size()); verifyEmptyLocations(); } @Test public void test_NetworkElementsWrite_NoEP_NoOverwrite() throws Exception { NetworkElements nes = writeBaseNetworkElements(); NetworkElements networkElements = neProvider.getNetworkElements(); assertEquals(nes, networkElements); verifyEmptyLocations(); } @Test public void test_NetworkElementsWrite_NoEP_Overwrite() throws Exception { writeBaseNetworkElements(); NetworkElements nes = createNetworkElements(NODE_ID_2, CONNECTOR_ID_2, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_1); InstanceIdentifier<NetworkElements> iid = InstanceIdentifier.builder(NetworkElements.class).build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, iid, nes); wtx.submit().get(); NetworkElements networkElements = neProvider.getNetworkElements(); assertEquals(nes, networkElements); verifyEmptyLocations(); } @Test public void test_NetworkElementWrite_NoEP_Overwrite() throws Exception { writeBaseNetworkElements(); NetworkElement ne = createNetworkElement(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_2); InstanceIdentifier<NetworkElement> iid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(ne.getKey())) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, iid, ne); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertNotNull(nes.getNetworkElement()); assertEquals(1, nes.getNetworkElement().size()); assertEquals(ne, nes.getNetworkElement().get(0)); verifyEmptyLocations(); } @Test public void test_InterfaceWrite_NoEP_Overwrite() throws Exception { writeBaseNetworkElements(); Interface iface = createInterface(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_2); InstanceIdentifier<Interface> iid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(createNetworkElementIid(NODE_ID_1))) .child(Interface.class, new InterfaceKey(iface.getKey())) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, iid, iface); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertNotNull(nes.getNetworkElement()); assertEquals(1, nes.getNetworkElement().size()); assertNotNull(nes.getNetworkElement().get(0).getInterface()); assertEquals(1, nes.getNetworkElement().get(0).getInterface().size()); assertEquals(iface, nes.getNetworkElement().get(0).getInterface().get(0)); verifyEmptyLocations(); } @Test public void test_EndpointNetworkChange_NoEP() throws Exception { writeBaseNetworkElements(); EndpointNetwork en = createEndpointNetwork(L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_2); InstanceIdentifier<EndpointNetwork> iid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(createNetworkElementIid(NODE_ID_1))) .child(Interface.class, new InterfaceKey(CONNECTOR_ID_1)) .child(EndpointNetwork.class, new EndpointNetworkKey(en.getKey())) .build(); InstanceIdentifier<EndpointNetwork> removeIid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(createNetworkElementIid(NODE_ID_1))) .child(Interface.class, new InterfaceKey(CONNECTOR_ID_1)) .child(EndpointNetwork.class, new EndpointNetworkKey( new IpPrefix(new Ipv4Prefix(IPv4_NETWORK_ADDRESS_1)),new ContextId(L3_CONTEXT_ID))) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.CONFIGURATION, removeIid); wtx.put(LogicalDatastoreType.CONFIGURATION, iid, en); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertNotNull(nes.getNetworkElement()); assertEquals(1, nes.getNetworkElement().size()); assertNotNull(nes.getNetworkElement().get(0).getInterface()); assertEquals(1, nes.getNetworkElement().get(0).getInterface().size()); assertNotNull(nes.getNetworkElement().get(0).getInterface().get(0).getEndpointNetwork()); assertEquals(1, nes.getNetworkElement().get(0).getInterface().get(0).getEndpointNetwork().size()); assertEquals(en, nes.getNetworkElement().get(0).getInterface().get(0).getEndpointNetwork().get(0)); verifyEmptyLocations(); } @Test public void test_NetworkElementsDelete() throws Exception { writeBaseNetworkElements(); InstanceIdentifier<NetworkElements> iid = InstanceIdentifier.builder(NetworkElements.class).build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.CONFIGURATION, iid); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertEquals(new NetworkElementsBuilder().build(), nes); verifyEmptyLocations(); } @Test public void test_NetworkElementDelete() throws Exception { writeBaseNetworkElements(); InstanceIdentifier<NetworkElement> iid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(createNetworkElementIid(NODE_ID_1))) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.CONFIGURATION, iid); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertNotNull(nes.getNetworkElement()); assertTrue(nes.getNetworkElement().isEmpty()); verifyEmptyLocations(); } @Test public void test_InterfaceDelete() throws Exception { writeBaseNetworkElements(); InstanceIdentifier<Interface> iid = InstanceIdentifier.builder(NetworkElements.class) .child(NetworkElement.class, new NetworkElementKey(createNetworkElementIid(NODE_ID_1))) .child(Interface.class, new InterfaceKey(CONNECTOR_ID_1)) .build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.delete(LogicalDatastoreType.CONFIGURATION, iid); wtx.submit().get(); NetworkElements nes = neProvider.getNetworkElements(); assertNotNull(nes.getNetworkElement()); assertEquals(1, nes.getNetworkElement().size()); assertNotNull(nes.getNetworkElement().get(0).getInterface()); assertTrue(nes.getNetworkElement().get(0).getInterface().isEmpty()); verifyEmptyLocations(); } @Test public void test_CreateLocationForAddrEndpoint_EndpointWriteFirst() throws Exception { AddressEndpoint endpoint = createAddressEndpoint(IPv4_HOST_ADDRESS_1, IpPrefixType.class, L3_CONTEXT_ID, L3Context.class); InstanceIdentifier<AddressEndpoint> iid = IidFactory.addressEndpointIid(endpoint.getKey()); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, endpoint, true); wtx.submit().get(); NetworkElements nes = createNetworkElements(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_1); InstanceIdentifier<NetworkElements> neIid = InstanceIdentifier.builder(NetworkElements.class).build(); wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, neIid, nes); wtx.submit().get(); ReadOnlyTransaction rtx = dataBroker.newReadOnlyTransaction(); InstanceIdentifier<LocationProviders> locationIid = InstanceIdentifier.builder(LocationProviders.class).build(); CheckedFuture<Optional<LocationProviders>, ReadFailedException> read = rtx.read(LogicalDatastoreType.CONFIGURATION, locationIid); assertTrue(read.get().isPresent()); rtx.close(); LocationProviders locations = read.get().get(); LocationProviders locationReference = new LocationProvidersBuilder() .setLocationProvider(Collections.singletonList(new LocationProviderBuilder() .setProvider(new ProviderName(NeLocationProvider.NE_LOCATION_PROVIDER_NAME)) .setProviderAddressEndpointLocation(Collections.singletonList( new ProviderAddressEndpointLocationBuilder() .setAddress(IPv4_HOST_ADDRESS_1) .setAddressType(IpPrefixType.class) .setContextId(new ContextId(L3_CONTEXT_ID)) .setContextType(L3Context.class) .setAbsoluteLocation(new AbsoluteLocationBuilder() .setLocationType(new ExternalLocationCaseBuilder() .setExternalNodeMountPoint(createNetworkElementIid(NODE_ID_1)) .setExternalNodeConnector(CONNECTOR_ID_1) .build()) .build()) .build())) .build())) .build(); assertEquals(locationReference, locations); } @Test public void test_CreateLocationForAddrEndpoint_NEWriteFirst() throws Exception { NetworkElements nes = createNetworkElements(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_1); InstanceIdentifier<NetworkElements> neIid = InstanceIdentifier.builder(NetworkElements.class).build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, neIid, nes); AddressEndpoint endpoint = createAddressEndpoint(IPv4_HOST_ADDRESS_1, IpPrefixType.class, L3_CONTEXT_ID, L3Context.class); InstanceIdentifier<AddressEndpoint> iid = IidFactory.addressEndpointIid(endpoint.getKey()); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, endpoint, true); wtx.submit().get(); ReadOnlyTransaction rtx = dataBroker.newReadOnlyTransaction(); InstanceIdentifier<LocationProviders> locationIid = InstanceIdentifier.builder(LocationProviders.class).build(); CheckedFuture<Optional<LocationProviders>, ReadFailedException> read = rtx.read(LogicalDatastoreType.CONFIGURATION, locationIid); assertTrue(read.get().isPresent()); rtx.close(); LocationProviders locations = read.get().get(); LocationProviders locationReference = new LocationProvidersBuilder() .setLocationProvider(Collections.singletonList(new LocationProviderBuilder() .setProvider(new ProviderName(NeLocationProvider.NE_LOCATION_PROVIDER_NAME)) .setProviderAddressEndpointLocation(Collections.singletonList( new ProviderAddressEndpointLocationBuilder() .setAddress(IPv4_HOST_ADDRESS_1) .setAddressType(IpPrefixType.class) .setContextId(new ContextId(L3_CONTEXT_ID)) .setContextType(L3Context.class) .setAbsoluteLocation(new AbsoluteLocationBuilder() .setLocationType(new ExternalLocationCaseBuilder() .setExternalNodeMountPoint(createNetworkElementIid(NODE_ID_1)) .setExternalNodeConnector(CONNECTOR_ID_1) .build()) .build()) .build())) .build())) .build(); assertEquals(locationReference, locations); } @Test public void test_CreateLocationForAddrEndpoint_SimultaneousWrite() throws Exception { NetworkElements nes = createNetworkElements(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_1); InstanceIdentifier<NetworkElements> neIid = InstanceIdentifier.builder(NetworkElements.class).build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, neIid, nes); wtx.submit().get(); AddressEndpoint endpoint = createAddressEndpoint(IPv4_HOST_ADDRESS_1, IpPrefixType.class, L3_CONTEXT_ID, L3Context.class); InstanceIdentifier<AddressEndpoint> iid = IidFactory.addressEndpointIid(endpoint.getKey()); wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, endpoint, true); wtx.submit().get(); ReadOnlyTransaction rtx = dataBroker.newReadOnlyTransaction(); InstanceIdentifier<LocationProviders> locationIid = InstanceIdentifier.builder(LocationProviders.class).build(); CheckedFuture<Optional<LocationProviders>, ReadFailedException> read = rtx.read(LogicalDatastoreType.CONFIGURATION, locationIid); assertTrue(read.get().isPresent()); rtx.close(); LocationProviders locations = read.get().get(); LocationProviders locationReference = new LocationProvidersBuilder() .setLocationProvider(Collections.singletonList(new LocationProviderBuilder() .setProvider(new ProviderName(NeLocationProvider.NE_LOCATION_PROVIDER_NAME)) .setProviderAddressEndpointLocation(Collections.singletonList( new ProviderAddressEndpointLocationBuilder() .setAddress(IPv4_HOST_ADDRESS_1) .setAddressType(IpPrefixType.class) .setContextId(new ContextId(L3_CONTEXT_ID)) .setContextType(L3Context.class) .setAbsoluteLocation(new AbsoluteLocationBuilder() .setLocationType(new ExternalLocationCaseBuilder() .setExternalNodeMountPoint(createNetworkElementIid(NODE_ID_1)) .setExternalNodeConnector(CONNECTOR_ID_1) .build()) .build()) .build())) .build())) .build(); assertEquals(locationReference, locations); } private AddressEndpoint writeBaseAddrEndpoint () throws Exception { AddressEndpoint endpoint = createAddressEndpoint(IPv4_HOST_ADDRESS_1, IpPrefixType.class, L3_CONTEXT_ID, L3Context.class); InstanceIdentifier<AddressEndpoint> iid = IidFactory.addressEndpointIid(endpoint.getKey()); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.OPERATIONAL, iid, endpoint, true); wtx.submit().get(); return endpoint; } private NetworkElements writeBaseNetworkElements () throws Exception { NetworkElements nes = createNetworkElements(NODE_ID_1, CONNECTOR_ID_1, L3_CONTEXT_ID, IPv4_NETWORK_ADDRESS_1); InstanceIdentifier<NetworkElements> iid = InstanceIdentifier.builder(NetworkElements.class).build(); WriteTransaction wtx = dataBroker.newWriteOnlyTransaction(); wtx.put(LogicalDatastoreType.CONFIGURATION, iid, nes); wtx.submit().get(); return nes; } private AddressEndpoint createAddressEndpoint(String ipAddr, Class<? extends AddressType> addrType, String context, Class<? extends ContextType> cType) { return new AddressEndpointBuilder().setAddress(ipAddr).setAddressType(addrType) .setContextId(new ContextId(context)).setContextType(cType).build(); } private NetworkElements createNetworkElements(String node, String iface, String l3c, String prefix) { return new NetworkElementsBuilder() .setNetworkElement(Collections.singletonList(createNetworkElement(node, iface, l3c, prefix))).build(); } private NetworkElement createNetworkElement(String node, String iface, String l3c, String prefix) { return new NetworkElementBuilder().setIid(createNetworkElementIid(node)) .setInterface(Collections.singletonList(createInterface(node, iface, l3c, prefix))) .build(); } private Interface createInterface(String node, String iface, String l3c, String prefix) { return new InterfaceBuilder().setIid(iface) .setEndpointNetwork(Collections.singletonList(createEndpointNetwork(l3c, prefix))) .build(); } private EndpointNetwork createEndpointNetwork(String l3c, String prefix) { return new EndpointNetworkBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix(prefix))) .setL3ContextId(new ContextId(l3c)) .build(); } private InstanceIdentifier<?> createNetworkElementIid(String node) { return InstanceIdentifier.builder(Nodes.class).child(Node.class, new NodeKey(new NodeId(node))).build(); } private InstanceIdentifier<?> createInterfaceIid(String node, String connector) { return InstanceIdentifier.builder(Nodes.class) .child(Node.class, new NodeKey(new NodeId(node))) .child(NodeConnector.class, new NodeConnectorKey(new NodeConnectorId(connector))) .build(); } private void verifyEmptyLocations() throws Exception { ReadOnlyTransaction rtx = dataBroker.newReadOnlyTransaction(); InstanceIdentifier<LocationProviders> locationIid = InstanceIdentifier.builder(LocationProviders.class).build(); CheckedFuture<Optional<LocationProviders>, ReadFailedException> read = rtx.read(LogicalDatastoreType.OPERATIONAL, locationIid); assertFalse(read.get().isPresent()); rtx.close(); } }