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

    
26
package edu.ucsb.nceas.metacat.dataone;
27

    
28

    
29
import gov.loc.repository.bagit.Bag;
30
import gov.loc.repository.bagit.BagFactory;
31
import gov.loc.repository.bagit.BagFile;
32
import gov.loc.repository.bagit.Manifest;
33

    
34
import java.io.ByteArrayInputStream;
35
import java.io.ByteArrayOutputStream;
36
import java.io.File;
37
import java.io.FileOutputStream;
38
import java.io.IOException;
39
import java.io.InputStream;
40
import java.io.UnsupportedEncodingException;
41
import java.text.SimpleDateFormat;
42
import java.util.ArrayList;
43
import java.util.Calendar;
44
import java.util.Date;
45
import java.util.HashMap;
46
import java.util.Iterator;
47
import java.util.List;
48
import java.util.Map;
49

    
50
import junit.framework.Test;
51
import junit.framework.TestSuite;
52

    
53
import org.apache.commons.io.IOUtils;
54
import org.dataone.client.v2.formats.ObjectFormatCache;
55
import org.dataone.configuration.Settings;
56
import org.dataone.ore.ResourceMapFactory;
57
import org.dataone.service.util.TypeMarshaller;
58
import org.dataone.service.exceptions.IdentifierNotUnique;
59
import org.dataone.service.exceptions.InsufficientResources;
60
import org.dataone.service.exceptions.InvalidRequest;
61
import org.dataone.service.exceptions.InvalidSystemMetadata;
62
import org.dataone.service.exceptions.InvalidToken;
63
import org.dataone.service.exceptions.NotAuthorized;
64
import org.dataone.service.exceptions.NotFound;
65
import org.dataone.service.exceptions.NotImplemented;
66
import org.dataone.service.exceptions.ServiceFailure;
67
import org.dataone.service.exceptions.SynchronizationFailed;
68
import org.dataone.service.exceptions.UnsupportedType;
69
import org.dataone.service.types.v1.AccessPolicy;
70
import org.dataone.service.types.v1.AccessRule;
71
import org.dataone.service.types.v1.Checksum;
72
import org.dataone.service.types.v1.DescribeResponse;
73
import org.dataone.service.types.v1.Event;
74
import org.dataone.service.types.v1.Identifier;
75
import org.dataone.service.types.v2.Log;
76
import org.dataone.service.types.v2.Node;
77
import org.dataone.service.types.v1.NodeReference;
78
import org.dataone.service.types.v1.ObjectFormatIdentifier;
79
import org.dataone.service.types.v1.ObjectList;
80
import org.dataone.service.types.v1.Permission;
81
import org.dataone.service.types.v1.Person;
82
import org.dataone.service.types.v1.Session;
83
import org.dataone.service.types.v1.Subject;
84
import org.dataone.service.types.v1.SubjectInfo;
85
import org.dataone.service.types.v2.SystemMetadata;
86
import org.dspace.foresite.ResourceMap;
87
import org.jibx.runtime.JiBXException;
88
import org.junit.After;
89
import org.junit.Before;
90

    
91
/**
92
 * A JUnit test to exercise the Metacat Member Node service implementation.
93
 * This also tests a few of the D1NodeService superclass methods
94
 * 
95
 * @author cjones
96
 *
97
 */
