Sync Common folder
[transportpce.git] / common / src / test / java / org / opendaylight / transportpce / common / NetworkTransaction
diff --git a/common/src/test/java/org/opendaylight/transportpce/common/NetworkTransaction b/common/src/test/java/org/opendaylight/transportpce/common/NetworkTransaction
new file mode 100644 (file)
index 0000000..d4981c1
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright © 2017 AT&T, 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.transportpce.common.NetworkTransaction;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.transportpce.common.NetworkUtils;
+import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
+import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.common.network.RequestProcessor;
+import org.opendaylight.transportpce.test.AbstractTest;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+
+public class NetworkTransactionServiceTest extends AbstractTest {
+
+    private NetworkTransactionService networkTransactionService;
+    private LogicalDatastoreType defaultDatastore = LogicalDatastoreType.CONFIGURATION;
+    private NetworkBuilder nwBuilder = new NetworkBuilder();
+    private NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID);
+    private Network defaultData;
+    ExecutorService executor;
+
+
+    private static final Logger LOG = LoggerFactory
+            .getLogger(NetworkTransactionServiceTest.class);
+
+    InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier
+            .builder(Network.class,
+                    new NetworkKey(
+                            new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
+            .build();
+
+
+    @Before
+    public void instantiate() {
+
+        networkTransactionService = new NetworkTransactionImpl(new RequestProcessor(getDataBroker()));
+        nwBuilder.setNetworkId(nwId);
+        nwBuilder.setKey(nwBuilder.getKey());
+        defaultData = nwBuilder.build();
+        executor = Executors.newFixedThreadPool(3);
+
+    }
+
+    @Test
+    public void WhenOneThreadIsWritingOtherThreadsAreWaiting() {
+
+        Thread t1 = new Thread(runnable);
+        Thread t2 = new Thread(runnable);
+        Thread t3 = new Thread(runnable);
+
+        t1.start();
+        t2.start();
+        t3.start();
+
+        //Check thread 2 is waiting to acquire lock when thread 1 is executing
+        Assert.assertTrue(t2.getState().equals(Thread.State.WAITING));
+
+        LOG.info(t3.getState().toString());
+        //Check thread 3 is waiting to acquire lock when thread 1 is executing
+        Assert.assertTrue(t3.getState().equals(Thread.State.WAITING));
+
+        try {
+            t1.join();
+            //Check thread 3 is waiting to acquire lock when thread 1 is finished and thread is still in executing
+            Assert.assertTrue(t3.getState().equals(Thread.State.WAITING));
+            t2.join();
+            t3.join();
+        } catch (InterruptedException e) {
+          LOG.error(e.getMessage());
+        }
+    }
+
+    Runnable runnable = new Runnable() {
+        @Override
+        public void run() {
+            networkTransactionService.merge(defaultDatastore, nwInstanceIdentifier, defaultData);
+            try {
+
+                //Add delay to mock thread execution delay
+                Thread.sleep(10000);
+            } catch (InterruptedException e) {
+                LOG.error(e.getMessage());
+            }
+            networkTransactionService.submit();
+
+        }
+    };
+}