BUG 2970 : Handle SchemaValidationFailedException instead of IllegalArgumentException
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / utils / PruningDataTreeModificationTest.java
1 package org.opendaylight.controller.cluster.datastore.utils;
2
3 import static org.junit.Assert.assertTrue;
4 import static org.mockito.Matchers.any;
5 import static org.mockito.Mockito.doReturn;
6 import static org.mockito.Mockito.doThrow;
7 import static org.mockito.Mockito.mock;
8 import static org.mockito.Mockito.times;
9 import static org.mockito.Mockito.verify;
10 import java.net.URI;
11 import java.util.Set;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.mockito.Mock;
15 import org.mockito.MockitoAnnotations;
16 import org.opendaylight.controller.md.cluster.datastore.model.CarsModel;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
19 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
20 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor;
21 import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException;
22
23 public class PruningDataTreeModificationTest {
24
25     @Mock
26     DataTreeModification delegate;
27
28     @Mock
29     Set<URI> validNamespaces;
30
31     @Mock
32     NormalizedNode<?,?> prunedNormalizedNode;
33
34     PruningDataTreeModification pruningDataTreeModification;
35
36     @Before
37     public void setUp(){
38         MockitoAnnotations.initMocks(this);
39         pruningDataTreeModification = new PruningDataTreeModification(delegate, validNamespaces) {
40             @Override
41             NormalizedNode<?, ?> pruneNormalizedNode(NormalizedNode<?, ?> input) {
42                 return prunedNormalizedNode;
43             }
44         };
45     }
46
47     @Test
48     public void testDelete(){
49         pruningDataTreeModification.delete(CarsModel.BASE_PATH);
50
51         verify(delegate).delete(CarsModel.BASE_PATH);
52     }
53
54     @Test
55     public void testDeleteOnException(){
56         YangInstanceIdentifier path = CarsModel.BASE_PATH;
57         doThrow(SchemaValidationFailedException.class).when(delegate).delete(path);
58
59         pruningDataTreeModification.delete(path);
60
61         verify(delegate, times(1)).delete(path);
62     }
63
64
65     @Test
66     public void testMerge(){
67         NormalizedNode<?, ?> normalizedNode = CarsModel.create();
68         YangInstanceIdentifier path = CarsModel.BASE_PATH;
69         pruningDataTreeModification.merge(path, normalizedNode);
70
71         verify(delegate, times(1)).merge(path, normalizedNode);
72     }
73
74     @Test
75     public void testMergeOnException(){
76         NormalizedNode<?, ?> normalizedNode = CarsModel.create();
77         YangInstanceIdentifier path = CarsModel.BASE_PATH;
78
79         doThrow(SchemaValidationFailedException.class).when(delegate).merge(path, normalizedNode);
80         doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class));
81
82         pruningDataTreeModification.merge(path, normalizedNode);
83
84         verify(delegate, times(1)).merge(path, normalizedNode);
85         verify(delegate, times(1)).merge(path, prunedNormalizedNode);
86     }
87
88     @Test
89     public void testWrite(){
90         NormalizedNode<?, ?> normalizedNode = CarsModel.create();
91         YangInstanceIdentifier path = CarsModel.BASE_PATH;
92         pruningDataTreeModification.write(path, normalizedNode);
93
94         verify(delegate, times(1)).write(path, normalizedNode);
95     }
96
97     @Test
98     public void testWriteOnException(){
99         NormalizedNode<?, ?> normalizedNode = CarsModel.create();
100         YangInstanceIdentifier path = CarsModel.BASE_PATH;
101
102         doThrow(SchemaValidationFailedException.class).when(delegate).write(path, normalizedNode);
103         doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class));
104
105         pruningDataTreeModification.write(path, normalizedNode);
106
107         verify(delegate, times(1)).write(path, normalizedNode);
108         verify(delegate, times(1)).write(path, prunedNormalizedNode);
109     }
110
111     @Test
112     public void testReady(){
113         pruningDataTreeModification.ready();
114
115         verify(delegate).ready();
116     }
117
118     @Test
119     public void testApplyToCursor(){
120         DataTreeModificationCursor dataTreeModificationCursor = mock(DataTreeModificationCursor.class);
121         pruningDataTreeModification.applyToCursor(dataTreeModificationCursor);
122
123         verify(delegate).applyToCursor(dataTreeModificationCursor);
124     }
125
126     @Test
127     public void testReadNode(){
128         pruningDataTreeModification.readNode(CarsModel.BASE_PATH);
129
130         verify(delegate).readNode(CarsModel.BASE_PATH);
131     }
132
133     @Test
134     public void testNewModification(){
135         DataTreeModification dataTreeModification = pruningDataTreeModification.newModification();
136
137         assertTrue("new modification not of type PruningDataTreeModification", dataTreeModification instanceof PruningDataTreeModification);
138     }
139 }