1 21 22 package org.apache.derbyTesting.functionTests.tests.jdbcapi; 23 24 import org.apache.derby.jdbc.EmbeddedDataSource; 25 import org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource; 26 import org.apache.derby.jdbc.EmbeddedXADataSource; 27 28 import java.util.Properties ; 29 30 import java.sql.Connection ; 31 import java.sql.ResultSet ; 32 import java.sql.PreparedStatement ; 33 import java.sql.CallableStatement ; 34 import java.sql.Statement ; 35 import java.sql.SQLException ; 36 import java.sql.DriverManager ; 37 38 import javax.sql.DataSource ; 39 import javax.sql.XADataSource ; 40 import javax.sql.PooledConnection ; 41 import javax.sql.XAConnection ; 42 import javax.sql.ConnectionPoolDataSource ; 43 import javax.transaction.xa.XAResource ; 44 import javax.transaction.xa.XAException ; 45 import javax.transaction.xa.Xid ; 46 import javax.sql.ConnectionEventListener ; 47 import javax.sql.ConnectionEvent ; 48 import org.apache.derby.tools.JDBCDisplayUtil; 49 import org.apache.derby.tools.ij; 50 import org.apache.derbyTesting.functionTests.util.TestUtil; 51 52 import java.io.*; 53 import java.util.Hashtable ; 54 55 import javax.naming.*; 56 import javax.naming.directory.*; 57 58 public class dataSourcePermissions 59 { 60 61 private static final String zeus = "\u0396\u0395\u03A5\u03A3"; 62 private static final String apollo = "\u0391\u09A0\u039F\u039B\u039B\u039A\u0390"; 63 64 65 public static void main(String [] args) throws Exception { 66 67 ij.getPropertyArg(args); 68 new dataSourcePermissions().runTest(); 69 new dataSourcePermissions().cleanUp(); 70 System.out.println("Completed dataSourcePermissions"); 71 72 } 73 74 75 public dataSourcePermissions() { 76 } 77 78 protected void runTest() throws Exception { 79 80 Connection conn = ij.startJBMS(); 82 83 CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)"); 84 cs.setString(1, "derby.user.EDWARD"); 85 cs.setString(2, "noodle"); 86 cs.execute(); 87 88 cs.setString(1, "derby.user.FRANCES"); 89 cs.setString(2, "isabella"); 90 cs.execute(); 91 92 cs.setString(1, "derby.authentication.provider"); 93 cs.setString(2, "BUILTIN"); 94 cs.execute(); 95 96 cs.setString(1, "derby.user." + zeus); 98 cs.setString(2, apollo); 99 cs.execute(); 100 101 cs.setString(1, "derby.connection.requireAuthentication"); 102 cs.setString(2, "true"); 103 cs.execute(); 104 105 cs.close(); 106 107 conn.close(); 108 shutdown(); 109 110 start(); 111 112 System.out.println("Checking authentication with DriverManager"); 113 try { 114 DriverManager.getConnection(getJDBCUrl("wombat", null)); 115 System.out.println("FAIL - get DriverManager connection without user"); 116 } catch (SQLException sqle) { 117 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 118 } 119 120 try { 121 DriverManager.getConnection(getJDBCUrl("wombat", "user=cynthia;password=sara")); 122 System.out.println("FAIL - get DriverManager connection with invalid user"); 123 } catch (SQLException sqle) { 124 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 125 } 126 127 checkConnection(DriverManager.getConnection(getJDBCUrl("wombat", "user=EDWARD;password=noodle"))); 128 checkConnection(DriverManager.getConnection(getJDBCUrl("wombat", "user=FRANCES;password=isabella"))); 129 130 if (supportsUnicodeNames()) { 131 checkConnection(DriverManager.getConnection(getJDBCUrl("wombat", "user="+zeus+";password="+apollo))); 132 checkConnection(DriverManager.getConnection(getJDBCUrl("wombat", null), zeus, apollo)); 133 } 134 135 { 136 System.out.println("Checking connections with DataSource"); 137 138 shutdown(); 139 140 System.out.println("data source with no default user"); 141 javax.sql.DataSource ds = getDS("wombat", null, null); 142 143 try { 144 ds.getConnection().close(); 145 System.out.println("FAIL - get DataSource connection with no user"); 146 } catch (SQLException sqle) { 147 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 148 } 149 150 try { 151 ds.getConnection("cynthia", "sara").close(); 152 System.out.println("FAIL - get DataSource connection with invalid user"); 153 } catch (SQLException sqle) { 154 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 155 } 156 157 checkConnection(ds.getConnection("EDWARD", "noodle")); 158 checkConnection(ds.getConnection("FRANCES", "isabella")); 159 if (supportsUnicodeNames()) { 160 checkConnection(ds.getConnection(zeus, apollo)); 161 } 162 163 shutdown(); 164 165 System.out.println("data source with invalid default user"); 166 ds = getDS("wombat", "EDWARD", "sara"); 167 try { 168 ds.getConnection().close(); 169 System.out.println("FAIL - get DataSource connection with no user and invalid defaults"); 170 } catch (SQLException sqle) { 171 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 172 } 173 checkConnection(ds.getConnection("FRANCES", "isabella")); 174 shutdown(); 175 176 System.out.println("data source with valid default user"); 177 ds = getDS("wombat", "EDWARD", "noodle"); 178 179 checkConnection(ds.getConnection()); 180 checkConnection(ds.getConnection("FRANCES", "isabella")); 181 shutdown(); 182 } 183 184 185 if (supportsPooling()) { 186 187 System.out.println("Checking connections with ConnectionPoolDataSource"); 188 189 System.out.println("ConnectionPoolDataSource with no default user"); 190 javax.sql.ConnectionPoolDataSource ds = getCPDS("wombat", null, null); 191 192 try { 193 ds.getPooledConnection().close(); 194 System.out.println("FAIL - get ConnectionPoolDataSource connection with no user"); 195 } catch (SQLException sqle) { 196 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 197 } 198 199 try { 200 ds.getPooledConnection("cynthia", "sara").close(); 201 System.out.println("FAIL - get ConnectionPoolDataSource connection with invalid user"); 202 } catch (SQLException sqle) { 203 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 204 } 205 206 checkConnection(ds.getPooledConnection("EDWARD", "noodle")); 207 checkConnection(ds.getPooledConnection("FRANCES", "isabella")); 208 if (supportsUnicodeNames()) { 209 checkConnection(ds.getPooledConnection(zeus, apollo)); 210 } 211 shutdown(); 212 213 System.out.println("ConnectionPoolDataSource with invalid default user"); 214 ds = getCPDS("wombat", "EDWARD", "sara"); 215 try { 216 ds.getPooledConnection().close(); 217 System.out.println("FAIL - get ConnectionPoolDataSource connection with no user and invalid defaults"); 218 } catch (SQLException sqle) { 219 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 220 } 221 checkConnection(ds.getPooledConnection("FRANCES", "isabella")); 222 shutdown(); 223 224 System.out.println("ConnectionPoolDataSource with valid default user"); 225 ds = getCPDS("wombat", "EDWARD", "noodle"); 226 227 checkConnection(ds.getPooledConnection()); 228 checkConnection(ds.getPooledConnection("FRANCES", "isabella")); 229 shutdown(); 230 } 231 232 233 234 if (supportsXA()) { 235 236 System.out.println("Checking connections with XADataSource"); 237 238 System.out.println("XADataSource with no default user"); 239 EmbeddedXADataSource ds = new EmbeddedXADataSource(); 240 ds.setDatabaseName("wombat"); 241 242 try { 243 ds.getXAConnection().close(); 244 System.out.println("FAIL - get XADataSource connection with no user"); 245 } catch (SQLException sqle) { 246 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 247 } 248 249 try { 250 ds.getXAConnection("cynthia", "sara").close(); 251 System.out.println("FAIL - get XADataSource connection with invalid user"); 252 } catch (SQLException sqle) { 253 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 254 } 255 256 checkConnection(ds.getXAConnection("EDWARD", "noodle")); 257 checkConnection(ds.getXAConnection("FRANCES", "isabella")); 258 if (supportsUnicodeNames()) { 259 checkConnection(ds.getXAConnection(zeus, apollo)); 260 } 261 262 shutdown(); 263 264 System.out.println("XADataSource with invalid default user"); 265 ds = new EmbeddedXADataSource(); 266 ds.setDatabaseName("wombat"); 267 ds.setUser("edward"); 268 ds.setPassword("sara"); 269 try { 270 ds.getXAConnection().close(); 271 System.out.println("FAIL - get XADataSource connection with no user and invalid defaults"); 272 } catch (SQLException sqle) { 273 System.out.println("EXPECTED CONNFAIL " + sqle.getMessage()); 274 } 275 checkConnection(ds.getXAConnection("FRANCES", "isabella")); 276 shutdown(); 277 278 System.out.println("XADataSource with valid default user"); 279 ds = new EmbeddedXADataSource(); 280 ds.setDatabaseName("wombat"); 281 ds.setUser("EDWARD"); 282 ds.setPassword("noodle"); 283 284 checkConnection(ds.getXAConnection()); 285 checkConnection(ds.getXAConnection("FRANCES", "isabella")); 286 287 shutdown(); 288 } 289 290 } 291 292 private static void checkConnection(Connection conn) throws SQLException { 293 checkConnection("DS", conn); 294 } 295 296 private static void checkConnection(String tag, Connection conn) throws SQLException { 297 ResultSet rs = conn.createStatement().executeQuery("values current_user"); 298 rs.next(); 299 String who = rs.getString(1); 300 rs.close(); 301 conn.close(); 302 303 if (zeus.equals(who)) 304 who = "GREEK ZEUS"; 305 306 System.out.println(tag + " connected as " + who); 307 } 308 private static void checkConnection(javax.sql.PooledConnection pc) throws SQLException { 309 checkConnection("CP", pc.getConnection()); 310 pc.close(); 311 312 } 313 private static void checkConnection(javax.sql.XAConnection xac) throws SQLException { 314 checkConnection("XA", xac.getConnection()); 315 xac.close(); 316 } 317 318 321 322 public String getJDBCUrl(String db, String attrs) { 323 String s = "jdbc:derby:" + db; 324 325 if (attrs != null) 326 s = s + ";" + attrs; 327 328 return s; 329 330 } 331 public javax.sql.DataSource getDS(String database, String user, String password) { 332 333 EmbeddedDataSource ds = new EmbeddedDataSource(); 334 ds.setDatabaseName(database); 335 if (user != null) { 336 ds.setUser(user); 337 ds.setPassword(password); 338 } 339 340 return ds; 341 } 342 343 public javax.sql.ConnectionPoolDataSource getCPDS(String database, String user, String password) { 344 345 EmbeddedConnectionPoolDataSource ds = new EmbeddedConnectionPoolDataSource(); 346 ds.setDatabaseName(database); 347 if (user != null) { 348 ds.setUser(user); 349 ds.setPassword(password); 350 } 351 352 return ds; 353 } 354 355 356 357 public boolean supportsUnicodeNames() { 358 return true; 359 } 360 361 362 public boolean supportsPooling() { 363 return true; 364 } 365 public boolean supportsXA() { 366 return true; 367 } 368 369 public void start() { 370 new org.apache.derby.jdbc.EmbeddedDriver(); 371 } 372 373 public void shutdown() { 374 try { 375 DriverManager.getConnection("jdbc:derby:;shutdown=true"); 376 System.out.println("FAIL - Shutdown returned connection"); 377 } catch (SQLException sqle) { 378 System.out.println("EXPECTED SHUTDOWN " + sqle.getMessage()); 379 } 380 } 381 382 protected void cleanUp() throws Exception { 383 try { 385 TestUtil.loadDriver(); 386 Connection conn = DriverManager.getConnection(getJDBCUrl("wombat", "user=EDWARD;password=noodle")); 387 CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)"); 388 start(); 389 390 cs.setString(1, "derby.connection.requireAuthentication"); 391 cs.setString(2, "false"); 392 cs.execute(); 393 cs.close(); 394 395 shutdown(); 396 start(); 397 398 conn = DriverManager.getConnection(getJDBCUrl("wombat", "user=EDWARD;password=noodle")); 399 cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)"); 400 401 cs.setString(1, "derby.user.EDWARD"); 402 cs.setNull(2, java.sql.Types.VARCHAR); 403 cs.execute(); 404 405 cs.setString(1, "derby.user.FRANCES"); 406 cs.setNull(2, java.sql.Types.VARCHAR); 407 cs.execute(); 408 409 cs.setString(1, "derby.user." + zeus); 410 cs.setNull(2, java.sql.Types.VARCHAR); 411 cs.execute(); 412 413 cs.close(); 414 415 conn.close(); 416 shutdown(); 417 418 } catch (SQLException sqle) { 419 System.out.println("UNEXPECTED CONNFAIL " + sqle.getMessage()); 420 System.out.println("could not clean up"); 421 } 422 } 423 424 } 425 | Popular Tags |