KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > derbyTesting > functionTests > tests > jdbcapi > dataSourcePermissions


1 /*
2
3    Derby - Class org.apache.derbyTesting.functionTests.tests.jdbcapi.dataSourcePermissions
4
5    Licensed to the Apache Software Foundation (ASF) under one or more
6    contributor license agreements. See the NOTICE file distributed with
7    this work for additional information regarding copyright ownership.
8    The ASF licenses this file to You under the Apache License, Version 2.0
9    (the "License"); you may not use this file except in compliance with
10    the License. You may obtain a copy of the License at
11
12       http://www.apache.org/licenses/LICENSE-2.0
13
14    Unless required by applicable law or agreed to in writing, software
15    distributed under the License is distributed on an "AS IS" BASIS,
16    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17    See the License for the specific language governing permissions and
18    limitations under the License.
19
20  */

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 JavaDoc;
29
30 import java.sql.Connection JavaDoc;
31 import java.sql.ResultSet JavaDoc;
32 import java.sql.PreparedStatement JavaDoc;
33 import java.sql.CallableStatement JavaDoc;
34 import java.sql.Statement JavaDoc;
35 import java.sql.SQLException JavaDoc;
36 import java.sql.DriverManager JavaDoc;
37
38 import javax.sql.DataSource JavaDoc;
39 import javax.sql.XADataSource JavaDoc;
40 import javax.sql.PooledConnection JavaDoc;
41 import javax.sql.XAConnection JavaDoc;
42 import javax.sql.ConnectionPoolDataSource JavaDoc;
43 import javax.transaction.xa.XAResource JavaDoc;
44 import javax.transaction.xa.XAException JavaDoc;
45 import javax.transaction.xa.Xid JavaDoc;
46 import javax.sql.ConnectionEventListener JavaDoc;
47 import javax.sql.ConnectionEvent JavaDoc;
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 JavaDoc;
54
55 import javax.naming.*;
56 import javax.naming.directory.*;
57
58 public class dataSourcePermissions
59 {
60
61     private static final String JavaDoc zeus = "\u0396\u0395\u03A5\u03A3";
62     private static final String JavaDoc apollo = "\u0391\u09A0\u039F\u039B\u039B\u039A\u0390";
63
64
65     public static void main(String JavaDoc[] args) throws Exception JavaDoc {
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 JavaDoc {
79
80         // Check the returned type of the JDBC Connections.
81
Connection JavaDoc conn = ij.startJBMS();
82
83         CallableStatement JavaDoc 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         // a greek unicode string
97
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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc conn) throws SQLException JavaDoc {
293         checkConnection("DS", conn);
294     }
295
296     private static void checkConnection(String JavaDoc tag, Connection JavaDoc conn) throws SQLException JavaDoc {
297         ResultSet JavaDoc rs = conn.createStatement().executeQuery("values current_user");
298         rs.next();
299         String JavaDoc 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 JavaDoc pc) throws SQLException JavaDoc {
309         checkConnection("CP", pc.getConnection());
310         pc.close();
311
312     }
313     private static void checkConnection(javax.sql.XAConnection JavaDoc xac) throws SQLException JavaDoc {
314         checkConnection("XA", xac.getConnection());
315         xac.close();
316     }
317
318     /*
319     ** Allow sub-classes to pick different implementations for (say) the network server.
320     */

321
322     public String JavaDoc getJDBCUrl(String JavaDoc db, String JavaDoc attrs) {
323         String JavaDoc s = "jdbc:derby:" + db;
324
325         if (attrs != null)
326             s = s + ";" + attrs;
327
328         return s;
329
330     }
331     public javax.sql.DataSource JavaDoc getDS(String JavaDoc database, String JavaDoc user, String JavaDoc 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 JavaDoc getCPDS(String JavaDoc database, String JavaDoc user, String JavaDoc 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 JavaDoc sqle) {
378             System.out.println("EXPECTED SHUTDOWN " + sqle.getMessage());
379         }
380     }
381
382     protected void cleanUp() throws Exception JavaDoc {
383         // clear up in case this test gets run with useprocess=false
384
try {
385             TestUtil.loadDriver();
386             Connection JavaDoc conn = DriverManager.getConnection(getJDBCUrl("wombat", "user=EDWARD;password=noodle"));
387             CallableStatement JavaDoc 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 JavaDoc sqle) {
419             System.out.println("UNEXPECTED CONNFAIL " + sqle.getMessage());
420             System.out.println("could not clean up");
421         }
422     }
423
424 }
425
Popular Tags