Project

General

Profile

1 6122 leinfelder
/**
2
 *  '$RCSfile$'
3
 *  Copyright: 2010 Regents of the University of California and the
4
 *              National Center for Ecological Analysis and Synthesis
5
 *  Purpose: To test the Access Controls in metacat by JUnit
6
 *
7
 *   '$Author$'
8
 *     '$Date$'
9
 * '$Revision$'
10
 *
11
 * This program is free software; you can redistribute it and/or modify
12
 * it under the terms of the GNU General Public License as published by
13
 * the Free Software Foundation; either version 2 of the License, or
14
 * (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software
23
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24
 */
25
26
package edu.ucsb.nceas.metacat.dataone;
27
28 6295 leinfelder
import java.io.ByteArrayInputStream;
29
import java.io.InputStream;
30 6319 leinfelder
import java.text.SimpleDateFormat;
31 6122 leinfelder
import java.util.Date;
32
33 6542 leinfelder
import javax.servlet.http.HttpServletRequest;
34
35 6122 leinfelder
import junit.framework.Test;
36
import junit.framework.TestSuite;
37
38 6315 leinfelder
import org.apache.commons.io.IOUtils;
39 6542 leinfelder
import org.apache.wicket.protocol.http.MockHttpServletRequest;
40 6372 leinfelder
import org.dataone.service.util.Constants;
41 6141 cjones
import org.dataone.service.exceptions.InsufficientResources;
42
import org.dataone.service.exceptions.InvalidRequest;
43 6320 leinfelder
import org.dataone.service.exceptions.NotAuthorized;
44 6141 cjones
import org.dataone.service.exceptions.NotFound;
45
import org.dataone.service.exceptions.NotImplemented;
46
import org.dataone.service.exceptions.ServiceFailure;
47 6366 leinfelder
import org.dataone.service.types.v1.AccessPolicy;
48
import org.dataone.service.types.v1.AccessRule;
49
import org.dataone.service.types.v1.Checksum;
50
import org.dataone.service.types.v1.Event;
51
import org.dataone.service.types.v1.Identifier;
52
import org.dataone.service.types.v1.Log;
53
import org.dataone.service.types.v1.NodeReference;
54
import org.dataone.service.types.v1.ObjectFormat;
55
import org.dataone.service.types.v1.ObjectFormatIdentifier;
56
import org.dataone.service.types.v1.ObjectFormatList;
57
import org.dataone.service.types.v1.ObjectInfo;
58
import org.dataone.service.types.v1.ObjectList;
59
import org.dataone.service.types.v1.Permission;
60
import org.dataone.service.types.v1.Replica;
61
import org.dataone.service.types.v1.ReplicationPolicy;
62
import org.dataone.service.types.v1.ReplicationStatus;
63
import org.dataone.service.types.v1.Session;
64
import org.dataone.service.types.v1.Subject;
65
import org.dataone.service.types.v1.SystemMetadata;
66 6122 leinfelder
67
/**
68
 * A JUnit test for testing the dataone CNCore implementation
69
 */
