2 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.controller.cluster.datastore.node.utils.serialization;
11 import static org.junit.Assert.assertEquals;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.when;
17 import com.google.common.collect.ImmutableMap;
18 import com.google.common.collect.ImmutableSet;
20 import java.util.Date;
21 import java.util.HashMap;
23 import org.junit.Rule;
24 import org.junit.Test;
25 import org.junit.rules.ExpectedException;
26 import org.opendaylight.controller.cluster.datastore.util.TestModel;
27 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages;
28 import org.opendaylight.yangtools.yang.common.QName;
29 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
31 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
33 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
35 public class PathArgumentSerializerTest {
38 public ExpectedException expectedException = ExpectedException.none();
41 public void testSerializeNullContext() {
42 expectedException.expect(NullPointerException.class);
43 expectedException.expectMessage("context should not be null");
45 PathArgumentSerializer.serialize(null, mock(PathArgument.class));
49 public void testSerializeNullPathArgument() {
50 expectedException.expect(NullPointerException.class);
51 expectedException.expectMessage("pathArgument should not be null");
53 PathArgumentSerializer.serialize(mock(QNameSerializationContext.class), null);
58 public void testDeSerializeNullContext() {
59 expectedException.expect(NullPointerException.class);
60 expectedException.expectMessage("context should not be null");
62 PathArgumentSerializer.deSerialize(null, NormalizedNodeMessages.PathArgument.getDefaultInstance());
67 public void testDeSerializeNullPathArgument() {
68 expectedException.expect(NullPointerException.class);
69 expectedException.expectMessage("pathArgument should not be null");
71 PathArgumentSerializer.deSerialize(mock(QNameDeSerializationContext.class), null);
76 public void testSerializeNodeIdentifier() {
77 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
79 when(serializationContext.addLocalName(anyString())).thenReturn(5);
80 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
81 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
83 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
84 .serialize(serializationContext,
86 TestModel.TEST_QNAME));
88 assertEquals(PathArgumentType.NODE_IDENTIFIER.ordinal(), actual.getIntType());
89 assertEquals(5, actual.getNodeType().getLocalName());
90 assertEquals(10, actual.getNodeType().getNamespace());
91 assertEquals(11, actual.getNodeType().getRevision());
97 public void testSerializeNodeIdentifierWithValue() {
98 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
100 when(serializationContext.addLocalName(anyString())).thenReturn(5);
101 when(serializationContext.addNamespace(any(URI.class))).thenReturn(10);
102 when(serializationContext.addRevision(any(Date.class))).thenReturn(11);
104 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
105 .serialize(serializationContext,
107 TestModel.TEST_QNAME, "foo"));
109 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal(), actual.getIntType());
110 assertEquals(5, actual.getNodeType().getLocalName());
111 assertEquals(10, actual.getNodeType().getNamespace());
112 assertEquals(11, actual.getNodeType().getRevision());
113 assertEquals("foo", actual.getAttribute(0).getValue());
119 public void testSerializeNodeIdentifierWithPredicates() {
120 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
122 when(serializationContext.addLocalName("test")).thenReturn(5);
123 when(serializationContext.addLocalName("child-name")).thenReturn(55);
125 when(serializationContext.addNamespace(TestModel.TEST_QNAME.getNamespace())).thenReturn(
127 when(serializationContext.addNamespace(TestModel.CHILD_NAME_QNAME.getNamespace())).thenReturn(66);
129 when(serializationContext.addRevision(TestModel.TEST_QNAME.getRevision())).thenReturn(
131 when(serializationContext.addRevision(TestModel.CHILD_NAME_QNAME.getRevision())).thenReturn(77);
133 Map<QName, Object> predicates = new HashMap<>();
135 predicates.put(TestModel.CHILD_NAME_QNAME, "foobar");
137 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
138 .serialize(serializationContext,
139 new NodeIdentifierWithPredicates(TestModel.TEST_QNAME, predicates));
141 assertEquals(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal(), actual.getIntType());
142 assertEquals(5, actual.getNodeType().getLocalName());
143 assertEquals(10, actual.getNodeType().getNamespace());
144 assertEquals(11, actual.getNodeType().getRevision());
146 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
147 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
148 assertEquals(77, actual.getAttribute(0).getName().getRevision());
150 assertEquals("foobar", actual.getAttribute(0).getValue());
156 public void testSerializeAugmentationIdentifier() {
157 QNameSerializationContext serializationContext = mock(QNameSerializationContext.class);
159 when(serializationContext.addLocalName(anyString())).thenReturn(55);
160 when(serializationContext.addNamespace(any(URI.class))).thenReturn(66);
161 when(serializationContext.addRevision(any(Date.class))).thenReturn(77);
163 NormalizedNodeMessages.PathArgument actual = PathArgumentSerializer
164 .serialize(serializationContext,
165 new AugmentationIdentifier(ImmutableSet.of(TestModel.TEST_QNAME)));
167 assertEquals(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal(), actual.getIntType());
169 assertEquals(55, actual.getAttribute(0).getName().getLocalName());
170 assertEquals(66, actual.getAttribute(0).getName().getNamespace());
171 assertEquals(77, actual.getAttribute(0).getName().getRevision());
176 public void testDeSerializeNodeIdentifier() {
177 final NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
178 final NormalizedNodeMessages.PathArgument.Builder pathBuilder =
179 NormalizedNodeMessages.PathArgument.newBuilder();
180 final NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
182 qNameBuilder.setNamespace(0);
183 qNameBuilder.setRevision(1);
184 qNameBuilder.setLocalName(2);
186 pathBuilder.setNodeType(qNameBuilder);
187 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER.ordinal());
189 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
190 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
191 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
193 PathArgument pathArgument = NormalizedNodeSerializer.deSerialize(nodeBuilder.build(), pathBuilder.build());
195 assertEquals(new NodeIdentifier(TestModel.TEST_QNAME), pathArgument);
200 public void testDeSerializeNodeWithValue() {
201 final NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
202 final NormalizedNodeMessages.PathArgument.Builder pathBuilder =
203 NormalizedNodeMessages.PathArgument.newBuilder();
204 final NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
206 qNameBuilder.setNamespace(0);
207 qNameBuilder.setRevision(1);
208 qNameBuilder.setLocalName(2);
210 pathBuilder.setNodeType(qNameBuilder);
211 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_VALUE.ordinal());
212 pathBuilder.addAttribute(
213 NormalizedNodeMessages.PathArgumentAttribute.newBuilder()
214 .setValue("foo").setType(ValueType.STRING_TYPE.ordinal()));
216 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
217 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
218 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
220 PathArgument pathArgument = NormalizedNodeSerializer.deSerialize(nodeBuilder.build(), pathBuilder.build());
222 assertEquals(new NodeWithValue<>(TestModel.TEST_QNAME, "foo"), pathArgument);
227 public void testDeSerializeNodeIdentifierWithPredicates() {
228 final NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
229 final NormalizedNodeMessages.PathArgument.Builder pathBuilder =
230 NormalizedNodeMessages.PathArgument.newBuilder();
231 final NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
233 qNameBuilder.setNamespace(0);
234 qNameBuilder.setRevision(1);
235 qNameBuilder.setLocalName(2);
237 pathBuilder.setNodeType(qNameBuilder);
238 pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER_WITH_PREDICATES.ordinal());
239 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder)
240 .setValue("foo").setType(ValueType.STRING_TYPE.ordinal()));
242 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
243 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
244 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
246 PathArgument pathArgument = NormalizedNodeSerializer.deSerialize(nodeBuilder.build(), pathBuilder.build());
248 assertEquals(new NodeIdentifierWithPredicates(TestModel.TEST_QNAME,
249 ImmutableMap.<QName, Object>of(TestModel.TEST_QNAME, "foo")), pathArgument);
254 public void testDeSerializeNodeAugmentationIdentifier() {
255 final NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
256 final NormalizedNodeMessages.PathArgument.Builder pathBuilder =
257 NormalizedNodeMessages.PathArgument.newBuilder();
258 final NormalizedNodeMessages.QName.Builder qNameBuilder = NormalizedNodeMessages.QName.newBuilder();
260 qNameBuilder.setNamespace(0);
261 qNameBuilder.setRevision(1);
262 qNameBuilder.setLocalName(2);
264 pathBuilder.setIntType(PathArgumentType.AUGMENTATION_IDENTIFIER.ordinal());
265 pathBuilder.addAttribute(NormalizedNodeMessages.PathArgumentAttribute.newBuilder().setName(qNameBuilder)
266 .setType(ValueType.STRING_TYPE.ordinal()));
268 nodeBuilder.addCode(TestModel.TEST_QNAME.getNamespace().toString());
269 nodeBuilder.addCode(TestModel.TEST_QNAME.getFormattedRevision());
270 nodeBuilder.addCode(TestModel.TEST_QNAME.getLocalName());
272 PathArgument pathArgument = NormalizedNodeSerializer.deSerialize(nodeBuilder.build(), pathBuilder.build());
274 assertEquals(new AugmentationIdentifier(ImmutableSet.of(TestModel.TEST_QNAME)), pathArgument);