package gov.nist.registry.ws.test; import gov.nist.registry.common2.exception.XdsInternalException; import gov.nist.registry.ws.SqlRepair; import gov.nist.registry.ws.SqlRepairException; import junit.framework.TestCase; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMText; public class SqlRepairTest extends TestCase { OMFactory om_factory = null; SqlRepair sr; OMFactory om_factory() { if (om_factory == null) om_factory = OMAbstractFactory.getOMFactory(); return om_factory; } public void test_get_query_text_ref() throws XdsInternalException, SqlRepairException { SqlRepair sr = new SqlRepair(); String query = "select * from a;"; OMElement test_data = build_test_data_ref(query); String query2 = sr.get_query_text(test_data); assertTrue(query.equals(query2)); } public void test_get_query_text_leaf() throws XdsInternalException, SqlRepairException { SqlRepair sr = new SqlRepair(); String query = "select * from a;"; OMElement test_data = build_test_data_leaf(query); String query2 = sr.get_query_text(test_data); assertTrue(query.equals(query2)); } public void test_star_leaf() { try { run_test_leaf("select * from foo;"); } catch (SqlRepairException e) { return; } fail("no exception"); } public void test_star_ref() { try { run_test_ref("select * from foo;"); } catch (SqlRepairException e) { return; } fail("no exception"); } public void test_no_sqlquery() { OMElement doc = om_factory().createOMElement("foo", null); SqlRepair sr = new SqlRepair(); try { sr.repair(doc); } catch (SqlRepairException e) { return; } catch (XdsInternalException e) { fail(e.getMessage()); } fail("No exception"); } public void test_id_leaf() throws SqlRepairException, XdsInternalException { OMElement result = null; try { result = run_test_leaf("select foo.id from foo"); } catch (SqlRepairException e) { fail(e.getMessage()); } String sql = sr.get_query_text(result); assertTrue (sql.indexOf("foo.id") == -1) ; assertTrue(sql, sql.equals(" select * from foo")); } public void test_id_ref() throws SqlRepairException, XdsInternalException { OMElement result = null; try { result = run_test_ref("select foo.id from foo"); } catch (SqlRepairException e) { fail(e.getMessage()); } String sql = sr.get_query_text(result); assertTrue ("sql is " + sql, sql.indexOf("foo.id") != -1) ; assertTrue(sql.equals(" select foo.id from foo")); } OMElement build_test_data_leaf(String sql) { return build_test_data(sql, "LeafClass"); } OMElement build_test_data_ref(String sql) { return build_test_data(sql, "ObjectRef"); } OMElement build_test_data(String sql, String return_type) { OMElement doc = om_factory().createOMElement("AdhocQueryRequest", null); OMElement ro = om_factory().createOMElement("ResponseOption", null); doc.addChild(ro); ro.addAttribute("returnType", return_type, null); OMElement sqlquery = om_factory().createOMElement("SQLQuery", null); ro.addChild(sqlquery); OMText text = om_factory().createOMText(sql); sqlquery.addChild(text); return doc; } OMElement run_test_leaf(String sql) throws SqlRepairException { OMElement doc = build_test_data_leaf(sql); OMElement results = null; sr = new SqlRepair(); try { sr.repair(doc); results = doc; } catch (XdsInternalException e) { fail(e.getMessage()); } return results; } OMElement run_test_ref(String sql) throws SqlRepairException { OMElement doc = build_test_data_ref(sql); OMElement results = null; sr = new SqlRepair(); try { sr.repair(doc); results = doc; } catch (XdsInternalException e) { fail(e.getMessage()); } return results; } public void test_find_sql_query_element() throws XdsInternalException, SqlRepairException { OMElement stuff = om_factory().createOMElement("foo", null); OMElement fluss = om_factory().createOMElement("bar", null); stuff.addChild(fluss); OMElement flub = om_factory().createOMElement("SQLQuery", null); fluss.addChild(flub); SqlRepair sr = new SqlRepair(); OMElement query1 = sr.find_sql_query_element(stuff); assertTrue("No element returned", query1 != null); assertTrue(query1.getLocalName().equals("SQLQuery")); } public String repair_query_text_leaf(String sql) throws XdsInternalException, SqlRepairException { SqlRepair sr = new SqlRepair(); String query = sql; OMElement test_data = build_test_data_leaf(query); sr.repair(test_data); return sr.get_query_text(test_data); } public String repair_query_text_ref(String sql) throws XdsInternalException, SqlRepairException { SqlRepair sr = new SqlRepair(); String query = sql; OMElement test_data = build_test_data_ref(query); sr.repair(test_data); return sr.get_query_text(test_data); } public void test_nested_select_leaf() throws XdsInternalException, SqlRepairException { String sql = "SELECT doc.id FROM ExtrinsicObject doc WHERE doc.id IN (SELECT doc.id FROM ExtrinsicObject doc, ExternalIdentifier uId WHERE (uId.registryObject = doc.id AND uId.identificationScheme = 'urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab' AND uId.value = '1.2.3.4.100000022002209036.1196211173506.1') )"; String repaired = repair_query_text_leaf(sql); assertTrue("Repaired text is: " + repaired, repaired.startsWith(" SELECT * FROM ExtrinsicObject doc WHERE doc.id IN ( SELECT * FROM ExtrinsicObject")); } public void test_nested_select_ref() throws XdsInternalException, SqlRepairException { String sql = "SELECT doc.id FROM ExtrinsicObject doc WHERE doc.id IN (SELECT doc.id FROM ExtrinsicObject doc, ExternalIdentifier uId WHERE (uId.registryObject = doc.id AND uId.identificationScheme = 'urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab' AND uId.value = '1.2.3.4.100000022002209036.1196211173506.1') )"; String repaired = repair_query_text_ref(sql); assertTrue("Repaired text is: " + repaired, repaired.startsWith(" SELECT doc.id FROM ExtrinsicObject doc WHERE doc.id IN ( SELECT doc.id FROM ExtrinsicObject doc")); } }