Merge "Update context-instance xpath format according to latest changes in config...
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / test / java / org / opendaylight / controller / sal / binding / test / AbstractDataServiceTest.java
1 package org.opendaylight.controller.sal.binding.test;
2
3 import java.io.File;
4 import java.io.InputStream;
5 import java.util.ArrayList;
6 import java.util.List;
7 import java.util.Set;
8
9 import javassist.ClassPool;
10
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;
24
25 import com.google.common.base.Predicate;
26 import com.google.common.util.concurrent.ListeningExecutorService;
27 import com.google.common.util.concurrent.MoreExecutors;
28
29 public  abstract class AbstractDataServiceTest {
30     protected org.opendaylight.controller.sal.core.api.data.DataProviderService biDataService;
31     protected DataProviderService baDataService;
32     
33     /**
34      * Workaround for JUNIT sharing classloaders
35      * 
36      */
37     protected static final ClassPool POOL = new ClassPool();
38     
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;
46     
47     
48     @Before
49     public void setUp() {
50         executor = MoreExecutors.sameThreadExecutor();
51         baDataImpl = new DataBrokerImpl();
52         baDataService = baDataImpl;
53         baDataImpl.setExecutor(executor);
54         
55         biDataImpl = new org.opendaylight.controller.sal.dom.broker.DataBrokerImpl();
56         biDataService =  biDataImpl;
57         biDataImpl.setExecutor(executor);
58         
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);
64         
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(null);
71         //mappingServiceImpl.getBinding().setClassFileCapturePath(pathname);
72         
73         connectorServiceImpl = new BindingIndependentDataServiceConnector();
74         connectorServiceImpl.setBaDataService(baDataService);
75         connectorServiceImpl.setBiDataService(biDataService);
76         connectorServiceImpl.setMappingService(mappingServiceImpl);
77         connectorServiceImpl.start();
78         
79         String[] yangFiles= getModelFilenames();
80         if(yangFiles != null && yangFiles.length > 0) {
81             mappingServiceImpl.onGlobalContextUpdated(getContext(yangFiles));
82         }
83     }
84
85
86     protected  String[] getModelFilenames() {
87         return getAllModelFilenames();
88     }
89     
90     public static String[] getAllModelFilenames() {
91         Predicate<String> predicate = new Predicate<String>() {
92             @Override
93             public boolean apply(String input) {
94                 return input.endsWith(".yang");
95             }
96         };
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()]);
100     }
101     
102     public static SchemaContext getContext(String[] yangFiles) {
103
104         ClassLoader loader = AbstractDataServiceTest.class.getClassLoader();
105
106         List<InputStream> streams = new ArrayList<>();
107         for (String string : yangFiles) {
108             InputStream stream = loader.getResourceAsStream(string);
109             streams.add(stream);
110
111         }
112         YangParserImpl parser = new YangParserImpl();
113
114         Set<Module> modules = parser.parseYangModelsFromStreams(streams);
115         return parser.resolveSchemaContext(modules);
116     }
117 }