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: tao $'
8
 *     '$Date: 2015-03-09 17:21:49 -0700 (Mon, 09 Mar 2015) $'
9
 * '$Revision: 9147 $'
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

    
29
import java.io.ByteArrayInputStream;
30
import java.io.InputStream;
31
import java.text.SimpleDateFormat;
32
import java.util.Calendar;
33
import java.util.Date;
34
import java.util.List;
35

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

    
39
import org.apache.commons.io.IOUtils;
40
import org.dataone.client.v2.itk.D1Client;
41
import org.dataone.service.exceptions.BaseException;
42
import org.dataone.service.exceptions.InvalidSystemMetadata;
43
import org.dataone.service.exceptions.NotAuthorized;
44
import org.dataone.service.exceptions.NotFound;
45
import org.dataone.service.exceptions.NotImplemented;
46
import org.dataone.service.exceptions.ServiceFailure;
47
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.DescribeResponse;
51
import org.dataone.service.types.v1.Event;
52
import org.dataone.service.types.v1.Identifier;
53
import org.dataone.service.types.v1.NodeReference;
54
import org.dataone.service.types.v1.NodeType;
55
import org.dataone.service.types.v1.ObjectFormatIdentifier;
56
import org.dataone.service.types.v1.ObjectList;
57
import org.dataone.service.types.v1.Permission;
58
import org.dataone.service.types.v1.Replica;
59
import org.dataone.service.types.v1.ReplicationPolicy;
60
import org.dataone.service.types.v1.ReplicationStatus;
61
import org.dataone.service.types.v1.Session;
62
import org.dataone.service.types.v1.Subject;
63
import org.dataone.service.types.v2.Log;
64
import org.dataone.service.types.v2.Node;
65
import org.dataone.service.types.v2.NodeList;
66
import org.dataone.service.types.v2.ObjectFormat;
67
import org.dataone.service.types.v2.ObjectFormatList;
68
import org.dataone.service.types.v2.OptionList;
69
import org.dataone.service.types.v2.SystemMetadata;
70
import org.dataone.service.util.Constants;
71

    
72
import edu.ucsb.nceas.metacat.dataone.CNodeService;
73
import edu.ucsb.nceas.metacat.dataone.MNodeService;
74

    
75
/**
76
 * A JUnit test for testing the dataone CNCore implementation
77
 */
78
public class CNodeServiceTest extends D1NodeServiceTest {   
79
    
80
    /**
81
    * constructor for the test
82
    */
83
    public CNodeServiceTest(String name)
84
    {
85
        super(name);
86
    }
87

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

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

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

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

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

    
209
	    try {
210
            Session session = getTestSession();
211
			Identifier guid = new Identifier();
212
			guid.setValue("testGet." + System.currentTimeMillis());
213
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
214
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
215
			Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
216
			assertEquals(guid.getValue(), pid.getValue());
217
			System.out.println("the pid is+++++++++++++++++++++++++"+guid.getValue());
218
			// get it
219
			InputStream retObject = CNodeService.getInstance(request).get(session, pid);
220
			// check it
221
			object.reset();
222
			assertTrue(IOUtils.contentEquals(object, retObject));
223
        } catch(Exception e) {
224
        	e.printStackTrace();
225
            fail("Unexpected error: " + e.getMessage());
226
        }
227
	}
228
	
229
	public void testChecksum() {
230
	    printTestHeader("testChecksum");
231

    
232
	    try {
233
            Session session = getTestSession();
234
			Identifier guid = new Identifier();
235
			guid.setValue("testChecksum." + System.currentTimeMillis());
236
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
237
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
238
			// save it
239
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
240
			assertEquals(guid.getValue(), retGuid.getValue());
241
			// check it
242
			Checksum checksum = CNodeService.getInstance(request).getChecksum(session, guid);
243
			assertEquals(sysmeta.getChecksum().getValue(), checksum.getValue());
244
        } catch(Exception e) {
245
            fail("Unexpected error: " + e.getMessage());
246
        }
247
	}
248
	
249
	public void testListNodes() {
250
	    printTestHeader("testListNodes");
251

    
252
	    try {
253
	    	CNodeService.getInstance(request).listNodes();
254
        } catch(NotImplemented e) {
255
        	// expecting not implemented
256
            assertTrue(true);
257
        } catch(Exception e) {
258
            fail("Unexpected error: " + e.getMessage());
259
        }
260
	}
261
	
262
	public void testReserveIdentifier() {
263
	    printTestHeader("testReserveIdentifier");
264

    
265
	    try {
266
            Session session = getTestSession();
267
			Identifier guid = new Identifier();
268
			guid.setValue("testReserveIdentifier." + System.currentTimeMillis());
269
			// reserve it
270
			Identifier resultPid = CNodeService.getInstance(request).reserveIdentifier(session, guid);
271
			assertNotNull(resultPid);
272
			assertEquals(guid.getValue(), resultPid.getValue());
273
	    } catch(NotImplemented ni) {
274
        	// this is not implemented in Metacat
275
            assertTrue(true);	
276
        } catch(Exception e) {
277
        	e.printStackTrace();
278
            fail("Unexpected error: " + e.getMessage());
279
        }
280
	}
281
	
