Adjust to yangtools-2.0.0 changes
[mdsal.git] / dom / mdsal-dom-spi / src / test / java / org / opendaylight / mdsal / dom / spi / shard / WritableNodeOperationTest.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.spi.shard;
9
10 import static org.mockito.Mockito.doNothing;
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.verify;
13
14 import java.util.Collection;
15 import java.util.HashMap;
16 import java.util.HashSet;
17 import java.util.Map;
18 import java.util.Optional;
19 import org.junit.After;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
24 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer;
26
27 public class WritableNodeOperationTest extends WritableNodeOperation {
28
29     @Test
30     public void enterTest() throws Exception {
31         Assert.assertEquals(TestUtils.DOM_DATA_TREE_WRITE_CURSOR, this.getCursor());
32
33         returnNull();
34         Assert.assertEquals(TestUtils.DOM_DATA_TREE_WRITE_CURSOR.toString(),
35                 this.enter(TestUtils.PATH_ARGUMENT).toString());
36         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).enter(TestUtils.PATH_ARGUMENT);
37         verify(TestUtils.WRITEABLE_MODIFICATION_NODE).getChild(TestUtils.PATH_ARGUMENT);
38
39         returnNoNull();
40         this.enter(TestUtils.PATH_ARGUMENT);
41         verify(TestUtils.WRITEABLE_MODIFICATION_NODE).createOperation(TestUtils.DOM_DATA_TREE_WRITE_CURSOR);
42     }
43
44     @Test
45     public void writeTest() throws Exception {
46         returnNull();
47         this.write(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE);
48         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).write(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE);
49
50         returnNoNull(TestUtils.NORMALIZED_NODE_CONTAINER);
51         this.write(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
52         verify(TestUtils.WRITE_CURSOR_STRATEGY).writeToCurrent(TestUtils.NORMALIZED_NODE_CONTAINER);
53     }
54
55     @Test
56     public void writeToCurrentTest() throws Exception {
57         returnNull();
58         Map<PathArgument, WriteableModificationNode> childrenWithSubShards = new HashMap<>();
59         childrenWithSubShards.put(TestUtils.PATH_ARGUMENT, TestUtils.WRITEABLE_MODIFICATION_NODE);
60         doReturn(childrenWithSubShards).when(TestUtils.WRITEABLE_MODIFICATION_NODE).getChildrenWithSubshards();
61         doReturn(Optional.of(TestUtils.NORMALIZED_NODE))
62                 .when(TestUtils.NORMALIZED_NODE_CONTAINER).getChild(TestUtils.PATH_ARGUMENT);
63         this.writeToCurrent(TestUtils.NORMALIZED_NODE_CONTAINER);
64         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).delete(TestUtils.PATH_ARGUMENT);
65         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).exit();
66     }
67
68     @Test
69     public void mergeTest() throws Exception {
70         returnNull();
71         this.merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
72         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR)
73                 .merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
74
75         returnNoNull(TestUtils.NORMALIZED_NODE_CONTAINER);
76         this.merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
77         verify(TestUtils.WRITE_CURSOR_STRATEGY).mergeToCurrent(TestUtils.NORMALIZED_NODE_CONTAINER);
78     }
79
80     @Test
81     public void deleteTest() throws Exception {
82         returnNoNull();
83         this.delete(TestUtils.PATH_ARGUMENT);
84         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).delete(TestUtils.PATH_ARGUMENT);
85         verify(TestUtils.WRITEABLE_MODIFICATION_NODE).markDeleted();
86     }
87
88     @Test(expected = UnsupportedOperationException.class)
89     public void mergeToCurrentTestWithException() throws Exception {
90         returnNoNull();
91         this.mergeToCurrent(TestUtils.NORMALIZED_NODE_CONTAINER);
92     }
93
94     @Test
95     public void mergeToCurrentTest() throws Exception {
96         returnNull();
97         this.mergeToCurrent(TestUtils.NORMALIZED_NODE_CONTAINER);
98         verify(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE);
99     }
100
101     private static void returnNull() {
102         doReturn(null).when(TestUtils.WRITEABLE_MODIFICATION_NODE).getChild(TestUtils.PATH_ARGUMENT);
103         doReturn(null).when(TestUtils.WRITEABLE_MODIFICATION_NODE)
104                 .createOperation(TestUtils.DOM_DATA_TREE_WRITE_CURSOR);
105     }
106
107     private static void returnNoNull() {
108         returnNoNull(null);
109     }
110
111     private static void returnNoNull(final NormalizedNodeContainer<?, ?, ?> normalizedNode) {
112         if (normalizedNode != null) {
113             doNothing().when(TestUtils.WRITE_CURSOR_STRATEGY).writeToCurrent(normalizedNode);
114             doNothing().when(TestUtils.WRITE_CURSOR_STRATEGY).mergeToCurrent(normalizedNode);
115             doReturn(TestUtils.WRITE_CURSOR_STRATEGY)
116                     .when(TestUtils.WRITEABLE_MODIFICATION_NODE).createOperation(TestUtils.DOM_DATA_TREE_WRITE_CURSOR);
117         }
118
119         doReturn(TestUtils.WRITEABLE_MODIFICATION_NODE)
120                 .when(TestUtils.WRITEABLE_MODIFICATION_NODE).getChild(TestUtils.PATH_ARGUMENT);
121         doNothing().when(TestUtils.WRITEABLE_MODIFICATION_NODE).markDeleted();
122     }
123
124     @Before
125     public void setUp() {
126         final Collection<NormalizedNode<?, ?>> collectionNodes = new HashSet<>();
127         doReturn("testArgument").when(TestUtils.PATH_ARGUMENT).toString();
128         doReturn("testCursor").when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).toString();
129         doReturn("testNode").when(TestUtils.NORMALIZED_NODE).toString();
130         doReturn("testNodeContainer").when(TestUtils.NORMALIZED_NODE_CONTAINER).toString();
131         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).enter(TestUtils.PATH_ARGUMENT);
132         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR)
133                 .write(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE);
134         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR)
135                 .write(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
136         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR)
137                 .merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE);
138         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR)
139                 .merge(TestUtils.PATH_ARGUMENT, TestUtils.NORMALIZED_NODE_CONTAINER);
140         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).delete(TestUtils.PATH_ARGUMENT);
141         doNothing().when(TestUtils.DOM_DATA_TREE_WRITE_CURSOR).exit();
142
143         collectionNodes.add(TestUtils.NORMALIZED_NODE);
144         doReturn(collectionNodes).when(TestUtils.NORMALIZED_NODE_CONTAINER).getValue();
145         doReturn(TestUtils.PATH_ARGUMENT).when(TestUtils.NORMALIZED_NODE_CONTAINER).getIdentifier();
146         doReturn(TestUtils.PATH_ARGUMENT).when(TestUtils.NORMALIZED_NODE).getIdentifier();
147     }
148
149     @After
150     public void reset() {
151         TestUtils.resetMocks();
152     }
153
154     public WritableNodeOperationTest() {
155         super(TestUtils.WRITEABLE_MODIFICATION_NODE, TestUtils.DOM_DATA_TREE_WRITE_CURSOR);
156     }
157
158     @Override
159     public void exit() {
160         // NOOP
161     }
162 }