98
public class MNodeServiceTest extends D1NodeServiceTest {
99

    
100
  /**
101
   * Set up the test fixtures
102
   * 
103
   * @throws Exception
104
   */
105
  @Before
106
  public void setUp() throws Exception {
107
    super.setUp();
108
    // set up the configuration for d1client
109
    Settings.getConfiguration().setProperty("D1Client.cnClassName", MockCNode.class.getName());
110
  }
111

    
112
  /**
113
   * Remove the test fixtures
114
   */
115
  @After
116
  public void tearDown() {
117
  }
118
  
119
  /**
120
   * Build the test suite
121
   * @return
122
   */
123
  public static Test suite() {
124
    
125
    TestSuite suite = new TestSuite();
126
    suite.addTest(new MNodeServiceTest("initialize"));
127
    // MNStorage tests
128
    suite.addTest(new MNodeServiceTest("testCreate"));
129
    suite.addTest(new MNodeServiceTest("testCreateInvalidIdentifier"));
130
    suite.addTest(new MNodeServiceTest("testUpdate"));
131
    // this requires MN certificate
132
    suite.addTest(new MNodeServiceTest("testDelete"));
133
    
134
    // MNRead tests
135
    suite.addTest(new MNodeServiceTest("testGet"));
136
    suite.addTest(new MNodeServiceTest("testGetChecksum"));
137
    suite.addTest(new MNodeServiceTest("testGetSystemMetadata"));
138
    suite.addTest(new MNodeServiceTest("testDescribe"));
139
    suite.addTest(new MNodeServiceTest("testListObjects"));
140
    // this requires CN certificate
141
    suite.addTest(new MNodeServiceTest("testSynchronizationFailed"));
142
    
143
    // MNCore tests
144
    suite.addTest(new MNodeServiceTest("testPing"));
145
    suite.addTest(new MNodeServiceTest("testGetLogRecords"));
146
    suite.addTest(new MNodeServiceTest("testGetOperationStatistics"));
147
    suite.addTest(new MNodeServiceTest("testGetCapabilities"));
148
    // include these when they are part of the MN interface definitions
149
    // suite.addTest(new MNodeServiceTest("testGetObjectStatistics"));
150
    // suite.addTest(new MNodeServiceTest("testGetStatus"));
151
    // MNAuthorization tests
152
    suite.addTest(new MNodeServiceTest("testIsAuthorized"));
153
    suite.addTest(new MNodeServiceTest("testIsEquivIdentityAuthorized"));
154
    suite.addTest(new MNodeServiceTest("testSetAccessPolicy"));
155
    // MNreplication tests
156
    suite.addTest(new MNodeServiceTest("testReplicate"));
157
    // MN packaging tests
158
    suite.addTest(new MNodeServiceTest("testGetPackage"));
159
    suite.addTest(new MNodeServiceTest("testGetOREPackage"));
160
    
161
    
162
    return suite;
163
    
164
  }
165
  
166
  /**
167
   * Constructor for the tests
168
   * 
169
   * @param name - the name of the test
170
   */
171
  public MNodeServiceTest(String name) {
172
    super(name);
173
    
174
  }
175

    
176
  /**
177
   * Initial blank test
178
   */
179
  public void initialize() {
180
    assertTrue(1 == 1);
181
    
182
  }
183
  
184
  /**
185
   * Test getting a known object
186
   */
187
  public void testGet() {
188
    printTestHeader("testGet");
189

    
190
    try {
191
      Session session = getTestSession();
192
      Identifier guid = new Identifier();
193
      guid.setValue("testGet." + System.currentTimeMillis());
194
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
195
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
196
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
197
      InputStream result = MNodeService.getInstance(request).get(session, guid);
198
      // go back to beginning of original stream
199
      object.reset();
200
      // check
201
      assertTrue(object.available() > 0);
202
      assertTrue(result.available() > 0);
203
      assertTrue(IOUtils.contentEquals(result, object));
204
      
205
    } catch (UnsupportedEncodingException e) {
206
      e.printStackTrace();
207
      fail("Unexpected error: " + e.getMessage());
208

    
209
    } catch (InvalidToken e) {
210
      e.printStackTrace();
211
      fail("Unexpected error: " + e.getMessage());
212
      
213
    } catch (ServiceFailure e) {
214
      e.printStackTrace();
215
      fail("Unexpected error: " + e.getMessage());
216
      
217
    } catch (NotAuthorized e) {
218
      e.printStackTrace();
219
      fail("Unexpected error: " + e.getMessage());
220
      
221
    } catch (IdentifierNotUnique e) {
222
      e.printStackTrace();
223
      fail("Unexpected error: " + e.getMessage());
224
      
225
    } catch (UnsupportedType e) {
226
      e.printStackTrace();
227
      fail("Unexpected error: " + e.getMessage());
228
      
229
    } catch (InsufficientResources e) {
230
      e.printStackTrace();
231
      fail("Unexpected error: " + e.getMessage());
232
      
233
    } catch (InvalidSystemMetadata e) {
234
      e.printStackTrace();
235
      fail("Unexpected error: " + e.getMessage());
236
      
237
    } catch (NotImplemented e) {
238
      e.printStackTrace();
239
      fail("Unexpected error: " + e.getMessage());
240
      
241
    } catch (InvalidRequest e) {
242
      e.printStackTrace();
243
      fail("Unexpected error: " + e.getMessage());
244
      
245
    } catch (NotFound e) {
246
      e.printStackTrace();
247
      fail("Unexpected error: " + e.getMessage());
248
      
249
    } catch (Exception e) {
250
      e.printStackTrace();
251
      fail("Unexpected error: " + e.getMessage());
252
      
253
    }
254

    
255
  }
256

    
257
  /**
258
   * Test getting the system metadata of an object
259
   */
260
  public void testGetSystemMetadata() {    
261
    printTestHeader("testGetSystemMetadata");
262

    
263
    try {
264
      Session session = getTestSession();
265
      Identifier guid = new Identifier();
266
      guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
267
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
268
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
269
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
270
      SystemMetadata newsysmeta = MNodeService.getInstance(request).getSystemMetadata(session, pid);
271
      assertEquals(newsysmeta.getIdentifier().getValue(), sysmeta.getIdentifier().getValue());
272
      
273
    } catch (UnsupportedEncodingException e) {
274
      e.printStackTrace();
275
      fail("Unexpected error: " + e.getMessage());
276

    
277
    } catch (InvalidToken e) {
278
      e.printStackTrace();      
279
      fail("Unexpected error: " + e.getMessage());
280

    
281
    } catch (ServiceFailure e) {
282
      e.printStackTrace();
283
      fail("Unexpected error: " + e.getMessage());
284

    
285
    } catch (NotAuthorized e) {
286
      e.printStackTrace();
287
      fail("Unexpected error: " + e.getMessage());
288

    
289
    } catch (IdentifierNotUnique e) {
290
      e.printStackTrace();
291
      fail("Unexpected error: " + e.getMessage());
292
      
293
    } catch (UnsupportedType e) {
294
      e.printStackTrace();
295
      fail("Unexpected error: " + e.getMessage());
296

    
297
    } catch (InsufficientResources e) {
298
      e.printStackTrace();
299
      fail("Unexpected error: " + e.getMessage());
300

    
301
    } catch (InvalidSystemMetadata e) {
302
      e.printStackTrace();
303
      fail("Unexpected error: " + e.getMessage());
304

    
305
    } catch (NotImplemented e) {
306
      e.printStackTrace();
307
      fail("Unexpected error: " + e.getMessage());
308

    
309
    } catch (InvalidRequest e) {
310
      e.printStackTrace();
311
      fail("Unexpected error: " + e.getMessage());
312

    
313
    } catch (NotFound e) {
314
      e.printStackTrace();
315
      fail("Unexpected error: " + e.getMessage());
316

    
317
    } catch (Exception e) {
318
      e.printStackTrace();
319
      fail("Unexpected error: " + e.getMessage());
320

    
321
    }
322
    
323
  }
324

    
325
  /**
326
   * Test object creation
327
   */
328
  public void testCreate() {
329
    printTestHeader("testCreate");
330
    
331
    try {
332
      Session session = getTestSession();
333
      Identifier guid = new Identifier();
334
      guid.setValue("testCreate." + System.currentTimeMillis());
335
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
336
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
337
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
338
      assertEquals(guid.getValue(), pid.getValue());
339
    } catch (UnsupportedEncodingException e) {
340
      e.printStackTrace();
341
      fail("Unexpected error: " + e.getMessage());
342

    
343
    } catch (InvalidToken e) {
344
      e.printStackTrace();
345
      fail("Unexpected error: " + e.getMessage());
346

    
347
    } catch (ServiceFailure e) {
348
      e.printStackTrace();
349
      fail("Unexpected error: " + e.getMessage());
350

    
351
    } catch (NotAuthorized e) {
352
      e.printStackTrace();
353
      fail("Unexpected error: " + e.getMessage());
354

    
355
    } catch (IdentifierNotUnique e) {
356
      e.printStackTrace();
357
      fail("Unexpected error: " + e.getMessage());
358

    
359
    } catch (UnsupportedType e) {
360
      e.printStackTrace();
361
      fail("Unexpected error: " + e.getMessage());
362

    
363
    } catch (InsufficientResources e) {
364
      e.printStackTrace();
365
      fail("Unexpected error: " + e.getMessage());
366

    
367
    } catch (InvalidSystemMetadata e) {
368
      e.printStackTrace();
369
      fail("Unexpected error: " + e.getMessage());
370

    
371
    } catch (NotImplemented e) {
372
      e.printStackTrace();
373
      fail("Unexpected error: " + e.getMessage());
374

    
375
    } catch (InvalidRequest e) {
376
      e.printStackTrace();
377
      fail("Unexpected error: " + e.getMessage());
378

    
379
    } catch (Exception e) {
380
      e.printStackTrace();
381
      fail("Unexpected error: " + e.getMessage());
382

    
383
    }
384
      
385
  }
386

    
387
  /**
388
   * test object deletion
389
   */
390
  public void testDelete() {
391
    printTestHeader("testDelete");
392

    
393
    try {
394
      Session session = getTestSession();
395
      Identifier guid = new Identifier();
396
      guid.setValue("testDelete." + System.currentTimeMillis());
397
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
398
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
399
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
400
      
401
      // use MN admin to delete
402
      session = getMNSession();
403
      Identifier deletedPid = MNodeService.getInstance(request).delete(session, pid);
404
      assertEquals(pid.getValue(), deletedPid.getValue());
405
      // check that we cannot get the object
406
      session = getTestSession();
407
      InputStream deletedObject = null;
408
      try {
409
    	  deletedObject = MNodeService.getInstance(request).get(session, deletedPid);
410
      } catch (NotFound nf) {
411
    	  // this is expected
412
      }
413
	  assertNull(deletedObject);
414
      
415
    } catch (UnsupportedEncodingException e) {
416
      e.printStackTrace();
417
      
418
    } catch (Exception e) {
419
      e.printStackTrace();
420
      fail("Unexpected error: " + e.getMessage());
421

    
422
    } 
423

    
424
  }
425

    
426
  /**
427
   * Test object updating
428
   */
429
  public void testUpdate() {
430
    printTestHeader("testUpdate");
431
    
432
    try {
433
      Session session = getTestSession();
434
      Identifier guid = new Identifier();
435
      guid.setValue("testUpdate." + System.currentTimeMillis());
436
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
437
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
438
      Identifier newPid = new Identifier();
439
      newPid.setValue("testUpdate." + (System.currentTimeMillis() + 1)); // ensure it is different from original
440
      Identifier pid = 
441
        MNodeService.getInstance(request).create(session, guid, object, sysmeta);
442
      
443
      SystemMetadata newSysMeta = createSystemMetadata(newPid, session.getSubject(), object);
444
            
445
      // do the update
446
      Identifier updatedPid = 
447
        MNodeService.getInstance(request).update(session, pid, object, newPid, newSysMeta);
448
      
449
      // get the updated system metadata
450
      SystemMetadata updatedSysMeta = 
451
        MNodeService.getInstance(request).getSystemMetadata(session, updatedPid);
452

    
453
      assertEquals(updatedPid.getValue(), newPid.getValue());
454
//      assertTrue(updatedSysMeta.getObsolete(0).getValue().equals(pid.getValue()));
455
//      assertTrue(updatedSysMeta.getDerivedFrom(0).getValue().equals(pid.getValue()));        
456
      
457
    } catch (UnsupportedEncodingException e) {
458
      e.printStackTrace();
459
      fail("Unexpected error: " + e.getMessage());
460

    
461
    } catch (InvalidToken e) {
462
      e.printStackTrace();
463
      fail("Unexpected error: " + e.getMessage());
464

    
465
    } catch (ServiceFailure e) {
466
      e.printStackTrace();
467
      fail("Unexpected error: " + e.getMessage());
468

    
469
    } catch (NotAuthorized e) {
470
      e.printStackTrace();
471
      fail("Unexpected error: " + e.getMessage());
472

    
473
    } catch (IdentifierNotUnique e) {
474
      e.printStackTrace();
475
      fail("Unexpected error: " + e.getMessage());
476

    
477
    } catch (UnsupportedType e) {
478
      e.printStackTrace();
479
      fail("Unexpected error: " + e.getMessage());
480

    
481
    } catch (InsufficientResources e) {
482
      e.printStackTrace();
483
      fail("Unexpected error: " + e.getMessage());
484

    
485
    } catch (InvalidSystemMetadata e) {
486
      e.printStackTrace();
487
      fail("Unexpected error: " + e.getMessage());
488

    
489
    } catch (NotImplemented e) {
490
      e.printStackTrace();
491
      fail("Unexpected error: " + e.getMessage());
492

    
493
    } catch (InvalidRequest e) {
494
      e.printStackTrace();
495
      fail("Unexpected error: " + e.getMessage());
496

    
497
    } catch (Exception e) {
498
      e.printStackTrace();
499
      fail("Unexpected error: " + e.getMessage());
500

    
501
    }
502
  }
503

    
504
  /**
505
   * We currently expect this unit test to fail because it should rely on a different member node
506
   * to retrieve the object from. Currently it gets the object from itself and throws 
507
   * and expected error for duplicate entry.
508
   * 
509
   */
510
  public void testReplicate() {
511
      printTestHeader("testReplicate");
512
      try {
513
        Session session = getTestSession();
514
        Identifier guid = new Identifier();
515
        guid.setValue("testReplicate." + System.currentTimeMillis());
516
        InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
517
        SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
518
        // save locally
519
        Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
520
        // get our node reference (attempting to replicate with self)
521
        NodeReference sourceNode = MNodeService.getInstance(request).getCapabilities().getIdentifier();
522
        // attempt to replicate with ourselves -- this should fail!
523
      boolean result = false;
524
      try {
525
        result = MNodeService.getInstance(request).replicate(session, sysmeta, sourceNode);
526
      } catch (Exception inu) {
527
        // we are expecting this to fail since we already have the doc
528
        result = true;
529
      }
530
      assertTrue(result);
531
      } catch (Exception e) {
532
        e.printStackTrace();
533
      fail("Probably not yet implemented: " + e.getMessage());
534
    }
535
  }
536

    
537
  /**
538
   * Test describing an object
539
   */
540
  public void testDescribe() {
541
    printTestHeader("testDescribe");
542

    
543
    try {
544
      Session session = getTestSession();
545
      Identifier guid = new Identifier();
546
      guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
547
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
548
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
549
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
550
      DescribeResponse describeResponse = MNodeService.getInstance(request).describe(session, pid);
551
      assertEquals(describeResponse.getDataONE_Checksum().getValue(), sysmeta.getChecksum().getValue());
552
      assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), sysmeta.getFormatId().getValue());
553
      
554
    } catch (UnsupportedEncodingException e) {
555
      e.printStackTrace();
556
      fail("Unexpected error: " + e.getMessage());
557

    
558
    } catch (InvalidToken e) {
559
      e.printStackTrace();      
560
      fail("Unexpected error: " + e.getMessage());
561

    
562
    } catch (ServiceFailure e) {
563
      e.printStackTrace();
564
      fail("Unexpected error: " + e.getMessage());
565

    
566
    } catch (NotAuthorized e) {
567
      e.printStackTrace();
568
      fail("Unexpected error: " + e.getMessage());
569

    
570
    } catch (IdentifierNotUnique e) {
571
      e.printStackTrace();
572
      fail("Unexpected error: " + e.getMessage());
573
      
574
    } catch (UnsupportedType e) {
575
      e.printStackTrace();
576
      fail("Unexpected error: " + e.getMessage());
577

    
578
    } catch (InsufficientResources e) {
579
      e.printStackTrace();
580
      fail("Unexpected error: " + e.getMessage());
581

    
582
    } catch (InvalidSystemMetadata e) {
583
      e.printStackTrace();
584
      fail("Unexpected error: " + e.getMessage());
585

    
586
    } catch (NotImplemented e) {
587
      e.printStackTrace();
588
      fail("Unexpected error: " + e.getMessage());
589

    
590
    } catch (InvalidRequest e) {
591
      e.printStackTrace();
592
      fail("Unexpected error: " + e.getMessage());
593

    
594
    } catch (NotFound e) {
595
      e.printStackTrace();
596
      fail("Unexpected error: " + e.getMessage());
597

    
598
    } catch (Exception e) {
599
      e.printStackTrace();
600
      fail("Unexpected error: " + e.getMessage());
601

    
602
    }