70 6324 leinfelder
public class CNodeServiceTest extends D1NodeServiceTest {
71 6122 leinfelder
72
    /**
73
    * constructor for the test
74
    */
75 6287 leinfelder
    public CNodeServiceTest(String name)
76 6122 leinfelder
    {
77
        super(name);
78
    }
79
80
	/**
81
	 * Create a suite of tests to be run together
82
	 */
83
	public static Test suite()
84
	{
85
		TestSuite suite = new TestSuite();
86 6287 leinfelder
		suite.addTest(new CNodeServiceTest("initialize"));
87 6122 leinfelder
88 6295 leinfelder
		suite.addTest(new CNodeServiceTest("testAssertRelation"));
89
		suite.addTest(new CNodeServiceTest("testChecksum"));
90
		suite.addTest(new CNodeServiceTest("testCreate"));
91 6315 leinfelder
		suite.addTest(new CNodeServiceTest("testGet"));
92 6295 leinfelder
		suite.addTest(new CNodeServiceTest("testGetFormat"));
93 6322 leinfelder
		suite.addTest(new CNodeServiceTest("testGetLogRecords"));
94 6317 leinfelder
		suite.addTest(new CNodeServiceTest("testGetSystemMetadata"));
95 6320 leinfelder
		suite.addTest(new CNodeServiceTest("testIsAuthorized"));
96 6287 leinfelder
		suite.addTest(new CNodeServiceTest("testListFormats"));
97 6295 leinfelder
		suite.addTest(new CNodeServiceTest("testListNodes"));
98
		suite.addTest(new CNodeServiceTest("testObjectFormatNotFoundException"));
99 6287 leinfelder
		suite.addTest(new CNodeServiceTest("testRegisterSystemMetadata"));
100 6295 leinfelder
		suite.addTest(new CNodeServiceTest("testReplicationPolicy"));
101
		suite.addTest(new CNodeServiceTest("testReplicationStatus"));
102
		suite.addTest(new CNodeServiceTest("testReserveIdentifier"));
103
		suite.addTest(new CNodeServiceTest("testSearch"));
104 6320 leinfelder
		suite.addTest(new CNodeServiceTest("testSetAccessPolicy"));
105 6295 leinfelder
		suite.addTest(new CNodeServiceTest("testSetOwner"));
106 6122 leinfelder
107
		return suite;
108
	}
109
110 6295 leinfelder
111
	/**
112 6122 leinfelder
	 * test for registering standalone system metadata
113
	 */
114 6413 leinfelder
	public Identifier testRegisterSystemMetadata() {
115 6122 leinfelder
	    printTestHeader("testRegisterSystemMetadata");
116
117
	    try {
118 6295 leinfelder
            Session session = getTestSession();
119 6122 leinfelder
			Identifier guid = new Identifier();
120
			guid.setValue("testRegisterSystemMetadata." + System.currentTimeMillis());
121 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
122
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
123 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
124 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
125 6413 leinfelder
			return retGuid;
126 6295 leinfelder
        } catch(Exception e) {
127
            fail("Unexpected error: " + e.getMessage());
128 6122 leinfelder
        }
129 6413 leinfelder
        return null;
130 6295 leinfelder
	}
131
132 6317 leinfelder
	/**
133
	 * test for getting system metadata
134
	 */
135
	public void testGetSystemMetadata() {
136
	    printTestHeader("testGetSystemMetadata");
137
138
	    try {
139
            Session session = getTestSession();
140
			Identifier guid = new Identifier();
141
			guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
142 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
143
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
144 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
145 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
146 6317 leinfelder
			// get it
147 6542 leinfelder
			SystemMetadata retSysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
148 6317 leinfelder
			// check it
149
			assertEquals(sysmeta.getIdentifier().getValue(), retSysmeta.getIdentifier().getValue());
150
        } catch(Exception e) {
151
            fail("Unexpected error: " + e.getMessage());
152
        }
153
	}
154
155 6319 leinfelder
	public void testGetLogRecords() {
156
	    printTestHeader("testGetLogRecords");
157
	    try {
158
159
		    Session session = getTestSession();
160
		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
161
		    Date fromDate = sdf.parse("2010-01-01");
162
		    Date toDate = new Date();
163
		    Event event = Event.CREATE;
164
		    int start = 0;
165 6322 leinfelder
		    int count = 1;
166 6319 leinfelder
167 6542 leinfelder
		    Log log = CNodeService.getInstance(request).getLogRecords(session, fromDate, toDate,
168 6319 leinfelder
		    	event, start, count);
169
		    assertNotNull(log);
170 6322 leinfelder
		    assertTrue(log.getCount() == count);
171
		    assertTrue(log.getStart() == start);
172
		    assertTrue(log.getTotal() > 0);
173 6319 leinfelder
	    } catch (Exception e) {
174
		    e.printStackTrace();
175
		    fail("Unexpected error: " + e.getMessage());
176
	    }
177
	}
178
179 6295 leinfelder
	public void testCreate() {
180
	    printTestHeader("testCreate");
181
182
	    try {
183
            Session session = getTestSession();
184
			Identifier guid = new Identifier();
185
			guid.setValue("testCreate." + System.currentTimeMillis());
186
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
187 6324 leinfelder
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
188 6542 leinfelder
			Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
189 6295 leinfelder
			assertEquals(guid, pid);
190
        } catch(Exception e) {
191
        	e.printStackTrace();
192
            fail("Unexpected error: " + e.getMessage());
193 6122 leinfelder
        }
194
	}
195
196 6315 leinfelder
	public void testGet() {
197
	    printTestHeader("testGet");
198
199
	    try {
200
            Session session = getTestSession();
201
			Identifier guid = new Identifier();
202
			guid.setValue("testGet." + System.currentTimeMillis());
203
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
204 6324 leinfelder
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
205 6542 leinfelder
			Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
206 6397 leinfelder
			assertEquals(guid.getValue(), pid.getValue());
207 6315 leinfelder
			// get it
208 6542 leinfelder
			InputStream retObject = CNodeService.getInstance(request).get(session, pid);
209 6315 leinfelder
			// check it
210 6357 leinfelder
			object.reset();
211 6315 leinfelder
			assertTrue(IOUtils.contentEquals(object, retObject));
212
        } catch(Exception e) {
213
        	e.printStackTrace();
214
            fail("Unexpected error: " + e.getMessage());
215
        }
216
	}
217
218 6295 leinfelder
	public void testAssertRelation() {
219
	    printTestHeader("testAssertRelation");
220
221
	    try {
222
            Session session = getTestSession();
223
			Identifier guid = new Identifier();
224
			guid.setValue("testAssertRelation." + System.currentTimeMillis());
225 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
226
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
227 6295 leinfelder
			Identifier describePid = new Identifier();
228
			describePid.setValue("describePid." + System.currentTimeMillis());
229 6452 leinfelder
			sysmeta.setObsoletes(describePid);
230 6295 leinfelder
			// save it
231 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
232 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
233 6295 leinfelder
			// save the other
234 6504 leinfelder
			InputStream object2 = new ByteArrayInputStream("test".getBytes("UTF-8"));
235
			SystemMetadata describeSysmeta = createSystemMetadata(describePid, session.getSubject(), object2);
236 6542 leinfelder
			Identifier retDescribePid = CNodeService.getInstance(request).registerSystemMetadata(session, describePid, describeSysmeta);
237 6397 leinfelder
			assertEquals(describePid.getValue(), retDescribePid.getValue());
238 6295 leinfelder
			// check it
239 6542 leinfelder
			boolean result = CNodeService.getInstance(request).assertRelation(session, guid, "obsoletes", describePid);
240 6295 leinfelder
			assertTrue(result);
241
        } catch(Exception e) {
242
        	e.printStackTrace();
243
            fail("Unexpected error: " + e.getMessage());
244
        }
245
	}
246
247
	public void testChecksum() {
248
	    printTestHeader("testChecksum");
249
250
	    try {
251
            Session session = getTestSession();
252
			Identifier guid = new Identifier();
253
			guid.setValue("testChecksum." + System.currentTimeMillis());
254 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
255
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
256 6295 leinfelder
			// save it
257 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
258 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
259 6295 leinfelder
			// check it
260 6542 leinfelder
			Checksum checksum = CNodeService.getInstance(request).getChecksum(session, guid);
261 6295 leinfelder
			assertEquals(sysmeta.getChecksum().getValue(), checksum.getValue());
262
        } catch(Exception e) {
263
            fail("Unexpected error: " + e.getMessage());
264
        }
265
	}
266
267
	public void testListNodes() {
268
	    printTestHeader("testListNodes");
269
270
	    try {
271 6542 leinfelder
	    	CNodeService.getInstance(request).listNodes();
272 6295 leinfelder
        } catch(NotImplemented e) {
273
        	// expecting not implemented
274
            assertTrue(true);
275
        } catch(Exception e) {
276
            fail("Unexpected error: " + e.getMessage());
277
        }
278
	}
279
280
	public void testReserveIdentifier() {
281
	    printTestHeader("testReserveIdentifier");
282
283
	    try {
284
            Session session = getTestSession();
285
			Identifier guid = new Identifier();
286
			guid.setValue("testReserveIdentifier." + System.currentTimeMillis());
287
			// reserve it
288 6542 leinfelder
			boolean result = CNodeService.getInstance(request).reserveIdentifier(session, guid);
289 6378 leinfelder
			assertTrue(result);
290 6357 leinfelder
	    } catch(NotImplemented ni) {
291
        	// this is not implemented in Metacat
292
            assertTrue(true);
293 6295 leinfelder
        } catch(Exception e) {
294
        	e.printStackTrace();
295
            fail("Unexpected error: " + e.getMessage());
296
        }
297
	}
298
299
	public void testSearch() {
300
	    printTestHeader("testSearch");
301
302
	    try {
303
            Session session = getTestSession();
304
			Identifier guid = new Identifier();
305
			guid.setValue("testSearch." + System.currentTimeMillis());
306 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
307
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
308 6295 leinfelder
309
			// save it
310 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
311 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
312 6295 leinfelder
			// search for it
313 6542 leinfelder
			ObjectList objectList = CNodeService.getInstance(request).search(session, null, null);
314 6295 leinfelder
			// check it
315
			assertNotNull(objectList);
316 6397 leinfelder
			boolean result = false;
317 6295 leinfelder
			for (ObjectInfo objectInfo: objectList.getObjectInfoList()) {
318
				Identifier pid = objectInfo.getIdentifier();
319
				if (pid.getValue().equals(guid.getValue())) {
320
					result = true;
321
					break;
322
				}
323
			}
324
			assertTrue(result);
325
        } catch(Exception e) {
326
            fail("Unexpected error: " + e.getMessage());
327
        }
328
	}
329
330
	public void testSetOwner() {
331
	    printTestHeader("testSetOwner");
332
333
	    try {
334
            Session session = getTestSession();
335
			Identifier guid = new Identifier();
336
			guid.setValue("testSetOwner." + System.currentTimeMillis());
337 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
338
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
339 6295 leinfelder
			// save it
340 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
341 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
342 6295 leinfelder
			Subject rightsHolder = new Subject();
343
			rightsHolder.setValue("newUser");
344
			// set it
345 6542 leinfelder
			Identifier retPid = CNodeService.getInstance(request).setOwner(session, guid, rightsHolder);
346 6295 leinfelder
			assertEquals(guid, retPid);
347
			// get it
348 6542 leinfelder
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
349 6295 leinfelder
			assertNotNull(sysmeta);
350
			// check it
351
			assertEquals(rightsHolder.getValue(), sysmeta.getRightsHolder().getValue());
352
353
        } catch(Exception e) {
354
            fail("Unexpected error: " + e.getMessage());
355
        }
356
	}
357
358 6320 leinfelder
	public void testSetAccessPolicy() {
359
	    printTestHeader("testSetAccessPolicy");
360
361
	    try {
362
            Session session = getTestSession();
363
			Identifier guid = new Identifier();
364
			guid.setValue("testSetAccessPolicy." + System.currentTimeMillis());
365 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
366
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
367 6320 leinfelder
			// save it
368 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
369 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
370 6320 leinfelder
			AccessPolicy accessPolicy = new AccessPolicy();
371
			AccessRule accessRule = new AccessRule();
372
			accessRule.addPermission(Permission.WRITE);
373
			Subject publicSubject = new Subject();
374 6532 leinfelder
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
375 6320 leinfelder
			accessRule.addSubject(publicSubject);
376
			accessPolicy.addAllow(accessRule);
377
			// set it
378 6542 leinfelder
			boolean result = CNodeService.getInstance(request).setAccessPolicy(session, guid, accessPolicy );
379 6320 leinfelder
			assertTrue(result);
380
			// check it
381 6542 leinfelder
			result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
382 6320 leinfelder
			assertTrue(result);
383
        } catch(Exception e) {
384
            fail("Unexpected error: " + e.getMessage());
385
        }
386
	}
387
388
	public void testIsAuthorized() {
389
	    printTestHeader("testIsAuthorized");
390
391
	    try {
392
            Session session = getTestSession();
393
			Identifier guid = new Identifier();
394
			guid.setValue("testIsAuthorized." + System.currentTimeMillis());
395 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
396
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
397 6320 leinfelder
			// save it
398 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
399 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
400 6320 leinfelder
			// check it
401
			Subject publicSubject = new Subject();
402 6532 leinfelder
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
403 6320 leinfelder
			session.setSubject(publicSubject);
404
			// public read
405 6542 leinfelder
			boolean result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.READ);
406 6320 leinfelder
			assertTrue(result);
407
			// not public write
408
			try {
409
				result = false;
410 6542 leinfelder
				result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
411 6320 leinfelder
				fail("Public WRITE should be denied");
412
			} catch (NotAuthorized nae) {
413
				result = true;
414
			}
415
			assertTrue(result);
416
        } catch(Exception e) {
417
            fail("Unexpected error: " + e.getMessage());
418
        }
419
	}
