Project

General

Profile

1
/**
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: leinfelder $'
8
 *     '$Date: 2011-12-16 09:42:26 -0800 (Fri, 16 Dec 2011) $'
9
 * '$Revision: 6797 $'
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
import java.io.ByteArrayInputStream;
29
import java.io.InputStream;
30
import java.text.SimpleDateFormat;
31
import java.util.Date;
32
import java.util.List;
33

    
34
import junit.framework.Test;
35
import junit.framework.TestSuite;
36

    
37
import org.apache.commons.io.IOUtils;
38
import org.dataone.client.D1Client;
39
import org.dataone.service.exceptions.BaseException;
40
import org.dataone.service.exceptions.InsufficientResources;
41
import org.dataone.service.exceptions.NotAuthorized;
42
import org.dataone.service.exceptions.NotFound;
43
import org.dataone.service.exceptions.NotImplemented;
44
import org.dataone.service.exceptions.ServiceFailure;
45
import org.dataone.service.types.v1.AccessPolicy;
46
import org.dataone.service.types.v1.AccessRule;
47
import org.dataone.service.types.v1.Checksum;
48
import org.dataone.service.types.v1.Event;
49
import org.dataone.service.types.v1.Identifier;
50
import org.dataone.service.types.v1.Log;
51
import org.dataone.service.types.v1.Node;
52
import org.dataone.service.types.v1.NodeList;
53
import org.dataone.service.types.v1.NodeReference;
54
import org.dataone.service.types.v1.NodeType;
55
import org.dataone.service.types.v1.ObjectFormat;
56
import org.dataone.service.types.v1.ObjectFormatIdentifier;
57
import org.dataone.service.types.v1.ObjectFormatList;
58
import org.dataone.service.types.v1.ObjectInfo;
59
import org.dataone.service.types.v1.ObjectList;
60
import org.dataone.service.types.v1.Permission;
61
import org.dataone.service.types.v1.Replica;
62
import org.dataone.service.types.v1.ReplicationPolicy;
63
import org.dataone.service.types.v1.ReplicationStatus;
64
import org.dataone.service.types.v1.Session;
65
import org.dataone.service.types.v1.Subject;
66
import org.dataone.service.types.v1.SystemMetadata;
67
import org.dataone.service.util.Constants;
68

    
69
/**
70
 * A JUnit test for testing the dataone CNCore implementation
71
 */
