Add unit tests of alto-basic 22/43022/3
authorXiao Lin <x.shawn.lin@gmail.com>
Wed, 3 Aug 2016 08:28:44 +0000 (16:28 +0800)
committerXiao Lin <x.shawn.lin@gmail.com>
Wed, 3 Aug 2016 13:25:06 +0000 (13:25 +0000)
Change-Id: I5092ecdf355592fef05444192e0ecc928df5235f
Signed-off-by: Xiao Lin <x.shawn.lin@gmail.com>
alto-basic/simple-ird/impl/src/main/java/org/opendaylight/alto/basic/impl/SimpleIrdRoute.java
alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdRouteTest.java [new file with mode: 0644]
alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/simpleird/SimpleIrdUtilsTest.java [new file with mode: 0644]

index 05ee68cefc52391f197640f03cb7987c84905fba..ef54beeebd7f9fb2e1369d5d22a56d16ec7c7b52 100644 (file)
@@ -70,7 +70,7 @@ public class SimpleIrdRoute implements AltoNorthboundRoute {
         return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
     }
 
-    private static class Rfc7285Ird {
+    protected static class Rfc7285Ird {
 
         public Map<String, Object> meta = new HashMap<String, Object>();
 
diff --git a/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdRouteTest.java b/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdRouteTest.java
new file mode 100644 (file)
index 0000000..b329831
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 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.basic.impl;
+
+
+import com.google.common.collect.Maps;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.entry.configuration.data.location.FixedUrlBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.entry.configuration.data.location.RelativePathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.entry.data.EntryCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.IrdEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.IrdEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.Rfc7285CostTypeCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.Rfc7285CostTypeCapabilitiesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.Rfc7285IrdMetadata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.Rfc7285IrdMetadataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.ird.instance.MetaBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.rfc7285.ird.meta.CostType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rfc7285.rev151021.rfc7285.ird.meta.CostTypeBuilder;
+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.ResourceId;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+public class SimpleIrdRouteTest {
+
+    private AltoSimpleIrdProvider m_provider = mock(AltoSimpleIrdProvider.class);
+    private HttpServletRequest mockHttpServletRequest = mock(HttpServletRequest.class);
+    private IrdInstance mockIrdInstance = mock(IrdInstance.class);
+    SimpleIrdRoute simpleIrdRoute = new SimpleIrdRoute(m_provider);
+    SimpleIrdRoute sirSpy = spy(simpleIrdRoute);
+
+    @Test
+    public void testRoute() {
+        when(m_provider.getInstance(new ResourceId("helloworld"))).thenReturn(mockIrdInstance);
+
+        List<CostType> costTypeList = new LinkedList<>();
+        CostTypeBuilder costTypeBuilder = new CostTypeBuilder()
+                .setCostMetric(new CostMetric("routingcost"))
+                .setCostMode("ordinal")
+                .setName("num-routing");
+        costTypeList.add(costTypeBuilder.build());
+        MetaBuilder metaBuilder = new MetaBuilder()
+                .setCostType(costTypeList)
+                .setDefaultNetworkMap(new ResourceId("my-default-alto-network-map"));
+        Rfc7285IrdMetadata meta = new Rfc7285IrdMetadataBuilder()
+                .setMeta(metaBuilder.build())
+                .build();
+
+        List<IrdEntry> irdEntryList = new LinkedList<>();
+        List<String> listCostTypeName = new LinkedList<>();
+        List<ResourceId> listResourceId = new LinkedList<>();
+        listResourceId.add(new ResourceId("my-default-alto-network-map"));
+        listCostTypeName.add("num-routing");
+        EntryCapabilitiesBuilder ecb = new EntryCapabilitiesBuilder()
+                .addAugmentation(Rfc7285CostTypeCapabilities.class,
+                        new Rfc7285CostTypeCapabilitiesBuilder()
+                                .setCostTypeNames(listCostTypeName)
+                                .setCostConstraints(true).build()
+                );
+        IrdEntryBuilder irdEntryBuilder = new IrdEntryBuilder()
+                .setLocation(new FixedUrlBuilder().setUri(new Uri("http://alto.example.com/costmap/num/routingcost")).build())
+                .setMediaType("application/alto-costmap+json")
+                .setEntryCapabilities(ecb.build())
+                .setUses(listResourceId)
+                .setEntryId(new ResourceId("default-ird"));
+        irdEntryList.add(irdEntryBuilder.build());
+
+        irdEntryBuilder
+                .setLocation(new RelativePathBuilder().setPath(new Uri("/costmap2/num/routingcost")).build())
+                .setMediaType("application/alto-costmap+json")
+                .setEntryCapabilities(ecb.build())
+                .setUses(listResourceId)
+                .setEntryId(new ResourceId("another-ird"));
+
+        irdEntryList.add(irdEntryBuilder.build());
+
+        when(mockIrdInstance.getAugmentation(Rfc7285IrdMetadata.class)).thenReturn(meta);
+        when(mockIrdInstance.getIrdEntry()).thenReturn(irdEntryList);
+        when(mockHttpServletRequest.getScheme()).thenReturn("http");
+        when(mockHttpServletRequest.getLocalName()).thenReturn("alto.example.com");
+        when(mockHttpServletRequest.getLocalPort()).thenReturn(80);
+        Response resultResponse = this.sirSpy.route(mockHttpServletRequest, "helloworld");
+
+        SimpleIrdRoute.Rfc7285Ird ird = new SimpleIrdRoute.Rfc7285Ird();
+        Map<String, Object> costType = new HashMap<String, Object>();
+        costType.put("cost-mode", "ordinal");
+        costType.put("cost-metric", "routingcost");
+        Map<String, Object> costTypes = new HashMap<>();
+        costTypes.put("num-routing", costType);
+        ird.meta.put("default-alto-network-map", "my-default-alto-network-map");
+        ird.meta.put("cost-types", costTypes);
+
+        Map<String, Object> resource = new HashMap<>();
+
+        resource.put("uri", "http://alto.example.com/costmap/num/routingcost");
+        resource.put("media-type", "application/alto-costmap+json");
+
+        Map<String, Object> capabilityMap = new HashMap<>();
+        capabilityMap.put("cost-type-names", listCostTypeName);
+        capabilityMap.put("cost-constraints", true);
+        resource.put("capabilities", capabilityMap);
+        List<String> uses = new LinkedList<>();
+        uses.add("my-default-alto-network-map");
+        resource.put("uses", uses);
+
+        ird.resources.put("default-ird", resource);
+        resource.put("uri", "http://alto.example.com:80/costmap2/num/routingcost");
+        ird.resources.put("another-ird", resource);
+
+        assertEquals(Maps.difference(ird.meta, ((SimpleIrdRoute.Rfc7285Ird)resultResponse.getEntity()).meta).areEqual(), true);
+
+        SimpleIrdRoute nullSimpleIrdRoute = new SimpleIrdRoute(null);
+        SimpleIrdRoute sirSpy = spy(nullSimpleIrdRoute);
+        assertEquals(sirSpy.route(mockHttpServletRequest, "helloworld").getStatus(), Response.status(Response.Status.NOT_FOUND).build().getStatus());
+    }
+}
\ No newline at end of file
diff --git a/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/simpleird/SimpleIrdUtilsTest.java b/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/simpleird/SimpleIrdUtilsTest.java
new file mode 100644 (file)
index 0000000..56e4f11
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * 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.basic.simpleird;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+import org.junit.Test;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstanceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstanceConfiguration;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstanceConfigurationKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.IrdEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.IrdEntryKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.configuration.IrdConfigurationEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.ird.instance.configuration.IrdConfigurationEntryKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.ResourceId;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import static org.junit.Assert.assertEquals;
+
+public class SimpleIrdUtilsTest {
+    ResourceId instanceId = new ResourceId("test-instance-id");
+    ResourceId resourceId = new ResourceId("test-resource-id");
+
+    @Test
+    public void getInstanceConfigurationListIID() {
+        InstanceIdentifier<IrdInstanceConfiguration> icIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class).build();
+        assertEquals(icIID, SimpleIrdUtils.getInstanceConfigurationListIID());
+    }
+
+    @Test
+    public void getInstanceListIID() {
+        InstanceIdentifier<IrdInstance> iiIID = InstanceIdentifier.builder(IrdInstance.class).build();
+        assertEquals(iiIID, SimpleIrdUtils.getInstanceListIID());
+    }
+
+    @Test
+    public void getInstanceIID() {
+        InstanceIdentifier<IrdInstance> isIID = InstanceIdentifier.builder(IrdInstance.class,
+                new IrdInstanceKey(new ResourceId("test-resource-id"))).build();
+        assertEquals(isIID, SimpleIrdUtils.getInstanceIID("test-resource-id"));
+    }
+
+    @Test
+    public void getEntryListIID() {
+        InstanceIdentifier<IrdInstance> iiIID = InstanceIdentifier.builder(IrdInstance.class, new IrdInstanceKey(instanceId)).build();
+        InstanceIdentifier<IrdEntry> ieIID = iiIID.child(IrdEntry.class);
+        assertEquals(ieIID, SimpleIrdUtils.getEntryListIID(instanceId));
+    }
+
+    @Test
+    public void getEntryIID() {
+        IrdEntryKey ieKey = new IrdEntryKey(resourceId);
+        IrdInstanceKey  iiKey = new IrdInstanceKey(instanceId);
+        InstanceIdentifier<IrdEntry> ieIID = InstanceIdentifier
+                .builder(IrdInstance.class, iiKey).build().child(IrdEntry.class, ieKey);
+        assertEquals(ieIID, SimpleIrdUtils.getEntryIID(instanceId, resourceId));
+    }
+
+    @Test
+    public void getConfigEntryListIID() {
+        IrdInstanceConfigurationKey key = new IrdInstanceConfigurationKey(resourceId);
+        InstanceIdentifier<IrdConfigurationEntry> ice = (InstanceIdentifier.builder(IrdInstanceConfiguration.class, key).build()).child(IrdConfigurationEntry.class);
+        assertEquals(ice, SimpleIrdUtils.getConfigEntryListIID(resourceId));
+    }
+    @Test
+    public void getConfigEntryIID(){
+        IrdInstanceConfigurationKey configKey = new IrdInstanceConfigurationKey(instanceId);
+        InstanceIdentifier<IrdInstanceConfiguration> iic = InstanceIdentifier.builder(IrdInstanceConfiguration.class, configKey).build();
+        IrdConfigurationEntryKey icek = new IrdConfigurationEntryKey(resourceId);
+        InstanceIdentifier<IrdConfigurationEntry> icfe = iic.child(IrdConfigurationEntry.class, icek);
+        assertEquals(SimpleIrdUtils.getConfigEntryIID(instanceId, resourceId), icfe);
+    }
+
+    @Test
+    public void testReadInstance() throws Exception {
+        IrdInstance expectedIrdInstance = new IrdInstanceBuilder()
+                .setInstanceId(new ResourceId(resourceId)).build();
+        ReadTransaction mockRT = mock(ReadTransaction.class);
+        InstanceIdentifier<IrdInstance> irdIID = InstanceIdentifier
+                .builder(IrdInstance.class, new IrdInstanceKey(resourceId)).build();
+
+        Optional<IrdInstance> returnCacheValue = Optional.of(expectedIrdInstance);
+        final CheckedFuture<Optional<IrdInstance>,  org.opendaylight.controller.md.sal.common.api.data.ReadFailedException> irdInstanceFuture;
+        irdInstanceFuture = Futures.immediateCheckedFuture(returnCacheValue);
+
+        when(mockRT.read(LogicalDatastoreType.OPERATIONAL, irdIID)).thenReturn(irdInstanceFuture);
+        IrdInstance resultIrdInstance = SimpleIrdUtils.readInstance(resourceId, mockRT);
+        assertEquals(resultIrdInstance, expectedIrdInstance);
+
+        final CheckedFuture<Optional<IrdInstance>,  org.opendaylight.controller.md.sal.common.api.data.ReadFailedException> nullFuture= Futures.immediateCheckedFuture(Optional.<IrdInstance>absent());
+        when(mockRT.read(LogicalDatastoreType.OPERATIONAL, irdIID)).thenReturn(nullFuture);
+        resultIrdInstance = SimpleIrdUtils.readInstance(resourceId, mockRT);
+        assertEquals(null, resultIrdInstance);
+    }
+}
\ No newline at end of file