BUG-8858: add integration test suite 38/61938/7
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 17 Aug 2017 13:47:08 +0000 (15:47 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 5 Sep 2017 08:43:07 +0000 (10:43 +0200)
We have a single-node, simple EOS implementation in MD-SAL. Test
singleton implementation against it.

Change-Id: Iaf98d27887d284c0a95b6f06d57d00d00d7ee042
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
singleton-service/mdsal-singleton-dom-impl/pom.xml
singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceIntegrationTest.java [new file with mode: 0644]

index 097c1b425d76a62ec18e62fd76fa7ef735ce05a6..dc57e200a9702bb6e225a48600818988073bbcc0 100644 (file)
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>mdsal-eos-dom-simple</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceIntegrationTest.java b/singleton-service/mdsal-singleton-dom-impl/src/test/java/org/opendaylight/mdsal/singleton/dom/impl/ClusterSingletonServiceIntegrationTest.java
new file mode 100644 (file)
index 0000000..80c6552
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * 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.mdsal.singleton.dom.impl;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.MockitoAnnotations.initMocks;
+
+import com.google.common.util.concurrent.SettableFuture;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+import org.opendaylight.mdsal.eos.dom.simple.SimpleDOMEntityOwnershipService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
+import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+
+/**
+ * Integration test with simple (single-node) DOM EntityOwnershipService.
+ */
+public class ClusterSingletonServiceIntegrationTest {
+    private static final ServiceGroupIdentifier GROUP_IDENTIFIER = ServiceGroupIdentifier.create("service1");
+
+    private ClusterSingletonServiceProvider singleton;
+    private DOMEntityOwnershipService eos;
+    @Mock
+    private ClusterSingletonService service1;
+    @Mock
+    private ClusterSingletonService service2;
+    @Mock
+    private ClusterSingletonService service3;
+    @Mock
+    private ClusterSingletonService service4;
+
+    private SettableFuture<Void> serviceFuture1;
+    private SettableFuture<Void> serviceFuture2;
+
+    @Before
+    public void setup() {
+        initMocks(this);
+
+        doReturn(GROUP_IDENTIFIER).when(service1).getIdentifier();
+        serviceFuture1 = SettableFuture.create();
+        doReturn(serviceFuture1).when(service1).closeServiceInstance();
+        doNothing().when(service1).instantiateServiceInstance();
+
+        doReturn(GROUP_IDENTIFIER).when(service2).getIdentifier();
+        serviceFuture2 = SettableFuture.create();
+        doReturn(serviceFuture2).when(service2).closeServiceInstance();
+        doNothing().when(service2).instantiateServiceInstance();
+
+        eos = new SimpleDOMEntityOwnershipService();
+        final DOMClusterSingletonServiceProviderImpl impl = new DOMClusterSingletonServiceProviderImpl(eos);
+        impl.initializeProvider();
+        singleton = impl;
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        singleton.close();
+    }
+
+    @Test
+    public void testServiceBringupImmediate() throws Exception {
+        ClusterSingletonServiceRegistration reg = singleton.registerClusterSingletonService(service1);
+        assertNotNull(reg);
+        verify(service1).instantiateServiceInstance();
+        serviceFuture1.set(null);
+        reg.close();
+        verify(service1).closeServiceInstance();
+
+        reg = singleton.registerClusterSingletonService(service2);
+        assertNotNull(reg);
+        verify(service2).instantiateServiceInstance();
+        serviceFuture2.set(null);
+        reg.close();
+        verify(service2).closeServiceInstance();
+    }
+
+    @Test
+    public void testServiceBringupPostClose() throws Exception {
+        ClusterSingletonServiceRegistration reg = singleton.registerClusterSingletonService(service1);
+        assertNotNull(reg);
+        verify(service1).instantiateServiceInstance();
+        reg.close();
+        verify(service1).closeServiceInstance();
+        serviceFuture1.set(null);
+
+        reg = singleton.registerClusterSingletonService(service2);
+        assertNotNull(reg);
+        verify(service2).instantiateServiceInstance();
+        reg.close();
+        verify(service2).closeServiceInstance();
+        serviceFuture2.set(null);
+    }
+
+    @Test
+    public void testServiceBringupPostSecond() throws Exception {
+        ClusterSingletonServiceRegistration reg = singleton.registerClusterSingletonService(service1);
+        assertNotNull(reg);
+        verify(service1).instantiateServiceInstance();
+        reg.close();
+        verify(service1).closeServiceInstance();
+
+        reg = singleton.registerClusterSingletonService(service2);
+        assertNotNull(reg);
+        serviceFuture1.set(null);
+
+        verify(service2).instantiateServiceInstance();
+        reg.close();
+        verify(service2).closeServiceInstance();
+        serviceFuture2.set(null);
+    }
+
+    @Test
+    public void testServiceNoBringup() throws Exception {
+        ClusterSingletonServiceRegistration reg = singleton.registerClusterSingletonService(service1);
+        assertNotNull(reg);
+        verify(service1).instantiateServiceInstance();
+        reg.close();
+        verify(service1).closeServiceInstance();
+
+        reg = singleton.registerClusterSingletonService(service2);
+        assertNotNull(reg);
+        reg.close();
+        serviceFuture1.set(null);
+
+        verify(service2, never()).instantiateServiceInstance();
+        verify(service2, never()).closeServiceInstance();
+
+        reg = singleton.registerClusterSingletonService(service2);
+        assertNotNull(reg);
+        verify(service2).instantiateServiceInstance();
+        reg.close();
+        verify(service2).closeServiceInstance();
+        serviceFuture2.set(null);
+    }
+}