72
public class CNodeServiceTest extends D1NodeServiceTest {   
73
    
74
    /**
75
    * constructor for the test
76
    */
77
    public CNodeServiceTest(String name)
78
    {
79
        super(name);
80
    }
81

    
82
	/**
83
	 * Create a suite of tests to be run together
84
	 */
85
	public static Test suite() 
86
	{
87
		TestSuite suite = new TestSuite();
88
		suite.addTest(new CNodeServiceTest("initialize"));
89
		
90
		suite.addTest(new CNodeServiceTest("testAssertRelation"));
91
		suite.addTest(new CNodeServiceTest("testChecksum"));
92
		suite.addTest(new CNodeServiceTest("testCreate"));
93
		suite.addTest(new CNodeServiceTest("testGet"));
94
		suite.addTest(new CNodeServiceTest("testGetFormat"));
95
		suite.addTest(new CNodeServiceTest("testGetLogRecords"));
96
		suite.addTest(new CNodeServiceTest("testGetSystemMetadata"));
97
		suite.addTest(new CNodeServiceTest("testIsAuthorized"));
98
		suite.addTest(new CNodeServiceTest("testListFormats"));
99
		suite.addTest(new CNodeServiceTest("testListNodes"));
100
		suite.addTest(new CNodeServiceTest("testObjectFormatNotFoundException"));
101
		suite.addTest(new CNodeServiceTest("testRegisterSystemMetadata"));
102
		suite.addTest(new CNodeServiceTest("testReplicationPolicy"));
103
		suite.addTest(new CNodeServiceTest("testReplicationStatus"));
104
		suite.addTest(new CNodeServiceTest("testReserveIdentifier"));
105
		suite.addTest(new CNodeServiceTest("testSearch"));
106
		suite.addTest(new CNodeServiceTest("testSetAccessPolicy"));
107
		suite.addTest(new CNodeServiceTest("testSetOwner"));
108
	
109
		return suite;
110
	}
111
	
112
	
113
	/**
114
	 * test for registering standalone system metadata
115
	 */
116
	public Identifier testRegisterSystemMetadata() {
117
	    printTestHeader("testRegisterSystemMetadata");
118

    
119
	    try {
120
            Session session = getTestSession();
121
			Identifier guid = new Identifier();
122
			guid.setValue("testRegisterSystemMetadata." + System.currentTimeMillis());
123
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
124
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
125
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
126
			assertEquals(guid.getValue(), retGuid.getValue());
127
			return retGuid;
128
        } catch(Exception e) {
129
            fail("Unexpected error: " + e.getMessage());
130
        }
131
        return null;
132
	}
133
	
134
	/**
135
	 * test for getting system metadata
136
	 */
137
	public void testGetSystemMetadata() {
138
	    printTestHeader("testGetSystemMetadata");
139

    
140
	    try {
141
            Session session = getTestSession();
142
			Identifier guid = new Identifier();
143
			guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
144
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
145
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
146
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
147
			assertEquals(guid.getValue(), retGuid.getValue());
148
			// get it
149
			SystemMetadata retSysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
150
			// check it
151
			assertEquals(sysmeta.getIdentifier().getValue(), retSysmeta.getIdentifier().getValue());
152
        } catch(Exception e) {
153
            fail("Unexpected error: " + e.getMessage());
154
        }
155
	}
156
	
157
	public void testGetLogRecords() {
158
	    printTestHeader("testGetLogRecords");
159
	    try {
160

    
161
		    Session session = getTestSession();
162
		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
163
		    Date fromDate = sdf.parse("2010-01-01");
164
		    Date toDate = new Date();
165
		    Event event = Event.CREATE;
166
		    int start = 0;
167
		    int count = 1;
168
	    
169
		    Log log = CNodeService.getInstance(request).getLogRecords(session, fromDate, toDate, 
170
		    	event, start, count);
171
		    assertNotNull(log);
172
		    assertTrue(log.getCount() == count);
173
		    assertTrue(log.getStart() == start);
174
		    assertTrue(log.getTotal() > 0);
175
	    } catch (Exception e) {
176
		    e.printStackTrace();
177
		    fail("Unexpected error: " + e.getMessage());
178
	    } 
179
	}
180
	
181
	public void testCreate() {
182
	    printTestHeader("testCreate");
183

    
184
	    try {
185
            Session session = getTestSession();
186
			Identifier guid = new Identifier();
187
			guid.setValue("testCreate." + System.currentTimeMillis());
188
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
189
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
190
			Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
191
			assertEquals(guid, pid);
192
        } catch(Exception e) {
193
        	e.printStackTrace();
194
            fail("Unexpected error: " + e.getMessage());
195
        }
196
	}
197
	
198
	public void testGet() {
199
	    printTestHeader("testGet");
200

    
201
	    try {
202
            Session session = getTestSession();
203
			Identifier guid = new Identifier();
204
			guid.setValue("testGet." + System.currentTimeMillis());
205
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
206
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
207
			Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
208
			assertEquals(guid.getValue(), pid.getValue());
209
			// get it
210
			InputStream retObject = CNodeService.getInstance(request).get(session, pid);
211
			// check it
212
			object.reset();
213
			assertTrue(IOUtils.contentEquals(object, retObject));
214
        } catch(Exception e) {
215
        	e.printStackTrace();
216
            fail("Unexpected error: " + e.getMessage());
217
        }
218
	}
219
	
220
	public void testAssertRelation() {
221
	    printTestHeader("testAssertRelation");
222

    
223
	    try {
224
            Session session = getTestSession();
225
			Identifier guid = new Identifier();
226
			guid.setValue("testAssertRelation." + System.currentTimeMillis());
227
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
228
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
229
			Identifier describePid = new Identifier();
230
			describePid.setValue("describePid." + System.currentTimeMillis());
231
			sysmeta.setObsoletes(describePid);
232
			// save it
233
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
234
			assertEquals(guid.getValue(), retGuid.getValue());
235
			// save the other
236
			InputStream object2 = new ByteArrayInputStream("test".getBytes("UTF-8"));
237
			SystemMetadata describeSysmeta = createSystemMetadata(describePid, session.getSubject(), object2);
238
			Identifier retDescribePid = CNodeService.getInstance(request).registerSystemMetadata(session, describePid, describeSysmeta);
239
			assertEquals(describePid.getValue(), retDescribePid.getValue());
240
			// check it
241
			boolean result = CNodeService.getInstance(request).assertRelation(session, guid, "obsoletes", describePid);
242
			assertTrue(result);
243
        } catch(Exception e) {
244
        	e.printStackTrace();
245
            fail("Unexpected error: " + e.getMessage());
246
        }
247
	}
248
	
249
	public void testChecksum() {
250
	    printTestHeader("testChecksum");
251

    
252
	    try {
253
            Session session = getTestSession();
254
			Identifier guid = new Identifier();
255
			guid.setValue("testChecksum." + System.currentTimeMillis());
256
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
257
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
258
			// save it
259
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
260
			assertEquals(guid.getValue(), retGuid.getValue());
261
			// check it
262
			Checksum checksum = CNodeService.getInstance(request).getChecksum(session, guid);
263
			assertEquals(sysmeta.getChecksum().getValue(), checksum.getValue());
264
        } catch(Exception e) {
265
            fail("Unexpected error: " + e.getMessage());
266
        }
267
	}
268
	
269
	public void testListNodes() {
270
	    printTestHeader("testListNodes");
271

    
272
	    try {
273
	    	CNodeService.getInstance(request).listNodes();
274
        } catch(NotImplemented e) {
275
        	// expecting not implemented
276
            assertTrue(true);
277
        } catch(Exception e) {
278
            fail("Unexpected error: " + e.getMessage());
279
        }
280
	}
281
	
282
	public void testReserveIdentifier() {
283
	    printTestHeader("testReserveIdentifier");
284

    
285
	    try {
286
            Session session = getTestSession();
287
			Identifier guid = new Identifier();
288
			guid.setValue("testReserveIdentifier." + System.currentTimeMillis());
289
			// reserve it
290
			Identifier resultPid = CNodeService.getInstance(request).reserveIdentifier(session, guid);
291
			assertNotNull(resultPid);
292
			assertEquals(guid.getValue(), resultPid.getValue());
293
	    } catch(NotImplemented ni) {
294
        	// this is not implemented in Metacat
295
            assertTrue(true);	
296
        } catch(Exception e) {
297
        	e.printStackTrace();
298
            fail("Unexpected error: " + e.getMessage());
299
        }
300
	}
301
	
302
	public void testSearch() {
303
	    printTestHeader("testSearch");
304

    
305
	    try {
306
            Session session = getTestSession();
307
			Identifier guid = new Identifier();
308
			guid.setValue("testSearch." + System.currentTimeMillis());
309
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
310
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
311
			
312
			// save it
313
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
314
			assertEquals(guid.getValue(), retGuid.getValue());
315
			// search for it
316
			ObjectList objectList = CNodeService.getInstance(request).search(session, null, null);
317
			// check it
318
			assertNotNull(objectList);
319
			boolean result = false;
320
			for (ObjectInfo objectInfo: objectList.getObjectInfoList()) {
321
				Identifier pid = objectInfo.getIdentifier();
322
				if (pid.getValue().equals(guid.getValue())) {
323
					result = true;
324
					break;
325
				}
326
			}
327
			assertTrue(result);
328
        } catch(Exception e) {
329
            fail("Unexpected error: " + e.getMessage());
330
        }
331
	}
332
	
333
	public void testSetOwner() {
334
	    printTestHeader("testSetOwner");
335

    
336
	    try {
337
            Session session = getTestSession();
338
			Identifier guid = new Identifier();
339
			guid.setValue("testSetOwner." + System.currentTimeMillis());
340
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
341
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
342
			long serialVersion = 1L;
343
			// save it
344
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
345
			assertEquals(guid.getValue(), retGuid.getValue());
346
			Subject rightsHolder = new Subject();
347
			rightsHolder.setValue("newUser");
348
			// set it
349
			Identifier retPid = CNodeService.getInstance(request).setOwner(session, guid, rightsHolder, serialVersion);
350
			assertEquals(guid, retPid);
351
			// get it
352
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
353
			assertNotNull(sysmeta);
354
			// check it
355
			assertTrue(rightsHolder.equals(sysmeta.getRightsHolder()));
356
			
357
        } catch(Exception e) {
358
            fail("Unexpected error: " + e.getMessage());
359
        }
360
	}
361
	
362
	public void testSetAccessPolicy() {
363
	    printTestHeader("testSetAccessPolicy");
364

    
365
	    try {
366
            Session session = getTestSession();
367
			Identifier guid = new Identifier();
368
			guid.setValue("testSetAccessPolicy." + System.currentTimeMillis());
369
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
370
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
371
	    long serialVersion = 1L;
372

    
373
			// save it
374
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
375
			assertEquals(guid.getValue(), retGuid.getValue());
376
			AccessPolicy accessPolicy = new AccessPolicy();
377
			AccessRule accessRule = new AccessRule();
378
			accessRule.addPermission(Permission.WRITE);
379
			Subject publicSubject = new Subject();
380
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
381
			accessRule.addSubject(publicSubject);
382
			accessPolicy.addAllow(accessRule);
383
			// set it
384
			boolean result = CNodeService.getInstance(request).setAccessPolicy(session, guid, accessPolicy, serialVersion );
385
			assertTrue(result);
386
			// check it
387
			result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
388
			assertTrue(result);
389
        } catch(Exception e) {
390
            fail("Unexpected error: " + e.getMessage());
391
        }
392
	}
393
	
394
	public void testIsAuthorized() {
395
	    printTestHeader("testIsAuthorized");
396

    
397
	    try {
398
            Session session = getTestSession();
399
			Identifier guid = new Identifier();
400
			guid.setValue("testIsAuthorized." + System.currentTimeMillis());
401
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
402
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
403
			// save it
404
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
405
			assertEquals(guid.getValue(), retGuid.getValue());
406
			// check it
407
			Subject publicSubject = new Subject();
408
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
409
			session.setSubject(publicSubject);
410
			// public read
411
			boolean result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.READ);
412
			assertTrue(result);
413
			// not public write
414
			try {
415
				result = false;
416
				result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
417
				fail("Public WRITE should be denied");
418
			} catch (NotAuthorized nae) {
419
				result = true;
420
			}
421
			assertTrue(result);
422
        } catch(Exception e) {
423
            fail("Unexpected error: " + e.getMessage());
424
        }
425
	}
