Merge "BUG 1839 - HTTP delete of non existing data"
[controller.git] / opendaylight / md-sal / sal-dom-xsql / src / test / java / org / opendaylight / xsql / test / XSQLTest.java
1 package org.opendaylight.xsql.test;
2
3 import java.io.InputStream;
4 import java.sql.SQLException;
5
6 import org.junit.Assert;
7 import org.junit.Before;
8 import org.junit.Test;
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;
13
14 public class XSQLTest {
15
16     XSQLBluePrint bluePrint = null;
17
18     @Before
19     public void before() {
20         try{
21             InputStream in = this.getClass().getClassLoader().getResourceAsStream("BluePrintCache.dat");
22             if(in!=null){
23                 bluePrint = XSQLBluePrint.load(in);
24                 log("Loaded Blue Print!");
25             }else{
26                 log("Can't find Blue Print!");
27             }
28             in.close();
29         }catch(Exception err){
30             err.printStackTrace();
31         }
32     }
33
34     @Test
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);
44         }else{
45             log("Test Criteria parsing of \""+sql+"\" Failed!");
46             Assert.assertEquals(false, true);
47         }
48     }
49
50     @Test
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);
60         }else{
61             log("Test Criteria parsing of \""+sql+"\" Failed!");
62             Assert.assertEquals(false, true);
63         }
64     }
65
66     @Test
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);
76         }else{
77             log("Test Criteria parsing of \""+sql+"\" Failed!");
78             Assert.assertEquals(false, true);
79         }
80     }
81
82     @Test
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);
92         }else{
93             log("Test Criteria parsing of \""+sql+"\" Failed!");
94             Assert.assertEquals(false, true);
95         }
96     }
97
98     private static void parseTables(String sql,XSQLBluePrint bp,JDBCResultSet rs){
99         try{
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);
107         }
108     }
109
110     @Test
111     public void testQueryParsingComplexWithCriteriaAndGrouping() {
112
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';";
114
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"
119                 + "FROM\n"
120                 + "("+sub_sql+") \"LOGICAL_TABLE_1\"\n";
121
122
123
124         JDBCResultSet rs = new JDBCResultSet(sql);
125         XSQLAdapter.getInstance().loadBluePrint();
126         try{
127             JDBCServer.checkAndBreakSubQueries(rs, XSQLAdapter.getInstance());
128             if(rs.getSubQueries().isEmpty()){
129                 log("Logical table parsing for "+sql+" Failed!");
130             }else{
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");
136
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);
144                 }else{
145                     log("Test Criteria parsing of \""+sql+"\" Failed!");
146                     Assert.assertEquals(false, true);
147                 }
148             }
149         }catch(SQLException err){
150             err.printStackTrace();
151         }
152     }
153
154     private static void parseFields(String sql,XSQLBluePrint bp,JDBCResultSet rs){
155         try{
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);
163         }
164     }
165
166     private static void log(String str) {
167         System.out.print("*** XSQL Tests -");
168         System.out.println(str);
169     }
170 }