Fix InMemory shard transaction chaining.
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / test / java / org / opendaylight / mdsal / dom / store / inmemory / ShardSubmitCoordinationTaskTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, 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 package org.opendaylight.mdsal.dom.store.inmemory;
9
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Mockito.doNothing;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.mock;
14 import static org.mockito.Mockito.verify;
15 import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_IDENTIFIER;
16
17 import java.lang.reflect.Field;
18 import java.util.Collections;
19 import org.junit.Before;
20 import org.junit.Test;
21
22 public class ShardSubmitCoordinationTaskTest {
23
24     private final InmemoryDOMDataTreeShardWriteTransaction tx = mock(InmemoryDOMDataTreeShardWriteTransaction.class);
25
26     @Before
27     public void setUp() throws Exception {
28         doReturn("TestTx").when(tx).getIdentifier();
29         doReturn("TestTx").when(tx).toString();
30         doNothing().when(tx).transactionCommited(any());
31     }
32
33     @Test
34     public void basicTest() throws Exception {
35         final ShardSubmitCoordinationTask shardSubmitCoordinationTask =
36                 new ShardSubmitCoordinationTask(DOM_DATA_TREE_IDENTIFIER, Collections.EMPTY_SET, tx);
37
38         final ShardCanCommitCoordinationTask canCommitCoordinationTask = mock(ShardCanCommitCoordinationTask.class);
39         doNothing().when(canCommitCoordinationTask).canCommitBlocking();
40         final ShardPreCommitCoordinationTask preCommitCoordinationTask = mock(ShardPreCommitCoordinationTask.class);
41         doNothing().when(preCommitCoordinationTask).preCommitBlocking();
42         final ShardCommitCoordinationTask commitCoordinationTask = mock(ShardCommitCoordinationTask.class);
43         doNothing().when(commitCoordinationTask).commitBlocking();
44
45         Field canCommitCoordinationTaskField =
46                 ShardSubmitCoordinationTask.class.getDeclaredField("canCommitCoordinationTask");
47         Field preCommitCoordinationTaskField =
48                 ShardSubmitCoordinationTask.class.getDeclaredField("preCommitCoordinationTask");
49         Field commitCoordinationTaskField =
50                 ShardSubmitCoordinationTask.class.getDeclaredField("commitCoordinationTask");
51
52         canCommitCoordinationTaskField.setAccessible(true);
53         preCommitCoordinationTaskField.setAccessible(true);
54         commitCoordinationTaskField.setAccessible(true);
55
56         canCommitCoordinationTaskField.set(shardSubmitCoordinationTask, canCommitCoordinationTask);
57         preCommitCoordinationTaskField.set(shardSubmitCoordinationTask, preCommitCoordinationTask);
58         commitCoordinationTaskField.set(shardSubmitCoordinationTask, commitCoordinationTask);
59
60         shardSubmitCoordinationTask.call();
61
62         verify(canCommitCoordinationTask).canCommitBlocking();
63         verify(preCommitCoordinationTask).preCommitBlocking();
64         verify(commitCoordinationTask).commitBlocking();
65     }
66 }