426
	
427
	public void testReplicationPolicy() {
428
	    printTestHeader("testReplicationPolicy");
429

    
430
	    try {
431
            Session session = getTestSession();
432
			Identifier guid = new Identifier();
433
			guid.setValue("testReplicationPolicy." + System.currentTimeMillis());
434
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
435
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
436
	    long serialVersion = 1L;
437

    
438
			// save it
439
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
440
			assertEquals(guid.getValue(), retGuid.getValue());
441
			
442
			ReplicationPolicy policy = new ReplicationPolicy();
443
			NodeReference node = new NodeReference();
444
			node.setValue("testNode");
445
			policy.addPreferredMemberNode(node );
446
			// set it
447
			boolean result = CNodeService.getInstance(request).setReplicationPolicy(session, guid, policy, serialVersion);
448
			assertTrue(result);
449
			// get it
450
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
451
			assertNotNull(sysmeta);
452
			// check it
453
			assertEquals(policy.getPreferredMemberNode(0).getValue(), sysmeta.getReplicationPolicy().getPreferredMemberNode(0).getValue());
454
			
455
        } catch(Exception e) {
456
            fail("Unexpected error: " + e.getMessage());
457
        }
458
	}
459
	
460
	public void testReplicationStatus() {
461
	    printTestHeader("testReplicationStatus");
462

    
463
	    try {
464
            Session session = getTestSession();
465
			Identifier guid = new Identifier();
466
			guid.setValue("testReplicationStatus." + System.currentTimeMillis());
467
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
468
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
469
			Replica replica = new Replica();
470
			NodeReference replicaMemberNode = new NodeReference();
471
			replicaMemberNode.setValue("testNode");
472
			replica.setReplicationStatus(ReplicationStatus.REQUESTED);
473
			replica.setReplicaMemberNode(replicaMemberNode);
474
			replica.setReplicaVerified(new Date());
475
			sysmeta.addReplica(replica );
476
			// save it
477
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
478
			assertEquals(guid.getValue(), retGuid.getValue());
479
			// set it
480
			ReplicationStatus status = ReplicationStatus.COMPLETED;
481
			BaseException failure = new NotAuthorized("000", "Mock exception for " + this.getClass().getName());
482
			boolean result = CNodeService.getInstance(request).setReplicationStatus(session, guid, replicaMemberNode, status, failure);
483
			assertTrue(result);
484
			// get it
485
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
486
			assertNotNull(sysmeta);
487
			// check it
488
			assertEquals(status, sysmeta.getReplica(0).getReplicationStatus());
489
			
490
        } catch(Exception e) {
491
            fail("Unexpected error: " + e.getMessage());
492
        }
493
	}
