1 package org.melati.poem.test;
2
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.util.Enumeration;
6
7 import org.melati.poem.*;
8 import org.melati.poem.User;
9 import org.melati.poem.UserTable;
10 import org.melati.poem.dbms.Dbms;
11
12
13
14
15
16
17 public class PoemDatabaseTest extends PoemTestCase {
18
19 public PoemDatabaseTest(String arg0) {
20 super(arg0);
21 }
22
23 protected void setUp() throws Exception {
24 super.setUp();
25 }
26
27 protected void tearDown() throws Exception {
28 super.tearDown();
29 getDb().setLogCommits(false);
30 getDb().setLogSQL(false);
31 }
32
33
34
35
36
37 public void testGetUserTable() {
38 UserTable<User> ut1 = getDb().getUserTable();
39 @SuppressWarnings("unchecked")
40 UserTable<User> ut2 = (UserTable<User>)getDb().getTable("user");
41 assertEquals(ut1, ut2);
42 }
43
44
45
46
47 public void testTransactionsMax() {
48 assertEquals(maxTrans, getDb().transactionsMax());
49 }
50
51
52
53
54 public void testGetDisplayTables() {
55 final String expected = "user (from the data structure definition)"
56 + "group (from the data structure definition)"
57 + "capability (from the data structure definition)"
58 + "groupMembership (from the data structure definition)"
59 + "groupCapability (from the data structure definition)"
60 + "tableInfo (from the data structure definition)"
61 + "columnInfo (from the data structure definition)"
62 + "tableCategory (from the data structure definition)"
63 + "setting (from the data structure definition)";
64
65 String outcome = "";
66 for (Table<?> t : getDb().getDisplayTables()) {
67 outcome += t.toString();
68 }
69 if (getDb().getDbms().canDropColumns()) {
70 assertEquals(expected, outcome);
71 }
72 }
73
74
75
76
77 public void testSqlQuery() {
78 String query = "select * from " + getDb().getUserTable().quotedName();
79 getDb().setLogSQL(true);
80 ResultSet rs = getDb().sqlQuery(query);
81 getDb().setLogSQL(false);
82 int count = 0;
83 try {
84 while (rs.next()) {
85 count++;
86 }
87 } catch (SQLException e) {
88 e.printStackTrace();
89 fail();
90 }
91 assertEquals(2, count);
92 }
93
94
95
96 public void testSqlQueryThrows() {
97 String query = "select * from nonexistanttable" ;
98 try {
99 getDb().sqlQuery(query);
100 fail("Should have blown up");
101 } catch (ExecutingSQLPoemException e) {
102 e = null;
103 }
104 }
105
106
107
108
109 public void testHasCapability() {
110 assertTrue(getDb().hasCapability(
111 getDb().getUserTable().administratorUser(),
112 getDb().getCanAdminister()));
113 assertTrue(getDb().hasCapability(getDb().getUserTable().guestUser(), null));
114
115 getDb().setCanAdminister();
116
117 assertFalse(getDb().hasCapability(getDb().getUserTable().guestUser(),
118 getDb().getCanAdminister()));
119 User u = (User)getDb().getUserTable().newPersistent();
120 u.setName("test");
121 u.setLogin("test");
122 u.setPassword("test");
123 u.makePersistent();
124 assertFalse(getDb().hasCapability(u, getDb().getCanAdminister()));
125 u.delete();
126 }
127
128
129
130
131 public void testAdministerCapability() {
132 }
133
134
135
136
137 public void testGetCanAdminister() {
138
139
140 }
141
142
143
144
145 public final void testGuestUser() {
146 User u = getDb().getUserTable().guestUser();
147 assertEquals(u.getLogin(), "_guest_");
148 }
149
150
151
152
153 public final void testAdministratorUser() {
154 User u = getDb().getUserTable().administratorUser();
155 assertEquals(u.getPassword(), "FIXME");
156 }
157
158
159
160
161 public void testReferencesToTable() {
162 String expected = "groupMembership.user: reference to user "
163 + "(INT (org.melati.poem.ReferencePoemType)) "
164 + "(from the data structure definition)";
165 String outcome = "";
166 Enumeration<Column<?>> en = getDb().referencesTo(getDb().getUserTable());
167 while (en.hasMoreElements())
168 outcome += en.nextElement();
169 assertEquals(expected, outcome);
170 }
171
172
173
174
175 public void testGetDbms() {
176 Dbms dbms = getDb().getDbms();
177 System.err.println(dbms);
178 }
179
180
181
182
183 public void testToString() {
184 String name = getDb().toString();
185 assertTrue(name.endsWith(getDatabaseName()));
186 }
187
188
189
190
191 public void testLogSQL() {
192 assertFalse(getDb().logSQL());
193 }
194
195
196
197
198 public void testSetLogSQL() {
199 assertFalse(getDb().logSQL());
200 getDb().setLogSQL(true);
201 assertTrue(getDb().logSQL());
202 getDb().setLogSQL(false);
203 assertFalse(getDb().logSQL());
204 }
205
206
207
208
209 public void testConnect() {
210
211 }
212
213
214
215
216 public void testDisconnect() {
217
218 }
219
220
221
222
223 public void testShutdown() {
224
225 }
226
227
228
229
230
231
232 public void testTables() {
233
234 }
235
236
237
238
239
240
241 public void testColumns() {
242
243 }
244
245
246
247
248
249
250
251
252
253
254 public void testAddConstraints() {
255 }
256
257
258
259
260 public void testSetTransactionsMax() {
261 int current = 0;
262 current = getDb().transactionsMax();
263 assertEquals(maxTrans, current);
264 getDb().setTransactionsMax(12);
265 assertTrue(getDb().transactionsMax() == 12);
266 getDb().setTransactionsMax(current);
267 }
268
269
270
271
272 public void testGetTransactionsCount() {
273 assertEquals(maxTrans, getDb().getTransactionsCount());
274 }
275
276
277
278
279 public void testGetFreeTransactionsCount() {
280 assertEquals(maxTrans -1, getDb().getFreeTransactionsCount());
281 }
282
283
284
285
286 public void testPoemTransaction() {
287 assertEquals(getDatabaseName() +"/transaction0", getDb().poemTransaction(0).toString());
288 }
289
290
291
292
293 public void testTransaction() {
294 assertEquals(getDatabaseName() +"/transaction0", getDb().transaction(0).toString());
295 }
296
297
298
299
300 public void testIsFree() {
301 for (int i = 0; i < maxTrans-1; i++)
302 assertTrue(getDb().isFree(getDb().poemTransaction(i)));
303 assertFalse(getDb().isFree(getDb().poemTransaction(maxTrans-1)));
304
305 try {
306 System.err.println(getDb().isFree(getDb().poemTransaction(maxTrans)));
307 fail("Should have bombed.");
308 } catch (ArrayIndexOutOfBoundsException e) {
309 e = null;
310 }
311 }
312
313
314
315
316 public void testBeginExclusiveLock() {
317
318 }
319
320
321
322
323 public void testEndExclusiveLock() {
324
325 }
326
327
328
329
330 public void testInSession() {
331
332 }
333
334
335
336
337 public void testBeginSession() {
338
339 }
340
341
342
343
344 public void testEndSession() {
345
346 }
347
348
349
350
351 public void testGetTable() {
352 assertEquals(getDb().getUserTable(), getDb().getTable("user"));
353 }
354
355
356
357
358 public void testGetTableInfoTable() {
359 assertEquals(getDb().getTableInfoTable(), getDb().getTable("tableinfo"));
360 }
361
362
363
364
365 public void testGetTableCategoryTable() {
366 assertEquals(getDb().getTableCategoryTable(), getDb().getTable(
367 "tablecategory"));
368 }
369
370
371
372
373 public void testGetColumnInfoTable() {
374 assertEquals(getDb().getColumnInfoTable(), getDb().getTable("columninfo"));
375 }
376
377
378
379
380 public void testGetCapabilityTable() {
381 assertEquals(getDb().getCapabilityTable(), getDb().getTable("capability"));
382 }
383
384
385
386
387 public void testGetGroupTable() {
388 assertEquals(getDb().getGroupTable(), getDb().getTable("group"));
389 }
390
391
392
393
394 public void testGetGroupMembershipTable() {
395 assertEquals(getDb().getGroupMembershipTable(), getDb().getTable(
396 "groupmembership"));
397 }
398
399
400
401
402 public void testGetGroupCapabilityTable() {
403 assertEquals(getDb().getGroupCapabilityTable(), getDb().getTable(
404 "groupcapability"));
405 }
406
407
408
409
410 public void testGetSettingTable() {
411 assertEquals(getDb().getSettingTable(), getDb().getTable("setting"));
412 }
413
414
415
416
417
418 public void testSqlUpdate() {
419 try {
420 getDb().sqlUpdate("insert");
421 fail("should have blown up");
422 } catch (ExecutingSQLPoemException e) {
423 e = null;
424
425 }
426 }
427
428
429
430
431 public void testSqlUpdate1() {
432 try {
433 getDb()
434 .sqlUpdate(
435 "INSERT INTO \"COLUMNINFO\" VALUES('Name','A human-readable name for the group',TRUE,-7,FALSE,60,20,1,22,2,NULL,NULL,NULL,15,1,'name',1,TRUE,0,0,0,FALSE,FALSE,TRUE,2)");
436 fail("should have blown up");
437 } catch (ExecutingSQLPoemException e) {
438 e = null;
439
440 }
441 }
442
443
444
445
446 public void testSqlUpdate2() {
447 getDb().setLogSQL(true);
448 getDb().sqlUpdate("CREATE TABLE RAWSQL (ID INT)");
449 getDb().sqlUpdate("DROP TABLE RAWSQL");
450 getDb().setLogSQL(false);
451 }
452
453
454
455
456 public void testGivesCapabilitySQL() {
457 assertTrue(getDb().givesCapabilitySQL((User)getDb().guestAccessToken(),
458 getDb().administerCapability()).indexOf("SELECT") == 0);
459 }
460
461
462
463
464 public void testGuestAccessToken() {
465 AccessToken guest = getDb().guestAccessToken();
466 User guestUser = getDb().getUserTable().guestUser();
467 assertEquals(guest, guestUser);
468 }
469
470
471
472
473
474 public void testSetCanAdminister() {
475
476
477 getDb().setCanAdminister();
478 assertEquals(getDb().getCapabilityTable().get("_administer_"), getDb()
479 .getCanAdminister());
480 getDb().setCanAdminister("testing");
481 assertEquals(getDb().getCapabilityTable().get("testing"), getDb()
482 .getCanAdminister());
483 getDb().setCanAdminister();
484 getDb().getCapabilityTable().getNameColumn().firstWhereEq("testing")
485 .delete();
486
487 }
488
489
490
491
492 public void testTrimCache() {
493 getDb().trimCache(12);
494 }
495
496
497
498
499 public void testUncacheContents() {
500 getDb().uncache();
501 }
502
503
504
505
506 public void testReferencesToPersistent() {
507 Enumeration<Persistent> en = getDb().referencesTo(
508 getDb().getUserTable().administratorUser());
509 int count = 0;
510 while (en.hasMoreElements()) {
511 en.nextElement();
512 count++;
513 }
514 System.err.println(count);
515 assertTrue(count == 1);
516
517 }
518
519
520
521 public void testGetReferencesToPersistent() {
522 assertEquals(1, getDb().getReferencesTo(
523 getDb().getUserTable().administratorUser()).size());
524 }
525
526
527
528
529 public void testDumpCacheAnalysis() {
530 getDb().dumpCacheAnalysis();
531 }
532
533
534
535
536 public void testDump() {
537 getDb().dump();
538 }
539
540
541
542
543 public void testQuotedName() {
544 assertEquals(getDb().getDbms().getQuotedName("user"), getDb().quotedName("user"));
545 }
546
547
548
549
550 public void testGetCommittedConnection() {
551
552 }
553
554
555
556
557 public void testLogCommits() {
558 assertFalse(getDb().logCommits());
559 }
560
561
562
563
564 public void testSetLogCommits() {
565 assertFalse(getDb().logCommits());
566 getDb().setLogCommits(true);
567 assertTrue(getDb().logCommits());
568 getDb().setLogCommits(false);
569 assertFalse(getDb().logCommits());
570
571 }
572
573 }