603
  }
604

    
605
  /**
606
   * Test getting the checksum of an object
607
   */
608
  public void testGetChecksum() {
609
    printTestHeader("testGetChecksum");
610

    
611
    try {
612
      Session session = getTestSession();
613
      Identifier guid = new Identifier();
614
      guid.setValue("testGetChecksum." + System.currentTimeMillis());
615
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
616
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
617
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
618
      Checksum checksum = MNodeService.getInstance(request).getChecksum(session, pid, "MD5");
619
      assertEquals(checksum.getValue(), sysmeta.getChecksum().getValue());
620
    
621
    } catch (UnsupportedEncodingException e) {
622
      e.printStackTrace();
623
      fail("Unexpected error: " + e.getMessage());
624

    
625
    } catch (InvalidToken e) {
626
      e.printStackTrace();
627
      fail("Unexpected error: " + e.getMessage());
628

    
629
    } catch (ServiceFailure e) {
630
      e.printStackTrace();
631
      fail("Unexpected error: " + e.getMessage());
632

    
633
    } catch (NotAuthorized e) {
634
      e.printStackTrace();
635
      fail("Unexpected error: " + e.getMessage());
636

    
637
    } catch (IdentifierNotUnique e) {
638
      e.printStackTrace();
639
      fail("Unexpected error: " + e.getMessage());
640

    
641
    } catch (UnsupportedType e) {
642
      e.printStackTrace();
643
      fail("Unexpected error: " + e.getMessage());
644

    
645
    } catch (InsufficientResources e) {
646
      e.printStackTrace();
647
      fail("Unexpected error: " + e.getMessage());
648

    
649
    } catch (InvalidSystemMetadata e) {
650
      e.printStackTrace();
651
      fail("Unexpected error: " + e.getMessage());
652

    
653
    } catch (NotImplemented e) {
654
      e.printStackTrace();
655
      fail("Unexpected error: " + e.getMessage());
656

    
657
    } catch (InvalidRequest e) {
658
      e.printStackTrace();
659
      fail("Unexpected error: " + e.getMessage());
660

    
661
    } catch (NotFound e) {
662
      e.printStackTrace();
663
      fail("Unexpected error: " + e.getMessage());
664

    
665
    } catch (Exception e) {
666
      e.printStackTrace();
667
      fail("Unexpected error: " + e.getMessage());
668

    
669
    }
670
    
671
  }