494
	
495
	/**
496
	 * Run an initial test that always passes to check that the test harness is
497
	 * working.
498
	 */
499
	public void initialize() 
500
	{
501
	    printTestHeader("initialize");
502
		assertTrue(1 == 1);
503
	}
504
	
505
	/**
506
	 * We want to act as the CN itself
507
	 * @throws ServiceFailure 
508
	 * @throws Exception 
509
	 */
510
	@Override
511
	public Session getTestSession() throws Exception {
512
		Session session = super.getTestSession();
513
		
514
		// use the first CN we find in the nodelist
515
        NodeList nodeList = D1Client.getCN().listNodes();
516
        for (Node node : nodeList.getNodeList()) {
517
            if ( node.getType().equals(NodeType.CN) ) {
518
                
519
                List<Subject> subjects = node.getSubjectList();
520
                for (Subject subject : subjects) {
521
                   session.setSubject(subject);
522
                   // we are done here
523
                   return session;
524
                }
525
            }
526
        }
527
        // in case we didn't find it
528
        return session;
529
	}
530
	
531

    
532
	/**
533
	 * test to list the object formats registered in metacat
534
	 */
535
	public void testListFormats() {
536
		
537
    printTestHeader("testListFormats");
538
    
539
    // make sure we are set up
540
    setUpFormats();
541
    
542
    // there should be at least 59 formats in the list
543
  	int formatsCount = 59;
544
  	ObjectFormatList objectFormatList;
545
  	
546
  	try {
547
	    objectFormatList = CNodeService.getInstance(request).listFormats();
548
	  	assertTrue(objectFormatList.getTotal() >= formatsCount);
549
  	
550
  	} catch (ServiceFailure e) {
551
  		fail("Could not get the object format list: " + e.getMessage());
552

    
553
    } catch (InsufficientResources e) {
554
  		fail("Could not get the object format list: " + e.getMessage());
555

    
556
    } catch (NotImplemented e) {
557
  		fail("Could not get the object format list: " + e.getMessage());
558

    
559
    }
560
    
561
	}