282
	public void testSearch() {
283
	    printTestHeader("testSearch");
284

    
285
	    try {
286
            Session session = getTestSession();
287
			
288
			// search for objects, but expect a NotImplemented exception
289
			try {
290
				ObjectList objectList = CNodeService.getInstance(request).search(session, null, null);
291
			} catch (NotImplemented ne) {
292
				assertTrue(true);
293
				return;
294
			}
295
			fail("Metacat should not implement CN.search");
296
			
297
        } catch(Exception e) {
298
            fail("Unexpected error: " + e.getMessage());
299
        }
300
	}
301
	
302
	public void testSetOwner() {
303
	    printTestHeader("testSetOwner");
304

    
305
	    try {
306
            Session session = getTestSession();
307
			Identifier guid = new Identifier();
308
			guid.setValue("testSetOwner." + System.currentTimeMillis());
309
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
310
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
311
			long serialVersion = 1L;
312
			// save it
313
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
314
			assertEquals(guid.getValue(), retGuid.getValue());
315
			Subject rightsHolder = new Subject();
316
			rightsHolder.setValue("newUser");
317
			// set it
318
			Identifier retPid = CNodeService.getInstance(request).setRightsHolder(session, guid, rightsHolder, serialVersion);
319
			assertEquals(guid, retPid);
320
			// get it
321
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
322
			assertNotNull(sysmeta);
323
			// check it
324
			assertTrue(rightsHolder.equals(sysmeta.getRightsHolder()));
325
			
326
        } catch(Exception e) {
327
            fail("Unexpected error: " + e.getMessage());
328
        }
329
	}
330
	
331
	public void testSetAccessPolicy() {
332
	    printTestHeader("testSetAccessPolicy");
333

    
334
	    try {
335
            Session session = getTestSession();
336
			Identifier guid = new Identifier();
337
			guid.setValue("testSetAccessPolicy." + System.currentTimeMillis());
338
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
339
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
340
	    long serialVersion = 1L;
341

    
342
			// save it
343
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
344
			assertEquals(guid.getValue(), retGuid.getValue());
345
			AccessPolicy accessPolicy = new AccessPolicy();
346
			AccessRule accessRule = new AccessRule();
347
			accessRule.addPermission(Permission.WRITE);
348
			Subject publicSubject = new Subject();
349
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
350
			accessRule.addSubject(publicSubject);
351
			accessPolicy.addAllow(accessRule);
352
			// set it
353
			boolean result = CNodeService.getInstance(request).setAccessPolicy(session, guid, accessPolicy, serialVersion );
354
			assertTrue(result);
355
			// check it
356
			result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
357
			assertTrue(result);
358
        } catch(Exception e) {
359
            fail("Unexpected error: " + e.getMessage());
360
        }
361
	}
362
	
363
	public void testIsAuthorized() {
364
	    printTestHeader("testIsAuthorized");
365

    
366
	    try {
367
            Session session = getTestSession();
368
			Identifier guid = new Identifier();
369
			guid.setValue("testIsAuthorized." + System.currentTimeMillis());
370
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
371
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
372
			// save it
373
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
374
			assertEquals(guid.getValue(), retGuid.getValue());
375
			// check it
376
			Subject publicSubject = new Subject();
377
			publicSubject.setValue(Constants.SUBJECT_PUBLIC);
378
			session.setSubject(publicSubject);
379
			// public read
380
			boolean result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.READ);
381
			assertTrue(result);
382
			// not public write
383
			try {
384
				result = false;
385
				result = CNodeService.getInstance(request).isAuthorized(session, guid, Permission.WRITE);
386
				fail("Public WRITE should be denied");
387
			} catch (NotAuthorized nae) {
388
				result = true;
389
			}
390
			assertTrue(result);
391
        } catch(Exception e) {
392
            fail("Unexpected error: " + e.getMessage());
393
        }
394
	}
395
	
396
	public void testReplicationPolicy() {
397
	    printTestHeader("testReplicationPolicy");
398

    
399
	    try {
400
            Session session = getTestSession();
401
			Identifier guid = new Identifier();
402
			guid.setValue("testReplicationPolicy." + System.currentTimeMillis());
403
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
404
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
405
	    long serialVersion = 1L;
406

    
407
			// save it
408
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
409
			assertEquals(guid.getValue(), retGuid.getValue());
410
			
411
			ReplicationPolicy policy = new ReplicationPolicy();
412
			NodeReference node = new NodeReference();
413
			node.setValue("testNode");
414
			policy.addPreferredMemberNode(node );
415
			// set it
416
			boolean result = CNodeService.getInstance(request).setReplicationPolicy(session, guid, policy, serialVersion);
417
			assertTrue(result);
418
			// get it
419
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
420
			assertNotNull(sysmeta);
421
			// check it
422
			assertEquals(policy.getPreferredMemberNode(0).getValue(), sysmeta.getReplicationPolicy().getPreferredMemberNode(0).getValue());
423
			
424
        } catch(Exception e) {
425
            fail("Unexpected error: " + e.getMessage());
426
        }
427
	}
428
	
