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
 *
6
 *   '$Author: jones $'
7
 *     '$Date: 2010-02-03 17:58:12 -0900 (Wed, 03 Feb 2010) $'
8
 * '$Revision: 5211 $'
9
 *
10
 * This program is free software; you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation; either version 2 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, write to the Free Software
22
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23
 */
24

    
25
package edu.ucsb.nceas.metacattest;
26

    
27
import java.io.ByteArrayInputStream;
28
import java.io.InputStream;
29
import java.sql.SQLException;
30
import java.util.*;
31

    
32
import org.dataone.client.v2.itk.D1Client;
33
import org.dataone.service.types.v1.Identifier;
34
import org.dataone.service.types.v1.NodeType;
35
import org.dataone.service.types.v1.Session;
36
import org.dataone.service.types.v1.Subject;
37
import org.dataone.service.types.v2.Node;
38
import org.dataone.service.types.v2.NodeList;
39
import org.dataone.service.types.v2.SystemMetadata;
40

    
41
import edu.ucsb.nceas.MCTestCase;
42
import edu.ucsb.nceas.metacat.AccessionNumber;
43
import edu.ucsb.nceas.metacat.AccessionNumberException;
44
import edu.ucsb.nceas.metacat.IdentifierManager;
45
import edu.ucsb.nceas.metacat.McdbDocNotFoundException;
46
import edu.ucsb.nceas.metacat.client.MetacatAuthException;
47
import edu.ucsb.nceas.metacat.client.MetacatInaccessibleException;
48
import edu.ucsb.nceas.metacat.database.DBConnectionPool;
49
import edu.ucsb.nceas.metacat.dataone.CNodeService;
50
import edu.ucsb.nceas.metacat.dataone.D1NodeServiceTest;
51
import edu.ucsb.nceas.metacat.dataone.MNodeService;
52

    
53
import org.dataone.service.exceptions.InvalidSystemMetadata;
54
import org.dataone.service.exceptions.NotFound;
55
import org.dataone.service.exceptions.ServiceFailure;
56

    
57
public class IdentifierManagerTest extends D1NodeServiceTest {
58
    private String badGuid = "test:testIdThatDoesNotExist";
59
    
60
    public IdentifierManagerTest(String name) {
61
        super(name);
62
    }
63
    /**
64
     * Initialize the connection to metacat, and insert a document to be 
65
     * used for testing with a known docid.
66
     */
67
    public void setUp() {
68
        
69
        metacatConnectionNeeded = true;
70
        try {
71
            DBConnectionPool pool = DBConnectionPool.getInstance();
72
        } catch (SQLException e2) {
73
            fail(e2.getMessage());
74
        }
75
        
76
        try {
77
            super.setUp();
78
        } catch (Exception e1) {
79
            fail(e1.getMessage());
80
        }
81
    }
82
    
83
    /**
84
     * test getting a guid from the systemmetadata table
85
     */
86
    public void testGetGUID()
87
    {
88
        ph("testGetGUID");
89
        try
90
        {
91
            IdentifierManager im = IdentifierManager.getInstance();
92

    
93
            String docid = insertTestDocument();
94
            docid = docid.substring(0, docid.lastIndexOf("."));
95
            
96
            String gotGuid = im.getGUID(docid, 1);
97
            assertNotNull(gotGuid);
98
        }
99
        catch(Exception e)
100
        {
101
            fail("Unexpected exception in testGetGUID: " + e.getMessage());
102
        }
103
    }
104
    
105
    /**
106
     * test getting a list of all local ids
107
     */
108
    public void testGetAllLocalIds()
109
    {
110
        ph("testGetAllLocalIds");
111
        try
112
        {
113
            List l = IdentifierManager.getInstance().getAllLocalIds();
114
            for(int i=0; i<l.size(); i++)
115
            {
116
                System.out.println(l.get(i));
117
            }
118
            assertTrue(l.size() > 0);
119
        }
120
        catch(Exception e)
121
        {
122
            fail("Error in testGetAllLocalIds: " + e.getMessage());
123
        }
124
    }
125

    
126
    /** Test that IM instances can be created. */
127
    public void testGetInstance() {
128
        ph("testGetInstance");
129
        IdentifierManager im = IdentifierManager.getInstance();
130
        assertNotNull(im);
131
    }
132

    
133
    /** Test that known LocalId's can be looked up from GUIDs. */
134
    public void testGetLocalId() {
135
        ph("testGetLocalId");
136
        IdentifierManager im = IdentifierManager.getInstance();
137
        String docidWithRev = insertTestDocument();
138
        String docid = docidWithRev.substring(0, docidWithRev.lastIndexOf("."));
139
        String guid;
140
        String idReturned;
141
        try {
142
            guid = im.getGUID(docid, 1);
143
            idReturned = im.getLocalId(guid);
144
            assertEquals(docidWithRev, idReturned);
145
            
146
        } catch (McdbDocNotFoundException e) {
147
            fail(e.getMessage());
148
        } catch (SQLException e) {
149
            fail(e.getMessage());
150
        }
151
    }
152
    
153
    /** Test that unknown LocalId's return the proper exception. */
154
    public void testGetLocalIdNotFound() {
155
        ph("testGetLocalIdNotFound");
156
        IdentifierManager im = IdentifierManager.getInstance();
157
        String idReturned;
158
        try {
159
            idReturned = im.getLocalId(badGuid);
160
            fail("Failed: getLocalID() should have returned an document not " + 
161
                 "found exception but did not.");
162
        } catch (McdbDocNotFoundException e) {
163
            assertNotNull(e);
164
        } catch (SQLException e) {
165
            fail(e.getMessage());
166
        }
167
    }
168
    
169
    /** 
170
     * Test that an identifier is present in the system when it should
171
     *  be, and that it is not present when it shouldn't be. 
172
     */
173
    public void testIdentifierExists() {
174
        ph("testIdentifierExists");
175
        
176
        String goodGuid  = "";
177
        String accString = "";
178
        String docid     = "";
179
        int rev          = 0;
180
        
181
        try {
182
          IdentifierManager im = IdentifierManager.getInstance();
183
          accString = insertTestDocument();
184
          AccessionNumber accNumber = new AccessionNumber(accString, "NONE");
185
          docid = accNumber.getDocid();
186
          rev = new Integer(accNumber.getRev());
187
          goodGuid = im.getGUID(docid, rev);
188
          assertTrue(im.identifierExists(goodGuid));
189
          assertFalse(im.identifierExists(badGuid));
190
          
191
        } catch ( McdbDocNotFoundException dnfe ) {
192
          fail("The document " + docid + "couldn't be found. The error was: " +
193
               dnfe.getMessage());
194
          
195
        } catch ( AccessionNumberException ane ) {
196
          fail("The accession number could not be created for docid" +
197
               accString + ". The error was: " + ane.getMessage());
198
        
199
        } catch ( NumberFormatException nfe ) {
200
          fail("The revision number could not be created for docid" + 
201
               accString + ". The error was: " + nfe.getMessage());
202
          
203
           } catch ( SQLException sqle ) {
204
             fail("The accession number could not be created for docid" + 
205
                  accString + ". The error was: " + sqle.getMessage());
206

    
207
        }
208
    }
209
    
210
    /**
211
     * Test that we are able to create mappings from guids to localIds, and that
212
     * improperly formatted docids generate the proper exceptions.  This also tests
213
     * getLocalId() and getGUID()
214
     */
215
    public void testCreateMapping() {
216
       ph("testCreateMapping");
217
       try
218
       {
219
            IdentifierManager im = IdentifierManager.getInstance();
220
            String docid = "test." + new Date().getTime() + ".1";
221
            String guid = "guid:" + docid;
222
            im.createMapping(guid, docid);
223
            String guiddocid = docid.substring(0, docid.length() - 2);
224
            System.out.println("guiddocid: " + guiddocid);
225
            String guid2 = im.getGUID(guiddocid, 1);
226
            assertTrue(guid2.equals(guid));
227
            String docid2 = im.getLocalId(guid);
228
            assertTrue(docid.equals(docid2));
229
        } catch (McdbDocNotFoundException e) {
230
            e.printStackTrace();
231
            fail("createMapping failed to create proper localId from guid: " + e.getMessage());
232
        } catch (SQLException e) {
233
            fail(e.getMessage());
234
        }
235
    }
236
    
237
    
238
    /**
239
     * test the local id creation
240
     */
241
    public void testGenerateLocalId() {
242
      IdentifierManager im = IdentifierManager.getInstance();
243
      String localid = im.generateLocalId("mynewid." + new Date().getTime(), 1);
244
      System.out.println("localid: " + localid);
245
      assertTrue(localid != null);
246
    }
247
    
248
    /**
249
     * Test the method - getHeadPID for a speicified SID
250
     */
251
    public void testGetHeadPID() {
252
        
253
        try {
254
            //case-1  P1(S1) <-> P2(S1), S1 = P2 (Type 1)
255
            Session session = getTestSession();
256
            Identifier guid = new Identifier();
257
            guid.setValue(generateDocumentId());
258
            InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
259
            SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
260
            String sid1= "sid."+System.nanoTime();
261
            Identifier seriesId = new Identifier();
262
            seriesId.setValue(sid1);
263
            System.out.println("the first sid is "+seriesId.getValue());
264
            sysmeta.setSeriesId(seriesId);
265
            MNodeService.getInstance(request).create(session, guid, object, sysmeta);
266
            System.out.println("the first pid is "+guid.getValue());
267
            Identifier head = IdentifierManager.getInstance().getHeadPID(seriesId);
268
            System.out.println("the head 1 is "+head.getValue());
269
            assertTrue(head.getValue().equals(guid.getValue()));
270
            assertTrue(IdentifierManager.getInstance().systemMetadataSIDExists(seriesId.getValue()));
271
            assertTrue(!IdentifierManager.getInstance().systemMetadataPIDExists(seriesId.getValue()));
272
            assertTrue(IdentifierManager.getInstance().systemMetadataPIDExists(guid.getValue()));
273
            assertTrue(!IdentifierManager.getInstance().systemMetadataSIDExists(guid.getValue()));
274
            
275
            //do a update with the same series id
276
            Thread.sleep(1000);
277
            Identifier newPid = new Identifier();
278
            newPid.setValue(generateDocumentId()+"1");
279
            System.out.println("the second pid is "+newPid.getValue());
280
            SystemMetadata newSysMeta = createSystemMetadata(newPid, session.getSubject(), object);
281
            newSysMeta.setObsoletes(guid);
282
            newSysMeta.setSeriesId(seriesId);
283
            MNodeService.getInstance(request).update(session, guid, object, newPid, newSysMeta);
284
            
285
            //check
286
            SystemMetadata meta = CNodeService.getInstance(request).getSystemMetadata(session, guid);
287
            assertTrue(meta.getObsoletedBy().equals(newPid));
288
            assertTrue(meta.getObsoletes() == null);
289
            
290
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, newPid);
291
            assertTrue(meta.getObsoletedBy() == null);
292
            assertTrue(meta.getObsoletes().equals(guid));
293
            
294
            System.out.println("case 1: =======");
295
            // the pid should be the newPid when we try to get the sid1
296
            head = IdentifierManager.getInstance().getHeadPID(seriesId);
297
            assertTrue(head.getValue().equals(newPid.getValue()));
298
            
299
            
300
            // the pid should be null when we try to get a no-exist sid
301
            Identifier non_exist_sid = new Identifier();
302
            non_exist_sid.setValue("no-sid-exist-123qwe");
303
            assertTrue(IdentifierManager.getInstance().getHeadPID(non_exist_sid) == null);
304
            
305
            //case-2 P1(S1) ? P2(S1), S1 = P2
306
            // http://jenkins-1.dataone.org/documentation/unstable/API-Documentation-development/design/ContentMutability.html
307
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
308
            Identifier pid1_case2 = new Identifier();
309
            pid1_case2.setValue(generateDocumentId());
310
            String sid_case2_str= "sid."+System.nanoTime();
311
            Identifier sid_case2 = new Identifier();
312
            sid_case2.setValue(sid_case2_str);
313
            SystemMetadata sysmeta_case2 = createSystemMetadata(pid1_case2, session.getSubject(), object);
314
            sysmeta_case2.setSeriesId(sid_case2);
315
            CNodeService.getInstance(request).create(session, pid1_case2, object, sysmeta_case2);
316
            
317
            Thread.sleep(1000);
318
            Identifier pid2_case2 = new Identifier();
319
            pid2_case2.setValue(generateDocumentId());
320
            sysmeta = createSystemMetadata(pid2_case2, session.getSubject(), object);
321
            sysmeta.setSeriesId(sid_case2);
322
            try {
323
                CNodeService.getInstance(request).create(session, pid2_case2, object, sysmeta);
324
                fail("we shouldn't get here and an InvalidSystemMetacat exception should be thrown.");
325
            } catch (InvalidSystemMetadata e) {
326
                System.out.println("case 2======= Invalid system metadata to insert the second object");
327
                //check 
328
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid1_case2);
329
                assertTrue(meta.getObsoletedBy() == null);
330
                assertTrue(meta.getObsoletes() == null);
331
                // the pid should be the newPid when we try to get the sid1
332
                head = IdentifierManager.getInstance().getHeadPID(sid_case2);
333
                assertTrue(head.getValue().equals(pid1_case2.getValue()));
334
            }
335
            
336
            
337
            //case-3  P1(S1) <- P2(S1), S1 = P2, Discouraged, but not error condition, S1 = P2 (P1 and P2 are type 1 ends, not an ideal chain )
338
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
339
            Identifier pid1_case3 = new Identifier();
340
            pid1_case3.setValue(generateDocumentId());
341
            String sid_case3_str= "sid."+System.nanoTime();
342
            Identifier sid_case3 = new Identifier();
343
            sid_case3.setValue(sid_case3_str);
344
            SystemMetadata sysmeta_case3 = createSystemMetadata(pid1_case3, session.getSubject(), object);
345
            sysmeta_case3.setSeriesId(sid_case3);
346
            CNodeService.getInstance(request).create(session, pid1_case3, object, sysmeta_case3);
347
            
348
            Thread.sleep(1000);
349
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
350
            Identifier pid2_case3 = new Identifier();
351
            pid2_case3.setValue(generateDocumentId());
352
            SystemMetadata sysmeta2_case3 = createSystemMetadata(pid2_case3, session.getSubject(), object);
353
            sysmeta2_case3.setSeriesId(sid_case3);
354
            sysmeta2_case3.setObsoletes(pid1_case3);
355
            CNodeService.getInstance(request).create(session, pid2_case3, object, sysmeta2_case3);
356
            
357
            //check
358
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case3);
359
            assertTrue(meta.getObsoletedBy() == null);
