Changeset: 4a5fb9ddee45 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/4a5fb9ddee45
Modified Files:
        tests/JDBC_API_Tester.java
Branch: default
Log Message:

Add ClientInfo tests


diffs (163 lines):

diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java
--- a/tests/JDBC_API_Tester.java
+++ b/tests/JDBC_API_Tester.java
@@ -118,6 +118,8 @@ final public class JDBC_API_Tester {
                jt.Test_SgeneratedKeys();
                jt.Test_Smoreresults();
                jt.Test_Wrapper();
+               if (jt.isPostDec2023)
+                       jt.Test_ClientInfo(con_URL);
                jt.bogus_auto_generated_keys();
                jt.BugConcurrent_clients_SF_1504657(con_URL);
                jt.BugConcurrent_sequences(con_URL);
@@ -1480,10 +1482,12 @@ final public class JDBC_API_Tester {
                        "TABLE_CAT      TABLE_SCHEM     TABLE_NAME      
COLUMN_NAME     GRANTOR GRANTEE PRIVILEGE       IS_GRANTABLE\n" +
                        "char(1)        varchar(1024)   varchar(1024)   
varchar(1024)   varchar(1024)   varchar(1024)   varchar(40)     varchar(3)\n");
 
-                       compareResultSet(dbmd.getClientInfoProperties(), 
"getClientInfoProperties()",
-                       "Resultset with 4 columns\n" +
-                       "NAME   MAX_LEN DEFAULT_VALUE   DESCRIPTION\n" +
-                       "varchar(64)    int     varchar(128)    
varchar(128)\n");
+                       if (!isPostDec2023) {
+                               
compareResultSet(dbmd.getClientInfoProperties(), "getClientInfoProperties()",
+                               "Resultset with 4 columns\n" +
+                               "NAME   MAX_LEN DEFAULT_VALUE   DESCRIPTION\n" +
+                               "varchar(64)    int     varchar(128)    
varchar(128)\n");
+                       }
 
                        compareResultSet(dbmd.getSuperTables(null, "jdbctst", 
"pk_uc"), "getSuperTables(null, jdbctst, pk_uc)",
                        "Resultset with 4 columns\n" +
@@ -7135,6 +7139,133 @@ final public class JDBC_API_Tester {
                                "\n");
        }
 
+       private void Test_ClientInfo(String con_URL) {
+               if (!isPostDec2023)
+                       return;
+
+               sb.setLength(0);
+
+               final String[] known = {
+                               "ApplicationName", "ClientHostname", 
"ClientLibrary",  "ClientPid", "ClientRemark"
+               };
+
+               try {
+                       sb.append("Connecting\n");
+                       try (Connection conn = 
DriverManager.getConnection(con_URL)) {
+
+                               // Server metadata includes list of supported 
clientinfo properties
+                               sb.append("Fetching supported clientinfo 
properties\n");
+                               DatabaseMetaData md = conn.getMetaData();
+                               try (ResultSet rs = 
md.getClientInfoProperties()) {
+                                       HashSet<String> seen = new HashSet<>();
+                                       while (rs.next()) {
+                                               String name = rs.getString(1);
+                                               if (name == null || 
name.isEmpty()) {
+                                                       sb.append("NAME column 
contains empty string\n");
+                                               }
+                                               seen.add(name);
+                                               int width = rs.getInt(2);
+                                               if (width <= 0) {
+                                                       sb.append("MAX_LEN for 
" + name + " is " + width + "\n");
+                                               }
+                                               String description = 
rs.getString(4);
+                                               if (description == null || 
description.isEmpty()) {
+                                                       sb.append("DESCRIPTION 
for " + name + " is empty\n");
+                                               }
+                                       }
+                                       for (String name: known) {
+                                               boolean found = 
seen.contains(name);
+                                               sb.append("- " + name + (found 
? " was " : " was not ") + "found\n");
+                                       }
+                               }
+
+                               // I cannot think of a way to check the default 
values that doesn't
+                               // essentially duplicate the code that came up 
with the default values.
+                               // The best we can do is verify they're not 
empty.
+                               sb.append("Check initial values.\n");
+                               Properties initialValues = conn.getClientInfo();
+                               for (String name: known) {
+                                       String value = (String) 
initialValues.getOrDefault(name, "");
+                                       sb.append("- " + name + 
(value.isEmpty() ? " is empty" : " is not empty") + "\n");
+                               }
+
+                               // We should get a fresh copy every time
+                               if (conn.getClientInfo() != initialValues)
+                                       sb.append("Calls to con.getClientInfo 
do not return references to the same Properties object\n");
+                               else
+                                       sb.append("Calls to con.getClientInfo 
DO return references to the same Properties object!\n");
+
+                               // Assign new values in various ways.
+                               // Also include some unknown properties
+                               sb.append("Set ApplicationName=1\n");
+                               conn.setClientInfo("ApplicationName", "1");
+                               readWarnings(conn.getWarnings());
+                               conn.clearWarnings();
+
+                               sb.append("Set BananaNameXYZ=99\n");
+                               conn.setClientInfo("BananaNameXYZ", "99");
+                               readWarnings(conn.getWarnings());
+                               conn.clearWarnings();
+
+                               sb.append("Set { ClientHostname=2, 
ClientLibrary=3, ClientPid=4, ClientRemark=5, ClientBananaPQR=999 }\n");
+                               Properties toBeInserted = new Properties();
+                               toBeInserted.put("ClientHostname", "2");
+                               toBeInserted.put("ClientLibrary", "3");
+                               toBeInserted.put("ClientPid", "4");
+                               toBeInserted.put("ClientRemark", "5");
+                               toBeInserted.put("ClientBananaPQR", "999");
+                               conn.setClientInfo(toBeInserted);
+                               readWarnings(conn.getWarnings());
+                               conn.clearWarnings();
+
+                               sb.append("Checking the results\n");
+                               Properties foundValues = conn.getClientInfo();
+                               for (String name: known) {
+                                       sb.append("- " + name + ": prop=" );
+                                       String propValue = (String) 
foundValues.getOrDefault(name, "");
+                                       sb.append("" + propValue);
+                                       sb.append(", single=");
+                                       String singleValue = 
conn.getClientInfo(name);
+                                       sb.append("" + singleValue);
+                                       if (propValue != null && 
!propValue.equals(singleValue))
+                                               sb.append("   !!! DIFFERENT 
!!!");
+                                       sb.append("\n");
+                               }
+
+                       }
+               } catch (SQLException e) {
+                       sb.append("FAILED: 
").append(e.getMessage()).append("\n");
+               }
+
+               compareExpectedOutput("Test_ClientInfo",
+                               "Connecting\n" +
+                               "Fetching supported clientinfo properties\n" +
+                               "- ApplicationName was found\n" +
+                               "- ClientHostname was found\n" +
+                               "- ClientLibrary was found\n" +
+                               "- ClientPid was found\n" +
+                               "- ClientRemark was found\n" +
+                               "Check initial values.\n" +
+                               "- ApplicationName is not empty\n" +
+                               "- ClientHostname is not empty\n" +
+                               "- ClientLibrary is not empty\n" +
+                               "- ClientPid is not empty\n" +
+                               "- ClientRemark is empty\n" +
+                               "Calls to con.getClientInfo do not return 
references to the same Properties object\n" +
+                               "Set ApplicationName=1\n" +
+                               "Set BananaNameXYZ=99\n" +
+                               "Warning: java.sql.SQLWarning: unknown client 
info property: BananaNameXYZ\n" +
+                               "Set { ClientHostname=2, ClientLibrary=3, 
ClientPid=4, ClientRemark=5, ClientBananaPQR=999 }\n" +
+                               "Warning: java.sql.SQLWarning: unknown client 
info property: ClientBananaPQR\n" +
+                               "Checking the results\n" +
+                               "- ApplicationName: prop=1, single=1\n" +
+                               "- ClientHostname: prop=2, single=2\n" +
+                               "- ClientLibrary: prop=3, single=3\n" +
+                               "- ClientPid: prop=4, single=4\n" +
+                               "- ClientRemark: prop=5, single=5\n"
+                               );
+       }
+
        // some private utility methods for showing table content and params 
meta data
        private void showTblContents(String tblnm) {
                Statement stmt = null;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to