429
	public void testReplicationStatus() {
430
	    printTestHeader("testReplicationStatus");
431

    
432
	    try {
433
            Session session = getTestSession();
434
			Identifier guid = new Identifier();
435
			guid.setValue("testReplicationStatus." + System.currentTimeMillis());
436
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
437
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
438
			Replica replica = new Replica();
439
			NodeReference replicaMemberNode = new NodeReference();
440
			replicaMemberNode.setValue("testNode");
441
			replica.setReplicationStatus(ReplicationStatus.REQUESTED);
442
			replica.setReplicaMemberNode(replicaMemberNode);
443
			replica.setReplicaVerified(Calendar.getInstance().getTime());
444
			sysmeta.addReplica(replica );
445
			// save it
446
			Identifier retGuid = CNodeService.getInstance(request).registerSystemMetadata(session, guid, sysmeta);
447
			assertEquals(guid.getValue(), retGuid.getValue());
448
			// set it
449
			ReplicationStatus status = ReplicationStatus.COMPLETED;
450
			BaseException failure = new NotAuthorized("000", "Mock exception for " + this.getClass().getName());
451
			boolean result = CNodeService.getInstance(request).setReplicationStatus(session, guid, replicaMemberNode, status, failure);
452
			assertTrue(result);
453
			// get it
454
			sysmeta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
455
			assertNotNull(sysmeta);
456
			// check it
457
			assertEquals(status, sysmeta.getReplica(0).getReplicationStatus());
458
			
459
        } catch(Exception e) {
460
            fail("Unexpected error: " + e.getMessage());
461
        }
462
	}
463
	
464
	/**
465
	 * Run an initial test that always passes to check that the test harness is
466
	 * working.
467
	 */
468
	public void initialize() 
469
	{
470
	    printTestHeader("initialize");
471
		assertTrue(1 == 1);
472
	}
473
	
474
	/**
475
	 * We want to act as the CN itself
476
	 * @throws ServiceFailure 
477
	 * @throws Exception 
478
	 */
479
	@Override
480
	public Session getTestSession() throws Exception {
481
		Session session = super.getTestSession();
482
		
483
		// use the first CN we find in the nodelist
484
        NodeList nodeList = D1Client.getCN().listNodes();
485
        for (Node node : nodeList.getNodeList()) {
486
            if ( node.getType().equals(NodeType.CN) ) {
487
                
488
                List<Subject> subjects = node.getSubjectList();
489
                for (Subject subject : subjects) {
490
                   session.setSubject(subject);
491
                   // we are done here
492
                   return session;
493
                }
494
            }
495
        }
496
        // in case we didn't find it
497
        return session;
498
	}
499
	
500

    
501
	/**
502
	 * test to list the object formats registered in metacat
503
	 */
504
	public void testListFormats() {
505
		
506
    printTestHeader("testListFormats");
507
    
508
    // make sure we are set up
509
    setUpFormats();
510
    
511
    // there should be at least 59 formats in the list
512
  	int formatsCount = 59;
513
  	ObjectFormatList objectFormatList;
514
  	
515
  	try {
516
	    objectFormatList = CNodeService.getInstance(request).listFormats();
517
	  	assertTrue(objectFormatList.getTotal() >= formatsCount);
518
  	
519
  	} catch (ServiceFailure e) {
520
  		fail("Could not get the object format list: " + e.getMessage());
521

    
522
    } catch (NotImplemented e) {
523
  		fail("Could not get the object format list: " + e.getMessage());
524

    
525
    }
526
    
527
	}
528
	
529
  /**
530
   * Test getting a single object format from the registered list
531
   */
532
  public void testGetFormat() {
533
  	
534
    printTestHeader("testGetFormat");
535

    
536
    // make sure we are set up
537
    setUpFormats();
538
    
539
    String knownFormat = "text/plain";
540
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
541
    fmtid.setValue(knownFormat);
542
  	
543
    try {
544
	    
545
			String result = 
546
				CNodeService.getInstance(request).getFormat(fmtid).getFormatId().getValue();
547
	  	System.out.println("Expected result: " + knownFormat);
548
	  	System.out.println("Found    result: " + result);
549
	  	assertTrue(result.equals(knownFormat));
550
  
551
    } catch (NullPointerException npe) {	  
552
	    fail("The returned format was null: " + npe.getMessage());
553
    
554
    } catch (NotFound nfe) {     
555
    	fail("The format " + knownFormat + " was not found: " + nfe.getMessage());
556
    	
557
    } catch (ServiceFailure sfe) {
558
    	fail("The format " + knownFormat + " was not found: " + sfe.getMessage());
559

    
560
    } catch (NotImplemented nie) {
561
    	fail("The getFormat() method has not been implemented: " + nie.getMessage());
562

    
563
    }
564
  	
565
  }
566
	
567
  /**
568
   * Test getting a non-existent object format, returning NotFound
569
   */
570
  public void testObjectFormatNotFoundException() {
571
  
572
    printTestHeader("testObjectFormatNotFoundException");
573

    
574
    ObjectFormatIdentifier fmtid = new ObjectFormatIdentifier();
575
  	String badFormat = "text/bad-format";
576
  	fmtid.setValue(badFormat);
577
  	
578
  	try {
579
  		
580
	    ObjectFormat objectFormat = 
581
	    	CNodeService.getInstance(request).getFormat(fmtid);
582
      
583
  	} catch (Exception e) {
584
	    
585
  		assertTrue(e instanceof NotFound);
586
  	}
587
  	
588
  }