360
            assertTrue(meta.getObsoletes() == null);
361
            
362
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case3);
363
            assertTrue(meta.getObsoletedBy() == null);
364
            assertTrue(meta.getObsoletes().equals(pid1_case3));
365

    
366
            System.out.println("case 3: =======");
367
            head = IdentifierManager.getInstance().getHeadPID(sid_case3);
368
            assertTrue(head.equals(pid2_case3));
369
            
370
            //case-4 P1(S1) <-> P2(S1) <-> P3(S2), S1 = P2 (Type 2), S2 = P3 (Type 1)
371
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
372
            Identifier pid1_case4 = new Identifier();
373
            pid1_case4.setValue(generateDocumentId());
374
            Identifier sid_case4 = new Identifier();
375
            sid_case4.setValue("sid."+System.nanoTime());
376
            SystemMetadata sysmeta_case4 = createSystemMetadata(pid1_case4, session.getSubject(), object);
377
            sysmeta_case4.setSeriesId(sid_case4);
378
            CNodeService.getInstance(request).create(session, pid1_case4, object, sysmeta_case4);
379
            
380
            Thread.sleep(1000);
381
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
382
            Identifier pid2_case4 = new Identifier();
383
            pid2_case4.setValue(generateDocumentId());
384
            SystemMetadata sysmeta2_case4 = createSystemMetadata(pid2_case4, session.getSubject(), object);
385
            sysmeta2_case4.setSeriesId(sid_case4);
386
            sysmeta2_case4.setObsoletes(pid1_case4);
387
            CNodeService.getInstance(request).create(session, pid2_case4, object, sysmeta2_case4);
388
            
389
            sysmeta_case4.setObsoletedBy(pid2_case4);
390
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case4, sysmeta_case4);
391
            
392
            Thread.sleep(1000);
393
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
394
            Identifier pid3_case4 = new Identifier();
395
            pid3_case4.setValue(generateDocumentId());
396
            Identifier sid2_case4 = new Identifier();
397
            sid2_case4.setValue("sid."+System.nanoTime());
398
            SystemMetadata sysmeta3_case4 = createSystemMetadata(pid3_case4, session.getSubject(), object);
399
            sysmeta3_case4.setSeriesId(sid2_case4);
400
            sysmeta3_case4.setObsoletes(pid2_case4);
401
            CNodeService.getInstance(request).create(session, pid3_case4, object, sysmeta3_case4);
