1 package org.opendaylight.xsql.test;
3 import java.io.InputStream;
4 import java.sql.SQLException;
5 import java.util.Collections;
8 import org.junit.Assert;
9 import org.junit.Before;
10 import org.junit.BeforeClass;
11 import org.junit.Test;
12 import org.opendaylight.controller.md.sal.dom.xsql.XSQLAdapter;
13 import org.opendaylight.controller.md.sal.dom.xsql.XSQLBluePrint;
14 import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCResultSet;
15 import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCServer;
16 import org.opendaylight.yangtools.yang.model.api.Module;
17 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
18 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
20 public class XSQLTest {
21 private static final String DATASTORE_TEST_YANG = "/sal-persisted-dom-test.yang";
22 private XSQLBluePrint bluePrint = null;
23 //private static SchemaContext schemaContext = null;
25 public static void loadSchemaContext(){
26 //schemaContext = createTestContext();
30 public void before() {
32 InputStream in = this.getClass().getClassLoader().getResourceAsStream("BluePrintCache.dat");
34 bluePrint = XSQLBluePrint.load(in);
35 log("Loaded Blue Print!");
37 log("Can't find Blue Print!");
40 }catch(Exception err){
41 err.printStackTrace();
46 public void testQueryParsingSimpleNoCriteria() {
47 String sql = "select * from nodes/node;";
48 JDBCResultSet rs = new JDBCResultSet(sql);
49 parseTables(sql,bluePrint, rs);
50 parseFields(sql, bluePrint, rs);
51 JDBCServer.parseCriteria(rs, bluePrint);
52 if(rs.getCriteria().isEmpty()){
53 log("Test Criteria parsing of \""+sql+"\" Passed!");
54 Assert.assertEquals(true, true);
56 log("Test Criteria parsing of \""+sql+"\" Failed!");
57 Assert.assertEquals(false, true);
62 public void testQueryParsingComplexNoCriteria() {
63 String sql = "select nodes/node.id,nodes/node/node-connector.id,nodes/node/node-connector.hardware-address from nodes/node,nodes/node/node-connector;";
64 JDBCResultSet rs = new JDBCResultSet(sql);
65 parseTables(sql,bluePrint, rs);
66 parseFields(sql, bluePrint, rs);
67 JDBCServer.parseCriteria(rs, bluePrint);
68 if(rs.getCriteria().isEmpty()){
69 log("Test Criteria parsing of \""+sql+"\" Passed!");
70 Assert.assertEquals(true, true);
72 log("Test Criteria parsing of \""+sql+"\" Failed!");
73 Assert.assertEquals(false, true);
78 public void testQueryParsingComplexWithCriteria() {
79 String sql = "select nodes/node.id,nodes/node/node-connector.id,nodes/node/node-connector.hardware-address from nodes/node,nodes/node/node-connector where hardware-address like 'AB';";
80 JDBCResultSet rs = new JDBCResultSet(sql);
81 parseTables(sql,bluePrint, rs);
82 parseFields(sql, bluePrint, rs);
83 JDBCServer.parseCriteria(rs, bluePrint);
84 if(!rs.getCriteria().isEmpty()){
85 log("Test Criteria parsing of \""+sql+"\" Passed!");
86 Assert.assertEquals(true, true);
88 log("Test Criteria parsing of \""+sql+"\" Failed!");
89 Assert.assertEquals(false, true);
94 public void testQueryParsingSimpleWithCriteria() {
95 String sql = "select * from nodes/node where nodes/node.id like 'something...';";
96 JDBCResultSet rs = new JDBCResultSet(sql);
97 parseTables(sql,bluePrint, rs);
98 parseFields(sql, bluePrint, rs);
99 JDBCServer.parseCriteria(rs, bluePrint);
100 if(!rs.getCriteria().isEmpty()){
101 log("Test Criteria parsing of \""+sql+"\" Passed!");
102 Assert.assertEquals(true, true);
104 log("Test Criteria parsing of \""+sql+"\" Failed!");
105 Assert.assertEquals(false, true);
109 private static void parseTables(String sql,XSQLBluePrint bp,JDBCResultSet rs){
111 JDBCServer.parseTables(rs, bp);
112 log("Test Table parsing of \""+sql+"\" Passed!");
113 Assert.assertEquals(true,true);
114 }catch(SQLException err){
115 log("Test Table parsing of \""+sql+"\" Failed!");
116 err.printStackTrace();
117 Assert.assertEquals(false,true);
122 public void testQueryParsingComplexWithCriteriaAndGrouping() {
124 String sub_sql = "select nodes/node.id,nodes/node/node-connector.id,nodes/node/node-connector.hardware-address from nodes/node,nodes/node/node-connector where hardware-address like 'AB';";
126 String sql = "SELECT DISTINCT"
127 + "\"LOGICAL_TABLE_1\".\"nodes/node.id\" AS \"COL0\"\n"
128 + ",\"LOGICAL_TABLE_1\".\"nodes/node.address\" AS \"COL1\"\n"
129 + ",\"LOGICAL_TABLE_1\".\"nodes/node/node-connector.hardware-address\" AS \"COL2\"\n"
131 + "("+sub_sql+") \"LOGICAL_TABLE_1\"\n";
135 JDBCResultSet rs = new JDBCResultSet(sql);
136 XSQLAdapter.getInstance().loadBluePrint();
138 JDBCServer.checkAndBreakSubQueries(rs, XSQLAdapter.getInstance());
139 if(rs.getSubQueries().isEmpty()){
140 log("Logical table parsing for "+sql+" Failed!");
142 JDBCServer.parseExternalQuery(rs);
143 log("Fields="+rs.getFields().size());
144 Assert.assertEquals(rs.getFields().size(), 3);
145 Assert.assertEquals(rs.getTables().size(), 1);
146 Assert.assertEquals(rs.getTables().get(0).getODLTableName(), "LOGICAL_TABLE_1");
148 JDBCResultSet subRS = rs.getSubQueries().values().iterator().next();
149 parseTables(sql,bluePrint, subRS);
150 parseFields(sql, bluePrint, subRS);
151 JDBCServer.parseCriteria(subRS, bluePrint);
152 if(!subRS.getCriteria().isEmpty()){
153 log("Test Criteria parsing of \""+sql+"\" Passed!");
154 Assert.assertEquals(true, true);
156 log("Test Criteria parsing of \""+sql+"\" Failed!");
157 Assert.assertEquals(false, true);
160 }catch(SQLException err){
161 err.printStackTrace();
165 private static void parseFields(String sql,XSQLBluePrint bp,JDBCResultSet rs){
167 JDBCServer.parseFields(rs, bp);
168 log("Test Fields parsing of \""+sql+"\" Passed!");
169 Assert.assertEquals(true,true);
170 }catch(SQLException err){
171 log("Test Fields parsing of \""+sql+"\" Failed!");
172 err.printStackTrace();
173 Assert.assertEquals(false,true);
177 private static void log(String str) {
178 System.out.print("*** XSQL Tests -");
179 System.out.println(str);
182 public static final InputStream getDatastoreTestInputStream() {
183 return getInputStream(DATASTORE_TEST_YANG);
186 private static InputStream getInputStream(final String resourceName) {
187 return XSQLTest.class.getResourceAsStream(DATASTORE_TEST_YANG);
190 public static SchemaContext createTestContext() {
191 YangParserImpl parser = new YangParserImpl();
192 Set<Module> modules = parser.parseYangModelsFromStreams(Collections.singletonList(getDatastoreTestInputStream()));
193 return parser.resolveSchemaContext(modules);