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(QNameSerializationContext.class), null);
48 public void testDeSerializeNullContext(){
49 expectedException.expect(NullPointerException.class);
50 expectedException.expectMessage("context should not be null");
52 PathArgumentSerializer.deSerialize(null, NormalizedNodeMessages.PathArgument.getDefaultInstance());
57 public void testDeSerializeNullPathArgument(){
58 expectedException.expect(NullPointerException.class);
59 expectedException.expectMessage("pathArgument should not be null");
61 PathArgumentSerializer.deSerialize(mock(QNameDeSerializationContext.class), null);
66 public void testSerializeNodeIdentifier(){
67 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
69 when(serializationContext.addLocalName(anyString())).thenReturn(5);
70 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
71 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
73 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
74 .serialize(serializationContext,
75 new YangInstanceIdentifier.NodeIdentifier(
76 TestModel.TEST_QNAME));
78 assertEquals(PathArgumentType.NODE_IDENTIFIER.ordinal(), actual.getIntType());
79 assertEquals(5, actual.getNodeType().getLocalName());
80 assertEquals(10, actual.getNodeType().getNamespace());
81 assertEquals(11, actual.getNodeType().getRevision());
87 public void testSerializeNodeIdentifierWithValue(){
88 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
90 when(serializationContext.addLocalName(anyString())).thenReturn(5);
91 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
92 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
94 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
95 .serialize(serializationContext,
96 new YangInstanceIdentifier.NodeWithValue(
97 TestModel.TEST_QNAME, "foo"));
99 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal(), actual.getIntType());
100 assertEquals(5, actual.getNodeType().getLocalName());
101 assertEquals(10, actual.getNodeType().getNamespace());
102 assertEquals(11, actual.getNodeType().getRevision());
103 assertEquals("foo", actual.getAttribute(0).getValue());
109 public void testSerializeNodeIdentifierWithPredicates(){
110 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
112 when(serializationContext.addLocalName("test")).thenReturn(5);
113 when(serializationContext.addLocalName("child-name")).thenReturn(55);
115 when(serializationContext.addNamespace(TestModel.TEST_QNAME.getNamespace())).thenReturn(
117 when(serializationContext.addNamespace(TestModel.CHILD_NAME_QNAME.getNamespace())).thenReturn(66);
119 when(serializationContext.addRevision(TestModel.TEST_QNAME.getRevision())).thenReturn(
121 when(serializationContext.addRevision(TestModel.CHILD_NAME_QNAME.getRevision())).thenReturn(77);
123 Map<QName, Object> predicates = new HashMap<>();
125 predicates.put(TestModel.CHILD_NAME_QNAME, "foobar");
127 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
128 .serialize(serializationContext,
129 new YangInstanceIdentifier.NodeIdentifierWithPredicates(
130 TestModel.TEST_QNAME, predicates));
132 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal(), actual.getIntType());
133 assertEquals(5, actual.getNodeType().getLocalName());
134 assertEquals(10, actual.getNodeType().getNamespace());
135 assertEquals(11, actual.getNodeType().getRevision());
137 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
138 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
139 assertEquals(77, actual.getAttribute(0).getName().getRevision());
141 assertEquals("foobar", actual.getAttribute(0).getValue());
147 public void testSerializeAugmentationIdentifier(){
148 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
150 when(serializationContext.addLocalName(anyString())).thenReturn(55);
151 when(serializationContext.addNamespace(any(URI.class))).thenReturn(66);
152 when(serializationContext.addRevision(any(Date.class))).thenReturn(77);
154 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
155 .serialize(serializationContext,
156 new YangInstanceIdentifier.AugmentationIdentifier(
157 ImmutableSet.of(TestModel.TEST_QNAME)));
159 assertEquals(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal(), actual.getIntType());
161 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
162 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
163 assertEquals(77, actual.getAttribute(0).getName().getRevision());
168 public void testDeSerializeNodeIdentifier(){
170 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
171 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
172 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
174 qNameBuilder.setNamespace(0);
175 qNameBuilder.setRevision(1);
176 qNameBuilder.setLocalName(2);
178 pathBuilder.setNodeType(qNameBuilder);
179 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER.ordinal());
181 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
182 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
183 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
185 YangInstanceIdentifier.PathArgument pathArgument =
186 NormalizedNodeSerializer
187 .deSerialize(nodeBuilder.build(), pathBuilder.build());
189 assertEquals(new YangInstanceIdentifier.NodeIdentifier(TestModel.TEST_QNAME), pathArgument);
194 public void testDeSerializeNodeWithValue(){
195 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
196 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
197 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
199 qNameBuilder.setNamespace(0);
200 qNameBuilder.setRevision(1);
201 qNameBuilder.setLocalName(2);
203 pathBuilder.setNodeType(qNameBuilder);
204 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal());
205 pathBuilder.addAttribute(
206 NormalizedNodeMessages.PathArgumentAttribute.newBuilder()
207 .setValue("foo").setType(ValueType.STRING_TYPE.ordinal()));
209 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
210 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
211 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
213 YangInstanceIdentifier.PathArgument pathArgument =
214 NormalizedNodeSerializer
215 .deSerialize(nodeBuilder.build(), pathBuilder.build());
217 assertEquals(new YangInstanceIdentifier.NodeWithValue(TestModel.TEST_QNAME, "foo"), pathArgument);
221 public void testDeSerializeNodeIdentifierWithPredicates(){
222 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
223 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
224 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
226 qNameBuilder.setNamespace(0);
227 qNameBuilder.setRevision(1);
228 qNameBuilder.setLocalName(2);
230 pathBuilder.setNodeType(qNameBuilder);
231 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal());
232 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder).setValue(
233 "foo").setType(ValueType.STRING_TYPE.ordinal()));
235 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
236 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
237 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
239 YangInstanceIdentifier.PathArgument pathArgument =
240 NormalizedNodeSerializer
241 .deSerialize(nodeBuilder.build(), pathBuilder.build());
243 assertEquals(new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.TEST_QNAME,
244 ImmutableMap.<QName, Object>of(TestModel.TEST_QNAME, "foo")), pathArgument);
248 public void testDeSerializeNodeAugmentationIdentifier(){
249 NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
250 NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
251 NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
253 qNameBuilder.setNamespace(0);
254 qNameBuilder.setRevision(1);
255 qNameBuilder.setLocalName(2);
257 pathBuilder.setIntType(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal());
258 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder).setType(ValueType.STRING_TYPE.ordinal()));
260 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
261 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
262 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
264 YangInstanceIdentifier.PathArgument pathArgument =
265 NormalizedNodeSerializer
266 .deSerialize(nodeBuilder.build(), pathBuilder.build());
268 assertEquals(new YangInstanceIdentifier.AugmentationIdentifier(ImmutableSet.of(TestModel.TEST_QNAME)), pathArgument);