420
421 6295 leinfelder
	public void testReplicationPolicy() {
422
	    printTestHeader("testReplicationPolicy");
423
424
	    try {
425
            Session session = getTestSession();
426
			Identifier guid = new Identifier();
427
			guid.setValue("testReplicationPolicy." + System.currentTimeMillis());
428 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
429
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
430 6295 leinfelder
			// save it
431 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
432 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
433 6295 leinfelder
434
			ReplicationPolicy policy = new ReplicationPolicy();
435
			NodeReference node = new NodeReference();
436
			node.setValue("testNode");
437
			policy.addPreferredMemberNode(node );
438
			// set it
439 6542 leinfelder
			boolean result = CNodeService.getInstance(request).setReplicationPolicy(session, guid, policy);
440 6295 leinfelder
			assertTrue(result);
441
			// get it
442 6542 leinfelder
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
443 6295 leinfelder
			assertNotNull(sysmeta);
444
			// check it
445
			assertEquals(policy.getPreferredMemberNode(0).getValue(), sysmeta.getReplicationPolicy().getPreferredMemberNode(0).getValue());
446
447
        } catch(Exception e) {
448
            fail("Unexpected error: " + e.getMessage());
449
        }
450
	}
451
452
	public void testReplicationStatus() {
453
	    printTestHeader("testReplicationStatus");
454
455
	    try {
456
            Session session = getTestSession();
457
			Identifier guid = new Identifier();
458
			guid.setValue("testReplicationStatus." + System.currentTimeMillis());
459 6504 leinfelder
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
460
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
461 6295 leinfelder
			Replica replica = new Replica();
462
			NodeReference replicaMemberNode = new NodeReference();
463
			replicaMemberNode.setValue("testNode");
464
			replica.setReplicationStatus(ReplicationStatus.REQUESTED);
465
			replica.setReplicaMemberNode(replicaMemberNode);
466
			replica.setReplicaVerified(new Date());
467
			sysmeta.addReplica(replica );
468
			// save it
469 6542 leinfelder
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
470 6397 leinfelder
			assertEquals(guid.getValue(), retGuid.getValue());
471 6295 leinfelder
			// set it
472
			ReplicationStatus status = ReplicationStatus.COMPLETED;
473 6542 leinfelder
			boolean result = CNodeService.getInstance(request).setReplicationStatus(session, guid, replicaMemberNode, status);
474 6295 leinfelder
			assertTrue(result);
475
			// get it
476 6542 leinfelder
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
477 6295 leinfelder
			assertNotNull(sysmeta);
478
			// check it
479
			assertEquals(status, sysmeta.getReplica(0).getReplicationStatus());
480
481
        } catch(Exception e) {
482
            fail("Unexpected error: " + e.getMessage());
483
        }
484
	}
