2 * Copyright (c) 2019 PANTHEON.tech, s.r.o. 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
8 package org.opendaylight.yangtools.yang.data.codec.binfmt;
10 import com.google.common.io.ByteStreams;
11 import java.io.ByteArrayOutputStream;
12 import java.io.IOException;
13 import java.util.Arrays;
14 import org.junit.Assert;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17 import org.junit.runners.Parameterized;
18 import org.junit.runners.Parameterized.Parameter;
19 import org.junit.runners.Parameterized.Parameters;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder;
24 @RunWith(Parameterized.class)
25 public class YiidSerializationTest extends AbstractSerializationTest {
26 @Parameters(name = "{0}")
27 public static Iterable<Object[]> data() {
29 new Object[] { NormalizedNodeStreamVersion.LITHIUM,
30 100, 116, 596, 611, 612, 628, 4196, 4436, 1_052_772, 1_246_036, 2_298_693
32 new Object[] { NormalizedNodeStreamVersion.NEON_SR2,
33 102, 108, 288, 489, 294, 502, 1638, 3414, 394_854, 982_870, 1_377_611
35 new Object[] { NormalizedNodeStreamVersion.SODIUM_SR1,
36 96, 98, 158, 359, 164, 372, 612, 2388, 131_684, 719_700, 916_815
38 new Object[] { NormalizedNodeStreamVersion.MAGNESIUM,
39 96, 98, 158, 359, 164, 372, 612, 2388, 131_684 , 719_700, 916_815
50 public int uniqueSize31;
54 public int uniqueSize32;
58 public int uniqueSize256;
62 public int uniqueSize65792;
64 public int twiceSize65792;
67 public void testEmptyIdentifier() {
68 assertSame(YangInstanceIdentifier.empty(), emptySize);
72 public void testOneIdentifier() {
73 assertEquals(YangInstanceIdentifier.of(TestModel.TEST_QNAME), oneSize);
77 public void test31() {
78 assertEquals(fillIdentifier(31), size31);
79 assertEquals(fillUniqueIdentifier(31), uniqueSize31);
83 public void test32() {
84 assertEquals(fillIdentifier(32), size32);
85 assertEquals(fillUniqueIdentifier(32), uniqueSize32);
89 public void test256() {
90 assertEquals(fillIdentifier(256), size256);
91 assertEquals(fillUniqueIdentifier(256), uniqueSize256);
95 public void test65792() {
96 assertEquals(fillIdentifier(65792), size65792);
97 assertEquals(fillUniqueIdentifier(65792), uniqueSize65792);
101 public void testTwice65536() {
102 final YangInstanceIdentifier yiid = fillUniqueIdentifier(65792);
104 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
105 try (NormalizedNodeDataOutput nnout = version.newDataOutput(ByteStreams.newDataOutput(baos))) {
106 nnout.writeYangInstanceIdentifier(yiid);
107 nnout.writeYangInstanceIdentifier(yiid);
108 } catch (IOException e) {
109 throw new AssertionError("Failed to serialize", e);
112 final byte[] bytes = baos.toByteArray();
113 Assert.assertEquals(twiceSize65792, bytes.length);
116 final NormalizedNodeDataInput input = NormalizedNodeDataInput.newDataInput(ByteStreams.newDataInput(bytes));
117 Assert.assertEquals(yiid, input.readYangInstanceIdentifier());
118 Assert.assertEquals(yiid, input.readYangInstanceIdentifier());
119 } catch (IOException e) {
120 throw new AssertionError("Failed to deserialize", e);
124 private static YangInstanceIdentifier fillIdentifier(final int size) {
125 final InstanceIdentifierBuilder builder = YangInstanceIdentifier.builder();
126 for (int i = 0; i < size; ++i) {
127 builder.node(TestModel.TEST_QNAME);
129 final YangInstanceIdentifier ret = builder.build();
130 Assert.assertEquals(size, ret.getPathArguments().size());
134 private static YangInstanceIdentifier fillUniqueIdentifier(final int size) {
135 final InstanceIdentifierBuilder builder = YangInstanceIdentifier.builder();
136 for (int i = 0; i < size; ++i) {
137 builder.node(QName.create(TestModel.TEST_QNAME, "a" + Integer.toHexString(i)));
139 final YangInstanceIdentifier ret = builder.build();
140 Assert.assertEquals(size, ret.getPathArguments().size());