1 package org.opendaylight.controller.cluster.datastore.node.utils.serialization;
3 import com.google.common.collect.ImmutableMap;
4 import com.google.common.collect.ImmutableSet;
7 import org.junit.rules.ExpectedException;
8 import org.opendaylight.controller.cluster.datastore.util.TestModel;
9 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages;
10 import org.opendaylight.yangtools.yang.common.QName;
11 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
14 import java.util.Date;
15 import java.util.HashMap;
18 import static org.junit.Assert.assertEquals;
19 import static org.mockito.Matchers.any;
20 import static org.mockito.Matchers.anyString;
21 import static org.mockito.Mockito.mock;
22 import static org.mockito.Mockito.when;
24 public class PathArgumentSerializerTest{
27 public ExpectedException expectedException = ExpectedException.none();
30 public void testSerializeNullContext(){
31 expectedException.expect(NullPointerException.class);
32 expectedException.expectMessage("context should not be null");
34 PathArgumentSerializer.serialize(null, mock(
35 YangInstanceIdentifier.PathArgument.class));
39 public void testSerializeNullPathArgument(){
40 expectedException.expect(NullPointerException.class);
41 expectedException.expectMessage("pathArgument should not be null");
43 PathArgumentSerializer.serialize(mock(
44 NormalizedNodeSerializationContext.class), null);
49 public void testDeSerializeNullContext(){
50 expectedException.expect(NullPointerException.class);
51 expectedException.expectMessage("context should not be null");
53 PathArgumentSerializer.deSerialize(null, NormalizedNodeMessages.PathArgument.getDefaultInstance());
58 public void testDeSerializeNullPathArgument(){
59 expectedException.expect(NullPointerException.class);
60 expectedException.expectMessage("pathArgument should not be null");
62 PathArgumentSerializer.deSerialize(mock(NormalizedNodeDeSerializationContext.class), null);
67 public void testSerializeNodeIdentifier(){
68 NormalizedNodeSerializationContext serializationContext =
69 mock(NormalizedNodeSerializationContext.class);
71 when(serializationContext.addLocalName(anyString())).thenReturn(5);
72 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
73 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
75 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
76 .serialize(serializationContext,
77 new YangInstanceIdentifier.NodeIdentifier(
78 TestModel.TEST_QNAME));
80 assertEquals(PathArgumentType.NODE_IDENTIFIER.ordinal(), actual.getIntType());
81 assertEquals(5, actual.getNodeType().getLocalName());
82 assertEquals(10, actual.getNodeType().getNamespace());
83 assertEquals(11, actual.getNodeType().getRevision());
89 public void testSerializeNodeIdentifierWithValue(){
90 NormalizedNodeSerializationContext serializationContext =
91 mock(NormalizedNodeSerializationContext.class);
93 when(serializationContext.addLocalName(anyString())).thenReturn(5);
94 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
95 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
97 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
98 .serialize(serializationContext,
99 new YangInstanceIdentifier.NodeWithValue(
100 TestModel.TEST_QNAME, "foo"));
102 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal(), actual.getIntType());
103 assertEquals(5, actual.getNodeType().getLocalName());
104 assertEquals(10, actual.getNodeType().getNamespace());
105 assertEquals(11, actual.getNodeType().getRevision());
106 assertEquals("foo", actual.getAttribute(0).getValue());
112 public void testSerializeNodeIdentifierWithPredicates(){
113 NormalizedNodeSerializationContext serializationContext =
114 mock(NormalizedNodeSerializationContext.class);
117 when(serializationContext.addLocalName("test")).thenReturn(5);
118 when(serializationContext.addLocalName("child-name")).thenReturn(55);
120 when(serializationContext.addNamespace(TestModel.TEST_QNAME.getNamespace())).thenReturn(
122 when(serializationContext.addNamespace(TestModel.CHILD_NAME_QNAME.getNamespace())).thenReturn(66);
124 when(serializationContext.addRevision(TestModel.TEST_QNAME.getRevision())).thenReturn(
126 when(serializationContext.addRevision(TestModel.CHILD_NAME_QNAME.getRevision())).thenReturn(77);
128 Map<QName, Object> predicates = new HashMap<>();
130 predicates.put(TestModel.CHILD_NAME_QNAME, "foobar");
132 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
133 .serialize(serializationContext,
134 new YangInstanceIdentifier.NodeIdentifierWithPredicates(
135 TestModel.TEST_QNAME, predicates));
137 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal(), actual.getIntType());
138 assertEquals(5, actual.getNodeType().getLocalName());
139 assertEquals(10, actual.getNodeType().getNamespace());
140 assertEquals(11, actual.getNodeType().getRevision());
142 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
143 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
144 assertEquals(77, actual.getAttribute(0).getName().getRevision());
146 assertEquals("foobar", actual.getAttribute(0).getValue());
152 public void testSerializeAugmentationIdentifier(){
153 NormalizedNodeSerializationContext serializationContext =
154 mock(NormalizedNodeSerializationContext.class);
156 when(serializationContext.addLocalName(anyString())).thenReturn(55);
157 when(serializationContext.addNamespace(any(URI.class))).thenReturn(66);
158 when(serializationContext.addRevision(any(Date.class))).thenReturn(77);
160 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
161 .serialize(serializationContext,
162 new YangInstanceIdentifier.AugmentationIdentifier(
163 ImmutableSet.of(TestModel.TEST_QNAME)));
165 assertEquals(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal(), actual.getIntType());
167 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
168 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
169 assertEquals(77, actual.getAttribute(0).getName().getRevision());
174 public void testDeSerializeNodeIdentifier(){
176 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
177 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
178 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
180 qNameBuilder.setNamespace(0);
181 qNameBuilder.setRevision(1);
182 qNameBuilder.setLocalName(2);
184 pathBuilder.setNodeType(qNameBuilder);
185 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER.ordinal());
187 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
188 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
189 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
191 YangInstanceIdentifier.PathArgument pathArgument =
192 NormalizedNodeSerializer
193 .deSerialize(nodeBuilder.build(), pathBuilder.build());
195 assertEquals(new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME), pathArgument);
200 public void testDeSerializeNodeWithValue(){
201 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
202 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
203 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
205 qNameBuilder.setNamespace(0);
206 qNameBuilder.setRevision(1);
207 qNameBuilder.setLocalName(2);
209 pathBuilder.setNodeType(qNameBuilder);
210 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal());
211 pathBuilder.addAttribute(
212 NormalizedNodeMessages.PathArgumentAttribute.newBuilder()
213 .setValue("foo").setType(ValueType.STRING_TYPE.ordinal()));
215 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
216 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
217 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
219 YangInstanceIdentifier.PathArgument pathArgument =
220 NormalizedNodeSerializer
221 .deSerialize(nodeBuilder.build(), pathBuilder.build());
223 assertEquals(new YangInstanceIdentifier.NodeWithValue(TestModel.TEST_QNAME, "foo"), pathArgument);
227 public void testDeSerializeNodeIdentifierWithPredicates(){
228 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
229 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
230 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
232 qNameBuilder.setNamespace(0);
233 qNameBuilder.setRevision(1);
234 qNameBuilder.setLocalName(2);
236 pathBuilder.setNodeType(qNameBuilder);
237 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal());
238 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder).setValue(
239 "foo").setType(ValueType.STRING_TYPE.ordinal()));
241 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
242 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
243 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
245 YangInstanceIdentifier.PathArgument pathArgument =
246 NormalizedNodeSerializer
247 .deSerialize(nodeBuilder.build(), pathBuilder.build());
249 assertEquals(new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.TEST_QNAME,
250 ImmutableMap.<QName, Object>of(TestModel.TEST_QNAME, "foo")), pathArgument);
254 public void testDeSerializeNodeAugmentationIdentifier(){
255 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
256 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
257 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
259 qNameBuilder.setNamespace(0);
260 qNameBuilder.setRevision(1);
261 qNameBuilder.setLocalName(2);
263 pathBuilder.setIntType(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal());
264 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder).setType(ValueType.STRING_TYPE.ordinal()));
266 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
267 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
268 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
270 YangInstanceIdentifier.PathArgument pathArgument =
271 NormalizedNodeSerializer
272 .deSerialize(nodeBuilder.build(), pathBuilder.build());
274 assertEquals(new YangInstanceIdentifier.AugmentationIdentifier(ImmutableSet.of(TestModel.TEST_QNAME)), pathArgument);