2 * Copyright (c) 2016 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
8 package org.opendaylight.yangtools.yang.data.codec.gson;
10 import static org.junit.Assert.assertEquals;
12 import com.google.gson.JsonParser;
13 import java.io.IOException;
14 import java.io.StringWriter;
15 import java.io.Writer;
16 import java.util.Base64;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.common.QNameModule;
21 import org.opendaylight.yangtools.yang.common.Revision;
22 import org.opendaylight.yangtools.yang.common.XMLNamespace;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
24 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
26 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
27 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
28 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
29 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
30 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
32 public class Bug5446Test {
33 private static final QNameModule FOO_MODULE = QNameModule.create(XMLNamespace.of("foo"), Revision.of("2015-11-05"));
34 private static final QName ROOT_QNAME = QName.create(FOO_MODULE, "root");
35 private static final QName IP_ADDRESS_QNAME = QName.create(FOO_MODULE, "ip-address");
36 private EffectiveModelContext schemaContext;
40 schemaContext = YangParserTestUtils.parseYang("""
46 revision "2015-11-05" {
49 typedef ipv4-address-binary {
55 typedef ipv6-address-binary {
61 typedef ip-address-binary {
63 type ipv4-address-binary;
64 type ipv6-address-binary;
70 type ip-address-binary;
77 public void test() throws Exception {
78 final String jsonOutput = normalizedNodeToJsonStreamTransformation(
80 Builders.containerBuilder()
81 .withNodeIdentifier(new NodeIdentifier(ROOT_QNAME))
82 .withChild(ImmutableNodes.leafNode(IP_ADDRESS_QNAME, Base64.getDecoder().decode("fwAAAQ==")))
85 assertEquals(JsonParser.parseString("""
88 "ip-address" : "fwAAAQ=="
91 JsonParser.parseString(jsonOutput));
94 private String normalizedNodeToJsonStreamTransformation(final Writer writer, final ContainerNode inputStructure)
96 final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
97 JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext),
98 JsonWriterFactory.createJsonWriter(writer, 2));
99 try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStream)) {
100 nodeWriter.write(inputStructure);
103 return writer.toString();