589
  
590
  public void readDeletedObject() {
591
      printTestHeader("testCreate");
592

    
593
      try {
594
          Session session = getTestSession();
595
          Identifier guid = new Identifier();
596
          guid.setValue("testCreate." + System.currentTimeMillis());
597
          InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
598
          SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
599
          Identifier pid = CNodeService.getInstance(request).create(session, guid, object, sysmeta);
600
          assertEquals(guid, pid);
601
          
602
          Thread.sleep(3000);
603
          // use MN admin to delete
604
          session = getMNSession();
605
          Identifier deletedPid = CNodeService.getInstance(request).delete(session, pid);
606
          System.out.println("after deleting");
607
          assertEquals(pid.getValue(), deletedPid.getValue());
608
          // check that we cannot get the object
609
          session = getTestSession();
610
          InputStream deletedObject = null;
611
          try {
612
              //System.out.println("before read ===============");
613
              deletedObject = CNodeService.getInstance(request).get(session, deletedPid);
614
              //System.out.println("after read ===============");
615
          } catch (NotFound nf) {
616
              //System.out.println("the exception is1 "+nf.getMessage());
617
              //nf.printStackTrace();
618
              assertTrue(nf.getMessage().contains("deleted"));
619
          }
620
          try {
621
              //System.out.println("before read ===============");
622
              SystemMetadata sysmeta2 = CNodeService.getInstance(request).getSystemMetadata(session, deletedPid);
623
              //System.out.println("after read ===============");
624
          } catch (NotFound nf) {
625
              //System.out.println("the exception is "+nf.getMessage());
626
              //nf.printStackTrace();
627
              assertTrue(nf.getMessage().contains("deleted"));
628
          }
629
          
630
          try {
631
              //System.out.println("before read ===============");
632
              DescribeResponse describeResponse = CNodeService.getInstance(request).describe(session, pid);
633
              //System.out.println("after read ===============");
634
          } catch (NotFound nf) {
635
              //System.out.println("the exception is "+nf.getMessage());
636
              //nf.printStackTrace();
637
              assertTrue(nf.getMessage().contains("deleted"));
638
          }
639
          
640
          try {
641
              //System.out.println("before read ===============");
642
              Checksum checksum = CNodeService.getInstance(request).getChecksum(session, pid);
643
              //System.out.println("after read ===============");
644
          } catch (NotFound nf) {
645
              //System.out.println("the exception 3 is "+nf.getMessage());
646
              //nf.printStackTrace();
647
              assertTrue(nf.getMessage().contains("deleted"));
648
          }
649
          
650
          try {
651
              //System.out.println("before read ===============");
652
              boolean isAuthorized = 
653
                      CNodeService.getInstance(request).isAuthorized(session, pid, Permission.READ);
654
              //System.out.println("after read ===============");
655
          } catch (NotFound nf) {
656
              //System.out.println("the exception 4 is "+nf.getMessage());
657
              //nf.printStackTrace();
658
              assertTrue(nf.getMessage().contains("deleted"));
659
          }
660
          
661
         
662
          
663
          assertNull(deletedObject);
664
      } catch(Exception e) {
665
          e.printStackTrace();
666
          fail("Unexpected error: " + e.getMessage());
667
      }
668
  }
669
  
670
  /**
671
   * Test the method - get api  for a speicified SID
672
   */
673
  public void testGetSID() {
674
      String str1 = "object1";
675
      String str2 = "object2";
676
      String str3 = "object3";
677
      try {
678
          //insert test documents with a series id
679
          Session session = getTestSession();
680
          Identifier guid = new Identifier();
681
          guid.setValue(generateDocumentId());
682
          InputStream object1 = new ByteArrayInputStream(str1.getBytes("UTF-8"));
683
          SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object1);
684
          String sid1= "sid."+System.nanoTime();
685
          Identifier seriesId = new Identifier();
686
          seriesId.setValue(sid1);
687
          System.out.println("the first sid is "+seriesId.getValue());
688
          sysmeta.setSeriesId(seriesId);
689
          CNodeService.getInstance(request).create(session, guid, object1, sysmeta);
690
          System.out.println("the first pid is "+guid.getValue());
691
          //test the get(pid) for v2
692
          InputStream result = CNodeService.getInstance(request).get(session, guid);
693
          // go back to beginning of original stream
694
          object1.reset();
695
          // check
696
          assertTrue(object1.available() > 0);
697
          assertTrue(result.available() > 0);
698
          assertTrue(IOUtils.contentEquals(result, object1));
699
          // test the get(id) for v2
700
          InputStream result1 = CNodeService.getInstance(request).get(session, seriesId);
701
          object1.reset();
702
          // check
703
          assertTrue(object1.available() > 0);
704
          assertTrue(result1.available() > 0);
705
          assertTrue(IOUtils.contentEquals(result1, object1));
706
          //test the get(pid) for v1
707
          InputStream result2 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, guid);
708
          object1.reset();
709
          // check
710
          assertTrue(object1.available() > 0);
711
          assertTrue(result2.available() > 0);
