java/code/src/com/redhat/rhn/common/db/datasource/test/DataSourceParserTest.java | 79
++--
java/code/src/com/redhat/rhn/common/db/datasource/test/UserData.java | 4
java/code/src/com/redhat/rhn/common/db/datasource/xml/test_queries.xml | 181
+++++++++-
3 files changed, 220 insertions(+), 44 deletions(-)
New commits:
commit b42aac31f343e299d0886053659097bea6cff689
Author: Jan Dobes <jdobes(a)redhat.com>
Date: Tue May 28 18:46:10 2013 +0200
making DataSourceParserTest work with PostgreSQL
diff --git
a/java/code/src/com/redhat/rhn/common/db/datasource/test/DataSourceParserTest.java
b/java/code/src/com/redhat/rhn/common/db/datasource/test/DataSourceParserTest.java
index e8dc1b2..ffb612b 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/test/DataSourceParserTest.java
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/test/DataSourceParserTest.java
@@ -14,6 +14,7 @@
*/
package com.redhat.rhn.common.db.datasource.test;
+import com.redhat.rhn.common.conf.ConfigDefaults;
import com.redhat.rhn.common.db.datasource.CachedStatement;
import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.db.datasource.MapColumnNotFoundException;
@@ -39,7 +40,18 @@ import java.util.Map;
public class DataSourceParserTest extends RhnBaseTestCase {
+ private String db_sufix;
+ private String db_user;
+
public DataSourceParserTest() {
+ if (ConfigDefaults.get().isOracle()) {
+ db_sufix = "_or";
+ db_user = "SPACEUSER";
+ }
+ else {
+ db_sufix = "_pg";
+ db_user = "spaceuser";
+ }
}
public void testGetModes() throws Exception {
@@ -69,7 +81,7 @@ public class DataSourceParserTest extends RhnBaseTestCase {
public void testExternalElaborator() throws Exception {
SelectMode m = ModeFactory.getMode("test_queries",
- "user_tables_external_elaborator");
+ "user_tables_external_elaborator" + db_sufix);
assertNotNull(m);
DataResult dr = m.execute(new HashMap());
@@ -81,27 +93,27 @@ public class DataSourceParserTest extends RhnBaseTestCase {
HashMap hm = (HashMap)i.next();
String name = (String)hm.get("username");
- if (name.equals("SYS")) {
+ if (name.toLowerCase().equals("spaceuser")) {
dr = dr.subList(pos, pos + 1);
}
pos++;
}
HashMap parameters = new HashMap();
- parameters.put("user_name", "SYS");
+ parameters.put("user_name", db_user);
dr.elaborate(parameters);
assertNotNull(dr);
i = dr.iterator();
while (i.hasNext()) {
Map hm = (Map)i.next();
- Map elab = (Map)hm.get("external_elaborator");
+ Map elab = (Map)hm.get("external_elaborator" + db_sufix);
assertTrue(((Long)elab.get("table_count")).intValue() > 0);
}
}
public void testRunQuery() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"user_tables");
+ SelectMode m = ModeFactory.getMode("test_queries",
"user_tables" + db_sufix);
assertNotNull(m);
DataResult dr = m.execute(new HashMap());
@@ -113,21 +125,21 @@ public class DataSourceParserTest extends RhnBaseTestCase {
HashMap hm = (HashMap)i.next();
String name = (String)hm.get("username");
- if (name.equals("SYS")) {
+ if (name.toLowerCase().equals("spaceuser")) {
dr = dr.subList(pos, pos + 1);
}
pos++;
}
HashMap parameters = new HashMap();
- parameters.put("user_name", "SYS");
+ parameters.put("user_name", db_user);
dr.elaborate(parameters);
assertNotNull(dr);
i = dr.iterator();
while (i.hasNext()) {
Map hm = (Map)i.next();
- Map elab = (Map)hm.get("table_elaborator");
+ Map elab = (Map)hm.get("table_elaborator" + db_sufix);
assertTrue(((Long)elab.get("table_count")).intValue() > 0);
}
}
@@ -204,7 +216,12 @@ public class DataSourceParserTest extends RhnBaseTestCase {
Iterator j = elab.iterator();
while (j.hasNext()) {
Map curr = (Map)j.next();
- assertTrue(((Long)curr.get("column_id")).intValue() > 0);
+ if (ConfigDefaults.get().isOracle()) {
+ assertTrue(((Long)curr.get("column_id")).intValue() >
0);
+ }
+ else {
+ assertTrue(((Integer)curr.get("column_id")).intValue() >
0);
+ }
assertNotNull(curr.get("column_name"));
assertNotNull(curr.get("table_name"));
}
@@ -212,12 +229,12 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testPercentS() throws Exception {
- runTestQuery("all_tables", "elaborator0");
+ runTestQuery("all_tables" + db_sufix, "elaborator0");
}
public void testBrokenDriving() throws Exception {
try {
- runTestQuery("broken_driving", "elaborator0");
+ runTestQuery("broken_driving" + db_sufix,
"elaborator0");
fail("Should have thrown an exception");
}
catch (MapColumnNotFoundException e) {
@@ -228,7 +245,7 @@ public class DataSourceParserTest extends RhnBaseTestCase {
public void testBrokenElaborator() throws Exception {
try {
- runTestQuery("broken_elaborator", "elaborator0");
+ runTestQuery("broken_elaborator" + db_sufix,
"elaborator0");
fail("Should have thrown an exception");
}
catch (MapColumnNotFoundException e) {
@@ -238,11 +255,11 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testAlias() throws Exception {
- runTestQuery("all_tables_with_alias", "details");
+ runTestQuery("all_tables_with_alias" + db_sufix, "details" +
db_sufix);
}
public void testExtraParams() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"all_tables");
+ SelectMode m = ModeFactory.getMode("test_queries",
"all_tables" + db_sufix);
assertNotNull(m);
HashMap params = new HashMap();
@@ -252,18 +269,20 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testDrivingParams() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"user_tables_for_user");
+ SelectMode m = ModeFactory.getMode("test_queries",
"user_tables_for_user" +
+ db_sufix);
assertNotNull(m);
HashMap hm = new HashMap();
- hm.put("username", "SYS");
+ hm.put("username", db_user);
DataResult dr = m.execute(hm);
assertNotNull(dr);
assertTrue(dr.size() > 0);
}
public void testNullParam() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"user_tables_for_user");
+ SelectMode m = ModeFactory.getMode("test_queries",
"user_tables_for_user" +
+ db_sufix);
assertNotNull(m);
try {
@@ -277,7 +296,8 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testSort() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort");
+ SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort" +
+ db_sufix);
assertNotNull(m);
DataResult dr = m.execute(new HashMap());
@@ -296,7 +316,8 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testSortChangeOrder() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort");
+ SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort" +
+ db_sufix);
assertNotNull(m);
DataResult dr = m.execute(new HashMap(), "table_name",
"DESC");
@@ -315,7 +336,8 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testSortColumn() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort");
+ SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort" +
+ db_sufix);
assertNotNull(m);
DataResult dr = m.execute(new HashMap(), "owner", "DESC");
@@ -334,7 +356,8 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testIllegalSortColumn() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort");
+ SelectMode m = ModeFactory.getMode("test_queries",
"all_tables_with_sort" +
+ db_sufix);
assertNotNull(m);
try {
@@ -355,13 +378,13 @@ public class DataSourceParserTest extends RhnBaseTestCase {
}
public void testSpecifiedClass() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"withClass");
+ SelectMode m = ModeFactory.getMode("test_queries",
"withClass" + db_sufix);
String clazz = m.getClassString();
assertEquals("com.redhat.rhn.common.db.datasource.test.TableData",
clazz);
}
public void testSpecifiedClassExecute() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"withClass");
+ SelectMode m = ModeFactory.getMode("test_queries",
"withClass" + db_sufix);
String clazz = m.getClassString();
assertEquals("com.redhat.rhn.common.db.datasource.test.TableData",
clazz);
DataResult dr = m.execute(new HashMap(), "owner", "DESC");
@@ -369,11 +392,11 @@ public class DataSourceParserTest extends RhnBaseTestCase {
assertTrue(dr.size() > 0);
Iterator i = dr.iterator();
TableData first = (TableData)i.next();
- assertTrue(first.getTableName().startsWith("RHN"));
+ assertTrue(first.getTableName().toLowerCase().startsWith("rhn"));
}
public void testClassElaborateList() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"withClass");
+ SelectMode m = ModeFactory.getMode("test_queries",
"withClass" + db_sufix);
String clazz = m.getClassString();
assertEquals("com.redhat.rhn.common.db.datasource.test.TableData",
clazz);
DataResult dr = m.execute(new HashMap(), "owner", "DESC");
@@ -384,17 +407,17 @@ public class DataSourceParserTest extends RhnBaseTestCase {
Iterator i = dr.iterator();
TableData first = (TableData)i.next();
- assertTrue(first.getTableName().startsWith("RHN"));
+ assertTrue(first.getTableName().toLowerCase().startsWith("rhn"));
assertTrue(first.getColumnName().size() > 0);
assertTrue(first.getColumnId().size() > 0);
}
public void testSpecifiedClassElaborate() throws Exception {
- SelectMode m = ModeFactory.getMode("test_queries",
"user_class");
+ SelectMode m = ModeFactory.getMode("test_queries",
"user_class" + db_sufix);
String clazz = m.getClassString();
assertEquals("com.redhat.rhn.common.db.datasource.test.UserData",
clazz);
HashMap hm = new HashMap();
- hm.put("username", "SYS");
+ hm.put("username", db_user);
DataResult dr = m.execute(hm);
assertNotNull(dr);
assertTrue(dr.size() > 0);
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/test/UserData.java
b/java/code/src/com/redhat/rhn/common/db/datasource/test/UserData.java
index e3690cc..9e06f03 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/test/UserData.java
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/test/UserData.java
@@ -26,6 +26,10 @@ public class UserData {
userId = ci;
}
+ public void setUserId(Integer ci) {
+ setUserId(new Long(ci));
+ }
+
public void setTableCount(Long ci) {
tableCount = ci;
}
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/test_queries.xml
b/java/code/src/com/redhat/rhn/common/db/datasource/xml/test_queries.xml
index 8cc5815..6b0e3e4 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/test_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/test_queries.xml
@@ -1,11 +1,11 @@
<datasource_modes>
-<mode name="user_tables_for_user">
+<mode name="user_tables_for_user_or">
<query params="username">
SELECT u.username as USERNAME, u.user_id as USER_ID, u.created as CREATED
FROM all_users u
WHERE u.username=:username
</query>
- <elaborator name="table_elaborator" column="username"
params="user_name">
+ <elaborator name="table_elaborator_or" column="username"
params="user_name">
SELECT c.owner as USERNAME, COUNT(c.table_name) as TABLE_COUNT
FROM all_catalog c
WHERE owner=:user_name
@@ -14,12 +14,26 @@
</elaborator>
</mode>
-<mode name="user_tables">
+<mode name="user_tables_for_user_pg">
+ <query params="username">
+ SELECT u.usename as USERNAME, u.usesysid as USER_ID
+ FROM pg_user u
+ WHERE u.usename=:username
+ </query>
+ <elaborator name="table_elaborator_pg" column="username"
params="user_name">
+ SELECT c.tableowner as USERNAME, COUNT(c.tablename) as TABLE_COUNT
+ FROM pg_tables c
+ WHERE tableowner=:user_name
+ GROUP BY tableowner
+ </elaborator>
+</mode>
+
+<mode name="user_tables_or">
<query params="">
SELECT u.username as USERNAME, u.user_id as USER_ID, u.created as CREATED
FROM all_users u
</query>
- <elaborator name="table_elaborator" column="username"
params="user_name">
+ <elaborator name="table_elaborator_or" column="username"
params="user_name">
SELECT c.owner as USERNAME, COUNT(c.table_name) as TABLE_COUNT
FROM all_catalog c
WHERE owner=:user_name
@@ -29,7 +43,21 @@
</elaborator>
</mode>
-<mode name="all_tables">
+<mode name="user_tables_pg">
+ <query params="">
+ SELECT u.usename as USERNAME, u.usesysid as USER_ID
+ FROM pg_user u
+ </query>
+ <elaborator name="table_elaborator_pg" column="username"
params="user_name">
+ SELECT c.tableowner as USERNAME, COUNT(c.tablename) as TABLE_COUNT
+ FROM pg_tables c
+ WHERE tableowner=:user_name
+ AND tableowner IN (%s)
+ GROUP BY tableowner
+ </elaborator>
+</mode>
+
+<mode name="all_tables_or">
<query params="">
SELECT t.table_name
FROM all_tables t
@@ -43,9 +71,24 @@
</elaborator>
</mode>
+<mode name="all_tables_pg">
+ <query params="">
+ SELECT t.tablename as table_name
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY t.tablename
+ </query>
+ <elaborator params="" column="table_name"
multiple="t">
+ SELECT c.relname as TABLE_NAME, a.attname as COLUMN_NAME, a.atttypid as COLUMN_ID
+ FROM pg_attribute a, pg_class c
+ WHERE c.relname in (%s)
+ AND c.oid = a.attrelid
+ </elaborator>
+</mode>
+
<!-- This query is broken, because the ID column doesn't exist in the
driving query, but that is what should be used to map the two results -->
-<mode name="broken_driving">
+<mode name="broken_driving_or">
<query params="">
SELECT t.table_name
FROM all_tables t
@@ -59,9 +102,23 @@
</elaborator>
</mode>
+<mode name="broken_driving_pg">
+ <query params="">
+ SELECT t.tablename
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY tablename
+ </query>
+ <elaborator params="" multiple="t">
+ SELECT attrelid, attrelid ID, attname, atttypid
+ FROM pg_attribute
+ WHERE attname in (%s)
+ </elaborator>
+</mode>
+
<!-- This query is broken, because the ID column doesn't exist in the
elaborator, but that is what should be used to map the two results -->
-<mode name="broken_elaborator">
+<mode name="broken_elaborator_or">
<query params="">
SELECT t.table_name, t.table_name ID
FROM all_tables t
@@ -75,23 +132,53 @@
</elaborator>
</mode>
+<mode name="broken_elaborator_pg">
+ <query params="">
+ SELECT t.tablename, t.tablename ID
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY tablename
+ </query>
+ <elaborator params="" multiple="t">
+ SELECT attrelid, attname, atttypid
+ FROM pg_attribute
+ WHERE attname in (%s)
+ </elaborator>
+</mode>
+
+
<!-- Keep the columns named ID here, because it provides an easy way to test
that the default column of ID still works. -->
-<mode name="all_tables_with_alias">
+<mode name="all_tables_with_alias_or">
<query params="">
SELECT t.table_name, t.table_name ID
FROM all_tables t
WHERE t.table_name LIKE 'RHN%'
ORDER BY table_name
</query>
- <elaborator params="" multiple="t"
alias="details">
+ <elaborator params="" multiple="t"
alias="details_or">
SELECT table_name, table_name ID, column_name, column_id
FROM all_tab_cols
WHERE table_name in (%s)
</elaborator>
</mode>
-<mode name="all_tables_with_sort">
+<mode name="all_tables_with_alias_pg">
+ <query params="">
+ SELECT t.tablename as table_name, t.tablename ID
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY t.tablename
+ </query>
+ <elaborator params="" multiple="t"
alias="details_pg">
+ SELECT c.relname as TABLE_NAME, c.relname ID, a.attname as COLUMN_NAME, a.atttypid
as COLUMN_ID
+ FROM pg_attribute a, pg_class c
+ WHERE c.relname in (%s)
+ AND c.oid = a.attrelid
+ </elaborator>
+</mode>
+
+<mode name="all_tables_with_sort_or">
<query params="" sort="table_name,owner"
defaultsort="table_name"
sortorder="asc">
SELECT t.table_name, t.owner
@@ -106,6 +193,22 @@
</elaborator>
</mode>
+<mode name="all_tables_with_sort_pg">
+ <query params="" sort="table_name,owner"
defaultsort="table_name"
+ sortorder="asc">
+ SELECT t.tablename as table_name, t.tableowner as owner
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY %o
+ </query>
+ <elaborator params="" column="table_name"
multiple="t">
+ SELECT c.relname as TABLE_NAME, a.attname, a.atttypid
+ FROM pg_attribute a, pg_class c
+ WHERE c.relname in (%s)
+ AND c.oid = a.attrelid
+ </elaborator>
+</mode>
+
<write-mode name="update_group_type">
<query params="type_id, sgid">
@@ -185,7 +288,7 @@ SELECT u.created as CREATED
<!-- Test to benchmark datasource vs hibernate -->
-<mode name="withClass"
class="com.redhat.rhn.common.db.datasource.test.TableData">
+<mode name="withClass_or"
class="com.redhat.rhn.common.db.datasource.test.TableData">
<query params="">
SELECT t.table_name
FROM all_tables t
@@ -199,13 +302,29 @@ SELECT u.created as CREATED
</elaborator>
</mode>
-<mode name="user_class"
class="com.redhat.rhn.common.db.datasource.test.UserData">
+<mode name="withClass_pg"
class="com.redhat.rhn.common.db.datasource.test.TableData">
+ <query params="">
+ SELECT t.tablename as table_name
+ FROM pg_tables t
+ WHERE t.tablename LIKE 'rhn%'
+ ORDER BY t.tablename
+ </query>
+ <elaborator params="" column="table_name"
multiple="t">
+ SELECT c.relname as TABLE_NAME, a.attname as COLUMN_NAME, a.atttypid as COLUMN_ID
+ FROM pg_attribute a, pg_class c
+ WHERE c.relname in (%s)
+ AND c.oid = a.attrelid
+ </elaborator>
+</mode>
+
+
+<mode name="user_class_or"
class="com.redhat.rhn.common.db.datasource.test.UserData">
<query params="username">
SELECT u.username as USERNAME, u.user_id as USER_ID, u.created as CREATED
FROM all_users u
WHERE u.username=:username
</query>
- <elaborator name="table_elaborator" column="username"
params="username">
+ <elaborator name="table_elaborator_or" column="username"
params="username">
SELECT c.owner as USERNAME, COUNT(c.table_name) as TABLE_COUNT
FROM all_catalog c
WHERE owner=:username
@@ -214,15 +333,29 @@ SELECT u.created as CREATED
</elaborator>
</mode>
-<mode name="user_tables_external_elaborator">
+<mode name="user_class_pg"
class="com.redhat.rhn.common.db.datasource.test.UserData">
+ <query params="username">
+ SELECT u.usename as USERNAME, u.usesysid as USER_ID
+ FROM pg_user u
+ WHERE u.usename=:username
+ </query>
+ <elaborator name="table_elaborator_pg" column="username"
params="username">
+ SELECT c.tableowner as USERNAME, COUNT(c.tablename) as TABLE_COUNT
+ FROM pg_tables c
+ WHERE tableowner=:username
+ GROUP BY tableowner
+ </elaborator>
+</mode>
+
+<mode name="user_tables_external_elaborator_or">
<query params="">
SELECT u.username as USERNAME, u.user_id as USER_ID, u.created as CREATED
FROM all_users u
</query>
- <elaborator name="external_elaborator" params="user_name" />
+ <elaborator name="external_elaborator_or" params="user_name"
/>
</mode>
-<query name="external_elaborator" column="username"
params="user_name">
+<query name="external_elaborator_or" column="username"
params="user_name">
SELECT c.owner as USERNAME, COUNT(c.table_name) as TABLE_COUNT
FROM all_catalog c
WHERE owner=:user_name
@@ -230,6 +363,22 @@ SELECT u.created as CREATED
GROUP BY owner
</query>
+<mode name="user_tables_external_elaborator_pg">
+ <query params="">
+ SELECT u.usename as USERNAME, u.usesysid as USER_ID
+ FROM pg_user u
+ </query>
+ <elaborator name="external_elaborator_pg" params="user_name"
/>
+</mode>
+
+<query name="external_elaborator_pg" column="username"
params="user_name">
+ SELECT c.tableowner as USERNAME, COUNT(c.tablename) as TABLE_COUNT
+ FROM pg_tables c
+ WHERE tableowner=:user_name
+ GROUP BY tableowner
+</query>
+
+
<write-mode name="insert_into_rhnServerPath">
<query params="server_id, proxy_server_id, proxy_hostname, position">
INSERT INTO rhnServerPath(SERVER_ID, PROXY_SERVER_ID, HOSTNAME, POSITION)