Fixed bug when converting augmentation in Instance Identifier
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / ControllerContextTest.java
1 package org.opendaylight.controller.sal.restconf.impl.test;
2
3 import static org.junit.Assert.*;
4
5 import java.io.FileNotFoundException;
6 import java.util.Set;
7
8 import org.junit.BeforeClass;
9 import org.junit.Test;
10 import org.mockito.Mock;
11
12 import static org.mockito.Mockito.*;
13
14 import org.opendaylight.controller.sal.core.api.mount.MountInstance;
15 import org.opendaylight.controller.sal.core.api.mount.MountService;
16 import org.opendaylight.controller.sal.restconf.impl.ControllerContext;
17 import org.opendaylight.controller.sal.restconf.impl.InstanceIdWithSchemaNode;
18 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
19 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.Module;
21 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
22
23 public class ControllerContextTest {
24
25     private static final ControllerContext controllerContext = ControllerContext.getInstance();
26
27     @BeforeClass
28     public static void init() throws FileNotFoundException {
29         Set<Module> allModules = TestUtils.loadModules(ControllerContextTest.class.getResource("/full-versions/yangs")
30                 .getPath());
31         SchemaContext schemaContext = TestUtils.loadSchemaContext(allModules);
32         controllerContext.setSchemas(schemaContext);
33     }
34
35     @Test
36     public void testToInstanceIdentifierList() throws FileNotFoundException {
37         InstanceIdWithSchemaNode instanceIdentifier = controllerContext
38                 .toInstanceIdentifier("simple-nodes:userWithoutClass/foo");
39         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "userWithoutClass");
40
41         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:userWithoutClass/foo/full-name");
42         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "full-name");
43
44         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user/foo/boo");
45         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "user");
46
47         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user//boo");
48         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "user");
49
50         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:users/user/foo");
51         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "user");
52
53         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user/null/boo");
54         assertNull(instanceIdentifier);
55
56         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:user/foo");
57         assertNull(instanceIdentifier);
58
59     }
60
61     @Test
62     public void testToInstanceIdentifierMountPoint() throws FileNotFoundException {
63         try {
64             String mountPointPath = "simple-nodes:user/foo/boo";
65             String nestedPath = "simple-nodes:user/foo/boo/simple-nodes:users";
66             InstanceIdWithSchemaNode mountInstanceIdentifier = controllerContext.toInstanceIdentifier(mountPointPath);
67             assertEquals("user", mountInstanceIdentifier.getSchemaNode().getQName().getLocalName());
68
69             MountInstance mountInstance = mock(MountInstance.class);
70             MountService mountService = mock(MountService.class);
71
72             controllerContext.setMountService(mountService);
73             // when(mountService.getMountPoint(any(InstanceIdentifier.class))).thenReturn(null);
74
75             when(mountService.getMountPoint(eq(mountInstanceIdentifier.getInstanceIdentifier()))).thenReturn(
76                     mountInstance);
77
78             when(mountInstance.getSchemaContext()).thenReturn(controllerContext.getGlobalSchema());
79
80             InstanceIdWithSchemaNode mountedInstanceIdentifier = controllerContext.toInstanceIdentifier(nestedPath);
81             assertEquals("users", mountedInstanceIdentifier.getSchemaNode().getQName().getLocalName());
82
83             mountedInstanceIdentifier = controllerContext.toInstanceIdentifier(mountPointPath + "/" + mountPointPath);
84             assertEquals("user", mountedInstanceIdentifier.getSchemaNode().getQName().getLocalName());
85
86             mountedInstanceIdentifier = controllerContext
87                     .toInstanceIdentifier("simple-nodes:user/foo/var/simple-nodes:users");
88             assertNull(mountedInstanceIdentifier);
89
90         } finally {
91             controllerContext.setMountService(null);
92         }
93
94     }
95
96     @Test
97     public void testToInstanceIdentifierContainer() throws FileNotFoundException {
98         InstanceIdWithSchemaNode instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:users");
99         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "users");
100         assertTrue(instanceIdentifier.getSchemaNode() instanceof ContainerSchemaNode);
101         assertEquals(2, ((ContainerSchemaNode) instanceIdentifier.getSchemaNode()).getChildNodes().size());
102     }
103
104     @Test
105     public void testToInstanceIdentifierChoice() throws FileNotFoundException {
106         InstanceIdWithSchemaNode instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:food/beer");
107         assertEquals(instanceIdentifier.getSchemaNode().getQName().getLocalName(), "beer");
108
109         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:food/snack");
110         assertNull(instanceIdentifier);
111
112         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:food/sports-arena");
113         assertNull(instanceIdentifier);
114
115         instanceIdentifier = controllerContext.toInstanceIdentifier("simple-nodes:food/snack/sports-arena");
116         assertNull(instanceIdentifier);
117
118     }
119
120 }