712
          assertTrue(IOUtils.contentEquals(result2, object1));
713
          //test the get(sid) for v1
714
          try {
715
              InputStream result3 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, seriesId);
716
              fail("the get(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
717
          } catch (NotFound ee) {
718
              
719
          }
720
          SystemMetadata metadata = CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
721
          assertTrue(metadata.getIdentifier().getValue().equals(guid.getValue()));
722
          assertTrue(metadata.getSeriesId().getValue().equals(seriesId.getValue()));
723
          DescribeResponse describeResponse = CNodeService.getInstance(request).describe(session, seriesId);
724
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata.getChecksum().getValue());
725
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata.getFormatId().getValue());
726
          
727
          metadata = CNodeService.getInstance(request).getSystemMetadata(session, guid);
728
          assertTrue(metadata.getIdentifier().getValue().equals(guid.getValue()));
729
          assertTrue(metadata.getSeriesId().getValue().equals(seriesId.getValue()));
730
          describeResponse = CNodeService.getInstance(request).describe(session, guid);
731
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata.getChecksum().getValue());
732
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata.getFormatId().getValue());
733
          
734
          org.dataone.service.types.v1.SystemMetadata sys1=edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).getSystemMetadata(session, guid);
735
          assertTrue(metadata.getIdentifier().getValue().equals(guid.getValue()));
736
          
737
          try {
738
              org.dataone.service.types.v1.SystemMetadata sys2=edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
739
              fail("the getSystemMetadata(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
740
          } catch(NotFound nf2) {
741
              
742
          }
743
          
744
          describeResponse = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).describe(session, guid);
745
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), sys1.getChecksum().getValue());
746
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), sys1.getFormatId().getValue());
747
          try {
748
              describeResponse = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).describe(session, seriesId);
749
              fail("the describe(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
750
          } catch(NotFound nf2) {
751
              
752
          }
753
          
754
          Checksum sum = CNodeService.getInstance(request).getChecksum(session, guid);
755
          assertTrue(sum.getValue().equals("5b78f9689b9aab1ebc0f3c1df916dd97"));
756
          
757
          try {
758
              sum = CNodeService.getInstance(request).getChecksum(session, seriesId);
759
              fail("the getCheckSum shouldn't work for sid");
760
          } catch(NotFound nf3) {
761
              
762
          }
763
          
764
          sum = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).getChecksum(session, guid);
765
          assertTrue(sum.getValue().equals("5b78f9689b9aab1ebc0f3c1df916dd97"));
766
          
767
          try {
768
              sum = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).getChecksum(session, seriesId);
769
              fail("the getCheckSum shouldn't work for sid");
770
          } catch(NotFound nf3) {
771
              
772
          }
773
          
774
          boolean isAuthorized = 
775
                  CNodeService.getInstance(request).isAuthorized(session, guid, Permission.READ);
776
          assertEquals(isAuthorized, true);
777
          
778
          isAuthorized = 
779
                  CNodeService.getInstance(request).isAuthorized(session, seriesId, Permission.READ);
780
          assertEquals(isAuthorized, true);
781
          
782
          isAuthorized = 
783
                  edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).isAuthorized(session, guid, Permission.READ);
784
          assertEquals(isAuthorized, true);
785
          
786
          try {
787
              isAuthorized = 
788
                      edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).isAuthorized(session, seriesId, Permission.READ);
789
              fail("we can't reach here since the v1 isAuthorized method doesn't suppport series id");
790
          } catch (NotFound e) {
791
              
792
          }
793

    
794
          //do a update with the same series id
795
          Thread.sleep(1000);
796
          Identifier newPid = new Identifier();
797
          newPid.setValue(generateDocumentId()+"1");
798
          System.out.println("the second pid is "+newPid.getValue());
799
          InputStream object2 = new ByteArrayInputStream(str2.getBytes("UTF-8"));
800
          SystemMetadata newSysMeta = createSystemMetadata(newPid, session.getSubject(), object2);
801
          newSysMeta.setObsoletes(guid);
802
          newSysMeta.setSeriesId(seriesId);
803
          //CNodeService.getInstance(request).update(session, guid, object2, newPid, newSysMeta);
804
          CNodeService.getInstance(request).create(session, newPid, object2, newSysMeta);
805
          //update the system metadata of previous version.
806
          sysmeta.setObsoletedBy(newPid);
807
          CNodeService.getInstance(request).updateSystemMetadata(session, guid, sysmeta);
808
          InputStream result4 = CNodeService.getInstance(request).get(session, guid);
809
          // go back to beginning of original stream
810
          object1.reset();
811
          // check
812
          assertTrue(object1.available() > 0);
813
          assertTrue(result4.available() > 0);
814
          assertTrue(IOUtils.contentEquals(result4, object1));
815
          
816
          InputStream result5 = CNodeService.getInstance(request).get(session, newPid);
817
          // go back to beginning of original stream
818
          object2.reset();
819
          // check
820
          assertTrue(object2.available() > 0);
821
          assertTrue(result5.available() > 0);
822
          assertTrue(IOUtils.contentEquals(result5, object2));
823
          
824

    
825
          InputStream result6 = CNodeService.getInstance(request).get(session, seriesId);
