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: cjones $'
8
 *     '$Date: 2012-01-11 09:39:12 -0800 (Wed, 11 Jan 2012) $'
9
 * '$Revision: 6879 $'
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.Calendar;
32
import java.util.Date;
33
import java.util.List;
34

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
592
    } catch (NotImplemented nie) {
593
    	fail("The getFormat() method has not been implemented: " + nie.getMessage());
594

    
595
    }
596
  	
597
  }
598
	
599
  /**
600
   * Test getting a non-existent object format, returning NotFound
601
   */
602
  public void testObjectFormatNotFoundException() {
603
  
604
    printTestHeader("testObjectFormatNotFoundException");
605

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