402
            
403
            sysmeta2_case4.setObsoletedBy(pid3_case4);
404
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case4, sysmeta2_case4);
405
            
406
            //check
407
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case4);
408
            assertTrue(meta.getObsoletedBy().equals(pid2_case4));
409
            assertTrue(meta.getObsoletes() == null);
410
            
411
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case4);
412
            assertTrue(meta.getObsoletedBy().equals(pid3_case4));
413
            assertTrue(meta.getObsoletes().equals(pid1_case4));
414
            
415
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case4);
416
            assertTrue(meta.getObsoletedBy() == null);
417
            assertTrue(meta.getObsoletes().equals(pid2_case4));
418
            
419
            System.out.println("case 4: =======");
420
            head = IdentifierManager.getInstance().getHeadPID(sid_case4);
421
            assertTrue(head.equals(pid2_case4));
422
            head = IdentifierManager.getInstance().getHeadPID(sid2_case4);
423
            assertTrue(head.equals(pid3_case4));
424
            
425
            
426
            //case-5 P1(S1) <- P2(S1) <- P3(S2), S1 = P2 (P1 and P2 are type 1 ends, not an ideal chain), S2 = P3 (Type 1)
427
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
428
            Identifier pid1_case5 = new Identifier();
429
            pid1_case5.setValue(generateDocumentId());
430
            Identifier sid_case5 = new Identifier();
431
            sid_case5.setValue("sid."+System.nanoTime());
432
            SystemMetadata sysmeta1_case5 = createSystemMetadata(pid1_case5, session.getSubject(), object);
433
            sysmeta1_case5.setSeriesId(sid_case5);
434
            CNodeService.getInstance(request).create(session, pid1_case5, object, sysmeta1_case5);
435
            
436
            Thread.sleep(1000);
437
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
438
            Identifier pid2_case5 = new Identifier();
439
            pid2_case5.setValue(generateDocumentId());
440
            SystemMetadata sysmeta2_case5 = createSystemMetadata(pid2_case5, session.getSubject(), object);
441
            sysmeta2_case5.setSeriesId(sid_case5);
442
            sysmeta2_case5.setObsoletes(pid1_case5);
443
            CNodeService.getInstance(request).create(session, pid2_case5, object, sysmeta2_case5);
444
            
445
            Thread.sleep(1000);
446
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
447
            Identifier pid3_case5 = new Identifier();
448
            pid3_case5.setValue(generateDocumentId());
449
            Identifier sid2_case5 = new Identifier();
450
            sid2_case5.setValue("sid."+System.nanoTime());
451
            SystemMetadata sysmeta3_case5 = createSystemMetadata(pid3_case5, session.getSubject(), object);
452
            sysmeta3_case5.setSeriesId(sid2_case5);
453
            sysmeta3_case5.setObsoletes(pid2_case5);
454
            CNodeService.getInstance(request).create(session, pid3_case5, object, sysmeta3_case5);
455
            
456
          //check
457
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case5);
458
            assertTrue(meta.getObsoletedBy() == null);
459
            assertTrue(meta.getObsoletes() == null);
460
            
461
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case5);
462
            assertTrue(meta.getObsoletedBy() == null );
463
            assertTrue(meta.getObsoletes().equals(pid1_case5));
464
            
465
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case5);
466
            assertTrue(meta.getObsoletedBy() == null);
467
            assertTrue(meta.getObsoletes().equals(pid2_case5));
468
            
469
            System.out.println("case 5: =======");
470
            head = IdentifierManager.getInstance().getHeadPID(sid_case5);
471
            assertTrue(head.equals(pid2_case5));
472
            head = IdentifierManager.getInstance().getHeadPID(sid2_case5);
473
            assertTrue(head.equals(pid3_case5));
474
            
475
            
476
            //case-6 P1(S1) <-> P2(S1) <-> P3(), S1 = P2 (Type 2)
477
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
478
            Identifier pid1_case6 = new Identifier();
479
            pid1_case6.setValue(generateDocumentId());
480
            Identifier sid_case6 = new Identifier();
481
            sid_case6.setValue("sid."+System.nanoTime());
482
            SystemMetadata sysmeta_case6 = createSystemMetadata(pid1_case6, session.getSubject(), object);
483
            sysmeta_case6.setSeriesId(sid_case6);
484
            CNodeService.getInstance(request).create(session, pid1_case6, object, sysmeta_case6);
485
            
486
            Thread.sleep(1000);
487
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
488
            Identifier pid2_case6 = new Identifier();
489
            pid2_case6.setValue(generateDocumentId());
490
            SystemMetadata sysmeta2_case6 = createSystemMetadata(pid2_case6, session.getSubject(), object);
491
            sysmeta2_case6.setSeriesId(sid_case6);
492
            sysmeta2_case6.setObsoletes(pid1_case6);
493
            CNodeService.getInstance(request).create(session, pid2_case6, object, sysmeta2_case6);
494
            
495
            sysmeta_case6.setObsoletedBy(pid2_case6);
496
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case6, sysmeta_case6);
497
            
498
            Thread.sleep(1000);
499
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
500
            Identifier pid3_case6 = new Identifier();
501
            pid3_case6.setValue(generateDocumentId());
502
            SystemMetadata sysmeta3_case6 = createSystemMetadata(pid3_case6, session.getSubject(), object);
503
            sysmeta3_case6.setObsoletes(pid2_case6);
504
            CNodeService.getInstance(request).create(session, pid3_case6, object, sysmeta3_case6);
505
            
506
            sysmeta2_case6.setObsoletedBy(pid3_case6);
507
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case6, sysmeta2_case6);
508
            
509
            //check
510
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case6);
511
            assertTrue(meta.getObsoletedBy().equals(pid2_case6));
512
            assertTrue(meta.getObsoletes() == null);
513
            
514
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case6);
515
            assertTrue(meta.getObsoletedBy().equals(pid3_case6));
516
            assertTrue(meta.getObsoletes().equals(pid1_case6));
517
            
518
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case6);
519
            assertTrue(meta.getObsoletedBy() == null);
520
            assertTrue(meta.getObsoletes().equals(pid2_case6));
521
            
522
            System.out.println("case 6: =======");
523
            head = IdentifierManager.getInstance().getHeadPID(sid_case6);
524
            assertTrue(head.equals(pid2_case6));
525
            
526
            
527
            //case-7 P1(S1) <-> P2(S1) <-> P3() <-> P4(S2), S1 = P2 (Type 2), S2 = P4 (Type 1)
528
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
529
            Identifier pid1_case7 = new Identifier();
530
            pid1_case7.setValue(generateDocumentId());
531
            Identifier sid_case7 = new Identifier();
532
            sid_case7.setValue("sid."+System.nanoTime());
533
            SystemMetadata sysmeta_case7 = createSystemMetadata(pid1_case7, session.getSubject(), object);
534
            sysmeta_case7.setSeriesId(sid_case7);
535
            CNodeService.getInstance(request).create(session, pid1_case7, object, sysmeta_case7);
536
            
537
            Thread.sleep(1000);
538
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
539
            Identifier pid2_case7 = new Identifier();
540
            pid2_case7.setValue(generateDocumentId());
541
            SystemMetadata sysmeta2_case7 = createSystemMetadata(pid2_case7, session.getSubject(), object);
542
            sysmeta2_case7.setSeriesId(sid_case7);
543
            sysmeta2_case7.setObsoletes(pid1_case7);
544
            CNodeService.getInstance(request).create(session, pid2_case7, object, sysmeta2_case7);
545
            
546
            sysmeta_case7.setObsoletedBy(pid2_case7);
547
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case7, sysmeta_case7);
548
            
549
            Thread.sleep(1000);
550
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
551
            Identifier pid3_case7 = new Identifier();
552
            pid3_case7.setValue(generateDocumentId());
553
            SystemMetadata sysmeta3_case7 = createSystemMetadata(pid3_case7, session.getSubject(), object);
554
            sysmeta3_case7.setObsoletes(pid2_case7);
555
            CNodeService.getInstance(request).create(session, pid3_case7, object, sysmeta3_case7);
556
            
557
            sysmeta2_case7.setObsoletedBy(pid3_case7);
558
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case7, sysmeta2_case7);
559
            
560
            Thread.sleep(1000);
561
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
562
            Identifier pid4_case7 = new Identifier();
563
            pid4_case7.setValue(generateDocumentId());
564
            Identifier sid2_case7 = new Identifier();
565
            sid2_case7.setValue("sid."+System.nanoTime());
566
            SystemMetadata sysmeta4_case7 = createSystemMetadata(pid4_case7, session.getSubject(), object);
