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.yang.parser.repo;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
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;
25 public class OpenconfigVerSharedSchemaRepositoryTest {
28 public void testSemVerSharedSchemaRepository() throws Exception {
29 final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository(
30 "openconfig-ver-shared-schema-repo-test");
32 final SettableSchemaProvider<IRSchemaSource> bar = getImmediateYangSourceProviderFromResource(
33 "/openconfig-version/openconfigver-shared-schema-repository/bar@2016-01-01.yang");
34 bar.register(sharedSchemaRepository);
36 final SettableSchemaProvider<IRSchemaSource> foo = getImmediateYangSourceProviderFromResource(
37 "/openconfig-version/openconfigver-shared-schema-repository/foo.yang");
38 foo.register(sharedSchemaRepository);
40 final SettableSchemaProvider<IRSchemaSource> semVer = getImmediateYangSourceProviderFromResource(
41 "/openconfig-version/openconfigver-shared-schema-repository/openconfig-extensions.yang");
42 semVer.register(sharedSchemaRepository);
45 final EffectiveModelContextFactory fact = sharedSchemaRepository.createEffectiveModelContextFactory(
46 SchemaContextFactoryConfiguration.builder().setStatementParserMode(StatementParserMode.SEMVER_MODE)
49 final ListenableFuture<EffectiveModelContext> inetAndTopologySchemaContextFuture =
50 fact.createEffectiveModelContext(bar.getId(), foo.getId(), semVer.getId());
51 assertTrue(inetAndTopologySchemaContextFuture.isDone());
52 assertSchemaContext(inetAndTopologySchemaContextFuture.get(), 3);
54 final ListenableFuture<EffectiveModelContext> barSchemaContextFuture = fact.createEffectiveModelContext(
55 bar.getId(), semVer.getId());
56 assertTrue(barSchemaContextFuture.isDone());
57 assertSchemaContext(barSchemaContextFuture.get(), 2);
61 public void testSharedSchemaRepository() throws Exception {
62 final SharedSchemaRepository sharedSchemaRepository = new SharedSchemaRepository("shared-schema-repo-test");
64 final SettableSchemaProvider<IRSchemaSource> bar = getImmediateYangSourceProviderFromResource(
65 "/openconfig-version/shared-schema-repository/bar@2016-01-01.yang");
66 bar.register(sharedSchemaRepository);
68 final SettableSchemaProvider<IRSchemaSource> foo = getImmediateYangSourceProviderFromResource(
69 "/openconfig-version/shared-schema-repository/foo.yang");
70 foo.register(sharedSchemaRepository);
72 final SettableSchemaProvider<IRSchemaSource> semVer = getImmediateYangSourceProviderFromResource(
73 "/openconfig-version/shared-schema-repository/openconfig-extensions.yang");
74 semVer.register(sharedSchemaRepository);
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);
83 final ListenableFuture<EffectiveModelContext> barSchemaContextFuture =
84 fact.createEffectiveModelContext(bar.getId(), semVer.getId());
85 assertTrue(barSchemaContextFuture.isDone());
86 assertSchemaContext(barSchemaContextFuture.get(), 2);
89 private static void assertSchemaContext(final SchemaContext schemaContext, final int moduleSize) {
90 assertNotNull(schemaContext);
91 assertEquals(moduleSize, schemaContext.getModules().size());
94 static SettableSchemaProvider<IRSchemaSource> getImmediateYangSourceProviderFromResource(final String resourceName)
96 final YangTextSchemaSource yangSource = YangTextSchemaSource.forResource(resourceName);
97 return SettableSchemaProvider.createImmediate(TextToIRTransformer.transformText(yangSource),
98 IRSchemaSource.class);