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.assertNotNull;
11 import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.concurrent.ExecutionException;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 import org.mockito.MockitoAnnotations;
19 import org.mockito.junit.MockitoJUnitRunner;
20 import org.opendaylight.yangtools.yang.common.Revision;
21 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
22 import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
23 import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration;
24 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
25 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
26 import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource;
27 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.ASTSchemaSource;
28 import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToASTTransformer;
30 @RunWith(MockitoJUnitRunner.StrictStubs.class)
31 public class SharedSchemaContextFactoryTest {
33 private final SharedSchemaRepository repository = new SharedSchemaRepository("test");
35 private final SchemaContextFactoryConfiguration config = SchemaContextFactoryConfiguration.getDefault();
36 private SourceIdentifier s1;
37 private SourceIdentifier s2;
40 public void setUp() throws Exception {
41 MockitoAnnotations.initMocks(this);
43 final YangTextSchemaSource source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang");
44 final YangTextSchemaSource source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang");
45 s1 = RevisionSourceIdentifier.create("ietf-inet-types", Revision.of("2010-09-24"));
46 s2 = RevisionSourceIdentifier.create("iana-timezones", Revision.of("2012-07-09"));
48 final TextToASTTransformer transformer = TextToASTTransformer.create(repository, repository);
49 repository.registerSchemaSourceListener(transformer);
51 repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source1),
52 PotentialSchemaSource.create(s1, YangTextSchemaSource.class, 1));
54 repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source2),
55 PotentialSchemaSource.create(s2, YangTextSchemaSource.class, 1));
59 public void testCreateSchemaContextWithDuplicateRequiredSources() throws InterruptedException, ExecutionException {
60 final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository,
62 final ListenableFuture<EffectiveModelContext> schemaContext =
63 sharedSchemaContextFactory.createEffectiveModelContext(s1, s1, s2);
64 assertNotNull(schemaContext.get());
68 public void testSourceRegisteredWithDifferentSI() throws Exception {
69 final YangTextSchemaSource source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang");
70 final YangTextSchemaSource source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang");
71 s1 = source1.getIdentifier();
72 s2 = source2.getIdentifier();
74 final SettableSchemaProvider<ASTSchemaSource> provider =
75 SharedSchemaRepositoryTest.getImmediateYangSourceProviderFromResource(
76 "/no-revision/imported@2012-12-12.yang");
78 provider.register(repository);
80 // Register the same provider under source id without revision
81 final SourceIdentifier sIdWithoutRevision = RevisionSourceIdentifier.create(provider.getId().getName());
82 repository.registerSchemaSource(provider, PotentialSchemaSource.create(
83 sIdWithoutRevision, ASTSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue()));
85 final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository,
87 final ListenableFuture<EffectiveModelContext> schemaContext =
88 sharedSchemaContextFactory.createEffectiveModelContext(sIdWithoutRevision, provider.getId());
89 assertNotNull(schemaContext.get());