1 package org.opendaylight.controller.cluster.datastore.utils;
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;
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;
22 public class PruningDataTreeModificationTest {
25 DataTreeModification delegate;
28 Set<URI> validNamespaces;
31 NormalizedNode<?,?> prunedNormalizedNode;
33 PruningDataTreeModification pruningDataTreeModification;
37 MockitoAnnotations.initMocks(this);
38 pruningDataTreeModification = new PruningDataTreeModification(delegate, validNamespaces) {
40 NormalizedNode<?, ?> pruneNormalizedNode(NormalizedNode<?, ?> input) {
41 return prunedNormalizedNode;
47 public void testDelete(){
48 pruningDataTreeModification.delete(CarsModel.BASE_PATH);
50 verify(delegate).delete(CarsModel.BASE_PATH);
54 public void testDeleteOnException(){
55 YangInstanceIdentifier path = CarsModel.BASE_PATH;
56 doThrow(IllegalArgumentException.class).when(delegate).delete(path);
58 pruningDataTreeModification.delete(path);
60 verify(delegate, times(1)).delete(path);
65 public void testMerge(){
66 NormalizedNode<?, ?> normalizedNode = CarsModel.create();
67 YangInstanceIdentifier path = CarsModel.BASE_PATH;
68 pruningDataTreeModification.merge(path, normalizedNode);
70 verify(delegate, times(1)).merge(path, normalizedNode);
74 public void testMergeOnException(){
75 NormalizedNode<?, ?> normalizedNode = CarsModel.create();
76 YangInstanceIdentifier path = CarsModel.BASE_PATH;
78 doThrow(IllegalArgumentException.class).when(delegate).merge(path, normalizedNode);
79 doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class));
81 pruningDataTreeModification.merge(path, normalizedNode);
83 verify(delegate, times(1)).merge(path, normalizedNode);
84 verify(delegate, times(1)).merge(path, prunedNormalizedNode);
88 public void testWrite(){
89 NormalizedNode<?, ?> normalizedNode = CarsModel.create();
90 YangInstanceIdentifier path = CarsModel.BASE_PATH;
91 pruningDataTreeModification.write(path, normalizedNode);
93 verify(delegate, times(1)).write(path, normalizedNode);
97 public void testWriteOnException(){
98 NormalizedNode<?, ?> normalizedNode = CarsModel.create();
99 YangInstanceIdentifier path = CarsModel.BASE_PATH;
101 doThrow(IllegalArgumentException.class).when(delegate).write(path, normalizedNode);
102 doReturn(true).when(validNamespaces).contains(any(YangInstanceIdentifier.PathArgument.class));
104 pruningDataTreeModification.write(path, normalizedNode);
106 verify(delegate, times(1)).write(path, normalizedNode);
107 verify(delegate, times(1)).write(path, prunedNormalizedNode);
111 public void testReady(){
112 pruningDataTreeModification.ready();
114 verify(delegate).ready();
118 public void testApplyToCursor(){
119 DataTreeModificationCursor dataTreeModificationCursor = mock(DataTreeModificationCursor.class);
120 pruningDataTreeModification.applyToCursor(dataTreeModificationCursor);
122 verify(delegate).applyToCursor(dataTreeModificationCursor);
126 public void testReadNode(){
127 pruningDataTreeModification.readNode(CarsModel.BASE_PATH);
129 verify(delegate).readNode(CarsModel.BASE_PATH);
133 public void testNewModification(){
134 DataTreeModification dataTreeModification = pruningDataTreeModification.newModification();
136 assertTrue("new modification not of type PruningDataTreeModification", dataTreeModification instanceof PruningDataTreeModification);