From 5ab3bb606e691ec8495b48c60c20654448cbfc5d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 14 Oct 2019 10:16:02 +0200 Subject: [PATCH] Use careful byte-masking/shifting in Mg Input We really want to operate on byte and not int, the bytes are to be treated as unsigned, which gets wrecked by sign extension. Introduce an explicit mask(byte, byte) method and use it where we are potentially sign-extending. JIRA: CONTROLLER-1919 Change-Id: I0484f440c1589859fb268947f5a80a2b4969451e Signed-off-by: Robert Varga --- .../NormalizedNodeStreamReaderWriterTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java b/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java index 1e57eb4b7e..951170c7a1 100644 --- a/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java +++ b/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java @@ -9,11 +9,14 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import static org.junit.Assert.assertEquals; +import com.google.common.collect.ImmutableSet; import com.google.common.io.ByteStreams; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; @@ -28,6 +31,7 @@ import org.opendaylight.controller.cluster.datastore.util.TestModel; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; @@ -293,6 +297,33 @@ public class NormalizedNodeStreamReaderWriterTest { assertEquals(expected, nnin.readNormalizedNode()); } + @Test + public void testAugmentationIdentifier() throws IOException { + final List qnames = new ArrayList<>(); + for (int i = 0; i < 257; ++i) { + qnames.add(QName.create(TestModel.TEST_QNAME, "a" + i)); + } + + for (int i = 0; i < qnames.size(); ++i) { + final AugmentationIdentifier expected = AugmentationIdentifier.create( + ImmutableSet.copyOf(qnames.subList(0, i))); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + + try (NormalizedNodeDataOutput nnout = + NormalizedNodeInputOutput.newDataOutput(ByteStreams.newDataOutput(bos), + NormalizedNodeStreamVersion.SODIUM_SR1)) { + nnout.writePathArgument(expected); + } + + final byte[] bytes = bos.toByteArray(); + + NormalizedNodeDataInput nnin = NormalizedNodeInputOutput.newDataInput(ByteStreams.newDataInput(bytes)); + PathArgument arg = nnin.readPathArgument(); + assertEquals(expected, arg); + } + } + private static String largeString(final int pow) { StringBuilder sb = new StringBuilder("X"); for (int i = 0; i < pow; i++) { -- 2.36.6