/* * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.restconf.nb.rfc8040.utils.parser; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import org.opendaylight.restconf.api.ApiPath; import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; /** * Unit tests for {@link IdentifierCodec} mostly according to examples from draft-ietf-netconf-restconf-13. */ class IdentifierCodecTest { private static final DatabindContext DATABIND = DatabindContext.ofModel( YangParserTestUtils.parseYangResourceDirectory("/restconf/parser")); /** * Positive test of deserialization URI String to YangInstanceIdentifier and * serialization of YangInstanceIdentifier to String when original String * URI contains list identifier and leaf identifier. */ @Test void codecListAndLeafTest() throws Exception { final var dataYangII = IdentifierCodec.deserialize(ApiPath.parse( "list-test:top/list1=%2C%27\"%3A\"%20%2F,,foo/list2=a,b/result"), DATABIND); assertEquals("list-test:top/list1=%2C%27\"%3A\" %2F,,foo/list2=a,b/result", IdentifierCodec.serialize(dataYangII, DATABIND.modelContext())); } /** * Positive test of deserialization URI String to YangInstanceIdentifier and * serialization of YangInstanceIdentifier to String when original String * URI contains leaf list identifier. */ @Test void codecLeafListTest() throws Exception { final var str = "list-test:top/Y=4"; final var dataYangII = IdentifierCodec.deserialize(ApiPath.parse(str), DATABIND); assertEquals(str, IdentifierCodec.serialize(dataYangII, DATABIND.modelContext())); } /** * Positive test of deserialization URI String to YangInstanceIdentifier when * String URI is null. YangInstanceIdentifier.EMPTY is * expected to be returned. */ @Test void codecDeserializeNullTest() { final var dataYangII = IdentifierCodec.deserialize(null, DATABIND); assertEquals(YangInstanceIdentifier.of(), dataYangII); } /** * Positive test of serialization YangInstanceIdentifier.EMPTY. Empty String is * expected to be returned. */ @Test void codecSerializeEmptyTest() { assertEquals("", IdentifierCodec.serialize(YangInstanceIdentifier.of(), DATABIND.modelContext())); } /** * Positive test of serialization {@link YangInstanceIdentifier#EMPTY} and deserialization of result back to * {@link YangInstanceIdentifier#EMPTY}. */ @Test void codecDeserializeAndSerializeEmptyTest() throws Exception { final var serialized = IdentifierCodec.serialize(YangInstanceIdentifier.of(), DATABIND.modelContext()); assertEquals(YangInstanceIdentifier.of(), IdentifierCodec.deserialize(ApiPath.parse(serialized), DATABIND)); } }