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
9 package org.opendaylight.yangtools.yang.stmt;
11 import static org.hamcrest.CoreMatchers.anyOf;
12 import static org.hamcrest.CoreMatchers.is;
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNotNull;
15 import static org.junit.Assert.assertThat;
16 import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
18 import java.util.Iterator;
20 import org.junit.Test;
21 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.Module;
23 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
24 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
26 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
27 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
30 public class IdentityStmtTest {
32 private static final StatementStreamSource ILLEGAL_IDENTITY_MODULE =
33 sourceForResource("/identity/identitytest.yang");
35 private static final StatementStreamSource ILLEGAL_IDENTITY_MODULE2 = sourceForResource(
36 "/identity/prefixidentitytest.yang");
37 private static final StatementStreamSource LEGAL_IDENTITY_MODULE = sourceForResource(
38 "/identity/import/dummy.yang");
39 private static final StatementStreamSource LEGAL_IDENTITY_MODULE2 = sourceForResource(
40 "/identity/import/prefiximportidentitytest.yang");
41 private static final StatementStreamSource ILLEGAL_IDENTITY_MODULE3 = sourceForResource(
42 "/identity/illegal-chained-identity-test.yang");
43 private static final StatementStreamSource LEGAL_IDENTITY_MODULE3 = sourceForResource(
44 "/identity/legal-chained-identity-test.yang");
45 private static final StatementStreamSource DUPLICATE_IDENTITY_MODULE = sourceForResource(
46 "/identity/duplicate-identity-test.yang");
48 @Test(expected = SomeModifiersUnresolvedException.class)
49 public void selfReferencingIdentityTest() throws ReactorException {
50 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
51 reactor.addSources(ILLEGAL_IDENTITY_MODULE);
53 EffectiveSchemaContext result = reactor.buildEffective();
54 assertNotNull(result);
57 @Test(expected = SomeModifiersUnresolvedException.class)
58 public void selfReferencingIdentityWithPrefixTest() throws ReactorException {
59 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
60 reactor.addSources(ILLEGAL_IDENTITY_MODULE2);
62 EffectiveSchemaContext result = reactor.buildEffective();
63 assertNotNull(result);
67 public void importedIdentityTest() throws ReactorException {
68 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
69 reactor.addSources(LEGAL_IDENTITY_MODULE, LEGAL_IDENTITY_MODULE2);
71 EffectiveSchemaContext result = reactor.buildEffective();
72 assertNotNull(result);
75 @Test(expected = SomeModifiersUnresolvedException.class)
76 public void selfReferencingIdentityThroughChaining() throws ReactorException {
77 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
78 reactor.addSources(ILLEGAL_IDENTITY_MODULE3);
80 EffectiveSchemaContext result = reactor.buildEffective();
81 assertNotNull(result);
85 public void chainedIdentityTest() throws ReactorException {
86 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
87 reactor.addSources(LEGAL_IDENTITY_MODULE3);
89 EffectiveSchemaContext result = reactor.buildEffective();
90 assertNotNull(result);
92 Module testModule = result.findModuleByName("legal-chained-identity-test", null);
93 assertNotNull(testModule);
95 Set<IdentitySchemaNode> identities = testModule.getIdentities();
96 assertEquals(4, identities.size());
98 Iterator<IdentitySchemaNode> identitiesIterator = identities.iterator();
99 IdentitySchemaNode identity = identitiesIterator.next();
100 assertThat(identity.getQName().getLocalName(), anyOf(is("first-identity"), is("second-identity"), is
101 ("third-identity"), is("fourth-identity")));
103 identity = identitiesIterator.next();
104 assertThat(identity.getQName().getLocalName(), anyOf(is("first-identity"), is("second-identity"), is
105 ("third-identity"), is("fourth-identity")));
107 identity = identitiesIterator.next();
108 assertThat(identity.getQName().getLocalName(), anyOf(is("first-identity"), is("second-identity"), is
109 ("third-identity"), is("fourth-identity")));
111 identity = identitiesIterator.next();
112 assertThat(identity.getQName().getLocalName(), anyOf(is("first-identity"), is("second-identity"), is
113 ("third-identity"), is("fourth-identity")));
117 public void duplicateIdentityTest() throws ReactorException {
118 CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
119 reactor.addSources(DUPLICATE_IDENTITY_MODULE);
121 EffectiveSchemaContext result = reactor.buildEffective();
122 assertNotNull(result);
124 Module testModule = result.findModuleByName("duplicate-identity-test", null);
125 Set<IdentitySchemaNode> identities = testModule.getIdentities();
126 assertEquals(1, identities.size());