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-02-09 17:44:08 -0800 (Mon, 09 Feb 2015) $'
9
 * '$Revision: 9112 $'
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.SystemMetadata;
69
import org.dataone.service.util.Constants;
70

    
71
import edu.ucsb.nceas.metacat.dataone.CNodeService;
72

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
519
    } catch (NotImplemented e) {
520
  		fail("Could not get the object format list: " + e.getMessage());
521

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

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

    
557
    } catch (NotImplemented nie) {
558
    	fail("The getFormat() method has not been implemented: " + nie.getMessage());
559

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

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

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

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

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