import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.common.io.ByteSource;
import com.google.common.util.concurrent.CheckedFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.util.concurrent.EventExecutor;
+import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.URL;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleListener;
import org.osgi.framework.Filter;
doAnswer(new Answer<Filter>() {
@Override
- public Filter answer(InvocationOnMock invocation) {
- String str = invocation.getArgumentAt(0, String.class);
- Filter mockFilter = mock(Filter.class);
+ public Filter answer(final InvocationOnMock invocation) {
+ final String str = invocation.getArgumentAt(0, String.class);
+ final Filter mockFilter = mock(Filter.class);
doReturn(str).when(mockFilter).toString();
return mockFilter;
}
Mockito.doReturn(null).when(this.mockedFuture).get();
- final YangContextParser parser = new YangParserImpl();
- final SchemaContext context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
+ final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
final URLSchemaContextResolver mockedContextResolver = Mockito.mock(URLSchemaContextResolver.class);
Mockito.doReturn(Optional.of(context)).when(mockedContextResolver).getSchemaContext();
setupMockService(EventExecutor.class, AutoCloseableEventExecutor.CloseableEventExecutorMixin.globalEventExecutor());
}
- private void setupMockService(Class<?> serviceInterface, Object instance) throws Exception {
- ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
+ private void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
+ final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
getServiceReferences(anyString(), contains(serviceInterface.getName()));
doReturn(instance).when(mockedContext).getService(mockServiceRef);
}
+ private static SchemaContext parseYangStreams(final Collection<ByteSource> streams) {
+ final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
+ .newBuild();
+ try {
+ return reactor.buildEffective(streams);
+ } catch (final ReactorException | IOException e) {
+ throw new RuntimeException("Unable to build schema context from " + streams, e);
+ }
+ }
+
private List<String> getYangModelsPaths() {
final List<String> paths = Lists.newArrayList("/META-INF/yang/bgp-rib.yang", "/META-INF/yang/ietf-inet-types.yang",
"/META-INF/yang/bgp-message.yang", "/META-INF/yang/bgp-multiprotocol.yang", "/META-INF/yang/bgp-types.yang",
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
-import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleListener;
import org.osgi.framework.Filter;
doAnswer(new Answer<Filter>() {
@Override
- public Filter answer(InvocationOnMock invocation) {
- String str = invocation.getArgumentAt(0, String.class);
- Filter mockFilter = mock(Filter.class);
+ public Filter answer(final InvocationOnMock invocation) {
+ final String str = invocation.getArgumentAt(0, String.class);
+ final Filter mockFilter = mock(Filter.class);
doReturn(str).when(mockFilter).toString();
return mockFilter;
}
Mockito.doReturn(null).when(this.mockedFuture).get();
final GlobalBundleScanningSchemaServiceImpl schemaService = GlobalBundleScanningSchemaServiceImpl.createInstance(this.mockedContext);
- final YangContextParser parser = new YangParserImpl();
- final SchemaContext context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
+ final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
final URLSchemaContextResolver mockedContextResolver = Mockito.mock(URLSchemaContextResolver.class);
Mockito.doReturn(Optional.of(context)).when(mockedContextResolver).getSchemaContext();
setupMockService(DOMMountPointService.class, mock(DOMMountPointService.class));
}
- private void setupMockService(Class<?> serviceInterface, Object instance) throws Exception {
- ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
+ private void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
+ final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
getServiceReferences(anyString(), contains(serviceInterface.getName()));
doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
doReturn(instance).when(mockedContext).getService(mockServiceRef);
}
+ private static SchemaContext parseYangStreams(final Collection<ByteSource> streams) {
+ final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
+ .newBuild();
+ try {
+ return reactor.buildEffective(streams);
+ } catch (final ReactorException | IOException e) {
+ throw new RuntimeException("Unable to build schema context from " + streams, e);
+ }
+ }
+
protected List<ModuleFactory> getModuleFactories() {
return Lists.newArrayList(new RIBImplModuleFactory(), new GlobalEventExecutorModuleFactory(),
new BGPDispatcherImplModuleFactory(), new NettyThreadgroupModuleFactory(),
@Override
public void handleServiceRegistration(final Class<?> clazz, final Object serviceInstance, final Dictionary<String, ?> props) {
final SchemaContextListener listener = (SchemaContextListener) serviceInstance;
- final YangContextParser parser = new YangParserImpl();
- final SchemaContext context;
- try {
- context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
- } catch (IOException | YangSyntaxErrorException e) {
- throw new IllegalStateException("Failed to parse models", e);
- }
+ final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
listener.onGlobalContextUpdated(context);
}
};
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
+
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.common.io.ByteSource;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
-import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
-import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
-import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleListener;
import org.osgi.framework.Filter;
doAnswer(new Answer<Filter>() {
@Override
- public Filter answer(InvocationOnMock invocation) {
- String str = invocation.getArgumentAt(0, String.class);
- Filter mockFilter = mock(Filter.class);
+ public Filter answer(final InvocationOnMock invocation) {
+ final String str = invocation.getArgumentAt(0, String.class);
+ final Filter mockFilter = mock(Filter.class);
doReturn(str).when(mockFilter).toString();
return mockFilter;
}
Mockito.doReturn(null).when(mockedContext).getService(emptyServiceReference);
final GlobalBundleScanningSchemaServiceImpl schemaService = GlobalBundleScanningSchemaServiceImpl.createInstance(this.mockedContext);
- final YangContextParser parser = new YangParserImpl();
- final SchemaContext context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
+ final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
final URLSchemaContextResolver mockedContextResolver = Mockito.mock(URLSchemaContextResolver.class);
Mockito.doReturn(Optional.of(context)).when(mockedContextResolver).getSchemaContext();
setupMockService(DOMRpcService.class, mock(DOMRpcService.class));
setupMockService(DOMMountPointService.class, mock(DOMMountPointService.class));
- DOMRpcProviderService mockRpcProvider = mock(DOMRpcProviderService.class);
+ final DOMRpcProviderService mockRpcProvider = mock(DOMRpcProviderService.class);
doReturn(mock(DOMRpcImplementationRegistration.class)).when(mockRpcProvider).registerRpcImplementation(
any(DOMRpcImplementation.class), any(Set.class));
setupMockService(DOMRpcProviderService.class, mockRpcProvider);
}
- private void setupMockService(Class<?> serviceInterface, Object instance) throws Exception {
- ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
+ private void setupMockService(final Class<?> serviceInterface, final Object instance) throws Exception {
+ final ServiceReference<?> mockServiceRef = mock(ServiceReference.class);
doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
getServiceReferences(anyString(), contains(serviceInterface.getName()));
doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
@Override
public void handleServiceRegistration(final Class<?> clazz, final Object serviceInstance, final Dictionary<String, ?> props) {
final SchemaContextListener listener = (SchemaContextListener) serviceInstance;
- final YangContextParser parser = new YangParserImpl();
- SchemaContext context;
- try {
- context = parser.parseSources(getFilesAsByteSources(getYangModelsPaths()));
- } catch (final IOException | YangSyntaxErrorException e) {
- throw new IllegalStateException("Failed to parse models", e);
- }
+ final SchemaContext context = parseYangStreams(getFilesAsByteSources(getYangModelsPaths()));
+ listener.onGlobalContextUpdated(context);
listener.onGlobalContextUpdated(context);
}
};
return resources;
}
+ private static SchemaContext parseYangStreams(final Collection<ByteSource> streams) {
+ final CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR
+ .newBuild();
+ try {
+ return reactor.buildEffective(streams);
+ } catch (final ReactorException | IOException e) {
+ throw new RuntimeException("Unable to build schema context from " + streams, e);
+ }
+ }
+
}