672

    
673
  /**
674
   * Testing listing objects on the Member Node
675
   */
676
  public void testListObjects() {
677
      printTestHeader("testListObjects");
678
  
679
      try {
680
  
681
        Session session = getTestSession();
682
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
683
        Date startTime = sdf.parse("2010-01-01");
684
        Date endTime = new Date();
685
        ObjectFormatIdentifier objectFormatId = null;
686
        boolean replicaStatus = false;
687
        int start = 0;
688
        int count = 1;
689
      
690
        // insert at least one object 
691
        testCreate();
692
        // now check that we have at least one
693
        ObjectList objectList = 
694
          MNodeService.getInstance(request).listObjects(session, startTime, endTime, 
695
              objectFormatId, null, replicaStatus, start, count);
696
        assertNotNull(objectList);
697
        assertTrue(objectList.getCount() == count);
698
        assertTrue(objectList.getStart() == 0);
699
        assertTrue(objectList.getTotal() > 1);
700
        
701
      } catch (Exception e) {
702
        e.printStackTrace();
703
        fail("Unexpected error: " + e.getMessage());
704
  
705
      }
706
  }
707

    
708
  public void testGetCapabilities() {
709
      printTestHeader("testGetCapabilities");
710
    try {
711
      Node node = MNodeService.getInstance(request).getCapabilities();
712
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
713
      TypeMarshaller.marshalTypeToOutputStream(node, baos);
714
      assertNotNull(node);
715
      // TODO: should probably test other parts of the node information
716
      
717
    } catch (JiBXException e) {
718
        e.printStackTrace();
719
        fail("The node instance couldn't be parsed correctly:" + e.getMessage());
720
        
721
    } catch (IOException e) {
722
        e.printStackTrace();
723
        fail("The node instance couldn't be read correctly:" + e.getMessage());
724
        
725
    } catch (Exception e) {
726
        e.printStackTrace();
727
        fail("Probably not yet implemented: " + e.getMessage());
728
        
729
    }
730
    
731
  }
