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