567
            sysmeta4_case7.setObsoletes(pid3_case7);
568
            sysmeta4_case7.setSeriesId(sid2_case7);
569
            CNodeService.getInstance(request).create(session, pid4_case7, object, sysmeta4_case7);
570
            
571
            sysmeta3_case7.setObsoletedBy(pid4_case7);
572
            CNodeService.getInstance(request).updateSystemMetadata(session, pid3_case7, sysmeta3_case7);
573
            
574
            //check
575
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case7);
576
            assertTrue(meta.getObsoletedBy().equals(pid2_case7));
577
            assertTrue(meta.getObsoletes() == null);
578
            
579
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case7);
580
            assertTrue(meta.getObsoletedBy().equals(pid3_case7));
581
            assertTrue(meta.getObsoletes().equals(pid1_case7));
582
            
583
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case7);
584
            assertTrue(meta.getObsoletedBy().equals(pid4_case7));
585
            assertTrue(meta.getObsoletes().equals(pid2_case7));
586
            
587
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case7);
588
            assertTrue(meta.getObsoletedBy() == null);
589
            assertTrue(meta.getObsoletes().equals(pid3_case7));
590
            
591
            System.out.println("case 7: =======");
592
            head = IdentifierManager.getInstance().getHeadPID(sid_case7);
593
            assertTrue(head.equals(pid2_case7));
594
            head = IdentifierManager.getInstance().getHeadPID(sid2_case7);
595
            assertTrue(head.equals(pid4_case7));
596
            
597
            
598
            //case-8  P1(S1) <-> P2(S1) -> ?? <- P4(S1), S1 = P4, (Type 1) (Error, but will happen)
599
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
600
            Identifier pid1_case8 = new Identifier();
601
            pid1_case8.setValue(generateDocumentId());
602
            Identifier sid_case8 = new Identifier();
603
            sid_case8.setValue("sid."+System.nanoTime());
604
            SystemMetadata sysmeta_case8 = createSystemMetadata(pid1_case8, session.getSubject(), object);
605
            sysmeta_case8.setSeriesId(sid_case8);
606
            CNodeService.getInstance(request).create(session, pid1_case8, object, sysmeta_case8);
607
            
608
            Thread.sleep(1000);
609
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
610
            Identifier pid2_case8 = new Identifier();
611
            pid2_case8.setValue(generateDocumentId());
612
            SystemMetadata sysmeta2_case8 = createSystemMetadata(pid2_case8, session.getSubject(), object);
613
            sysmeta2_case8.setSeriesId(sid_case8);
614
            sysmeta2_case8.setObsoletes(pid1_case8);
615
            CNodeService.getInstance(request).create(session, pid2_case8, object, sysmeta2_case8);
616
            
617
            sysmeta_case8.setObsoletedBy(pid2_case8);
618
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case8, sysmeta_case8);
619
            
620
            Thread.sleep(1000);
621
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
622
            Identifier pid3_case8 = new Identifier();
623
            pid3_case8.setValue(generateDocumentId());
624
            SystemMetadata sysmeta3_case8 = createSystemMetadata(pid3_case8, session.getSubject(), object);
625
            sysmeta3_case8.setObsoletes(pid2_case8);
626
            sysmeta3_case8.setSeriesId(sid_case8);
627
            CNodeService.getInstance(request).create(session, pid3_case8, object, sysmeta3_case8);
628
            
629
            sysmeta2_case8.setObsoletedBy(pid3_case8);
630
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case8, sysmeta2_case8);
631
            
632
            Thread.sleep(1000);
633
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
634
            Identifier pid4_case8 = new Identifier();
635
            pid4_case8.setValue(generateDocumentId());
636
            //Identifier sid2_case7 = new Identifier();
637
            //sid2_case7.setValue("sid."+System.nanoTime());
638
            SystemMetadata sysmeta4_case8 = createSystemMetadata(pid4_case8, session.getSubject(), object);
639
            sysmeta4_case8.setObsoletes(pid3_case8);
640
            sysmeta4_case8.setSeriesId(sid_case8);
641
            CNodeService.getInstance(request).create(session, pid4_case8, object, sysmeta4_case8);
642
            
643
            //delete pid3_case8 
644
            CNodeService.getInstance(request).delete(session, pid3_case8);
645
            try {
646
                CNodeService.getInstance(request).getSystemMetadata(session, pid3_case8);
647
                fail("The pid "+pid3_case8.getValue()+" should be deleted.");
648
            } catch (NotFound e) {
649
                //e.printStackTrace();
650
                assertTrue(true);
651
            }
652
            
653
            //check
654
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case8);
655
            assertTrue(meta.getObsoletedBy().equals(pid2_case8));
656
            assertTrue(meta.getObsoletes() == null);
657
            
658
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case8);
659
            assertTrue(meta.getObsoletedBy().equals(pid3_case8));
660
            assertTrue(meta.getObsoletes().equals(pid1_case8));
661
            
662
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case8);
663
            assertTrue(meta.getObsoletedBy() == null);
664
            assertTrue(meta.getObsoletes().equals(pid3_case8));
665
            
666
            System.out.println("case 8: =======");
667
            head = IdentifierManager.getInstance().getHeadPID(sid_case8);
668
            assertTrue(head.equals(pid4_case8));
669
            
670
            
671
            //case-9  P1(S1) <-> P2(S1) ?? <- P4(S1), S1 = P4 (P2 and P4 are type 1 ends, not an ideal chain)
672
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
673
            Identifier pid1_case9 = new Identifier();
674
            pid1_case9.setValue(generateDocumentId());
675
            Identifier sid_case9 = new Identifier();
676
            sid_case9.setValue("sid."+System.nanoTime());
677
            SystemMetadata sysmeta_case9 = createSystemMetadata(pid1_case9, session.getSubject(), object);
678
            sysmeta_case9.setSeriesId(sid_case9);
679
            CNodeService.getInstance(request).create(session, pid1_case9, object, sysmeta_case9);
680
            
681
            Thread.sleep(1000);
682
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
683
            Identifier pid2_case9 = new Identifier();
684
            pid2_case9.setValue(generateDocumentId());
685
            SystemMetadata sysmeta2_case9 = createSystemMetadata(pid2_case9, session.getSubject(), object);
686
            sysmeta2_case9.setSeriesId(sid_case9);
687
            sysmeta2_case9.setObsoletes(pid1_case9);
688
            CNodeService.getInstance(request).create(session, pid2_case9, object, sysmeta2_case9);
689
            
690
            sysmeta_case9.setObsoletedBy(pid2_case9);
691
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case9, sysmeta_case9);
692
            //check
693
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case9);
694
            assertTrue(meta.getObsoletedBy().equals(pid2_case9));
695
            
696
            Thread.sleep(1000);
697
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
698
            Identifier pid3_case9 = new Identifier();
699
            pid3_case9.setValue(generateDocumentId());
700
            SystemMetadata sysmeta3_case9 = createSystemMetadata(pid3_case9, session.getSubject(), object);
701
            sysmeta3_case9.setObsoletes(pid2_case9);
702
            sysmeta3_case9.setSeriesId(sid_case9);
703
            CNodeService.getInstance(request).create(session, pid3_case9, object, sysmeta3_case9);
704
            
705
            //sysmeta2_case8.setObsoletedBy(pid3_case8);
706
            //CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case8, sysmeta2_case8);
707
            
708
            Thread.sleep(1000);
709
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
710
            Identifier pid4_case9 = new Identifier();
711
            pid4_case9.setValue(generateDocumentId());
712
            //Identifier sid2_case7 = new Identifier();
713
            //sid2_case7.setValue("sid."+System.nanoTime());
714
            SystemMetadata sysmeta4_case9 = createSystemMetadata(pid4_case9, session.getSubject(), object);
715
            sysmeta4_case9.setObsoletes(pid3_case9);
716
            sysmeta4_case9.setSeriesId(sid_case9);
717
            CNodeService.getInstance(request).create(session, pid4_case9, object, sysmeta4_case9);
718
            
719
            //delete pid3_case8 
720
            CNodeService.getInstance(request).delete(session, pid3_case9);
721
            try {
722
                CNodeService.getInstance(request).getSystemMetadata(session, pid3_case9);
723
                fail("The pid "+pid3_case9.getValue()+" should be deleted.");
724
            } catch (NotFound e) {
725
                //e.printStackTrace();
726
                assertTrue(true);
727
            }
728
            
729
            //check
730
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case9);
731
            assertTrue(meta.getObsoletedBy().equals(pid2_case9));
732
            assertTrue(meta.getObsoletes() == null);
733
            
