--- /dev/null
+/*
+ * Copyright © 2015 Yale University 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.alto.core.northbound.route.costmap.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+import org.opendaylight.alto.core.northbound.api.utils.rfc7285.RFC7285CostMap;
+import org.opendaylight.alto.core.northbound.api.utils.rfc7285.RFC7285CostType;
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+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.ReadWriteTransaction;
+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.TransactionChainListener;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.resource.ContextTag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.CostMetric;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.PidName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.AltoModelCostmapService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.QueryOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.alto.request.costmap.request.CostmapRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.alto.response.costmap.response.CostmapResponseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.cost.type.data.CostType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.cost.type.data.CostTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.request.data.CostmapParams;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.CostmapResponseDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.costmap.response.data.CostmapSource;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.costmap.response.data.CostmapSourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.costmap.response.data.costmap.source.CostmapDestination;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.costmap.response.data.costmap.source.CostmapDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.costmap.response.data.costmap.response.data.costmap.source.costmap.destination.Cost;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.costmap.filter.data.CostmapFilter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.query.input.request.costmap.request.costmap.params.filter.CostmapFilterData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rfc7285.rev151021.query.output.response.costmap.response.costmap.response.data.costmap.source.costmap.destination.cost.OrdinalBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import javax.annotation.Nonnull;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+public class AltoNorthboundCostmapTest {
+
+ String filter = "{\"cost-type\": {\"cost-metric\": \"routingcost\", \"cost-mode\": \"numerical\"}, \"pids\": {\"dsts\": [ \"PID1\", \"PID2\", \"PID3\" ], \"srcs\": [ \"PID1\" ] }}";
+ String path = "test-model-costmap";
+ String costmode = "ordinal";
+ String costmetri = "routingcost";
+ List<String> pid_source = new ArrayList<String>(){
+ {
+ add("PID1");
+ }
+ };
+ List<String> pid_destination = new ArrayList<String>(){
+ {
+ add("PID1");
+ add("PID2");
+ add("PID3");
+ }
+ };
+
+ @Test
+ public void testprepareInput() throws JsonProcessingException {
+
+ AltoNorthboundRouteCostmap costmap = new AltoNorthboundRouteCostmap();
+ AltoNorthboundRouteCostmap costmapSpy = spy(costmap);
+ AltoModelCostmapService mapService = mock(AltoModelCostmapService.class);
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+// doReturn("").when(mapService).query()
+
+ //configure mock
+ doReturn(ctagIID).when(costmapSpy).getResourceByPath(eq(path),(ReadOnlyTransaction) anyObject());
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+ when(session.getRpcService(AltoModelCostmapService.class)).thenReturn(new AltoModelCostmapService() {
+ @Override
+ public Future<RpcResult<QueryOutput>> query(QueryInput queryInput) {
+ return null;
+ }
+ });
+
+ //start test
+ costmapSpy.onSessionInitiated(session);
+ QueryInput input = costmapSpy.prepareInput(path,costmode,costmetri,pid_source,pid_destination);
+
+ CostmapRequest request = (CostmapRequest)input.getRequest();
+ CostmapParams params = request.getCostmapParams();
+ CostmapFilter costmapFilter=((CostmapFilterData)params.getFilter()).getCostmapFilter();
+ CostType costType = params.getCostType();
+ List<PidName> pidNames1 = new LinkedList<PidName>();
+ for (String pid:pid_source){
+ PidName p = new PidName(pid);
+ pidNames1.add(p);
+ }
+ List<PidName> pidNames2 = new LinkedList<PidName>();
+ for (String pid:pid_destination){
+ PidName p = new PidName(pid);
+ pidNames2.add(p);
+ }
+
+ assertEquals(costmetri,costType.getCostMetric().getValue());
+ assertEquals(costmode, costType.getCostMode());
+ assertEquals(pidNames1, costmapFilter.getPidSource());
+ assertEquals(pidNames2, costmapFilter.getPidDestination());
+ }
+
+// Future<RpcResult<QueryOutput>> future;
+ protected Cost createOrdinalCost(int order) {
+ OrdinalBuilder builder=new OrdinalBuilder();
+ builder.setCost(order);
+ return builder.build();
+ }
+
+ @Test
+ public void testgetFilteredMap() throws IOException, ExecutionException, InterruptedException {
+ //mock config
+ final AltoNorthboundRouteCostmap costmap = new AltoNorthboundRouteCostmap();
+ AltoNorthboundRouteCostmap costmapSpy = spy(costmap);
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+
+ AltoModelCostmapService costmapService = mock(AltoModelCostmapService.class);
+ Future<RpcResult<QueryOutput>> future = mock(Future.class);
+ RpcResult<QueryOutput> rpcResult = mock(RpcResult.class);
+ //build QueryOutput
+ int order = 0;
+ LinkedList<CostmapSource> costmapSources = new LinkedList<CostmapSource>();
+ for(String src:pid_source){
+ LinkedList<CostmapDestination> costmapDestinations= new LinkedList<CostmapDestination>();
+
+ for (String dst : pid_destination){
+ CostmapDestinationBuilder costmapDestinationBuilder= new CostmapDestinationBuilder();
+ costmapDestinationBuilder.setPidDestination(new PidName(dst));
+ costmapDestinationBuilder.setCost(createOrdinalCost(++order));
+ costmapDestinations.add(costmapDestinationBuilder.build());
+ }
+ CostmapSourceBuilder costmapSourceBuilder= new CostmapSourceBuilder();
+ costmapSourceBuilder.setPidSource(new PidName(src));
+ costmapSourceBuilder.setCostmapDestination(costmapDestinations);
+ costmapSources.add(costmapSourceBuilder.build());
+ }
+ CostTypeBuilder costType = new CostTypeBuilder();
+ costType.setCostMode(costmode);
+ costType.setCostMetric(new CostMetric(costmetri));
+ CostmapResponseDataBuilder costmapResponseDataBuilder= new CostmapResponseDataBuilder();
+ costmapResponseDataBuilder.setCostType(costType.build());
+ costmapResponseDataBuilder.setCostmapSource(costmapSources);
+
+ CostmapResponseBuilder costmapResponseBuilder= new CostmapResponseBuilder();
+ costmapResponseBuilder.setCostmapResponseData(costmapResponseDataBuilder.build());
+
+ QueryOutputBuilder queryOutput = new QueryOutputBuilder();
+ queryOutput.setResponse(costmapResponseBuilder.build());
+ when(rpcResult.getResult()).thenReturn(queryOutput.build());
+ when(future.get()).thenReturn(rpcResult);
+ when(costmapService.query((QueryInput) anyObject())).thenReturn(future);
+
+ when(session.getRpcService(AltoModelCostmapService.class)).thenReturn(costmapService);
+
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+ doReturn(ctagIID).when(costmapSpy).getResourceByPath(eq(path),(ReadOnlyTransaction) anyObject());
+ RFC7285CostMap.Meta meta = new RFC7285CostMap.Meta();
+ RFC7285CostType rfc7285costType = new RFC7285CostType();
+ rfc7285costType.metric = costmetri;
+ rfc7285costType.mode = costmode;
+ meta.costType = rfc7285costType;
+ doReturn(meta).when(costmapSpy).buildMeta((InstanceIdentifier<?>) anyObject(), (RFC7285CostType)anyObject());
+
+ //start test
+ costmapSpy.onSessionInitiated(session);
+ Response response = costmapSpy.getFilteredMap(path,filter);
+ String responseStr = response.getEntity().toString();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode responseNode = mapper.readTree(responseStr);
+ JsonNode costmapNode = responseNode.get("cost-map");
+ JsonNode PID1Node = costmapNode.get("PID1");
+ JsonNode PID2Node = PID1Node.get("PID2");
+ assertEquals("2", PID2Node.asText());
+
+// assertEquals(responseStr,surex);
+ }
+
+}
if(tmp[0].equals("ipv4")){
ipv4.setIpv4(new Ipv4Address(tmp[1]));
destinationBuilder.setAddress(ipv4.build());
- }else if(tmp[0].equals("ipv4")){
+ }else if(tmp[0].equals("ipv6")){
ipv6.setIpv6(new Ipv6Address(tmp[1]));
destinationBuilder.setAddress(ipv6.build());
}else return null;
--- /dev/null
+/*
+ * Copyright © 2015 Yale University 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.alto.core.northbound.route.endpointcost.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Assert;
+import org.junit.Test;
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+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.ReadWriteTransaction;
+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.TransactionChainListener;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.resource.ContextTag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.AltoModelEndpointcostService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.QueryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.QueryOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.QueryOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.alto.request.endpointcost.request.EndpointcostRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.alto.response.endpointcost.response.EndpointcostResponseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.cost.type.container.CostType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.endpointcost.request.data.EndpointcostParams;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.Ipv4AddressData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.Ipv6AddressData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.TypedAddressData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpoint.filter.data.EndpointFilter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpoint.filter.data.endpoint.filter.Destination;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpoint.filter.data.endpoint.filter.DestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpoint.filter.data.endpoint.filter.Source;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpoint.filter.data.endpoint.filter.SourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.EndpointCostMapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.EndpointCost;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.EndpointCostBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.endpoint.cost.Cost;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.input.request.endpointcost.request.endpointcost.params.filter.EndpointFilterData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.input.request.endpointcost.request.endpointcost.params.filter.endpoint.filter.data.endpoint.filter.source.address.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.EndpointCostmapDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.cost.OrdinalBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.typed.address.data.Address;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import javax.annotation.Nonnull;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+public class AltoNorthboundEndpointcostTest {
+
+ String filter = "{\"cost-type\":{\"cost-mode\" : \"ordinal\",\"cost-metric\" : \"routingcost\"},\"endpoints\" : {\"srcs\": [ \"ipv4:192.0.2.2\" ],\"dsts\": [\"ipv4:192.0.2.89\",\"ipv4:198.51.100.34\",\"ipv4:203.0.113.45\"]}}";
+ String path = "test-model-endpointcost";
+ String costmode = "ordinal";
+ String costmetri = "routingcost";
+ List<String> endpoints_source_ipv4 = new ArrayList<String>(){
+ {
+ add("192.0.2.2");
+ }
+ };
+ List<String> endpoints_source_ipv6 = new ArrayList<String>(){
+
+ };
+ List<String> endpoints_destination_ipv4 = new ArrayList<String>(){
+ {
+ add("192.0.2.89");
+ add("198.51.100.34");
+ add("203.0.113.45");
+ }
+ };
+ List<String> endpoints_destination_ipv6 = new ArrayList<String>(){
+
+ };
+ List<String> endpoints_source = new ArrayList<String>(){
+ {
+ add("ipv4:192.0.2.2");
+ }
+ };
+ List<String> endpoints_destination = new ArrayList<String>(){
+ {
+ add("ipv4:192.0.2.89");
+ add("ipv4:198.51.100.34");
+ add("ipv4:203.0.113.45");
+ }
+ };
+ @Test
+ public void testprepareInput() throws JsonProcessingException {
+
+ AltoNorthboundRouteEndpointcost endpointcost = new AltoNorthboundRouteEndpointcost();
+ AltoNorthboundRouteEndpointcost endpointcostSpy = spy(endpointcost);
+
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+
+ //configure mock
+ doReturn(ctagIID).when(endpointcostSpy).getResourceByPath(eq(path),(ReadOnlyTransaction) anyObject());
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+ when(session.getRpcService(AltoModelEndpointcostService.class)).thenReturn(new AltoModelEndpointcostService() {
+ @Override
+ public Future<RpcResult<QueryOutput>> query(QueryInput queryInput) {
+ return null;
+ }
+ });
+
+ //start test
+ endpointcostSpy.onSessionInitiated(session);
+ QueryInput input = endpointcostSpy.prepareInput(path,costmode,costmetri,endpoints_source,endpoints_destination);
+ EndpointcostRequest request = (EndpointcostRequest)input.getRequest();
+ EndpointcostParams params = request.getEndpointcostParams();
+ EndpointFilter costmapFilter=((EndpointFilterData)params.getFilter()).getEndpointFilter();
+ Ipv4Builder ipv4 = new Ipv4Builder();
+ ipv4.setIpv4(new Ipv4Address("192.0.2.2"));
+ Assert.assertEquals(costmapFilter.getSource().get(0).getAddress(), ipv4.build());
+ CostType costType = params.getCostType();
+
+ assertEquals(costmetri,costType.getCostMetric().getValue());
+ assertEquals(costmode, costType.getCostMode());
+ }
+
+ protected Address createSourceAddress(Address from) {
+ if (from instanceof Ipv4AddressData) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.source.address.Ipv4Builder builder;
+ builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.source.address.Ipv4Builder();
+
+ builder.fieldsFrom((Ipv4AddressData)from);
+ return builder.build();
+ } else if (from instanceof Ipv6AddressData) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.source.address.Ipv6Builder builder;
+ builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.source.address.Ipv6Builder();
+
+ builder.fieldsFrom((Ipv6AddressData)from);
+ return builder.build();
+ }
+ return null;
+ }
+
+ protected Address createDestinationAddress(Address from) {
+ if (from instanceof Ipv4AddressData) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.destination.address.Ipv4Builder builder;
+ builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.destination.address.Ipv4Builder();
+
+ builder.fieldsFrom((Ipv4AddressData)from);
+ return builder.build();
+ } else if (from instanceof Ipv6AddressData) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.destination.address.Ipv6Builder builder;
+ builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.query.output.response.endpointcost.response.endpointcost.data.endpoint.costmap.data.endpoint.cost.map.endpoint.cost.destination.address.Ipv6Builder();
+
+ builder.fieldsFrom((Ipv6AddressData)from);
+ return builder.build();
+ }
+ return null;
+ }
+
+ protected Cost createOrdinalCost(int order) {
+ OrdinalBuilder builder;
+ builder = new OrdinalBuilder();
+
+ builder.setCost(order);
+ return builder.build();
+ }
+ @Test
+ public void testgetFilteredMap() throws ExecutionException, InterruptedException, IOException {
+ //mock config
+ AltoNorthboundRouteEndpointcost endpointcost = new AltoNorthboundRouteEndpointcost();
+ AltoNorthboundRouteEndpointcost endpointcostSpy = spy(endpointcost);
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+
+ AltoModelEndpointcostService endpointcostService = mock(AltoModelEndpointcostService.class);
+ Future<RpcResult<QueryOutput>> future = mock(Future.class);
+ RpcResult<QueryOutput> rpcResult = mock(RpcResult.class);
+ List<Source> sources = new ArrayList<Source>();
+ List<Destination> destinations = new ArrayList<Destination>();
+
+ for(String source : endpoints_source_ipv4){
+ SourceBuilder sourceBuilder = new SourceBuilder();
+ Ipv4Builder ipv4 = new Ipv4Builder();
+ ipv4.setIpv4(new Ipv4Address(source));
+ sourceBuilder.setAddress(ipv4.build());
+ sources.add(sourceBuilder.build());
+ }
+ for(String destination : endpoints_destination_ipv4){
+ DestinationBuilder destinationBuilder = new DestinationBuilder();
+ Ipv4Builder ipv4 = new Ipv4Builder();
+ ipv4.setIpv4(new Ipv4Address(destination));
+ destinationBuilder.setAddress(ipv4.build());
+ destinations.add(destinationBuilder.build());
+ }
+
+ List<? extends TypedAddressData> source = sources;
+
+ List<? extends TypedAddressData> destination = destinations;
+
+ int order = 0;
+ LinkedList<EndpointCost> ecList = new LinkedList<EndpointCost>();
+ for (TypedAddressData src: source) {
+ for (TypedAddressData dst: destination) {
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.endpoint.cost.SourceBuilder srcBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.endpoint.cost.SourceBuilder();
+ srcBuilder.setAddress(createSourceAddress(src.getAddress()));
+
+ org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.endpoint.cost.DestinationBuilder
+ dstBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rfc7285.rev151021.endpointcostmap.response.data.endpoint.cost.map.endpoint.cost.DestinationBuilder();
+ dstBuilder.setAddress(createDestinationAddress(dst.getAddress()));
+
+
+ EndpointCostBuilder ecBuilder = new EndpointCostBuilder();
+ ecBuilder.setSource(srcBuilder.build());
+ ecBuilder.setDestination(dstBuilder.build());
+ ecBuilder.setCost(createOrdinalCost(++order));
+
+ ecList.add(ecBuilder.build());
+ }
+ }
+
+ EndpointCostMapBuilder ecmBuilder = new EndpointCostMapBuilder();
+ ecmBuilder.setEndpointCost(ecList);
+
+ EndpointCostmapDataBuilder ecmdBuilder = new EndpointCostmapDataBuilder();
+ ecmdBuilder.setEndpointCostMap(ecmBuilder.build());
+
+ EndpointcostResponseBuilder ecrBuilder = new EndpointcostResponseBuilder();
+ ecrBuilder.setEndpointcostData(ecmdBuilder.build());
+ QueryOutputBuilder queryOutputBuilder = new QueryOutputBuilder();
+ queryOutputBuilder.setResponse(ecrBuilder.build());
+
+ when(rpcResult.getResult()).thenReturn(queryOutputBuilder.build());
+ when(future.get()).thenReturn(rpcResult);
+ when(endpointcostService.query((QueryInput)anyObject())).thenReturn(future);
+
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+ when(session.getRpcService(AltoModelEndpointcostService.class)).thenReturn(endpointcostService);
+
+ doReturn(ctagIID).when(endpointcostSpy).getResourceByPath(eq(path), (ReadOnlyTransaction)anyObject());
+
+ //start test
+ endpointcostSpy.onSessionInitiated(session);
+ Response response = endpointcostSpy.getFilteredMap(path, filter);
+ String surex = response.getEntity().toString();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode responseTree = mapper.readTree(surex);
+ JsonNode endpointcostMapNode = responseTree.get("endpoint-cost-map");
+ JsonNode soureceNode = endpointcostMapNode.get("ipv4:192.0.2.2");
+ JsonNode destNode = soureceNode.get("ipv4:198.51.100.34");
+ assertEquals("2", destNode.asText());
+ }
+
+}
--- /dev/null
+/*
+ * Copyright © 2015 Yale University 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.alto.core.northbound.route.networkmap.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+import org.opendaylight.alto.core.northbound.api.utils.rfc7285.RFC7285NetworkMap;
+import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+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.ReadWriteTransaction;
+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.TransactionChainListener;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.resource.ContextTag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.PidName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.AddressTypeBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.AddressTypeIpv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.AddressTypeIpv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.AltoModelNetworkmapService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.QueryInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.QueryOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.QueryOutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.alto.request.networkmap.request.NetworkmapRequest;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.alto.response.networkmap.response.NetworkmapResponseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.networkmap.response.data.NetworkMapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.networkmap.response.data.network.map.Partition;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.networkmap.response.data.network.map.PartitionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rfc7285.rev151021.Ipv4PrefixList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rfc7285.rev151021.Ipv4PrefixListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rfc7285.rev151021.Ipv6PrefixList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rfc7285.rev151021.Ipv6PrefixListBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+
+import javax.annotation.Nonnull;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+public class AltoNorthboundNetworkmapTest {
+ String path = "test-model-networkmap";
+ String filter = "{\n" +
+ "\t\"pids\": [\"PID1\", \"PID2\"],\n" +
+ "\t\"address-types\": [\"ipv4\", \"ipv6\"]\n" +
+ "}";
+ List<String> pids = new ArrayList<String>(){
+ {
+ add("PID1");
+ add("PID2");
+ }
+ };
+ List<String> addressTypes = new ArrayList<String>(){
+ {
+ add("ipv4");
+ add("ipv6");
+ }
+ };
+ @Test
+ public void testprepareInput() throws JsonProcessingException{
+
+
+ //configure the mock
+ AltoNorthboundRouteNetworkmap networkmap = new AltoNorthboundRouteNetworkmap();
+ AltoNorthboundRouteNetworkmap networkmapSpy = spy(networkmap);
+
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+ doReturn(ctagIID).when(networkmapSpy).getResourceByPath(eq(path), (ReadOnlyTransaction) anyObject());
+ doReturn( AddressTypeIpv4.class).when(networkmapSpy).getAddressTypeByName(eq("ipv4"), eq(path), (ReadOnlyTransaction)anyObject());
+ doReturn( AddressTypeIpv6.class).when(networkmapSpy).getAddressTypeByName(eq("ipv6"), eq(path), (ReadOnlyTransaction)anyObject());
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+ when(session.getRpcService(AltoModelNetworkmapService.class)).thenReturn(new AltoModelNetworkmapService() {
+ @Override
+ public Future<RpcResult<QueryOutput>> query(QueryInput queryInput) {
+ return null;
+ }
+ });
+
+ networkmapSpy.onSessionInitiated(session);
+ QueryInput input = networkmapSpy.prepareInput(path, pids, addressTypes);
+ NetworkmapRequest request = (NetworkmapRequest)input.getRequest();
+ PidName pid1 = request.getNetworkmapFilter().getPid().get(0);
+ PidName pid2 = request.getNetworkmapFilter().getPid().get(1);
+
+ assertEquals(pid1.getValue(), "PID1");
+ assertEquals(pid2.getValue(), "PID2");
+
+ assertEquals(request.getNetworkmapFilter().getAddressType().get(0), AddressTypeIpv4.class);
+ assertEquals(request.getNetworkmapFilter().getAddressType().get(1), AddressTypeIpv6.class);
+ }
+
+ @Test
+ public void testgetFilteredMap() throws ExecutionException, InterruptedException, IOException {
+ //config mock
+ AltoNorthboundRouteNetworkmap networkmap = new AltoNorthboundRouteNetworkmap();
+ AltoNorthboundRouteNetworkmap networkmapSpy = spy(networkmap);
+
+ BindingAwareBroker.ProviderContext session = mock(BindingAwareBroker.ProviderContext.class);
+ InstanceIdentifier<ContextTag> ctagIID = InstanceIdentifier.create(ContextTag.class);
+ doReturn(ctagIID).when(networkmapSpy).getResourceByPath(eq(path), (ReadOnlyTransaction) anyObject());
+ doReturn( AddressTypeIpv4.class).when(networkmapSpy).getAddressTypeByName(eq("ipv4"), eq(path), (ReadOnlyTransaction)anyObject());
+ doReturn( AddressTypeIpv6.class).when(networkmapSpy).getAddressTypeByName(eq("ipv6"), eq(path), (ReadOnlyTransaction)anyObject());
+
+ AltoModelNetworkmapService networkmapService = mock(AltoModelNetworkmapService.class);
+
+ Future<RpcResult<QueryOutput>> future = mock(Future.class);
+ RpcResult<QueryOutput> rpcResult = mock(RpcResult.class);
+ List<Class<? extends AddressTypeBase>> types = new ArrayList<Class<? extends AddressTypeBase>>(){
+ {
+ add(AddressTypeIpv4.class);
+ add(AddressTypeIpv6.class);
+ }
+ };
+ List<Partition> partitionList = new LinkedList<>();
+ int index = 0;
+ for (String pid: pids) {
+ ++index;
+
+ PartitionBuilder partitionBuilder = new PartitionBuilder();
+ partitionBuilder.setPid(new PidName(pid));
+
+ if (types.contains(AddressTypeIpv4.class)) {
+ LinkedList<Ipv4Prefix> ipv4List = new LinkedList<Ipv4Prefix>();
+ ipv4List.add(new Ipv4Prefix("192.168." + index + ".0/24"));
+
+ Ipv4PrefixListBuilder v4Builder = new Ipv4PrefixListBuilder();
+ v4Builder.setIpv4(ipv4List);
+
+ partitionBuilder.addAugmentation(Ipv4PrefixList.class, v4Builder.build());
+ }
+ if (types.contains(AddressTypeIpv6.class)) {
+ LinkedList<Ipv6Prefix> ipv6List = new LinkedList<Ipv6Prefix>();
+ ipv6List.add(new Ipv6Prefix("2001:b8:ca2:" + index + "::0/64"));
+
+ Ipv6PrefixListBuilder v6Builder = new Ipv6PrefixListBuilder();
+ v6Builder.setIpv6(ipv6List);
+
+ partitionBuilder.addAugmentation(Ipv6PrefixList.class, v6Builder.build());
+ }
+
+ partitionList.add(partitionBuilder.build());
+ }
+ NetworkMapBuilder nmBuilder = new NetworkMapBuilder();
+ nmBuilder.setPartition(partitionList);
+
+ NetworkmapResponseBuilder nmrBuilder = new NetworkmapResponseBuilder();
+ nmrBuilder.setNetworkMap(nmBuilder.build());
+
+ QueryOutputBuilder queryOutputBuilder = new QueryOutputBuilder();
+ queryOutputBuilder.setResponse(nmrBuilder.build());
+ when(rpcResult.getResult()).thenReturn(queryOutputBuilder.build());
+ when(future.get()).thenReturn(rpcResult);
+ when(networkmapService.query((QueryInput)anyObject())).thenReturn(future);
+ when(session.getRpcService(AltoModelNetworkmapService.class)).thenReturn(networkmapService);
+ when(session.getSALService(DataBroker.class)).thenReturn(new DataBroker() {
+ @Override
+ public ReadOnlyTransaction newReadOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ReadWriteTransaction newReadWriteTransaction() {
+ return null;
+ }
+
+ @Override
+ public WriteTransaction newWriteOnlyTransaction() {
+ return null;
+ }
+
+ @Override
+ public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType logicalDatastoreType, InstanceIdentifier<?> instanceIdentifier, DataChangeListener dataChangeListener, DataChangeScope dataChangeScope) {
+ return null;
+ }
+
+ @Override
+ public BindingTransactionChain createTransactionChain(TransactionChainListener transactionChainListener) {
+ return null;
+ }
+
+ @Nonnull
+ @Override
+ public <T extends DataObject, L extends DataTreeChangeListener<T>> ListenerRegistration<L> registerDataTreeChangeListener(@Nonnull DataTreeIdentifier<T> dataTreeIdentifier, @Nonnull L l) {
+ return null;
+ }
+ });
+
+ doReturn(new RFC7285NetworkMap.Meta()).when(networkmapSpy).buildMeta((InstanceIdentifier<?>)anyObject());
+ //start test
+ networkmapSpy.onSessionInitiated(session);
+ Response response = networkmapSpy.getFilteredMap(path, filter);
+ String surex = response.getEntity().toString();
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode responseTree = mapper.readTree(surex);
+ JsonNode networkmapTree = responseTree.get("network-map");
+ JsonNode PID1 = networkmapTree.get("PID1");
+ JsonNode ipv4Node = PID1.get("ipv4");
+ assertEquals("192.168.1.0/24", ipv4Node.get(0).asText());
+ }
+
+}