2 * Copyright © 2017 AT&T, Inc. and others. All rights reserved.
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
9 package org.opendaylight.transportpce.common.NetworkTransaction;
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;
31 public class NetworkTransactionServiceTest extends AbstractTest {
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;
41 private static final Logger LOG = LoggerFactory
42 .getLogger(NetworkTransactionServiceTest.class);
44 InstanceIdentifier<Network> nwInstanceIdentifier = InstanceIdentifier
45 .builder(Network.class,
47 new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)))
52 public void instantiate() {
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);
63 public void WhenOneThreadIsWritingOtherThreadsAreWaiting() {
65 Thread t1 = new Thread(runnable);
66 Thread t2 = new Thread(runnable);
67 Thread t3 = new Thread(runnable);
73 //Check thread 2 is waiting to acquire lock when thread 1 is executing
74 Assert.assertTrue(t2.getState().equals(Thread.State.WAITING));
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));
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));
86 } catch (InterruptedException e) {
87 LOG.error(e.getMessage());
91 Runnable runnable = new Runnable() {
94 networkTransactionService.merge(defaultDatastore, nwInstanceIdentifier, defaultData);
97 //Add delay to mock thread execution delay
99 } catch (InterruptedException e) {
100 LOG.error(e.getMessage());
102 networkTransactionService.submit();