734
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case9);
735
            assertTrue(meta.getObsoletedBy() == null);
736
            assertTrue(meta.getObsoletes().equals(pid1_case9));
737
            
738
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case9);
739
            assertTrue(meta.getObsoletedBy() == null);
740
            assertTrue(meta.getObsoletes().equals(pid3_case9));
741
            
742
            System.out.println("case 9: =======");
743
            head = IdentifierManager.getInstance().getHeadPID(sid_case9);
744
            assertTrue(head.equals(pid4_case9));
745
            
746
            
747
            //case-10   P1(S1) <-> P2(S1) -> XX <- P4(S1), S1 = P4, (Type 1) 
748
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
749
            Identifier pid1_case10 = new Identifier();
750
            pid1_case10.setValue(generateDocumentId());
751
            Identifier sid_case10 = new Identifier();
752
            sid_case10.setValue("sid."+System.nanoTime());
753
            SystemMetadata sysmeta_case10 = createSystemMetadata(pid1_case10, session.getSubject(), object);
754
            sysmeta_case10.setSeriesId(sid_case10);
755
            CNodeService.getInstance(request).create(session, pid1_case10, object, sysmeta_case10);
756
            
757
            Thread.sleep(1000);
758
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
759
            Identifier pid2_case10 = new Identifier();
760
            pid2_case10.setValue(generateDocumentId());
761
            SystemMetadata sysmeta2_case10 = createSystemMetadata(pid2_case10, session.getSubject(), object);
762
            sysmeta2_case10.setSeriesId(sid_case10);
763
            sysmeta2_case10.setObsoletes(pid1_case10);
764
            CNodeService.getInstance(request).create(session, pid2_case10, object, sysmeta2_case10);
765
            
766
            sysmeta_case10.setObsoletedBy(pid2_case10);
767
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case10, sysmeta_case10);
768
            //check
769
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case10);
770
            assertTrue(meta.getObsoletedBy().equals(pid2_case10));
771
            
772
            Thread.sleep(1000);
773
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
774
            Identifier pid3_case10 = new Identifier();
775
            pid3_case10.setValue(generateDocumentId());
776
            SystemMetadata sysmeta3_case10 = createSystemMetadata(pid3_case10, session.getSubject(), object);
777
            sysmeta3_case10.setObsoletes(pid2_case10);
778
            sysmeta3_case10.setSeriesId(sid_case10);
779
            CNodeService.getInstance(request).create(session, pid3_case10, object, sysmeta3_case10);
780
            
781
            sysmeta2_case10.setObsoletedBy(pid3_case10);
782
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case10, sysmeta2_case10);
783
            
784
            Thread.sleep(1000);
785
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
786
            Identifier pid4_case10 = new Identifier();
787
            pid4_case10.setValue(generateDocumentId());
788
            //Identifier sid2_case7 = new Identifier();
789
            //sid2_case7.setValue("sid."+System.nanoTime());
790
            SystemMetadata sysmeta4_case10 = createSystemMetadata(pid4_case10, session.getSubject(), object);
791
            sysmeta4_case10.setObsoletes(pid3_case10);
792
            sysmeta4_case10.setSeriesId(sid_case10);
793
            CNodeService.getInstance(request).create(session, pid4_case10, object, sysmeta4_case10);
794
            
795
            //delete pid3_case10 
796
            CNodeService.getInstance(request).delete(session, pid3_case10);
797
            try {
798
                CNodeService.getInstance(request).getSystemMetadata(session, pid3_case10);
799
                fail("The pid "+pid3_case10.getValue()+" should be deleted.");
800
            } catch (NotFound e) {
801
                //e.printStackTrace();
802
                assertTrue(true);
803
            }
804
            
805
           //check
806
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case10);
807
            assertTrue(meta.getObsoletedBy().equals(pid2_case10));
808
            assertTrue(meta.getObsoletes() == null);
809
            
810
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case10);
811
            assertTrue(meta.getObsoletedBy().equals(pid3_case10));
812
            assertTrue(meta.getObsoletes().equals(pid1_case10));
813
            
814
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case10);
815
            assertTrue(meta.getObsoletedBy() == null);
816
            assertTrue(meta.getObsoletes().equals(pid3_case10));
817
            
818
            System.out.println("case 10: =======");
819
            head = IdentifierManager.getInstance().getHeadPID(sid_case10);
820
            assertTrue(head.equals(pid4_case10));
821
            
822
            
823
            //case-11   P1(S1) <-> P2(S1) <-> [archived:P3(S1)], S1 = P3, (Type 1)
824
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
825
            Identifier pid1_case11 = new Identifier();
826
            pid1_case11.setValue(generateDocumentId());
827
            Identifier sid_case11 = new Identifier();
828
            sid_case11.setValue("sid."+System.nanoTime());
829
            SystemMetadata sysmeta_case11 = createSystemMetadata(pid1_case11, session.getSubject(), object);
830
            sysmeta_case11.setSeriesId(sid_case11);
831
            CNodeService.getInstance(request).create(session, pid1_case11, object, sysmeta_case11);
832
            
833
            Thread.sleep(1000);
834
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
835
            Identifier pid2_case11 = new Identifier();
836
            pid2_case11.setValue(generateDocumentId());
837
            SystemMetadata sysmeta2_case11 = createSystemMetadata(pid2_case11, session.getSubject(), object);
838
            sysmeta2_case11.setSeriesId(sid_case11);
839
            sysmeta2_case11.setObsoletes(pid1_case11);
840
            CNodeService.getInstance(request).create(session, pid2_case11, object, sysmeta2_case11);
841
            
842
            sysmeta_case11.setObsoletedBy(pid2_case11);
843
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case11, sysmeta_case11);
844
            //check
845
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case11);
846
            assertTrue(meta.getObsoletedBy().equals(pid2_case11));
847
            
848
            Thread.sleep(1000);
849
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
850
            Identifier pid3_case11 = new Identifier();
851
            pid3_case11.setValue(generateDocumentId());
852
            SystemMetadata sysmeta3_case11 = createSystemMetadata(pid3_case11, session.getSubject(), object);
853
            sysmeta3_case11.setObsoletes(pid2_case11);
854
            sysmeta3_case11.setSeriesId(sid_case11);
855
            CNodeService.getInstance(request).create(session, pid3_case11, object, sysmeta3_case11);
856
            
857
            sysmeta2_case11.setObsoletedBy(pid3_case11);
858
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case11, sysmeta2_case11);
859
            
860
            //archive pid3_case11 
861
            CNodeService.getInstance(request).archive(session, pid3_case11);
862
            
863
            //check
864
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case11);
865
            assertTrue(meta.getObsoletedBy().equals(pid2_case11));
866
            assertTrue(meta.getObsoletes() == null);
867
            
868
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case11);
869
            assertTrue(meta.getObsoletedBy().equals(pid3_case11));
870
            assertTrue(meta.getObsoletes().equals(pid1_case11));
871
            
872
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case11);
873
            assertTrue(meta.getArchived());
874
            assertTrue(meta.getObsoletedBy() == null);
875
            assertTrue(meta.getObsoletes().equals(pid2_case11));
876
            
877
            System.out.println("case 11: =======");
878
            head = IdentifierManager.getInstance().getHeadPID(sid_case11);
879
            assertTrue(head.equals(pid3_case11));
880
            
881
            
882
            //case-12   P1(S1) <-> P2(S1) -> ??, S1 = P2, (Type 2) (Error, but will happen)
883
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
884
            Identifier pid1_case12 = new Identifier();
885
            pid1_case12.setValue(generateDocumentId());
886
            Identifier sid_case12 = new Identifier();
887
            sid_case12.setValue("sid."+System.nanoTime());
888
            SystemMetadata sysmeta_case12 = createSystemMetadata(pid1_case12, session.getSubject(), object);
889
            sysmeta_case12.setSeriesId(sid_case12);
890
            CNodeService.getInstance(request).create(session, pid1_case12, object, sysmeta_case12);
891
            
892
            Thread.sleep(1000);
893
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
894
            Identifier pid2_case12 = new Identifier();
895
            pid2_case12.setValue(generateDocumentId());
896
            SystemMetadata sysmeta2_case12 = createSystemMetadata(pid2_case12, session.getSubject(), object);
897
            sysmeta2_case12.setSeriesId(sid_case12);
898
            sysmeta2_case12.setObsoletes(pid1_case12);
899
            CNodeService.getInstance(request).create(session, pid2_case12, object, sysmeta2_case12);
900
            
901
            sysmeta_case12.setObsoletedBy(pid2_case12);
902
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case12, sysmeta_case12);
903
            //check
