Add unit tests for simple-ird and manual-maps 25/43125/2
authorXiao Lin <linxiao9292@outlook.com>
Thu, 4 Aug 2016 15:27:12 +0000 (23:27 +0800)
committerjensenzhang <jingxuan.n.zhang@gmail.com>
Fri, 5 Aug 2016 00:44:27 +0000 (08:44 +0800)
Change-Id: Ic3d54b1c17066bf793a0ffb8620d153ee37525a8
Signed-off-by: Xiao Lin <linxiao9292@outlook.com>
Signed-off-by: jensenzhang <jingxuan.n.zhang@gmail.com>
alto-basic/manual-maps/impl/src/test/java/org/opendaylight/alto/basic/impl/ManualMapsRouteTest.java [new file with mode: 0644]
alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListenerTest.java [new file with mode: 0644]
alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdListenerTest.java [new file with mode: 0644]

diff --git a/alto-basic/manual-maps/impl/src/test/java/org/opendaylight/alto/basic/impl/ManualMapsRouteTest.java b/alto-basic/manual-maps/impl/src/test/java/org/opendaylight/alto/basic/impl/ManualMapsRouteTest.java
new file mode 100644 (file)
index 0000000..a393cfc
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * 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 org.junit.Test;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.Response;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.opendaylight.alto.basic.impl.ManualMapsRoute.ALTO_CONFIG;
+import static org.opendaylight.alto.basic.impl.ManualMapsRoute.CONFIG_SUCCESS;
+
+public class ManualMapsRouteTest {
+    HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+    AltoManualMapsProvider mockProvider = mock(AltoManualMapsProvider.class);
+    ManualMapsRoute mmr = new ManualMapsRoute(mockProvider);
+    @Test
+    public void modifyResourceRoute() throws Exception {
+        Response resultResponse = mmr.modifyResourceRoute(mockRequest, "firstpath", "firstmap");
+        Response expectResponse = Response.ok(CONFIG_SUCCESS + "(POST: " + "firstpath" + ")", ALTO_CONFIG).build();
+        assertEquals(expectResponse.getStatus(), resultResponse.getStatus());
+        assertEquals(expectResponse.getEntity(), resultResponse.getEntity());
+        assertEquals(expectResponse.getMetadata(), resultResponse.getMetadata());
+
+    }
+
+    @Test
+    public void newResourceRoute() throws Exception {
+        Response resultResponse = mmr.newResourceRoute(mockRequest, "secondpath", "secondmap");
+        Response expectResponse =  Response.ok(CONFIG_SUCCESS + "(PUT: " + "secondpath" + ")", ALTO_CONFIG).build();
+        assertEquals(expectResponse.getStatus(), resultResponse.getStatus());
+        assertEquals(expectResponse.getEntity(), resultResponse.getEntity());
+        assertEquals(expectResponse.getMetadata(), resultResponse.getMetadata());
+
+    }
+
+    @Test
+    public void removeResourceRoute() throws Exception {
+        Response resultResponse = mmr.removeResourceRoute(mockRequest, "thirdpath", "thirdmap");
+        Response expectResponse = Response.ok(CONFIG_SUCCESS + "(DELETE: " + "thirdpath" + ")", ALTO_CONFIG).build();
+        assertEquals(expectResponse.getStatus(), resultResponse.getStatus());
+        assertEquals(expectResponse.getEntity(), resultResponse.getEntity());
+        assertEquals(expectResponse.getMetadata(), resultResponse.getMetadata());
+
+    }
+
+}
\ No newline at end of file
diff --git a/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListenerTest.java b/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdEntryListenerTest.java
new file mode 100644 (file)
index 0000000..766937d
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * 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.impl;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+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.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+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.IrdInstanceConfigurationBuilder;
+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.ird.entry.configuration.data.location.FixedUrlBuilder;
+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.IrdConfigurationEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.ContextKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.Resource;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.ResourceBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.context.ResourceKey;
+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.resourcepool.rev150921.context.resource.ContextTagBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.ResourceId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.Tag;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.costmap.rev151021.ResourceTypeFilteredCostmap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.endpointcost.rev151021.ResourceTypeEndpointcost;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.ird.rev151021.ResourceTypeIrd;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.ResourceTypeFilteredNetworkmap;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.model.networkmap.rev151021.ResourceTypeNetworkmap;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Future;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class SimpleIrdEntryListenerTest {
+
+    private static final String DEFAULT_CONTEXT_UUID = "00000000-0000-0000-0000-000000000001";
+    private static final String DEFAULT_POOL_RESOURCE = "DEFAULT_RESOURCE";
+    private static final String DEFAULT_IRD_CONFIGURATION_KEY = "DEFAULT_IRD_CONFIGURATION";
+
+    private DataBroker m_dataBroker = mock(DataBroker.class);
+    private  ListenerRegistration<DataChangeListener> m_reg = mock(ListenerRegistration.class);
+    private InstanceIdentifier<Context> contextIId = InstanceIdentifier.builder(Context.class, new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID))).build();
+    private InstanceIdentifier<Resource> resourceIID = contextIId.child(Resource.class, new ResourceKey(new ResourceId(DEFAULT_POOL_RESOURCE)));
+    private static final Uuid ecUuid = new Uuid(DEFAULT_CONTEXT_UUID);
+    private SimpleIrdEntryListener simpleIrdEntryListener = new SimpleIrdEntryListener(resourceIID, ecUuid);
+    private ReadTransaction rx = mock(ReadTransaction.class);
+    private ReadWriteTransaction rwx = mock(ReadWriteTransaction.class);
+    private MockDataChangedEvent dataChangedEvent = new MockDataChangedEvent();
+
+    @Before
+    public void setUp() {
+        when(m_dataBroker.registerDataChangeListener(
+                any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class),
+                any(DataChangeListener.class),
+                any(AsyncDataBroker.DataChangeScope.class)))
+                .thenReturn(m_reg);
+
+        InstanceIdentifier<IrdConfigurationEntry> iiceIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class
+                , new IrdInstanceConfigurationKey(new ResourceId(DEFAULT_IRD_CONFIGURATION_KEY)))
+                .child(IrdConfigurationEntry.class).build();
+        simpleIrdEntryListener.register(m_dataBroker, iiceIID);
+    }
+
+    @Test
+    public void register() throws Exception {
+        when(m_dataBroker.registerDataChangeListener(
+                any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class),
+                any(DataChangeListener.class),
+                any(AsyncDataBroker.DataChangeScope.class)))
+                .thenReturn(m_reg);
+
+        InstanceIdentifier<IrdConfigurationEntry> iiceIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class
+                , new IrdInstanceConfigurationKey(new ResourceId(DEFAULT_IRD_CONFIGURATION_KEY)))
+                .child(IrdConfigurationEntry.class).build();
+        simpleIrdEntryListener.register(m_dataBroker, iiceIID);
+        verify(m_dataBroker,times(2)).registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, iiceIID
+                , this.simpleIrdEntryListener, AsyncDataBroker.DataChangeScope.SUBTREE);
+    }
+
+    @Test
+    public void isAcceptableContext() throws Exception {
+        boolean result = simpleIrdEntryListener.isAcceptableContext(ecUuid);
+        assertEquals(result, true);
+    }
+
+    @Test
+    public void getValidResource() throws Exception {
+        ResourceId resourceId = new ResourceId(DEFAULT_POOL_RESOURCE);
+        ResourceBuilder resourceBuilder = new ResourceBuilder().setResourceId(resourceId);
+        Optional<Resource> opRe = Optional.of(resourceBuilder.build());
+        final CheckedFuture<Optional<Resource>,  ReadFailedException> opReFuture;
+        opReFuture = Futures.immediateCheckedFuture(opRe);
+        when(rx.read(LogicalDatastoreType.OPERATIONAL, resourceIID)).thenReturn(opReFuture);
+        Future<Optional<Resource>> result = simpleIrdEntryListener.getValidResource(resourceId, resourceIID, rx);
+        assertEquals(opReFuture, result);
+    }
+
+    @Test
+    public void onDataChanged() throws Exception {
+        InstanceIdentifier<IrdConfigurationEntry> iiceIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class
+                , new IrdInstanceConfigurationKey(new ResourceId(DEFAULT_IRD_CONFIGURATION_KEY)))
+                .child(IrdConfigurationEntry.class).build();
+        simpleIrdEntryListener.register(m_dataBroker, iiceIID);
+
+        InstanceIdentifier<IrdInstanceConfiguration> configIID = InstanceIdentifier.builder(
+                IrdInstanceConfiguration.class, new IrdInstanceConfigurationKey(new ResourceId("DEFAULT_CONFIG"))
+        ).build();
+        when(m_dataBroker.newReadWriteTransaction()).thenReturn(rwx);
+
+        Optional<IrdInstanceConfiguration> iicOp = Optional.of(new IrdInstanceConfigurationBuilder().build());
+        final CheckedFuture<Optional<IrdInstanceConfiguration>,  ReadFailedException> iicOpFu;
+        iicOpFu = Futures.immediateCheckedFuture(iicOp);
+
+        when(rwx.read(LogicalDatastoreType.CONFIGURATION, configIID)).thenReturn(iicOpFu);
+        simpleIrdEntryListener.onDataChanged(dataChangedEvent);
+
+        verify(rwx).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void isValidResource() throws Exception {
+        ResourceBuilder rb = new ResourceBuilder()
+                .setKey(new ResourceKey(new ResourceId("test")))
+                 .setType(null);
+        assertEquals(simpleIrdEntryListener.isValidResource(rb.build()), false);
+    }
+
+    @Test
+    public void readEntries() throws Exception {
+
+        List<IrdConfigurationEntry> configs = new LinkedList<>();
+
+        ContextKey ck = new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID));
+        ResourceKey rk = new ResourceKey(new ResourceId("FIRST_RESOURCE"));
+        ResourceKey ik = new ResourceKey(new ResourceId("FIRST_INSTANCE"));
+        InstanceIdentifier<Resource> resourceIID = InstanceIdentifier.builder(Context.class, ck)
+                .child(Resource.class, rk).build();
+        InstanceIdentifier<Resource> instanceIID = InstanceIdentifier.builder(Context.class, ck)
+                .child(Resource.class, ik).build();
+        IrdConfigurationEntryBuilder configBuilder = new IrdConfigurationEntryBuilder()
+                .setEntryId(new ResourceId("THE_FIRST_ENTRY_ID"))
+                .setInstance(instanceIID)
+                .setLocation(new FixedUrlBuilder()
+                .setUri(new Uri("http://alto.example.com/first_instance"))
+                .build());
+        configs.add(configBuilder.build());
+        Map<IrdConfigurationEntry, Resource> result = simpleIrdEntryListener.readEntries(configs, rwx);
+        assertEquals(result, null);
+    }
+
+    @Test
+    public void resolveDependency() throws Exception {
+        Map<IrdConfigurationEntry, Resource> resources = new HashMap<>();
+        IrdConfigurationEntryBuilder iicb = new IrdConfigurationEntryBuilder();
+        List<ContextTag> contextTagList = new LinkedList<>();
+        contextTagList.add(new ContextTagBuilder().setTag(new Tag("DEFAULT_CONTEXT_TAG_1")).build());
+        ResourceBuilder rb = new ResourceBuilder()
+                .setDefaultTag(new Tag("DEFAULT_CONTEXT_TAG_1"))
+                .setContextTag(contextTagList)
+                .setKey(new ResourceKey(new ResourceId("RESOURCE_1")));
+        resources.put(iicb.build(), rb.build());
+        simpleIrdEntryListener.resolveDependency(resources);
+    }
+
+    @Test
+    public void update() throws Exception {
+        List<IrdConfigurationEntry> entryList = new LinkedList<>();
+        entryList.add(new IrdConfigurationEntryBuilder().build());
+        List<IrdConfigurationEntry> configs = new LinkedList<>();
+        ContextKey ck = new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID));
+        ResourceKey rk = new ResourceKey(new ResourceId("FIRST_RESOURCE"));
+        ResourceKey ik = new ResourceKey(new ResourceId("FIRST_INSTANCE"));
+        InstanceIdentifier<Resource> resourceIID = InstanceIdentifier.builder(Context.class, ck)
+                .child(Resource.class, rk).build();
+        InstanceIdentifier<Resource> instanceIID = InstanceIdentifier.builder(Context.class, ck)
+                .child(Resource.class, ik).build();
+        IrdConfigurationEntryBuilder configBuilder = new IrdConfigurationEntryBuilder()
+                .setEntryId(new ResourceId("THE_FIRST_ENTRY_ID"))
+                .setInstance(instanceIID)
+                .setLocation(new FixedUrlBuilder()
+                        .setUri(new Uri("http://alto.example.com/first_instance"))
+                        .build());
+        configs.add(configBuilder.build());
+        IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
+                .setIrdConfigurationEntry(configs);
+        simpleIrdEntryListener.update(iicb.build(), rwx);
+    }
+
+    @Test
+    public void updateIrdInstance() throws Exception {
+        IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder();
+        Map<IrdConfigurationEntry, Resource> resources = new HashMap<>();
+        ContextKey ck = new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID));
+        ResourceKey ik = new ResourceKey(new ResourceId("FIRST_INSTANCE"));
+        InstanceIdentifier<Resource> instanceIID = InstanceIdentifier.builder(Context.class, ck)
+                .child(Resource.class, ik).build();
+        IrdConfigurationEntryBuilder iceb = new IrdConfigurationEntryBuilder()
+                .setEntryId(new ResourceId("test-ird-configuration-entry"))
+                .setInstance(instanceIID);
+        ResourceBuilder rb = new ResourceBuilder()
+                .setKey(new ResourceKey(new ResourceId("test-resource-id")))
+                .setType(ResourceTypeIrd.class);
+        resources.put(iceb.build(), rb.build());
+        rb.setType(ResourceTypeNetworkmap.class);
+        resources.put(iceb.build(), rb.build());
+        rb.setType(ResourceTypeFilteredNetworkmap.class);
+        resources.put(iceb.build(), rb.build());
+        rb.setType(ResourceTypeEndpointcost.class);
+        resources.put(iceb.build(), rb.build());
+        rb.setType(ResourceTypeFilteredCostmap.class);
+        resources.put(iceb.build(), rb.build());
+        Map<ResourceId, List<ResourceId>> dependencyMap = new HashMap<>();
+        simpleIrdEntryListener.updateIrdInstance(iicb.build(), resources, dependencyMap, rwx);
+    }
+
+    @Test
+    public void cleanupIrdInstance() throws Exception {
+        IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder();
+        simpleIrdEntryListener.cleanupIrdInstance(iicb.build(), rwx);
+    }
+
+    @Test
+    public void close() throws Exception {
+        simpleIrdEntryListener.close();
+        verify(m_reg).close();
+    }
+
+    static class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
+        Map<InstanceIdentifier<?>,DataObject> created = new HashMap<>();
+        Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+        Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
+            return created;
+        }
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
+            return updated;
+        }
+
+        @Override
+        public Set<InstanceIdentifier<?>> getRemovedPaths() {
+            return removed;
+        }
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
+            throw new UnsupportedOperationException("Not implemented by mock");
+        }
+
+        @Override
+        public DataObject getOriginalSubtree() {
+            throw new UnsupportedOperationException("Not implemented by mock");
+        }
+
+        @Override
+        public DataObject getUpdatedSubtree() {
+            throw new UnsupportedOperationException("Not implemented by mock");
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdListenerTest.java b/alto-basic/simple-ird/impl/src/test/java/org/opendaylight/alto/basic/impl/SimpleIrdListenerTest.java
new file mode 100644 (file)
index 0000000..3a67ffb
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * 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.impl;
+
+
+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.DataChangeListener;
+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.AsyncDataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+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.IrdInstanceConfigurationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.basic.simple.ird.rev151021.IrdInstanceConfigurationKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.Context;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.resourcepool.rev150921.ContextKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.core.types.rev150921.ResourceId;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class SimpleIrdListenerTest {
+
+    private DataBroker m_dataBroker = mock(DataBroker.class);
+    private ListenerRegistration<DataChangeListener> m_reg = mock(ListenerRegistration.class);
+    private SimpleIrdListener simpleIrdListener = new SimpleIrdListener(new Uuid(DEFAULT_UUID));
+    private WriteTransaction wx = mock(WriteTransaction.class);
+    private ReadWriteTransaction rwx = mock(ReadWriteTransaction.class);
+    private MockDataChangedEvent dataChangedEvent = new MockDataChangedEvent();
+
+    private static final String DEFAULT_UUID = "00000000-0000-0000-0000-000000000001";
+    private static final String DEFAULT_CONTEXT_UUID = "00000000-0000-0000-0000-000000000001";
+    private static String ORIGINAL_INSTANCE_ID="ORIGINAL_INSTANCE_ID";
+    private static String UPDATED_INSTANCE_ID="UPDATED_INSTANCE_ID";
+    private static String DEFAULT_INSTANCE_ID="DEFAULT_INSTANCE_ID";
+
+    @Before
+    public void setUp() {
+        when(m_dataBroker.registerDataChangeListener(
+                any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class),
+                any(DataChangeListener.class),
+                any(AsyncDataBroker.DataChangeScope.class)))
+                .thenReturn(m_reg);
+
+        InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class).build();
+        simpleIrdListener.register(m_dataBroker, iicIID);
+    }
+
+    @Test
+    public void register() throws Exception {
+        when(m_dataBroker.registerDataChangeListener(
+                any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class),
+                any(DataChangeListener.class),
+                any(AsyncDataBroker.DataChangeScope.class)))
+                .thenReturn(m_reg);
+
+        InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class).build();
+        simpleIrdListener.register(m_dataBroker, iicIID);
+        verify(m_dataBroker, times(2)).registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, iicIID
+                , this.simpleIrdListener, AsyncDataBroker.DataChangeScope.ONE);
+
+    }
+
+    @Test
+    public void onDataChanged() throws Exception {
+        when(m_dataBroker.newWriteOnlyTransaction()).thenReturn(wx);
+        simpleIrdListener.onDataChanged(dataChangedEvent);
+        //TBD
+    }
+
+    @Test
+    public void updateIrd() throws Exception {
+        IrdInstanceConfigurationBuilder originalIICB = new IrdInstanceConfigurationBuilder()
+                .setInstanceId(new ResourceId(ORIGINAL_INSTANCE_ID));
+        IrdInstanceConfigurationBuilder updatedIICB = new IrdInstanceConfigurationBuilder()
+                .setInstanceId(new ResourceId(UPDATED_INSTANCE_ID));
+        simpleIrdListener.updateIrd(originalIICB.build(), updatedIICB.build(), wx);
+
+    }
+
+    @Test
+    public void removeIrd() throws Exception {
+        IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
+                .setInstanceId(new ResourceId("test-instance-id"));
+        simpleIrdListener.removeIrd(iicb.build(), wx);
+    }
+
+    @Test
+    public void isValidEntryContext() throws Exception {
+        InstanceIdentifier<Context> contextIID = InstanceIdentifier
+                .builder(Context.class, new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID))).build();
+        assertEquals(simpleIrdListener.isValidEntryContext(contextIID), true);
+    }
+
+    @Test
+    public void createIrd() throws Exception {
+        InstanceIdentifier<Context> contextIId = InstanceIdentifier.builder(Context.class, new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID))).build();
+        IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
+                .setInstanceId(new ResourceId(DEFAULT_INSTANCE_ID))
+                .setEntryContext(contextIId);
+        simpleIrdListener.createIrd(iicb.build(), wx);
+    }
+
+    @Test
+    public void close() throws Exception {
+        simpleIrdListener.close();
+        verify(m_reg).close();
+    }
+
+    static class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
+        Map<InstanceIdentifier<?>,DataObject> created = new HashMap<>();
+        Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+        Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
+            return created;
+        }
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
+            Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
+            InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(
+                    IrdInstanceConfiguration.class, new IrdInstanceConfigurationKey(new ResourceId("UPDATED_CONFIG"))).build();
+            IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
+                    .setKey(new IrdInstanceConfigurationKey(new ResourceId("UPDATED_CONFIG")));
+            updated.put(iicIID, iicb.build());
+
+            return updated;
+        }
+
+        @Override
+        public Set<InstanceIdentifier<?>> getRemovedPaths() {
+            return removed;
+        }
+
+        @Override
+        public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
+            Map<InstanceIdentifier<?>, DataObject> originaled = new HashMap<>();
+            InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(
+                    IrdInstanceConfiguration.class, new IrdInstanceConfigurationKey(new ResourceId("ORIGINAL_CONFIG"))).build();
+            IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
+                    .setKey(new IrdInstanceConfigurationKey(new ResourceId("ORIGINAL_CONFIG")));
+            originaled.put(iicIID, iicb.build());
+            return originaled;
+        }
+
+        @Override
+        public DataObject getOriginalSubtree() {
+            throw new UnsupportedOperationException("Not implemented by mock");
+        }
+
+        @Override
+        public DataObject getUpdatedSubtree() {
+            throw new UnsupportedOperationException("Not implemented by mock");
+        }
+    }
+
+}
\ No newline at end of file