2 * Copyright (c) 2014 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.controller.sal.restconf.impl.test;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertThrows;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
16 import com.google.common.collect.ImmutableList;
17 import com.google.common.collect.Iterables;
18 import java.io.FileNotFoundException;
19 import java.util.Optional;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
23 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
24 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
25 import org.opendaylight.mdsal.dom.spi.FixedDOMSchemaService;
26 import org.opendaylight.netconf.sal.restconf.impl.ControllerContext;
27 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
28 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
29 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
30 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
31 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
33 public class URITest {
35 private static EffectiveModelContext schemaContext;
36 private static EffectiveModelContext mountSchemaContext;
38 private final DOMMountPoint mountInstance = mock(DOMMountPoint.class);
39 private final ControllerContext controllerContext =
40 TestRestconfUtils.newControllerContext(schemaContext, mountInstance);
43 public static void init() throws FileNotFoundException, ReactorException {
44 schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs");
45 mountSchemaContext = TestUtils.loadSchemaContext("/test-config-data/yang2");
49 public void testToInstanceIdentifierList() {
50 InstanceIdentifierContext instanceIdentifier = controllerContext
51 .toInstanceIdentifier("simple-nodes:userWithoutClass/foo");
52 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "userWithoutClass");
54 instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:userWithoutClass/foo");
55 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "userWithoutClass");
57 instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user/foo/boo");
58 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "user");
60 instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user//boo");
61 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "user");
66 public void testToInstanceIdentifierWithDoubleSlash() {
67 InstanceIdentifierContext instanceIdentifier = controllerContext
68 .toInstanceIdentifier("simple-nodes:food//nonalcoholic");
69 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "nonalcoholic");
71 instanceIdentifier = controllerContext
72 .toInstanceIdentifier("simple-nodes:userWithoutClass//");
73 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "userWithoutClass");
75 instanceIdentifier = controllerContext
76 .toInstanceIdentifier("simple-nodes:userWithoutClass///inner-container");
77 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "inner-container");
81 public void testToInstanceIdentifierListWithNullKey() {
82 assertThrows(RestconfDocumentedException.class,
83 () -> controllerContext.toInstanceIdentifier("simple-nodes:user/null/boo"));
87 public void testToInstanceIdentifierListWithMissingKey() {
88 assertThrows(RestconfDocumentedException.class,
89 () -> controllerContext.toInstanceIdentifier("simple-nodes:user/foo"));
93 public void testToInstanceIdentifierContainer() {
94 final InstanceIdentifierContext instanceIdentifier =
95 controllerContext.toInstanceIdentifier("simple-nodes:users");
96 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "users");
97 assertTrue(instanceIdentifier.getSchemaNode() instanceof ContainerSchemaNode);
98 assertEquals(2, ((ContainerSchemaNode) instanceIdentifier.getSchemaNode()).getChildNodes().size());
102 public void testToInstanceIdentifierChoice() {
103 final InstanceIdentifierContext instanceIdentifier = controllerContext
104 .toInstanceIdentifier("simple-nodes:food/nonalcoholic");
105 assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "nonalcoholic");
109 public void testToInstanceIdentifierChoiceException() {
110 assertThrows(RestconfDocumentedException.class,
111 () -> controllerContext.toInstanceIdentifier("simple-nodes:food/snack"));
115 public void testToInstanceIdentifierCaseException() {
116 assertThrows(RestconfDocumentedException.class,
117 () -> controllerContext.toInstanceIdentifier("simple-nodes:food/sports-arena"));
121 public void testToInstanceIdentifierChoiceCaseException() {
122 assertThrows(RestconfDocumentedException.class,
123 () -> controllerContext.toInstanceIdentifier("simple-nodes:food/snack/sports-arena"));
127 public void testToInstanceIdentifierWithoutNode() {
128 assertThrows(RestconfDocumentedException.class,
129 () -> controllerContext.toInstanceIdentifier("simple-nodes"));
133 public void testMountPointWithExternModul() {
135 final InstanceIdentifierContext instanceIdentifier = controllerContext
136 .toInstanceIdentifier("simple-nodes:users/yang-ext:mount/test-interface2:class/student/name");
138 "[(urn:ietf:params:xml:ns:yang:test-interface2?revision=2014-08-01)class, "
139 + "(urn:ietf:params:xml:ns:yang:test-interface2?revision=2014-08-01)student, "
140 + "(urn:ietf:params:xml:ns:yang:test-interface2?revision=2014-08-01)student"
141 + "[{(urn:ietf:params:xml:ns:yang:test-interface2?revision=2014-08-01)name=name}]]",
142 ImmutableList.copyOf(instanceIdentifier.getInstanceIdentifier().getPathArguments()).toString());
146 public void testMountPointWithoutExternModul() {
148 final InstanceIdentifierContext instanceIdentifier = controllerContext
149 .toInstanceIdentifier("simple-nodes:users/yang-ext:mount/");
150 assertTrue(Iterables.isEmpty(instanceIdentifier.getInstanceIdentifier().getPathArguments()));
154 public void testMountPointWithoutMountPointSchema() {
155 assertThrows(RestconfDocumentedException.class,
156 () -> controllerContext.toInstanceIdentifier("simple-nodes:users/yang-ext:mount/test-interface2:class"));
159 private void initSchemaService() {
160 doReturn(Optional.of(FixedDOMSchemaService.of(mountSchemaContext))).when(mountInstance)
161 .getService(DOMSchemaService.class);