Sync Common folder
[transportpce.git] / common / src / test / java / org / opendaylight / transportpce / common / NetworkTransaction
1 /*
2  * Copyright © 2017 AT&T, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.transportpce.common.NetworkTransaction;
10
11 import org.junit.Assert;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.transportpce.common.NetworkUtils;
16 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
17 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
18 import org.opendaylight.transportpce.common.network.RequestProcessor;
19 import org.opendaylight.transportpce.test.AbstractTest;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.Network;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkId;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev150608.NetworkKey;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import java.util.concurrent.ExecutorService;
28 import java.util.concurrent.Executors;
29
30
31 public class NetworkTransactionServiceTest extends AbstractTest {
32
33     private NetworkTransactionService networkTransactionService;
34     private LogicalDatastoreType defaultDatastore = LogicalDatastoreType.CONFIGURATION;
35     private NetworkBuilder nwBuilder = new NetworkBuilder();
36     private NetworkId nwId = new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID);
37     private Network defaultData;
38     ExecutorService executor;
39
40
41     private static final Logger LOG = LoggerFactory
42             .getLogger(NetworkTransactionServiceTest.class);
43
44     InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier
45             .builder(Network.class,
46                     new NetworkKey(
47                             new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
48             .build();
49
50
51     @Before
52     public void instantiate() {
53
54         networkTransactionService = new NetworkTransactionImpl(new RequestProcessor(getDataBroker()));
55         nwBuilder.setNetworkId(nwId);
56         nwBuilder.setKey(nwBuilder.getKey());
57         defaultData = nwBuilder.build();
58         executor = Executors.newFixedThreadPool(3);
59
60     }
61
62     @Test
63     public void WhenOneThreadIsWritingOtherThreadsAreWaiting() {
64
65         Thread t1 = new Thread(runnable);
66         Thread t2 = new Thread(runnable);
67         Thread t3 = new Thread(runnable);
68
69         t1.start();
70         t2.start();
71         t3.start();
72
73         //Check thread 2 is waiting to acquire lock when thread 1 is executing
74         Assert.assertTrue(t2.getState().equals(Thread.State.WAITING));
75
76         LOG.info(t3.getState().toString());
77         //Check thread 3 is waiting to acquire lock when thread 1 is executing
78         Assert.assertTrue(t3.getState().equals(Thread.State.WAITING));
79
80         try {
81             t1.join();
82             //Check thread 3 is waiting to acquire lock when thread 1 is finished and thread is still in executing
83             Assert.assertTrue(t3.getState().equals(Thread.State.WAITING));
84             t2.join();
85             t3.join();
86         } catch (InterruptedException e) {
87           LOG.error(e.getMessage());
88         }
89     }
90
91     Runnable runnable = new Runnable() {
92         @Override
93         public void run() {
94             networkTransactionService.merge(defaultDatastore, nwInstanceIdentifier, defaultData);
95             try {
96
97                 //Add delay to mock thread execution delay
98                 Thread.sleep(10000);
99             } catch (InterruptedException e) {
100                 LOG.error(e.getMessage());
101             }
102             networkTransactionService.submit();
103
104         }
105     };
106 }