826
          object2.reset();
827
          // check
828
          assertTrue(object2.available() > 0);
829
          assertTrue(result6.available() > 0);
830
          assertTrue(IOUtils.contentEquals(result6, object2));
831
          //test the get(pid) for v1
832
          InputStream result7 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, guid);
833
          //System.out.println("+++++++++++++++++++++"+IOUtils.toString(result7));
834
          object1.reset();
835
          // check
836
          assertTrue(object1.available() > 0);
837
          assertTrue(result7.available() > 0);
838
          assertTrue(IOUtils.contentEquals(result7, object1));
839
          
840
          InputStream result8 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, newPid);
841
          object2.reset();
842
          // check
843
          assertTrue(object2.available() > 0);
844
          assertTrue(result8.available() > 0);
845
          assertTrue(IOUtils.contentEquals(result8, object2));
846
          //test the get(sid) for v1
847
          try {
848
              InputStream result3 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, seriesId);
849
              fail("the get(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
850
          } catch (NotFound ee) {
851
              
852
          }
853
          
854
          SystemMetadata metadata1 = CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
855
          assertTrue(metadata1.getIdentifier().getValue().equals(newPid.getValue()));
856
          assertTrue(metadata1.getSeriesId().getValue().equals(seriesId.getValue()));
857
          describeResponse = CNodeService.getInstance(request).describe(session, seriesId);
858
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata1.getChecksum().getValue());
859
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata1.getFormatId().getValue());
860
          
861
          SystemMetadata metadata2 = CNodeService.getInstance(request).getSystemMetadata(session, guid);
862
          assertTrue(metadata2.getIdentifier().getValue().equals(guid.getValue()));
863
          assertTrue(metadata2.getSeriesId().getValue().equals(seriesId.getValue()));
864
          describeResponse = CNodeService.getInstance(request).describe(session, guid);
865
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata2.getChecksum().getValue());
866
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata2.getFormatId().getValue());
867
          
868
          SystemMetadata metadata3 = CNodeService.getInstance(request).getSystemMetadata(session, newPid);
869
          assertTrue(metadata3.getIdentifier().getValue().equals(newPid.getValue()));
870
          assertTrue(metadata3.getSeriesId().getValue().equals(seriesId.getValue()));
871
          describeResponse = CNodeService.getInstance(request).describe(session, newPid);
872
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata3.getChecksum().getValue());
873
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata3.getFormatId().getValue());
874
          
875
          //do another update with different series id
876
          Thread.sleep(1000);
877
          String sid2 = "sid."+System.nanoTime();
878
          Identifier seriesId2= new Identifier();
879
          seriesId2.setValue(sid2);
880
          System.out.println("the second sid is "+seriesId2.getValue());
881
          Identifier newPid2 = new Identifier();
882
          newPid2.setValue(generateDocumentId()+"2");
883
          System.out.println("the third pid is "+newPid2.getValue());
884
          InputStream object3 = new ByteArrayInputStream(str3.getBytes("UTF-8"));
885
          SystemMetadata sysmeta3 = createSystemMetadata(newPid2, session.getSubject(), object3);
886
          sysmeta3.setObsoletes(newPid);
887
          sysmeta3.setSeriesId(seriesId2);
888
          //CNodeService.getInstance(request).update(session, newPid, object3, newPid2, sysmeta3);
889
          CNodeService.getInstance(request).create(session, newPid2, object3, sysmeta3);
890
          //update the system metadata of the previous version 
891
          newSysMeta.setObsoletedBy(newPid2);
892
          CNodeService.getInstance(request).updateSystemMetadata(session, newPid, newSysMeta);
893
          
894
          InputStream result9 = CNodeService.getInstance(request).get(session, guid);
895
          // go back to beginning of original stream
896
          object1.reset();
897
          // check
898
          assertTrue(object1.available() > 0);
899
          assertTrue(result9.available() > 0);
900
          assertTrue(IOUtils.contentEquals(result9, object1));
901
          
902
          InputStream result10 = CNodeService.getInstance(request).get(session, newPid);
903
          // go back to beginning of original stream
904
          object2.reset();
905
          // check
906
          assertTrue(object2.available() > 0);
907
          assertTrue(result10.available() > 0);
908
          assertTrue(IOUtils.contentEquals(result10, object2));
909
          
910
          
911
          InputStream result11 = CNodeService.getInstance(request).get(session, newPid2);
912
          // go back to beginning of original stream
913
          object3.reset();
914
          // check
915
          assertTrue(object3.available() > 0);
916
          assertTrue(result11.available() > 0);
917
          assertTrue(IOUtils.contentEquals(result11, object3));
918
          
919
          InputStream result12 = CNodeService.getInstance(request).get(session, seriesId2);
920
          object3.reset();
921
          // check
922
          assertTrue(object3.available() > 0);
923
          assertTrue(result12.available() > 0);
924
          assertTrue(IOUtils.contentEquals(result12, object3));
925
          
926
          InputStream result16 = CNodeService.getInstance(request).get(session, seriesId);
927
          object2.reset();
928
          // check
929
          assertTrue(object2.available() > 0);
930
          assertTrue(result16.available() > 0);