904
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case12);
905
            assertTrue(meta.getObsoletedBy().equals(pid2_case12));
906
            
907
            Thread.sleep(1000);
908
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
909
            Identifier pid3_case12 = new Identifier();
910
            pid3_case12.setValue(generateDocumentId());
911
            SystemMetadata sysmeta3_case12 = createSystemMetadata(pid3_case12, session.getSubject(), object);
912
            sysmeta3_case12.setObsoletes(pid2_case12);
913
            sysmeta3_case12.setSeriesId(sid_case12);
914
            CNodeService.getInstance(request).create(session, pid3_case12, object, sysmeta3_case12);
915
            
916
            sysmeta2_case12.setObsoletedBy(pid3_case12);
917
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case12, sysmeta2_case12);
918
            
919
            //archive pid3_case12 
920
            CNodeService.getInstance(request).delete(session, pid3_case12);
921
            try {
922
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case12);
923
                fail("The pid "+pid3_case12.getValue()+" should be deleted.");
924
            } catch (NotFound ee) {
925
                assertTrue(true);
926
            }
927
            
928
            //check
929
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case12);
930
            assertTrue(meta.getObsoletedBy().equals(pid2_case12));
931
            assertTrue(meta.getObsoletes() == null);
932
            
933
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case12);
934
            assertTrue(meta.getObsoletedBy().equals(pid3_case12));
935
            assertTrue(meta.getObsoletes().equals(pid1_case12));
936
            
937
            System.out.println("case 12: =======");
938
            head = IdentifierManager.getInstance().getHeadPID(sid_case12);
939
            assertTrue(head.equals(pid2_case12));
940
            
941
            
942
            
943
            //case-13   P1(S1) <- P2(S1) -> ??, S1 = P2 (P1 is a type 1 end and P2 is a type 2 end, not an ideal chain)
944
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
945
            Identifier pid1_case13 = new Identifier();
946
            pid1_case13.setValue(generateDocumentId());
947
            Identifier sid_case13 = new Identifier();
948
            sid_case13.setValue("sid."+System.nanoTime());
949
            SystemMetadata sysmeta_case13 = createSystemMetadata(pid1_case13, session.getSubject(), object);
950
            sysmeta_case13.setSeriesId(sid_case13);
951
            CNodeService.getInstance(request).create(session, pid1_case13, object, sysmeta_case13);
952
            
953
            Thread.sleep(1000);
954
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
955
            Identifier pid2_case13 = new Identifier();
956
            pid2_case13.setValue(generateDocumentId());
957
            Thread.sleep(1000);
958
            Identifier pid3_case13 = new Identifier();
959
            pid3_case13.setValue(generateDocumentId());
960
            SystemMetadata sysmeta2_case13 = createSystemMetadata(pid2_case13, session.getSubject(), object);
961
            sysmeta2_case13.setSeriesId(sid_case13);
962
            sysmeta2_case13.setObsoletes(pid1_case13);
963
            sysmeta2_case13.setObsoletedBy(pid3_case13);
964
            CNodeService.getInstance(request).create(session, pid2_case13, object, sysmeta2_case13);
965
            
966
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case13);
967
            assertTrue(meta.getObsoletedBy().equals(pid3_case13));
968
            assertTrue(meta.getObsoletes().equals(pid1_case13));
969
            
970
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid1_case13);
971
            assertTrue(meta.getObsoletedBy() == null);
972
            assertTrue(meta.getObsoletes() == null);
973
            
974
            System.out.println("case 13: =======");
975
            head = IdentifierManager.getInstance().getHeadPID(sid_case13);
976
            assertTrue(head.equals(pid2_case13));
977
            
978
            
979
            
980
            //case-14   P1(S1) <- P2(S1) -> P3(S2), S1 = P2 (P1 is a type one end and P2 is a type 2 end, not an ideal chain)
981
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
982
            Identifier pid1_case14 = new Identifier();
983
            pid1_case14.setValue(generateDocumentId());
984
            Identifier sid_case14 = new Identifier();
985
            sid_case14.setValue("sid."+System.nanoTime());
986
            SystemMetadata sysmeta_case14 = createSystemMetadata(pid1_case14, session.getSubject(), object);
987
            sysmeta_case14.setSeriesId(sid_case14);
988
            CNodeService.getInstance(request).create(session, pid1_case14, object, sysmeta_case14);
989
            
990
            Thread.sleep(1000);
991
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
992
            Identifier pid2_case14 = new Identifier();
993
            pid2_case14.setValue(generateDocumentId());
994
            SystemMetadata sysmeta2_case14 = createSystemMetadata(pid2_case14, session.getSubject(), object);
995
            sysmeta2_case14.setSeriesId(sid_case14);
996
            sysmeta2_case14.setObsoletes(pid1_case14);
997
            CNodeService.getInstance(request).create(session, pid2_case14, object, sysmeta2_case14);
998

    
999
            Thread.sleep(1000);
1000
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1001
            Identifier pid3_case14 = new Identifier();
1002
            pid3_case14.setValue(generateDocumentId());
1003
            Identifier sid2_case14 = new Identifier();
1004
            sid2_case14.setValue("sid."+System.nanoTime());
1005
            SystemMetadata sysmeta3_case14 = createSystemMetadata(pid3_case14, session.getSubject(), object);
1006
            sysmeta3_case14.setSeriesId(sid2_case14);
1007
            CNodeService.getInstance(request).create(session, pid3_case14, object, sysmeta3_case14);
1008
            
1009
            sysmeta2_case14.setObsoletedBy(pid3_case14);
1010
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case14, sysmeta2_case14);
1011
            
1012
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case14);
1013
            assertTrue(meta.getObsoletedBy().equals(pid3_case14));
1014
            assertTrue(meta.getObsoletes().equals(pid1_case14));
1015
            
1016
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid1_case14);
1017
            assertTrue(meta.getObsoletedBy() == null);
1018
            assertTrue(meta.getObsoletes() == null);
1019
            
1020
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case14);
1021
            assertTrue(meta.getObsoletedBy() == null);
1022
            assertTrue(meta.getObsoletes() == null);
1023
            
1024
            System.out.println("case 14: =======");
1025
            head = IdentifierManager.getInstance().getHeadPID(sid_case14);
1026
            assertTrue(head.equals(pid2_case14));
1027
            head = IdentifierManager.getInstance().getHeadPID(sid2_case14);
1028
            assertTrue(head.equals(pid3_case14));
1029
            
1030
            
1031
            //case-15    P1(S1) <-> P2(S1) ?? <- P4(S1) <-> P5(S2), S1 = P4 (P2 is a type 1 end and P4 is a type 2 end, not an ideal chain)
1032
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1033
            Identifier pid1_case15 = new Identifier();
1034
            pid1_case15.setValue(generateDocumentId());
1035
            Identifier sid_case15 = new Identifier();
1036
            sid_case15.setValue("sid."+System.nanoTime());
1037
            SystemMetadata sysmeta_case15 = createSystemMetadata(pid1_case15, session.getSubject(), object);
1038
            sysmeta_case15.setSeriesId(sid_case15);
1039
            CNodeService.getInstance(request).create(session, pid1_case15, object, sysmeta_case15);
1040
            
1041
            Thread.sleep(1000);
1042
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1043
            Identifier pid2_case15 = new Identifier();
1044
            pid2_case15.setValue(generateDocumentId());
1045
            SystemMetadata sysmeta2_case15 = createSystemMetadata(pid2_case15, session.getSubject(), object);
1046
            sysmeta2_case15.setSeriesId(sid_case15);
1047
            sysmeta2_case15.setObsoletes(pid1_case15);
1048
            CNodeService.getInstance(request).create(session, pid2_case15, object, sysmeta2_case15);
1049

    
1050
            sysmeta_case15.setObsoletedBy(pid2_case15);
1051
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case15, sysmeta_case15);
1052
            //check
1053
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case15);
1054
            assertTrue(meta.getObsoletedBy().equals(pid2_case15));
1055
            
1056
            Thread.sleep(1000);
1057
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1058
            Identifier pid3_case15 = new Identifier();
1059
            pid3_case15.setValue(generateDocumentId());
1060
            SystemMetadata sysmeta3_case15 = createSystemMetadata(pid3_case15, session.getSubject(), object);
1061
            sysmeta3_case15.setSeriesId(sid_case15);
1062
            sysmeta3_case15.setObsoletes(pid2_case15);
1063
            CNodeService.getInstance(request).create(session, pid3_case15, object, sysmeta3_case15);
1064
            
1065
            Thread.sleep(1000);
1066
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1067
            Identifier pid4_case15 = new Identifier();
