1 package org.opendaylight.xsql.test;
3 import java.io.InputStream;
4 import java.sql.SQLException;
6 import org.junit.Assert;
7 import org.junit.Before;
9 import org.opendaylight.controller.md.sal.dom.xsql.XSQLAdapter;
10 import org.opendaylight.controller.md.sal.dom.xsql.XSQLBluePrint;
11 import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCResultSet;
12 import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCServer;
14 public class XSQLTest {
16 XSQLBluePrint bluePrint = null;
19 public void before() {
21 InputStream in = this.getClass().getClassLoader().getResourceAsStream("BluePrintCache.dat");
23 bluePrint = XSQLBluePrint.load(in);
24 log("Loaded Blue Print!");
26 log("Can't find Blue Print!");
29 }catch(Exception err){
30 err.printStackTrace();
35 public void testQueryParsingSimpleNoCriteria() {
36 String sql = "select * from nodes/node;";
37 JDBCResultSet rs = new JDBCResultSet(sql);
38 parseTables(sql,bluePrint, rs);
39 parseFields(sql, bluePrint, rs);
40 JDBCServer.parseCriteria(rs, bluePrint);
41 if(rs.getCriteria().isEmpty()){
42 log("Test Criteria parsing of \""+sql+"\" Passed!");
43 Assert.assertEquals(true, true);
45 log("Test Criteria parsing of \""+sql+"\" Failed!");
46 Assert.assertEquals(false, true);
51 public void testQueryParsingComplexNoCriteria() {
52 String sql = "select nodes/node.id,nodes/node/node-connector.id,nodes/node/node-connector.hardware-address from nodes/node,nodes/node/node-connector;";
53 JDBCResultSet rs = new JDBCResultSet(sql);
54 parseTables(sql,bluePrint, rs);
55 parseFields(sql, bluePrint, rs);
56 JDBCServer.parseCriteria(rs, bluePrint);
57 if(rs.getCriteria().isEmpty()){
58 log("Test Criteria parsing of \""+sql+"\" Passed!");
59 Assert.assertEquals(true, true);
61 log("Test Criteria parsing of \""+sql+"\" Failed!");
62 Assert.assertEquals(false, true);
67 public void testQueryParsingComplexWithCriteria() {
68 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';";
69 JDBCResultSet rs = new JDBCResultSet(sql);
70 parseTables(sql,bluePrint, rs);
71 parseFields(sql, bluePrint, rs);
72 JDBCServer.parseCriteria(rs, bluePrint);
73 if(!rs.getCriteria().isEmpty()){
74 log("Test Criteria parsing of \""+sql+"\" Passed!");
75 Assert.assertEquals(true, true);
77 log("Test Criteria parsing of \""+sql+"\" Failed!");
78 Assert.assertEquals(false, true);
83 public void testQueryParsingSimpleWithCriteria() {
84 String sql = "select * from nodes/node where nodes/node.id like 'something...';";
85 JDBCResultSet rs = new JDBCResultSet(sql);
86 parseTables(sql,bluePrint, rs);
87 parseFields(sql, bluePrint, rs);
88 JDBCServer.parseCriteria(rs, bluePrint);
89 if(!rs.getCriteria().isEmpty()){
90 log("Test Criteria parsing of \""+sql+"\" Passed!");
91 Assert.assertEquals(true, true);
93 log("Test Criteria parsing of \""+sql+"\" Failed!");
94 Assert.assertEquals(false, true);
98 private static void parseTables(String sql,XSQLBluePrint bp,JDBCResultSet rs){
100 JDBCServer.parseTables(rs, bp);
101 log("Test Table parsing of \""+sql+"\" Passed!");
102 Assert.assertEquals(true,true);
103 }catch(SQLException err){
104 log("Test Table parsing of \""+sql+"\" Failed!");
105 err.printStackTrace();
106 Assert.assertEquals(false,true);
111 public void testQueryParsingComplexWithCriteriaAndGrouping() {
113 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';";
115 String sql = "SELECT DISTINCT"
116 + "\"LOGICAL_TABLE_1\".\"nodes/node.id\" AS \"COL0\"\n"
117 + ",\"LOGICAL_TABLE_1\".\"nodes/node.address\" AS \"COL1\"\n"
118 + ",\"LOGICAL_TABLE_1\".\"nodes/node/node-connector.hardware-address\" AS \"COL2\"\n"
120 + "("+sub_sql+") \"LOGICAL_TABLE_1\"\n";
124 JDBCResultSet rs = new JDBCResultSet(sql);
125 XSQLAdapter.getInstance().loadBluePrint();
127 JDBCServer.checkAndBreakSubQueries(rs, XSQLAdapter.getInstance());
128 if(rs.getSubQueries().isEmpty()){
129 log("Logical table parsing for "+sql+" Failed!");
131 JDBCServer.parseExternalQuery(rs);
132 log("Fields="+rs.getFields().size());
133 Assert.assertEquals(rs.getFields().size(), 3);
134 Assert.assertEquals(rs.getTables().size(), 1);
135 Assert.assertEquals(rs.getTables().get(0).getODLTableName(), "LOGICAL_TABLE_1");
137 JDBCResultSet subRS = rs.getSubQueries().values().iterator().next();
138 parseTables(sql,bluePrint, subRS);
139 parseFields(sql, bluePrint, subRS);
140 JDBCServer.parseCriteria(subRS, bluePrint);
141 if(!subRS.getCriteria().isEmpty()){
142 log("Test Criteria parsing of \""+sql+"\" Passed!");
143 Assert.assertEquals(true, true);
145 log("Test Criteria parsing of \""+sql+"\" Failed!");
146 Assert.assertEquals(false, true);
149 }catch(SQLException err){
150 err.printStackTrace();
154 private static void parseFields(String sql,XSQLBluePrint bp,JDBCResultSet rs){
156 JDBCServer.parseFields(rs, bp);
157 log("Test Fields parsing of \""+sql+"\" Passed!");
158 Assert.assertEquals(true,true);
159 }catch(SQLException err){
160 log("Test Fields parsing of \""+sql+"\" Failed!");
161 err.printStackTrace();
162 Assert.assertEquals(false,true);
166 private static void log(String str) {
167 System.out.print("*** XSQL Tests -");
168 System.out.println(str);