485
486 6122 leinfelder
	/**
487
	 * Run an initial test that always passes to check that the test harness is
488
	 * working.
489
	 */
490
	public void initialize()
491
	{
492
	    printTestHeader("initialize");
493
		assertTrue(1 == 1);
494
	}
495 6307 leinfelder
496 6141 cjones
497
	/**
498
	 * test to list the object formats registered in metacat
499
	 */
500
	public void testListFormats() {
501
502
    printTestHeader("testListFormats");
503
504 6307 leinfelder
    // make sure we are set up
505
    setUpFormats();
506
507 6141 cjones
    // there should be at least 59 formats in the list
508
  	int formatsCount = 59;
509
  	ObjectFormatList objectFormatList;
510
511
  	try {
512 6542 leinfelder
	    objectFormatList = CNodeService.getInstance(request).listFormats();
513 6141 cjones
	  	assertTrue(objectFormatList.getTotal() >= formatsCount);
514
515
  	} catch (InvalidRequest e) {
516
  		fail("Could not get the object format list: " + e.getMessage());
517
518
  	} catch (ServiceFailure e) {
519
  		fail("Could not get the object format list: " + e.getMessage());
520
521
    } catch (NotFound e) {
522
  		fail("Could not get the object format list: " + e.getMessage());
523
524
    } catch (InsufficientResources e) {
525
  		fail("Could not get the object format list: " + e.getMessage());
526
527
    } catch (NotImplemented e) {
528
  		fail("Could not get the object format list: " + e.getMessage());
529
530
    }
531
532
	}