1068
            pid4_case15.setValue(generateDocumentId());
1069
            SystemMetadata sysmeta4_case15 = createSystemMetadata(pid4_case15, session.getSubject(), object);
1070
            sysmeta4_case15.setSeriesId(sid_case15);
1071
            sysmeta4_case15.setObsoletes(pid3_case15);
1072
            CNodeService.getInstance(request).create(session, pid4_case15, object, sysmeta4_case15);
1073
            
1074
            Thread.sleep(1000);
1075
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1076
            Identifier pid5_case15 = new Identifier();
1077
            pid5_case15.setValue(generateDocumentId());
1078
            Identifier sid2_case15 = new Identifier();
1079
            sid2_case15.setValue("sid."+System.nanoTime());
1080
            SystemMetadata sysmeta5_case15 = createSystemMetadata(pid5_case15, session.getSubject(), object);
1081
            sysmeta5_case15.setSeriesId(sid2_case15);
1082
            sysmeta5_case15.setObsoletes(pid4_case15);
1083
            CNodeService.getInstance(request).create(session, pid5_case15, object, sysmeta5_case15);
1084
            
1085
            sysmeta4_case15.setObsoletedBy(pid5_case15);
1086
            CNodeService.getInstance(request).updateSystemMetadata(session, pid4_case15, sysmeta4_case15);
1087
            
1088
            CNodeService.getInstance(request).delete(session, pid3_case15);
1089
            try {
1090
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case15);
1091
                fail("The pid "+pid3_case15.getValue()+" should be deleted.");
1092
            } catch (NotFound ee) {
1093
                assertTrue(true);
1094
            }
1095
            //check
1096
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case15);
1097
            assertTrue(meta.getObsoletedBy().equals(pid2_case15));
1098
            assertTrue(meta.getObsoletes() == null);
1099
            
1100
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case15);
1101
            assertTrue(meta.getObsoletedBy() == null);
1102
            assertTrue(meta.getObsoletes().equals(pid1_case15));
1103
            
1104
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case15);
1105
            assertTrue(meta.getObsoletedBy().equals(pid5_case15));
1106
            assertTrue(meta.getObsoletes().equals(pid3_case15));
1107
            
1108
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid5_case15);
1109
            assertTrue(meta.getObsoletedBy() == null);
1110
            assertTrue(meta.getObsoletes().equals(pid4_case15));
1111
            
1112
            System.out.println("case 15: =======");
1113
            head = IdentifierManager.getInstance().getHeadPID(sid_case15);
1114
            assertTrue(head.equals(pid4_case15));
1115
            head = IdentifierManager.getInstance().getHeadPID(sid2_case15);
1116
            assertTrue(head.equals(pid5_case15));
1117
            
1118
            
1119
            
1120
            
1121
          //case-16   P1(S1) <- P2(S1) -> ?? <-P4(S2) S1 = P2 (P1 is a type 1 end and P2 is a type 2 ends, not an ideal chain), S2=P4 (rule1)
1122
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1123
            Identifier pid1_case16 = new Identifier();
1124
            pid1_case16.setValue(generateDocumentId());
1125
            Identifier sid_case16 = new Identifier();
1126
            sid_case16.setValue("sid."+System.nanoTime());
1127
            SystemMetadata sysmeta_case16 = createSystemMetadata(pid1_case16, session.getSubject(), object);
1128
            sysmeta_case16.setSeriesId(sid_case16);
1129
            CNodeService.getInstance(request).create(session, pid1_case16, object, sysmeta_case16);
1130
            
1131
            Thread.sleep(1000);
1132
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1133
            Identifier pid2_case16 = new Identifier();
1134
            pid2_case16.setValue(generateDocumentId());
1135
            SystemMetadata sysmeta2_case16 = createSystemMetadata(pid2_case16, session.getSubject(), object);
1136
            sysmeta2_case16.setSeriesId(sid_case16);
1137
            sysmeta2_case16.setObsoletes(pid1_case16);
1138
            CNodeService.getInstance(request).create(session, pid2_case16, object, sysmeta2_case16);
1139
   
1140
            Thread.sleep(1000);
1141
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1142
            Identifier pid3_case16 = new Identifier();
1143
            pid3_case16.setValue(generateDocumentId());
1144
            SystemMetadata sysmeta3_case16 = createSystemMetadata(pid3_case16, session.getSubject(), object);
1145
            sysmeta3_case16.setSeriesId(sid_case16);
1146
            sysmeta3_case16.setObsoletes(pid2_case16);
1147
            CNodeService.getInstance(request).create(session, pid3_case16, object, sysmeta3_case16);
1148
            
1149
            sysmeta2_case16.setObsoletedBy(pid3_case16);
1150
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case16, sysmeta2_case16);
1151
            
1152
            Thread.sleep(1000);
1153
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1154
            Identifier pid4_case16 = new Identifier();
1155
            pid4_case16.setValue(generateDocumentId());
1156
            Identifier sid2_case16 = new Identifier();
1157
            sid2_case16.setValue("sid."+System.nanoTime());
1158
            SystemMetadata sysmeta4_case16 = createSystemMetadata(pid4_case16, session.getSubject(), object);
1159
            sysmeta4_case16.setSeriesId(sid2_case16);
1160
            sysmeta4_case16.setObsoletes(pid3_case16);
1161
            CNodeService.getInstance(request).create(session, pid4_case16, object, sysmeta4_case16);
1162
            
1163
            CNodeService.getInstance(request).delete(session, pid3_case16);
1164
            try {
1165
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case16);
1166
                fail("The pid "+pid3_case16.getValue()+" should be deleted.");
1167
            } catch (NotFound ee) {
1168
                assertTrue(true);
1169
            }
1170
            //check
1171
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case16);
1172
            assertTrue(meta.getObsoletedBy() == null);
1173
            assertTrue(meta.getObsoletes() == null);
1174
            
1175
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case16);
1176
            assertTrue(meta.getObsoletedBy().equals(pid3_case16));
1177
            assertTrue(meta.getObsoletes().equals(pid1_case16));
1178
            
1179
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case16);
1180
            assertTrue(meta.getObsoletedBy() == null);
1181
            assertTrue(meta.getObsoletes().equals(pid3_case16));
1182
            
1183
            System.out.println("case 16: =======");
1184
            head = IdentifierManager.getInstance().getHeadPID(sid_case16);
1185
            assertTrue(head.equals(pid2_case16));
1186
            head = IdentifierManager.getInstance().getHeadPID(sid2_case16);
1187
            assertTrue(head.equals(pid4_case16));
1188
            
1189
            
1190
          //case-17   P1(S1) <- P2(S1) -> ?? <-P4(S1) S1 = P4 (P1 and P4 are type 1 ends, not an ideal chain)
1191
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1192
            Identifier pid1_case17 = new Identifier();
1193
            pid1_case17.setValue(generateDocumentId());
1194
            Identifier sid_case17 = new Identifier();
1195
            sid_case17.setValue("sid."+System.nanoTime());
1196
            SystemMetadata sysmeta_case17 = createSystemMetadata(pid1_case17, session.getSubject(), object);
1197
            sysmeta_case17.setSeriesId(sid_case17);
1198
            CNodeService.getInstance(request).create(session, pid1_case17, object, sysmeta_case17);
1199
            
1200
            Thread.sleep(1000);
1201
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1202
            Identifier pid2_case17 = new Identifier();
1203
            pid2_case17.setValue(generateDocumentId());
1204
            SystemMetadata sysmeta2_case17 = createSystemMetadata(pid2_case17, session.getSubject(), object);
1205
            sysmeta2_case17.setSeriesId(sid_case17);
1206
            sysmeta2_case17.setObsoletes(pid1_case17);
1207
            CNodeService.getInstance(request).create(session, pid2_case17, object, sysmeta2_case17);
1208
   
1209
            Thread.sleep(1000);
1210
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1211
            Identifier pid3_case17 = new Identifier();
1212
            pid3_case17.setValue(generateDocumentId());
1213
            SystemMetadata sysmeta3_case17 = createSystemMetadata(pid3_case17, session.getSubject(), object);
1214
            sysmeta3_case17.setSeriesId(sid_case17);
1215
            sysmeta3_case17.setObsoletes(pid2_case17);
1216
            CNodeService.getInstance(request).create(session, pid3_case17, object, sysmeta3_case17);
1217
            
1218
            sysmeta2_case17.setObsoletedBy(pid3_case17);
1219
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case17, sysmeta2_case17);
1220
            
1221
            Thread.sleep(1000);
1222
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1223
            Identifier pid4_case17 = new Identifier();
