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