732

    
733
  public void testPing() {
734

    
735
    try {
736
      Date mnDate = MNodeService.getInstance(request).ping();
737
      assertTrue(mnDate != null);
738
      
739
    } catch (NotImplemented e) {
740
      e.printStackTrace();
741
      fail("Unexpected error: " + e.getMessage());
742

    
743
    } catch (ServiceFailure e) {
744
      e.printStackTrace();
745
      fail("Unexpected error: " + e.getMessage());
746

    
747
    }  catch (InsufficientResources e) {
748
      e.printStackTrace();
749
      fail("Unexpected error: " + e.getMessage());
750

    
751
    }
752
    
753
  }
754

    
755
  public void testSynchronizationFailed() {
756
    printTestHeader("testSynchronizationFailed");
757
    try {
758
        Session session = getTestSession();
759
        
760
        // create the object
761
        Identifier pid = new Identifier();
762
        pid.setValue("testSynchronizationFailed." + System.currentTimeMillis());
763
        InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
764
        SystemMetadata sysmeta = createSystemMetadata(pid, session.getSubject(), object);
765
        Identifier retPid = MNodeService.getInstance(request).create(session, pid, object, sysmeta);
766
        assertEquals(retPid.getValue(), pid.getValue());
767
        
768
        // pretend the sync failed, act as CN
769
      SynchronizationFailed syncFailed = 
770
        new SynchronizationFailed("0000", "Testing Synch Failure");
771
      syncFailed.setPid(pid.getValue());
772
      session = getCNSession();
773
      MNodeService.getInstance(request).synchronizationFailed(session, syncFailed );
774
    } catch (Exception e) {
775
      e.printStackTrace();
776
        fail("Unexpected error: " + e.getMessage());
777
    }
778

    
779
  }
780

    
781
  public void testSystemMetadataChanged() {
782
      printTestHeader("testSystemMetadataChanged");
783
      try {
784
          Session session = getTestSession();
785
          
786
          // create the object
787
          Identifier pid = new Identifier();
788
          pid.setValue("testSystemMetadataChanged." + System.currentTimeMillis());
789
          InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
790
          SystemMetadata sysmeta = createSystemMetadata(pid, session.getSubject(), object);
791
          Identifier retPid = MNodeService.getInstance(request).create(session, pid, object, sysmeta);
792
          assertEquals(retPid.getValue(), pid.getValue());
793
          
794
          // pretend the system metadata changed on the CN
795
          MNodeService.getInstance(request).systemMetadataChanged(session, 
796
                  retPid, 5000L, Calendar.getInstance().getTime());
797
          
798
      } catch (Exception e) {
799
          if (e instanceof NotAuthorized) {
800
              // only CN subjects can call this
801
              // TODO: use a CN certificate in the tests
802
          } else {
803
              fail("Unexpected error: " + e.getMessage());
804
              
805
          }
806
      }
807

    
808
    }
809

    
810
  public void testGetLogRecords() {
811
    printTestHeader("testLogRecords");
812

    
813
    try {
814
	    Log log = null;
815
	    Session session = getCNSession();
816
	    Date fromDate = new Date();
817
	    Calendar calendar = Calendar.getInstance();
818
	    calendar.setTime(fromDate);
819
	    calendar.roll(Calendar.YEAR, false);
820
	    fromDate = calendar.getTime();
821
	    Date toDate = new Date();
822
	    Event event = Event.CREATE;
823
	    int start = 0;
824
	    int count = 1;
825
    
826
      log = MNodeService.getInstance(request).getLogRecords(session, fromDate, toDate, 
827
        event.xmlValue(), null, start, count);
828
      
829
      assertNotNull(log);      
830
      assertTrue(log.getCount() == count);
831
      assertTrue(log.getStart() == start);
832
      assertTrue(log.getTotal() >= 1);
833
        
834
    } catch (Exception e) {
835
      e.printStackTrace();
836
      fail("Unexpected error: " + e.getMessage());
837

    
838
    }
839
  }
840

    
841
  /**
842
   * Testing setting access on a known object
843
   */
