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.sal.binding.generator.util;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.withSettings;
17 import static org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderModel.createTestContext;
19 import com.google.common.collect.ImmutableList;
20 import com.google.common.collect.ImmutableSet;
21 import java.lang.reflect.Constructor;
23 import java.util.ArrayList;
24 import java.util.Date;
25 import java.util.List;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.opendaylight.yangtools.yang.common.QName;
29 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
30 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
31 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
33 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
34 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
35 import org.opendaylight.yangtools.yang.model.api.Module;
36 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
37 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
38 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
39 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
41 public class YangSchemaUtilsTest {
43 private static final AugmentationSchema AUGMENTATION_SCHEMA = mock(AugmentationSchema.class);
44 private static final UnknownSchemaNode UNKNOWN_SCHEMA_NODE = mock(UnknownSchemaNode.class);
45 private static final QName Q_NAME =
46 QName.create(URI.create("testUri"), new Date(System.currentTimeMillis()), "foo_augment");
49 public void setUp() throws Exception {
50 doReturn(ImmutableList.of(UNKNOWN_SCHEMA_NODE)).when(AUGMENTATION_SCHEMA).getUnknownSchemaNodes();
51 doReturn(QName.create(YangSchemaUtils.AUGMENT_IDENTIFIER)).when(UNKNOWN_SCHEMA_NODE).getNodeType();
52 doReturn(Q_NAME).when(UNKNOWN_SCHEMA_NODE).getQName();
56 public void getAugmentationQName() throws Exception {
57 assertEquals(Q_NAME, YangSchemaUtils.getAugmentationQName(AUGMENTATION_SCHEMA));
58 final DataSchemaNode dataSchemaNode = mock(DataSchemaNode.class);
59 doReturn(Q_NAME).when(UNKNOWN_SCHEMA_NODE).getNodeType();
60 doReturn(ImmutableList.of(dataSchemaNode)).when(AUGMENTATION_SCHEMA).getChildNodes();
61 doReturn(false).when(dataSchemaNode).isAugmenting();
62 doReturn(Q_NAME).when(dataSchemaNode).getQName();
63 doReturn(ImmutableList.of(dataSchemaNode)).when(AUGMENTATION_SCHEMA).getChildNodes();
64 assertEquals(Q_NAME, YangSchemaUtils.getAugmentationQName(AUGMENTATION_SCHEMA));
68 public void getAugmentationIdentifier() throws Exception {
69 assertEquals(Q_NAME, YangSchemaUtils.getAugmentationIdentifier(AUGMENTATION_SCHEMA));
70 doReturn(Q_NAME).when(UNKNOWN_SCHEMA_NODE).getNodeType();
71 assertNull(YangSchemaUtils.getAugmentationIdentifier(AUGMENTATION_SCHEMA));
75 public void findTypeDefinition() throws Exception {
76 SchemaContext context = createTestContext();
77 assertNotNull(context);
78 final QName qName = QName.create(context.getModules().iterator().next().getNamespace(),
79 context.getModules().iterator().next().getRevision(), context.getModules().iterator().next().getName());
80 assertNull(YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(ImmutableList.of(qName), false)));
81 final List qNames = new ArrayList();
82 context.getTypeDefinitions().forEach(typeDefinition -> qNames.add(typeDefinition.getQName()));
83 assertNull(YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(qNames, false)));
85 context = mock(SchemaContext.class);
86 final Module container = mock(Module.class);
87 doReturn(null).when(context).findModuleByNamespaceAndRevision(any(), any());
88 assertNull(YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(qNames, false)));
89 doReturn(container).when(context).findModuleByNamespaceAndRevision(any(), any());
91 final DataSchemaNode node = mock(DataSchemaNode.class);
92 doReturn(node).when(container).getDataChildByName((QName) any());
93 final TypeDefinition typeDefinition = mock(TypeDefinition.class);
94 doReturn(Q_NAME).when(typeDefinition).getQName();
95 doReturn(ImmutableSet.of(typeDefinition)).when(container).getTypeDefinitions();
96 assertEquals(typeDefinition,
97 YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(ImmutableList.of(Q_NAME), false)));
99 final GroupingDefinition grouping = mock(GroupingDefinition.class);
100 doReturn(Q_NAME).when(grouping).getQName();
101 doReturn(ImmutableSet.of(grouping)).when(container).getGroupings();
102 doReturn(ImmutableSet.of(typeDefinition)).when(grouping).getTypeDefinitions();
103 assertEquals(typeDefinition,
104 YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(ImmutableList.of(Q_NAME, Q_NAME), false)));
106 final DataNodeContainer dataNode =
107 mock(DataNodeContainer.class, withSettings().extraInterfaces(DataSchemaNode.class));
108 doReturn(dataNode).when(container).getDataChildByName((QName) any());
109 doReturn(ImmutableSet.of(typeDefinition)).when(dataNode).getTypeDefinitions();
110 assertEquals(typeDefinition,
111 YangSchemaUtils.findTypeDefinition(context, SchemaPath.create(ImmutableList.of(Q_NAME, Q_NAME), false)));
113 final ChoiceSchemaNode choiceNode =
114 mock(ChoiceSchemaNode.class, withSettings().extraInterfaces(DataSchemaNode.class));
115 doReturn(choiceNode).when(container).getDataChildByName((QName) any());
116 final ChoiceCaseNode caseNode = mock(ChoiceCaseNode.class);
117 doReturn(caseNode).when(choiceNode).getCaseNodeByName((QName) any());
118 doReturn(ImmutableSet.of(typeDefinition)).when(caseNode).getTypeDefinitions();
119 assertEquals(typeDefinition,
120 YangSchemaUtils.findTypeDefinition(context,
121 SchemaPath.create(ImmutableList.of(Q_NAME, Q_NAME, Q_NAME), false)));
124 @Test(expected = UnsupportedOperationException.class)
125 public void privateConstructTest() throws Throwable {
126 final Constructor constructor = YangSchemaUtils.class.getDeclaredConstructor();
127 constructor.setAccessible(true);
129 constructor.newInstance();
130 } catch (Exception e) {