931
          assertTrue(IOUtils.contentEquals(result16, object2));
932
         
933
          //test the get(pid) for v1
934
          InputStream result13 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, guid);
935
          object1.reset();
936
          // check
937
          assertTrue(object1.available() > 0);
938
          assertTrue(result13.available() > 0);
939
          assertTrue(IOUtils.contentEquals(result13, object1));
940
          
941
          InputStream result14 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, newPid);
942
          object2.reset();
943
          // check
944
          assertTrue(object2.available() > 0);
945
          assertTrue(result14.available() > 0);
946
          assertTrue(IOUtils.contentEquals(result14, object2));
947
          
948
          InputStream result15 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, newPid2);
949
          object3.reset();
950
          // check
951
          assertTrue(object3.available() > 0);
952
          assertTrue(result15.available() > 0);
953
          assertTrue(IOUtils.contentEquals(result15, object3));
954
          
955
          SystemMetadata metadata4 = CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
956
          assertTrue(metadata4.getIdentifier().getValue().equals(newPid.getValue()));
957
          assertTrue(metadata4.getSeriesId().getValue().equals(seriesId.getValue()));
958
          describeResponse = CNodeService.getInstance(request).describe(session, seriesId);
959
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata4.getChecksum().getValue());
960
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata4.getFormatId().getValue());
961
          
962
          SystemMetadata metadata5 = CNodeService.getInstance(request).getSystemMetadata(session, seriesId2);
963
          assertTrue(metadata5.getIdentifier().getValue().equals(newPid2.getValue()));
964
          assertTrue(metadata5.getSeriesId().getValue().equals(seriesId2.getValue()));
965
          describeResponse = CNodeService.getInstance(request).describe(session, seriesId2);
966
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata5.getChecksum().getValue());
967
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata5.getFormatId().getValue());
968
          
969
          SystemMetadata metadata6 = CNodeService.getInstance(request).getSystemMetadata(session, guid);
970
          assertTrue(metadata6.getIdentifier().getValue().equals(guid.getValue()));
971
          assertTrue(metadata6.getSeriesId().getValue().equals(seriesId.getValue()));
972
          describeResponse = CNodeService.getInstance(request).describe(session, guid);
973
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata6.getChecksum().getValue());
974
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata6.getFormatId().getValue());
975
          
976
          SystemMetadata metadata7 = CNodeService.getInstance(request).getSystemMetadata(session, newPid);
977
          assertTrue(metadata7.getIdentifier().getValue().equals(newPid.getValue()));
978
          assertTrue(metadata7.getSeriesId().getValue().equals(seriesId.getValue()));
979
          describeResponse = CNodeService.getInstance(request).describe(session, newPid);
980
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata7.getChecksum().getValue());
981
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata7.getFormatId().getValue());
982
          
983
          SystemMetadata metadata8 = CNodeService.getInstance(request).getSystemMetadata(session, newPid2);
984
          assertTrue(metadata8.getIdentifier().getValue().equals(newPid2.getValue()));
985
          assertTrue(metadata8.getSeriesId().getValue().equals(seriesId2.getValue()));
986
          describeResponse = CNodeService.getInstance(request).describe(session, newPid2);
987
          assertEquals(describeResponse.getDataONE_Checksum().getValue(), metadata8.getChecksum().getValue());
988
          assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), metadata8.getFormatId().getValue());
989
          
990
          
991
          
992
          System.out.println("here===========================");
993
          //test the get(sid) for v1
994
          try {
995
              InputStream result3 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, seriesId);
996
              fail("the get(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
997
          } catch (NotFound ee) {
998
              
999
          }
1000
          
1001
          //test the get(sid) for v1
1002
          try {
1003
              InputStream result3 = edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, seriesId2);
1004
              fail("the get(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
1005
          } catch (NotFound ee) {
1006
              
1007
          }
1008
          
1009
          //test to get non-existing id for v2