844
  public void testSetAccessPolicy() {
845
    printTestHeader("testSetAccess");
846
    
847
    //boolean accessWasSet = false;
848
    //
849
    //try {
850
    //  // create an object to set access on
851
    //  Session session = getTestSession();
852
    //  Identifier guid = new Identifier();
853
    //  guid.setValue("testSetAccess." + System.currentTimeMillis());
854
    //  InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
855
    //  SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
856
    //  Identifier pid = 
857
    //    MNodeService.getInstance(request).create(session, guid, object, sysmeta);
858
    //  // set the access
859
    //  AccessPolicy accessPolicy = new AccessPolicy();
860
    //  AccessRule allow = new AccessRule();
861
    //  allow.addPermission(Permission.WRITE);
862
    //  Subject publicSubject = new Subject();
863
    //  publicSubject.setValue(Constants.SUBJECT_PUBLIC);
864
    //  allow.addSubject(publicSubject);
865
    //  accessPolicy.addAllow(allow);
866
    //  
867
    //  accessWasSet = 
868
    //    MNodeService.getInstance(request).setAccessPolicy(session, pid, accessPolicy);
869
    //  assertTrue(accessWasSet);
870
    //  // test that it is enforced
871
    //  session.setSubject(publicSubject);
872
    //  boolean isAuthorized = MNodeService.getInstance(request).isAuthorized(session, pid, Permission.WRITE);
873
    //  assertTrue(isAuthorized);
874
    //
875
    //} catch (UnsupportedEncodingException e) {
876
    //  e.printStackTrace();
877
    //  
878
    //} catch (InvalidToken e) {
879
    //  e.printStackTrace();
880
    //  fail("Unexpected error: " + e.getMessage());
881
    //  
882
    //} catch (ServiceFailure e) {
883
    //  e.printStackTrace();
884
    //  fail("Unexpected error: " + e.getMessage());
885
    //  
886
    //} catch (NotAuthorized e) {
887
    //  e.printStackTrace();
888
    //  fail("Unexpected error: " + e.getMessage());
889
    //  
890
    //} catch (IdentifierNotUnique e) {
891
    //  e.printStackTrace();
892
    //  fail("Unexpected error: " + e.getMessage());
893
    //  
894
    //} catch (UnsupportedType e) {
895
    //  e.printStackTrace();
896
    //  fail("Unexpected error: " + e.getMessage());
897
    //  
898
    //} catch (InsufficientResources e) {
899
    //  e.printStackTrace();
900
    //  fail("Unexpected error: " + e.getMessage());
901
    //  
902
    //} catch (InvalidSystemMetadata e) {
903
    //  e.printStackTrace();
904
    //  fail("Unexpected error: " + e.getMessage());
905
    //  
906
    //} catch (NotImplemented e) {
907
    //  e.printStackTrace();
908
    //  fail("Unexpected error: " + e.getMessage());
909
    //  
910
    //} catch (InvalidRequest e) {
911
    //  e.printStackTrace();
912
    //  fail("Unexpected error: " + e.getMessage());
913
    //  
914
    //} catch (NotFound e) {
915
    //  e.printStackTrace();
916
    //  fail("Unexpected error: " + e.getMessage());
917
    //  
918
    //} catch (Exception e) {
919
    //  e.printStackTrace();
920
    //  fail("Unexpected error: " + e.getMessage());
921
    //  
922
    //}
923
      
924
  }
925

    
926
  /**
927
   * Test if a subject is authorized to read a known object
928
   */
929
  public void testIsAuthorized() {
930
    printTestHeader("testIsAuthorized");
931
    
932
    try {
933
      Session session = getTestSession();
934
      Identifier guid = new Identifier();
935
      guid.setValue("testIsAuthorized." + System.currentTimeMillis());
936
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
937
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
938
      Identifier pid = 
939
        MNodeService.getInstance(request).create(session, guid, object, sysmeta);
940
      boolean isAuthorized = 
941
        MNodeService.getInstance(request).isAuthorized(session, pid, Permission.READ);
942
      assertEquals(isAuthorized, true);
943
      
944
    } catch (UnsupportedEncodingException e) {
945
      e.printStackTrace();
946
      fail("Unexpected error: " + e.getMessage());
947

    
948
    } catch (InvalidToken e) {
949
      e.printStackTrace();
950
      fail("Unexpected error: " + e.getMessage());
951

    
952
    } catch (ServiceFailure e) {
953
      e.printStackTrace();
954
      fail("Unexpected error: " + e.getMessage());
955

    
956
    } catch (NotAuthorized e) {
957
      e.printStackTrace();
958
      fail("Unexpected error: " + e.getMessage());
959

    
960
    } catch (IdentifierNotUnique e) {
961
      e.printStackTrace();
962
      fail("Unexpected error: " + e.getMessage());
963

    
964
    } catch (UnsupportedType e) {
965
      e.printStackTrace();
966
      fail("Unexpected error: " + e.getMessage());
967

    
968
    } catch (InsufficientResources e) {
969
      e.printStackTrace();
970
      fail("Unexpected error: " + e.getMessage());
971

    
972
    } catch (InvalidSystemMetadata e) {
973
      e.printStackTrace();
974
      fail("Unexpected error: " + e.getMessage());
975

    
976
    } catch (NotImplemented e) {
977
      e.printStackTrace();
978
      fail("Unexpected error: " + e.getMessage());
979

    
980
    } catch (InvalidRequest e) {
981
      e.printStackTrace();
982
      fail("Unexpected error: " + e.getMessage());
983

    
984
    } catch (Exception e) {
985
      e.printStackTrace();
986
      fail("Unexpected error: " + e.getMessage());
987

    
988
    }
989
  }
990
  
991
  /**
992
   * Test if node admin is authorized to read a known object
993
   */