533 6122 leinfelder
534 6141 cjones
  /**
535
   * Test getting a single object format from the registered list
536
   */
537
  public void testGetFormat() {
538
539
    printTestHeader("testGetFormat");
540
541 6307 leinfelder
    // make sure we are set up
542
    setUpFormats();
543
544 6141 cjones
    String knownFormat = "text/plain";
545
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
546
    fmtid.setValue(knownFormat);
547
548
    try {
549
550
			String result =
551 6561 leinfelder
				CNodeService.getInstance(request).getFormat(fmtid).getFormatId().getValue();
552 6141 cjones
	  	System.out.println("Expected result: " + knownFormat);
553
	  	System.out.println("Found    result: " + result);
554
	  	assertTrue(result.equals(knownFormat));
555
556
    } catch (NullPointerException npe) {
557
	    fail("The returned format was null: " + npe.getMessage());
558
559
    } catch (NotFound nfe) {
560
    	fail("The format " + knownFormat + " was not found: " + nfe.getMessage());
561
562
    } catch (InvalidRequest ire) {
563
    	fail("The format " + knownFormat + " was not found: " + ire.getMessage());
564
565
    } catch (ServiceFailure sfe) {
566
    	fail("The format " + knownFormat + " was not found: " + sfe.getMessage());
567
568
    } catch (InsufficientResources ise) {
569
    	fail("The format " + knownFormat + " was not found: " + ise.getMessage());
570
571
    } catch (NotImplemented nie) {
572
    	fail("The getFormat() method has not been implemented: " + nie.getMessage());
573
574
    }
575
576
  }
577
578
  /**
579
   * Test getting a non-existent object format, returning NotFound
580
   */
581
  public void testObjectFormatNotFoundException() {
582
583
    printTestHeader("testObjectFormatNotFoundException");
584
585
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
586
  	String badFormat = "text/bad-format";
587
  	fmtid.setValue(badFormat);
588
589
  	try {
590
591
	    ObjectFormat objectFormat =
592 6542 leinfelder
	    	CNodeService.getInstance(request).getFormat(fmtid);
593 6141 cjones
594
  	} catch (Exception e) {
595
596
  		assertTrue(e instanceof NotFound);
597
  	}
598
599
  }
600 6122 leinfelder
601
}