1224
            pid4_case17.setValue(generateDocumentId());
1225
            SystemMetadata sysmeta4_case17 = createSystemMetadata(pid4_case17, session.getSubject(), object);
1226
            sysmeta4_case17.setSeriesId(sid_case17);
1227
            sysmeta4_case17.setObsoletes(pid3_case17);
1228
            CNodeService.getInstance(request).create(session, pid4_case17, object, sysmeta4_case17);
1229
            
1230
            CNodeService.getInstance(request).delete(session, pid3_case17);
1231
            try {
1232
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case17);
1233
                fail("The pid "+pid3_case17.getValue()+" should be deleted.");
1234
            } catch (NotFound ee) {
1235
                assertTrue(true);
1236
            }
1237
            //check
1238
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case17);
1239
            assertTrue(meta.getObsoletedBy() == null);
1240
            assertTrue(meta.getObsoletes() == null);
1241
            
1242
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case17);
1243
            assertTrue(meta.getObsoletedBy().equals(pid3_case17));
1244
            assertTrue(meta.getObsoletes().equals(pid1_case17));
1245
            
1246
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case17);
1247
            assertTrue(meta.getObsoletedBy() == null);
1248
            assertTrue(meta.getObsoletes().equals(pid3_case17));
1249
            
1250
            System.out.println("case 17: =======");
1251
            head = IdentifierManager.getInstance().getHeadPID(sid_case17);
1252
            assertTrue(head.equals(pid4_case17));
1253
           
1254
            
1255
            
1256
            //case-18    P1(S1) <->P2(S1) -> ?? ???<-P5(S1) S1 = P5 (P2 is a type 2 end and P4 is a type 1 end, not an ideal chain)
1257
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1258
            Identifier pid1_case18 = new Identifier();
1259
            pid1_case18.setValue(generateDocumentId());
1260
            Identifier sid_case18 = new Identifier();
1261
            sid_case18.setValue("sid."+System.nanoTime());
1262
            SystemMetadata sysmeta_case18 = createSystemMetadata(pid1_case18, session.getSubject(), object);
1263
            sysmeta_case18.setSeriesId(sid_case18);
1264
            CNodeService.getInstance(request).create(session, pid1_case18, object, sysmeta_case18);
1265
            
1266
            Thread.sleep(1000);
1267
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1268
            Identifier pid2_case18 = new Identifier();
1269
            pid2_case18.setValue(generateDocumentId());
1270
            SystemMetadata sysmeta2_case18 = createSystemMetadata(pid2_case18, session.getSubject(), object);
1271
            sysmeta2_case18.setSeriesId(sid_case18);
1272
            sysmeta2_case18.setObsoletes(pid1_case18);
1273
            CNodeService.getInstance(request).create(session, pid2_case18, object, sysmeta2_case18);
1274

    
1275
            sysmeta_case18.setObsoletedBy(pid2_case18);
1276
            CNodeService.getInstance(request).updateSystemMetadata(session, pid1_case18, sysmeta_case18);
1277
                 
1278
            Thread.sleep(1000);
1279
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1280
            Identifier pid3_case18 = new Identifier();
1281
            pid3_case18.setValue(generateDocumentId());
1282
            SystemMetadata sysmeta3_case18 = createSystemMetadata(pid3_case18, session.getSubject(), object);
1283
            sysmeta3_case18.setSeriesId(sid_case18);
1284
            sysmeta3_case18.setObsoletes(pid2_case18);
1285
            CNodeService.getInstance(request).create(session, pid3_case18, object, sysmeta3_case18);
1286
            
1287
            sysmeta2_case18.setObsoletedBy(pid3_case18);
1288
            CNodeService.getInstance(request).updateSystemMetadata(session, pid2_case18, sysmeta2_case18);
1289
            
1290
            Thread.sleep(1000);
1291
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1292
            Identifier pid4_case18 = new Identifier();
1293
            pid4_case18.setValue(generateDocumentId());
1294
            SystemMetadata sysmeta4_case18 = createSystemMetadata(pid4_case18, session.getSubject(), object);
1295
            sysmeta4_case18.setSeriesId(sid_case18);
1296
            sysmeta4_case18.setObsoletes(pid3_case18);
1297
            CNodeService.getInstance(request).create(session, pid4_case18, object, sysmeta4_case18);
1298
            
1299
            Thread.sleep(1000);
1300
            object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1301
            Identifier pid5_case18 = new Identifier();
1302
            pid5_case18.setValue(generateDocumentId());
1303
            SystemMetadata sysmeta5_case18 = createSystemMetadata(pid5_case18, session.getSubject(), object);
1304
            sysmeta5_case18.setSeriesId(sid_case18);
1305
            sysmeta5_case18.setObsoletes(pid4_case18);
1306
            CNodeService.getInstance(request).create(session, pid5_case18, object, sysmeta5_case18);
1307
            
1308
            sysmeta4_case18.setObsoletedBy(pid5_case18);
1309
            CNodeService.getInstance(request).updateSystemMetadata(session, pid4_case18, sysmeta4_case18);
1310
            
1311
            CNodeService.getInstance(request).delete(session, pid3_case18);
1312
            try {
1313
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid3_case18);
1314
                fail("The pid "+pid3_case18.getValue()+" should be deleted.");
1315
            } catch (NotFound ee) {
1316
                assertTrue(true);
1317
            }
1318
            
1319
            CNodeService.getInstance(request).delete(session, pid4_case18);
1320
            try {
1321
                meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid4_case18);
1322
                fail("The pid "+pid4_case18.getValue()+" should be deleted.");
1323
            } catch (NotFound ee) {
1324
                assertTrue(true);
1325
            }
1326
            //check
1327
            meta = CNodeService.getInstance(request).getSystemMetadata(session, pid1_case18);
1328
            assertTrue(meta.getObsoletedBy().equals(pid2_case18));
1329
            assertTrue(meta.getObsoletes() == null);
1330
            
1331
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid2_case18);
1332
            assertTrue(meta.getObsoletedBy().equals(pid3_case18));
1333
            assertTrue(meta.getObsoletes().equals(pid1_case18));
1334
            
1335
            meta =  CNodeService.getInstance(request).getSystemMetadata(session, pid5_case18);
1336
            assertTrue(meta.getObsoletedBy() == null);
1337
            assertTrue(meta.getObsoletes().equals(pid4_case18));
1338
            
1339
            System.out.println("case 18: =======");
1340
            head = IdentifierManager.getInstance().getHeadPID(sid_case18);
1341
            assertTrue(head.equals(pid5_case18));
1342

    
1343
         
1344
        } catch (Exception e) {
1345
            e.printStackTrace();
1346
            fail(e.getMessage());
1347
        }
1348
        
1349
    }
1350

    
1351
    /** 
1352
     * Insert a test document, returning the docid that was used. 
1353
     */
1354
    private String insertTestDocument() {
1355
        String accessBlock = getAccessBlock("public", true, true,
1356
                false, false, false);
1357
        String emldoc = getTestEmlDoc("Test identifier manager", EML2_1_0, null,
1358
                null, "http://fake.example.com/somedata", null,
1359
                accessBlock, null, null,
1360
                null, null);
1361
        System.out.println("inserting doc: " + emldoc);
1362
        String docid = generateDocumentId() + ".1";
1363
        try {
1364
            m.login(username, password);
1365
            String response = insertDocumentId(docid, emldoc, true, false);
1366
        } catch (MetacatAuthException e) {
1367
            fail(e.getMessage());
1368
        } catch (MetacatInaccessibleException e) {
1369
            fail(e.getMessage());
1370
        }
1371
        return docid;
1372
    }
1373
    
1374
    private void ph(String s)
1375
    {
1376
        System.out.println("*********************** " + s + " ****************************");
1377
    }
1378
    
1379
    /**
1380
     * We want to act as the CN itself
1381
     * @throws ServiceFailure 
1382
     * @throws Exception 
1383
     */
1384
    @Override
1385
    public Session getTestSession() throws Exception {
1386
        Session session = super.getTestSession();
1387
        
1388
        // use the first CN we find in the nodelist
1389
        NodeList nodeList = D1Client.getCN().listNodes();
1390
        for (Node node : nodeList.getNodeList()) {
1391
            if ( node.getType().equals(NodeType.CN) ) {
1392
                
1393
                List<Subject> subjects = node.getSubjectList();
1394
                for (Subject subject : subjects) {
1395
                   session.setSubject(subject);
1396
                   // we are done here
1397
                   return session;
1398
                }
1399
            }
1400
        }
1401
        // in case we didn't find it
1402
        return session;
1403
    }
1404
    
1405
}
(7-7/26)