994
  public void testIsAdminAuthorized() {
995
    printTestHeader("testIsAdminAuthorized");
996
    
997
    try {
998
      Session session = getTestSession();
999
      Identifier guid = new Identifier();
1000
      guid.setValue("testIsAdminAuthorized." + System.currentTimeMillis());
1001
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1002
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
1003
      Identifier pid = 
1004
        MNodeService.getInstance(request).create(session, guid, object, sysmeta);
1005
      
1006
      // test as public - read
1007
      boolean isAuthorized = 
1008
        MNodeService.getInstance(request).isAuthorized(null, pid, Permission.READ);
1009
      assertEquals(isAuthorized, true);
1010
      
1011
      // test as public - change perm
1012
      isAuthorized = 
1013
        MNodeService.getInstance(request).isAuthorized(null, pid, Permission.CHANGE_PERMISSION);
1014
      assertEquals(isAuthorized, false);
1015
      
1016
      // test as admin
1017
      isAuthorized = 
1018
    	        MNodeService.getInstance(request).isAuthorized(getMNSession(), pid, Permission.CHANGE_PERMISSION);
1019
    	      assertEquals(isAuthorized, true);
1020
      
1021
    } catch (Exception e) {
1022
      e.printStackTrace();
1023
      fail("Unexpected error: " + e.getMessage());
1024

    
1025
    } 
1026
  }
1027

    
1028
  
1029
  public void testIsEquivIdentityAuthorized() {
1030
      printTestHeader("testIsEquivIdentityAuthorized");
1031

    
1032
      try {
1033
          Session session = new Session();
1034
          Subject s = new Subject();
1035
          s.setValue("cn=test,dc=dataone,dc=org");
1036
          session.setSubject(s);
1037
          
1038
          Identifier pid = new Identifier();
1039
          pid.setValue("testIsEquivIdentityAuthorized." + System.currentTimeMillis());
1040
          InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1041
          SystemMetadata sysmeta = createSystemMetadata(pid, session.getSubject(), object);
1042
          
1043
          // reset the access policy to only allow 'self' read (no public)
1044
          AccessPolicy ap = new AccessPolicy();
1045
          AccessRule ar = new AccessRule();
1046
          List<Subject> sList = new ArrayList<Subject>();
1047
          sList.add(session.getSubject());
1048
          ar.setSubjectList(sList);
1049
          List<Permission> permList = new ArrayList<Permission>();
1050
          permList.add(Permission.CHANGE_PERMISSION);
1051
          ar.setPermissionList(permList);
1052
          ap.addAllow(ar);
1053
          sysmeta.setAccessPolicy(ap);
1054
          
1055
          // save it
1056
          Identifier retPid = CNodeService.getInstance(request).registerSystemMetadata(session, pid, sysmeta);
1057
          assertEquals(pid.getValue(), retPid.getValue());
1058
          
1059
          //check it against an equivalent identity not listed in the access policy
1060
          session.getSubject().setValue("cn=newSubject,dc=dataone,dc=org");
1061
          SubjectInfo subjectInfo = new SubjectInfo();
1062
          Person person = new Person();
1063
          person.setSubject(session.getSubject());
1064
          List<String> givenNames = new ArrayList<String>();
1065
          givenNames.add("New");
1066
          person.setGivenNameList(givenNames);
1067
          person.setFamilyName("Subject");
1068
          
1069
          // add equivalent identities
1070
          List<Subject> equivIdentities = new ArrayList<Subject>();
1071
          Subject mappedSubject2 = new Subject();
1072
          mappedSubject2.setValue("cn=test2,dc=dataone,dc=org");
1073
          equivIdentities.add(mappedSubject2);
1074
          
1075
          Subject mappedSubject = new Subject();
1076
          mappedSubject.setValue("cn=test,dc=dataone,dc=org");
1077
          equivIdentities.add(mappedSubject);          
1078
          
1079
          person.setEquivalentIdentityList(equivIdentities);
1080
          
1081
          List<Person> personList = new ArrayList<Person>();
1082
          personList.add(person);
1083
          subjectInfo.setPersonList(personList);
1084
          
1085
          // update the session to include subject info with a mapped identity
1086
          session.setSubjectInfo(subjectInfo);
1087
          boolean result = CNodeService.getInstance(request).isAuthorized(session, pid, Permission.READ);
1088
          assertTrue(result);
1089
        
1090
    } catch (Exception e) {
1091
        e.printStackTrace();
1092
        
1093
    }
1094
    
1095
  }
1096

    
1097
/**
1098
   * Test object creation failure when there is a space in the identifier
1099
   */
1100
  public void testCreateInvalidIdentifier() {
1101
    printTestHeader("testCreateInvalidIdentifier");
1102
    
1103
    try {
1104
      Session session = getTestSession();
1105
      Identifier guid = new Identifier();
1106
      guid.setValue("testCreate withspace." + System.currentTimeMillis());
1107
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1108
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
1109
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
1110
      fail("Should not be able to create with whitespace in indentifier");
1111
    } catch (InvalidRequest e) {
1112
    	// expect that this request fails
1113
        assertTrue(true);
1114
    } catch (Exception e) {
1115
      e.printStackTrace();
1116
      fail("Unexpected error: " + e.getMessage());
1117
    }
1118
      
1119
  }
1120
  
1121
	/**
1122
	 * Test getting a known object
1123
	 */
1124
	public void testGetPackage() {
1125
		printTestHeader("testGetPackage");
1126

    
1127
		try {
1128
			Session session = getTestSession();
1129
			Identifier guid = new Identifier();
1130
			guid.setValue("testGetPackage." + System.currentTimeMillis());
1131
			InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
1132
			SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
1133
			Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
1134
			InputStream bagStream = MNodeService.getInstance(request).getPackage(session, null, pid);
1135
			File bagFile = File.createTempFile("bagit.", ".zip");
1136
			IOUtils.copy(bagStream, new FileOutputStream(bagFile));
1137
			BagFactory bagFactory = new BagFactory();
1138
			Bag bag = bagFactory.createBag(bagFile);
1139
			InputStream result = bag.getPayload().iterator().next().newInputStream();
1140
			
1141
			// go back to beginning of original stream
1142
			object.reset();
1143
			// check
1144
			assertTrue(object.available() > 0);
1145
			assertTrue(result.available() > 0);
1146
			assertTrue(IOUtils.contentEquals(result, object));
1147
			
1148
			// clean up
1149
			bagFile.delete();
1150

    
1151
		} catch (Exception e) {
1152
			e.printStackTrace();
1153
			fail("Unexpected error: " + e.getMessage());
1154
		}
1155
	}
