Fix for Bug 144
[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 org.junit.Before;
10 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
11 import org.opendaylight.controller.sal.binding.impl.DataBrokerImpl;
12 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentDataServiceConnector;
13 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
14 import org.opendaylight.controller.sal.binding.impl.connect.dom.RuntimeGeneratedMappingServiceImpl;
15 import org.opendaylight.controller.sal.binding.test.connect.dom.MappingServiceTest;
16 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
17 import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore;
18 import org.opendaylight.yangtools.yang.model.api.Module;
19 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
20 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
21 import org.reflections.Reflections;
22 import org.reflections.scanners.ResourcesScanner;
23
24 import com.google.common.base.Predicate;
25 import com.google.common.util.concurrent.ListeningExecutorService;
26 import com.google.common.util.concurrent.MoreExecutors;
27
28 public  abstract class AbstractDataServiceTest {
29     protected DataBrokerService biDataService;
30     protected DataProviderService baDataService;
31     
32     protected RuntimeGeneratedMappingServiceImpl mappingServiceImpl;
33     protected BindingIndependentMappingService mappingService;
34     protected DataBrokerImpl baDataImpl;
35     protected org.opendaylight.controller.sal.dom.broker.DataBrokerImpl biDataImpl;
36     protected ListeningExecutorService executor;
37     protected BindingIndependentDataServiceConnector connectorServiceImpl;
38     protected HashMapDataStore dataStore;
39     
40     
41     @Before
42     public void setUp() {
43         executor = MoreExecutors.sameThreadExecutor();
44         baDataImpl = new DataBrokerImpl();
45         baDataService = baDataImpl;
46         baDataImpl.setExecutor(executor);
47         
48         biDataImpl = new org.opendaylight.controller.sal.dom.broker.DataBrokerImpl();
49         biDataService =  biDataImpl;
50         biDataImpl.setExecutor(executor);
51         
52         dataStore = new HashMapDataStore();
53         org.opendaylight.yangtools.yang.data.api.InstanceIdentifier treeRoot = org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder().toInstance();
54         biDataImpl.registerConfigurationReader(treeRoot, dataStore);
55         biDataImpl.registerOperationalReader(treeRoot, dataStore);
56         biDataImpl.registerCommitHandler(treeRoot, dataStore);
57         
58         mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl();
59         mappingService = mappingServiceImpl;
60         File pathname = new File("target/gen-classes-debug");
61         //System.out.println("Generated classes are captured in " + pathname.getAbsolutePath());
62         mappingServiceImpl.start();
63         //mappingServiceImpl.getBinding().setClassFileCapturePath(pathname);
64         
65         connectorServiceImpl = new BindingIndependentDataServiceConnector();
66         connectorServiceImpl.setBaDataService(baDataService);
67         connectorServiceImpl.setBiDataService(biDataService);
68         connectorServiceImpl.setMappingService(mappingServiceImpl);
69         connectorServiceImpl.start();
70         
71         String[] yangFiles= getModelFilenames();
72         mappingServiceImpl.onGlobalContextUpdated(getContext(yangFiles));
73     }
74
75
76     protected  String[] getModelFilenames() {
77         return getModelFilenamesImpl();
78     }
79     
80     public static String[] getModelFilenamesImpl() {
81         Predicate<String> predicate = new Predicate<String>() {
82             @Override
83             public boolean apply(String input) {
84                 return input.endsWith(".yang");
85             }
86         };
87         Reflections reflection= new Reflections("META-INF.yang", new ResourcesScanner());
88         Set<String> result = reflection.getResources(predicate);
89         return (String[]) result.toArray(new String[result.size()]);
90     }
91     
92     public static SchemaContext getContext(String[] yangFiles) {
93
94         ClassLoader loader = AbstractDataServiceTest.class.getClassLoader();
95
96         List<InputStream> streams = new ArrayList<>();
97         for (String string : yangFiles) {
98             InputStream stream = loader.getResourceAsStream(string);
99             streams.add(stream);
100
101         }
102         YangParserImpl parser = new YangParserImpl();
103
104         Set<Module> modules = parser.parseYangModelsFromStreams(streams);
105         return parser.resolveSchemaContext(modules);
106     }
107 }