a5e624c50957de3c7bf4364b8c1d65f69a442ff2
[yangtools.git] / parser / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / parser / repo / OpenconfigVerSharedSchemaRepositoryTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.repo;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13
14 import com.google.common.util.concurrent.ListenableFuture;
15 import org.junit.Test;
16 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
17 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
18 import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory;
19 import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration;
20 import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode;
21 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
22 import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRSchemaSource;
23 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer;
24
25 public class OpenconfigVerSharedSchemaRepositoryTest {
26
27     @Test
28     public void testSemVerSharedSchemaRepository() throws Exception {
29         final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository(
30                 "openconfig-ver-shared-schema-repo-test");
31
32         final SettableSchemaProvider<IRSchemaSource> bar = getImmediateYangSourceProviderFromResource(
33                 "/openconfig-version/openconfigver-shared-schema-repository/bar@2016-01-01.yang");
34         bar.register(sharedSchemaRepository);
35         bar.setResult();
36         final SettableSchemaProvider<IRSchemaSource> foo = getImmediateYangSourceProviderFromResource(
37                 "/openconfig-version/openconfigver-shared-schema-repository/foo.yang");
38         foo.register(sharedSchemaRepository);
39         foo.setResult();
40         final SettableSchemaProvider<IRSchemaSource> semVer = getImmediateYangSourceProviderFromResource(
41                 "/openconfig-version/openconfigver-shared-schema-repository/openconfig-extensions.yang");
42         semVer.register(sharedSchemaRepository);
43         semVer.setResult();
44
45         final EffectiveModelContextFactory fact = sharedSchemaRepository.createEffectiveModelContextFactory(
46             SchemaContextFactoryConfiguration.builder().setStatementParserMode(StatementParserMode.SEMVER_MODE)
47             .build());
48
49         final ListenableFuture<EffectiveModelContext> inetAndTopologySchemaContextFuture =
50                 fact.createEffectiveModelContext(bar.getId(), foo.getId(), semVer.getId());
51         assertTrue(inetAndTopologySchemaContextFuture.isDone());
52         assertSchemaContext(inetAndTopologySchemaContextFuture.get(), 3);
53
54         final ListenableFuture<EffectiveModelContext> barSchemaContextFuture = fact.createEffectiveModelContext(
55             bar.getId(), semVer.getId());
56         assertTrue(barSchemaContextFuture.isDone());
57         assertSchemaContext(barSchemaContextFuture.get(), 2);
58     }
59
60     @Test
61     public void testSharedSchemaRepository() throws Exception {
62         final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("shared-schema-repo-test");
63
64         final SettableSchemaProvider<IRSchemaSource> bar = getImmediateYangSourceProviderFromResource(
65                 "/openconfig-version/shared-schema-repository/bar@2016-01-01.yang");
66         bar.register(sharedSchemaRepository);
67         bar.setResult();
68         final SettableSchemaProvider<IRSchemaSource> foo = getImmediateYangSourceProviderFromResource(
69                 "/openconfig-version/shared-schema-repository/foo.yang");
70         foo.register(sharedSchemaRepository);
71         foo.setResult();
72         final SettableSchemaProvider<IRSchemaSource> semVer = getImmediateYangSourceProviderFromResource(
73                 "/openconfig-version/shared-schema-repository/openconfig-extensions.yang");
74         semVer.register(sharedSchemaRepository);
75         semVer.setResult();
76
77         final EffectiveModelContextFactory fact = sharedSchemaRepository.createEffectiveModelContextFactory();
78         final ListenableFuture<EffectiveModelContext> inetAndTopologySchemaContextFuture =
79                 fact.createEffectiveModelContext(bar.getId(), foo.getId(), semVer.getId());
80         assertTrue(inetAndTopologySchemaContextFuture.isDone());
81         assertSchemaContext(inetAndTopologySchemaContextFuture.get(), 3);
82
83         final ListenableFuture<EffectiveModelContext> barSchemaContextFuture =
84                 fact.createEffectiveModelContext(bar.getId(), semVer.getId());
85         assertTrue(barSchemaContextFuture.isDone());
86         assertSchemaContext(barSchemaContextFuture.get(), 2);
87     }
88
89     private static void assertSchemaContext(final SchemaContext schemaContext, final int moduleSize) {
90         assertNotNull(schemaContext);
91         assertEquals(moduleSize, schemaContext.getModules().size());
92     }
93
94     static SettableSchemaProvider<IRSchemaSource> getImmediateYangSourceProviderFromResource(final String resourceName)
95             throws Exception {
96         final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName);
97         return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource),
98             IRSchemaSource.class);
99     }
100 }