1010
          try {
1011
           // the pid should be null when we try to get a no-exist sid
1012
              Identifier non_exist_sid = new Identifier();
1013
              non_exist_sid.setValue("no-sid-exist-123qwe");
1014
              InputStream result3 = CNodeService.getInstance(request).get(session, non_exist_sid);
1015
              fail("the get(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
1016
          } catch (NotFound ee) {
1017
              
1018
          }
1019
          
1020
          try {
1021
              // the pid should be null when we try to get a no-exist sid
1022
                 Identifier non_exist_sid = new Identifier();
1023
                 non_exist_sid.setValue("no-sid-exist-123qwe");
1024
                 SystemMetadata result3 = CNodeService.getInstance(request).getSystemMetadata(session, non_exist_sid);
1025
                 fail("the getSystemMetadata(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
1026
          } catch (NotFound ee) {
1027
                 
1028
          }
1029
          
1030
          try {
1031
              // the pid should be null when we try to get a no-exist sid
1032
                 Identifier non_exist_sid = new Identifier();
1033
                 non_exist_sid.setValue("no-sid-exist-123qwe");
1034
                  CNodeService.getInstance(request).describe(session, non_exist_sid);
1035
                 fail("the describe(sid) methoud should throw a not found exception for the sid "+seriesId.getValue());
1036
             } catch (NotFound ee) {
1037
                 
1038
             }
1039
          
1040
          
1041
          //do another update with invalid series ids
1042
          Thread.sleep(1000);
1043
          Identifier newPid3 = new Identifier();
1044
          newPid3.setValue(generateDocumentId()+"3");
1045
          System.out.println("the third pid is "+newPid3.getValue());
1046
          InputStream object4 = new ByteArrayInputStream(str3.getBytes("UTF-8"));
1047
          SystemMetadata sysmeta4 = createSystemMetadata(newPid3, session.getSubject(), object4);
1048
          sysmeta4.setObsoletes(newPid2);
1049
          sysmeta4.setSeriesId(seriesId);
1050
          try {
1051
              CNodeService.getInstance(request).create(session, newPid3, object4, sysmeta4);
1052
              fail("we can't reach here since the sid is using an old one ");
1053
          } catch (InvalidSystemMetadata eee) {
1054
              
1055
          } 
1056
          
1057
          sysmeta4.setSeriesId(newPid3);
1058
          try {
1059
              CNodeService.getInstance(request).create(session, newPid3, object4, sysmeta4);
1060
              fail("we can't reach here since the sid is using the pid ");
1061
          } catch (InvalidSystemMetadata eee) {
1062
              
1063
          } 
1064
          
1065
          //test archive a series id by v1
1066
          try {
1067
              edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).archive(session, seriesId2);
1068
              fail("we can't reach here since the v1 archive method doesn't support the sid ");
1069
          } catch (NotFound nf2) {
1070
              
1071
          }
1072
          
1073
          // test delete a series id by v1
1074
          Session mnSession = getMNSession();
1075
          try {
1076
              edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).delete(mnSession, seriesId2);
1077
              fail("we can't reach here since the v1 delete method doesn't support the sid ");
1078
          } catch (NotFound nf2) {
1079
              
1080
          }
1081
          
1082
          // test archive a series id by v2
1083
          CNodeService.getInstance(request).archive(session, seriesId2);
1084
          SystemMetadata archived = CNodeService.getInstance(request).getSystemMetadata(session, seriesId2);
1085
          assertTrue(archived.getArchived());
1086
          archived = CNodeService.getInstance(request).getSystemMetadata(session, newPid2);
1087
          assertTrue(archived.getArchived());
1088
          
1089
          // test delete a series id by v2
1090
          CNodeService.getInstance(request).delete(mnSession, seriesId2);
1091
          try {
1092
              CNodeService.getInstance(request).get(session, seriesId2);
1093
              fail("we can't reach here since the series id was deleted ");
1094
          } catch (NotFound nf3) {
1095
              System.out.println("the message is ============="+nf3.getMessage());
1096
              //assertTrue(nf3.getMessage().indexOf("delete") >0);
1097
          }
1098
          
1099
          try {
1100
              CNodeService.getInstance(request).get(session, newPid2);
1101
              fail("we can't reach here since the series id was deleted ");
1102
          } catch (NotFound nf3) {
1103
              //System.out.println("the message is ============="+nf3.getMessage());
1104
              assertTrue(nf3.getMessage().indexOf("delete") >0);
1105
          }
1106
          
1107
          try {
1108
              edu.ucsb.nceas.metacat.dataone.v1.CNodeService.getInstance(request).get(session, newPid2);
1109
              fail("we can't reach here since the series id was deleted ");
1110
          } catch (NotFound nf3) {
1111
              System.out.println("the message is ============="+nf3.getMessage());
1112
              assertTrue(nf3.getMessage().indexOf("delete") >0);
1113
          }
1114
          
1115
          //archive seriesId
1116
          CNodeService.getInstance(request).archive(mnSession, seriesId);
1117
          archived = CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
1118
          assertTrue(archived.getArchived());
1119
          archived = CNodeService.getInstance(request).getSystemMetadata(session, newPid);
1120
          assertTrue(archived.getArchived());
1121
          
1122
          
1123
          //delete seriesId
1124
          CNodeService.getInstance(request).delete(mnSession, seriesId);
1125
          try {
1126
              CNodeService.getInstance(request).get(session, newPid);
1127
              fail("we can't reach here since the series id was deleted ");
1128
          } catch (NotFound nf3) {
1129
              //System.out.println("the message is ============="+nf3.getMessage());
1130
              assertTrue(nf3.getMessage().indexOf("delete") >0);
1131
          }
1132
          SystemMetadata meta = CNodeService.getInstance(request).getSystemMetadata(session, seriesId);
1133
          assertTrue(meta.getIdentifier().getValue().equals(guid.getValue()));
1134
          
1135
      } catch (Exception e) {
1136
          e.printStackTrace();
1137
          fail(e.getMessage());
1138
      }
1139
  }
1140
 
1141
  /**
1142
   * Test the listView methods.
1143
   * @throws Excpetion
1144
   */
1145
  public void testListViews() throws Exception {
1146
      OptionList list = CNodeService.getInstance(request).listViews();
1147
      assertTrue(list.sizeOptionList() >0);
1148
      List<String> names = list.getOptionList();
1149
      for(String name : names) {
1150
          System.out.println("It has the view named "+name);
1151
      }
1152
  }
1153
}
(1-1/8)