1156
	
1157
	
1158
	/**
1159
	 * Test getting a known object
1160
	 */
1161
	public void testGetOREPackage() {
1162
		printTestHeader("testGetOREPackage");
1163

    
1164
		try {
1165
			
1166
			// construct the ORE package
1167
			Identifier resourceMapId = new Identifier();
1168
			//resourceMapId.setValue("doi://1234/AA/map.1.1");
1169
			resourceMapId.setValue("testGetOREPackage." + System.currentTimeMillis());
1170
			Identifier metadataId = new Identifier();
1171
			metadataId.setValue("doi://1234/AA/meta.1." + + System.currentTimeMillis());
1172
			List<Identifier> dataIds = new ArrayList<Identifier>();
1173
			Identifier dataId = new Identifier();
1174
			dataId.setValue("doi://1234/AA/data.1." + System.currentTimeMillis());
1175
			Identifier dataId2 = new Identifier();
1176
			dataId2.setValue("doi://1234/AA/data.2." + System.currentTimeMillis());
1177
			dataIds.add(dataId);
1178
			dataIds.add(dataId2);
1179
			Map<Identifier, List<Identifier>> idMap = new HashMap<Identifier, List<Identifier>>();
1180
			idMap.put(metadataId, dataIds);
1181
			ResourceMapFactory rmf = ResourceMapFactory.getInstance();
1182
			ResourceMap resourceMap = rmf.createResourceMap(resourceMapId, idMap);
1183
			assertNotNull(resourceMap);
1184
			String rdfXml = ResourceMapFactory.getInstance().serializeResourceMap(resourceMap);
1185
			assertNotNull(rdfXml);
1186
			
1187
			Session session = getTestSession();
1188
			InputStream object = null;
1189
			SystemMetadata sysmeta = null;
1190
			
1191
			// save the data objects (data just contains their ID)
1192
			InputStream dataObject1 = new ByteArrayInputStream(dataId.getValue().getBytes("UTF-8"));
1193
			sysmeta = createSystemMetadata(dataId, session.getSubject(), dataObject1);
1194
			MNodeService.getInstance(request).create(session, dataId, dataObject1, sysmeta);
1195
			// second data file
1196
			InputStream dataObject2 = new ByteArrayInputStream(dataId2.getValue().getBytes("UTF-8"));
1197
			sysmeta = createSystemMetadata(dataId2, session.getSubject(), dataObject2);
1198
			MNodeService.getInstance(request).create(session, dataId2, dataObject2, sysmeta);
1199
			// metadata file
1200
			InputStream metadataObject = new ByteArrayInputStream(metadataId.getValue().getBytes("UTF-8"));
1201
			sysmeta = createSystemMetadata(metadataId, session.getSubject(), metadataObject);
1202
			MNodeService.getInstance(request).create(session, metadataId, metadataObject, sysmeta);
1203
						
1204
			// save the ORE object
1205
			object = new ByteArrayInputStream(rdfXml.getBytes("UTF-8"));
1206
			sysmeta = createSystemMetadata(resourceMapId, session.getSubject(), object);
1207
			sysmeta.setFormatId(ObjectFormatCache.getInstance().getFormat("http://www.openarchives.org/ore/terms").getFormatId());
1208
			Identifier pid = MNodeService.getInstance(request).create(session, resourceMapId, object, sysmeta);
1209
			
1210
			// get the package we uploaded
1211
			InputStream bagStream = MNodeService.getInstance(request).getPackage(session, null, pid);
1212
			File bagFile = File.createTempFile("bagit.", ".zip");
1213
			IOUtils.copy(bagStream, new FileOutputStream(bagFile));
1214
			BagFactory bagFactory = new BagFactory();
1215
			Bag bag = bagFactory.createBag(bagFile);
1216
			Iterator<Manifest> manifestIter = bag.getTagManifests().iterator();
1217
			while (manifestIter.hasNext()) {
1218
				String filepath = manifestIter.next().getFilepath();
1219
				BagFile entryFile = bag.getBagFile(filepath);
1220
				InputStream result = entryFile.newInputStream();
1221
				// check ORE
1222
				if (filepath.contains(resourceMapId.getValue())) {
1223
					object.reset();
1224
					assertTrue(object.available() > 0);
1225
					assertTrue(result.available() > 0);
1226
					assertTrue(IOUtils.contentEquals(result, object));
1227
				}
1228
				// check metadata
1229
				if (filepath.contains(metadataId.getValue())) {
1230
					metadataObject.reset();
1231
					assertTrue(metadataObject.available() > 0);
1232
					assertTrue(result.available() > 0);
1233
					assertTrue(IOUtils.contentEquals(result, metadataObject));
1234
				}
1235
				if (filepath.contains(dataId.getValue())) {
1236
					dataObject1.reset();
1237
					assertTrue(dataObject1.available() > 0);
1238
					assertTrue(result.available() > 0);
1239
					assertTrue(IOUtils.contentEquals(result, dataObject1));
1240
				}
1241
				if (filepath.contains(dataId2.getValue())) {
1242
					dataObject2.reset();
1243
					assertTrue(dataObject2.available() > 0);
1244
					assertTrue(result.available() > 0);
1245
					assertTrue(IOUtils.contentEquals(result, dataObject2));
1246
				}
1247
				
1248
				
1249
			}
1250
			
1251
			// clean up
1252
			bagFile.delete();
1253
			
1254
			// test the ORE lookup
1255
			List<Identifier> oreIds = MNodeService.getInstance(request).lookupOreFor(metadataId, true);
1256
			assertTrue(oreIds.contains(resourceMapId));
1257

    
1258
		} catch (Exception e) {
1259
			e.printStackTrace();
1260
			fail("Unexpected error: " + e.getMessage());
1261
		}
1262
	}
1263
	
1264
  
1265
}
(3-3/6)