1 package org.opendaylight.controller.sal.binding.test;
4 import java.io.InputStream;
5 import java.util.ArrayList;
9 import javassist.ClassPool;
11 import org.junit.Before;
12 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
13 import org.opendaylight.controller.sal.binding.impl.DataBrokerImpl;
14 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentDataServiceConnector;
15 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
16 import org.opendaylight.controller.sal.binding.dom.serializer.impl.RuntimeGeneratedMappingServiceImpl;
17 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
18 import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore;
19 import org.opendaylight.yangtools.yang.model.api.Module;
20 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
21 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
22 import org.reflections.Reflections;
23 import org.reflections.scanners.ResourcesScanner;
25 import com.google.common.base.Predicate;
26 import com.google.common.util.concurrent.ListeningExecutorService;
27 import com.google.common.util.concurrent.MoreExecutors;
29 public abstract class AbstractDataServiceTest {
30 protected DataBrokerService biDataService;
31 protected DataProviderService baDataService;
34 * Workaround for JUNIT sharing classloaders
37 protected static final ClassPool POOL = new ClassPool();
39 protected RuntimeGeneratedMappingServiceImpl mappingServiceImpl;
40 protected BindingIndependentMappingService mappingService;
41 protected DataBrokerImpl baDataImpl;
42 protected org.opendaylight.controller.sal.dom.broker.DataBrokerImpl biDataImpl;
43 protected ListeningExecutorService executor;
44 protected BindingIndependentDataServiceConnector connectorServiceImpl;
45 protected HashMapDataStore dataStore;
50 executor = MoreExecutors.sameThreadExecutor();
51 baDataImpl = new DataBrokerImpl();
52 baDataService = baDataImpl;
53 baDataImpl.setExecutor(executor);
55 biDataImpl = new org.opendaylight.controller.sal.dom.broker.DataBrokerImpl();
56 biDataService = biDataImpl;
57 biDataImpl.setExecutor(executor);
59 dataStore = new HashMapDataStore();
60 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier treeRoot = org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder().toInstance();
61 biDataImpl.registerConfigurationReader(treeRoot, dataStore);
62 biDataImpl.registerOperationalReader(treeRoot, dataStore);
63 biDataImpl.registerCommitHandler(treeRoot, dataStore);
65 mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl();
66 mappingServiceImpl.setPool(POOL);
67 mappingService = mappingServiceImpl;
68 File pathname = new File("target/gen-classes-debug");
69 //System.out.println("Generated classes are captured in " + pathname.getAbsolutePath());
70 mappingServiceImpl.start();
71 //mappingServiceImpl.getBinding().setClassFileCapturePath(pathname);
73 connectorServiceImpl = new BindingIndependentDataServiceConnector();
74 connectorServiceImpl.setBaDataService(baDataService);
75 connectorServiceImpl.setBiDataService(biDataService);
76 connectorServiceImpl.setMappingService(mappingServiceImpl);
77 connectorServiceImpl.start();
79 String[] yangFiles= getModelFilenames();
80 if(yangFiles != null && yangFiles.length > 0) {
81 mappingServiceImpl.onGlobalContextUpdated(getContext(yangFiles));
86 protected String[] getModelFilenames() {
87 return getAllModelFilenames();
90 public static String[] getAllModelFilenames() {
91 Predicate<String> predicate = new Predicate<String>() {
93 public boolean apply(String input) {
94 return input.endsWith(".yang");
97 Reflections reflection= new Reflections("META-INF.yang", new ResourcesScanner());
98 Set<String> result = reflection.getResources(predicate);
99 return (String[]) result.toArray(new String[result.size()]);
102 public static SchemaContext getContext(String[] yangFiles) {
104 ClassLoader loader = AbstractDataServiceTest.class.getClassLoader();
106 List<InputStream> streams = new ArrayList<>();
107 for (String string : yangFiles) {
108 InputStream stream = loader.getResourceAsStream(string);
112 YangParserImpl parser = new YangParserImpl();
114 Set<Module> modules = parser.parseYangModelsFromStreams(streams);
115 return parser.resolveSchemaContext(modules);