562
	
563
  /**
564
   * Test getting a single object format from the registered list
565
   */
566
  public void testGetFormat() {
567
  	
568
    printTestHeader("testGetFormat");
569

    
570
    // make sure we are set up
571
    setUpFormats();
572
    
573
    String knownFormat = "text/plain";
574
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
575
    fmtid.setValue(knownFormat);
576
  	
577
    try {
578
	    
579
			String result = 
580
				CNodeService.getInstance(request).getFormat(fmtid).getFormatId().getValue();
581
	  	System.out.println("Expected result: " + knownFormat);
582
	  	System.out.println("Found    result: " + result);
583
	  	assertTrue(result.equals(knownFormat));
584
  
585
    } catch (NullPointerException npe) {	  
586
	    fail("The returned format was null: " + npe.getMessage());
587
    
588
    } catch (NotFound nfe) {     
589
    	fail("The format " + knownFormat + " was not found: " + nfe.getMessage());
590
    	
591
    } catch (ServiceFailure sfe) {
592
    	fail("The format " + knownFormat + " was not found: " + sfe.getMessage());
593

    
594
    } catch (InsufficientResources ise) {
595
    	fail("The format " + knownFormat + " was not found: " + ise.getMessage());
596
 
597
    } catch (NotImplemented nie) {
598
    	fail("The getFormat() method has not been implemented: " + nie.getMessage());
599

    
600
    }
601
  	
602
  }
603
	
604
  /**
605
   * Test getting a non-existent object format, returning NotFound
606
   */
607
  public void testObjectFormatNotFoundException() {
608
  
609
    printTestHeader("testObjectFormatNotFoundException");
610

    
611
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
612
  	String badFormat = "text/bad-format";
613
  	fmtid.setValue(badFormat);
614
  	
615
  	try {
616
  		
617
	    ObjectFormat objectFormat = 
618
	    	CNodeService.getInstance(request).getFormat(fmtid);
619
      
620
  	} catch (Exception e) {
621
	    
622
  		assertTrue(e instanceof NotFound);
623
  	}
624
  	
625
  }
626
 
627
}
(1-1/4)