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
import java.io.ByteArrayInputStream;
29
import java.io.InputStream;
30
import java.io.UnsupportedEncodingException;
31
import java.text.SimpleDateFormat;
32
import java.util.Calendar;
33
import java.util.Date;
34

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

    
38
import org.apache.commons.io.IOUtils;
39
import org.dataone.service.Constants;
40
import org.dataone.service.exceptions.IdentifierNotUnique;
41
import org.dataone.service.exceptions.InsufficientResources;
42
import org.dataone.service.exceptions.InvalidRequest;
43
import org.dataone.service.exceptions.InvalidSystemMetadata;
44
import org.dataone.service.exceptions.InvalidToken;
45
import org.dataone.service.exceptions.NotAuthorized;
46
import org.dataone.service.exceptions.NotFound;
47
import org.dataone.service.exceptions.NotImplemented;
48
import org.dataone.service.exceptions.ServiceFailure;
49
import org.dataone.service.exceptions.UnsupportedType;
50
import org.dataone.service.types.AccessPolicy;
51
import org.dataone.service.types.AccessRule;
52
import org.dataone.service.types.Checksum;
53
import org.dataone.service.types.DescribeResponse;
54
import org.dataone.service.types.Event;
55
import org.dataone.service.types.Identifier;
56
import org.dataone.service.types.Log;
57
import org.dataone.service.types.MonitorList;
58
import org.dataone.service.types.Node;
59
import org.dataone.service.types.ObjectFormat;
60
import org.dataone.service.types.ObjectList;
61
import org.dataone.service.types.Permission;
62
import org.dataone.service.types.Session;
63
import org.dataone.service.types.Subject;
64
import org.dataone.service.types.SystemMetadata;
65
import org.junit.After;
66
import org.junit.Before;
67

    
68
/**
69
 * A JUnit test to exercise the Metacat Member Node service implementation.
70
 * This also tests a few of the D1NodeService superclass methods
71
 * 
72
 * @author cjones
73
 *
74
 */
75
public class MNodeServiceTest extends D1NodeServiceTest {
76

    
77
	/**
78
	 * Set up the test fixtures
79
	 * 
80
	 * @throws Exception
81
	 */
82
	@Before
83
	public void setUp() throws Exception {
84
		super.setUp();
85
		
86
	}
87

    
88
	/**
89
	 * Remove the test fixtures
90
	 */
91
	@After
92
	public void tearDown() {
93
	}
94
	
95
	/**
96
	 * Build the test suite
97
	 * @return
98
	 */
99
	public static Test suite() {
100
		
101
		TestSuite suite = new TestSuite();
102
    suite.addTest(new MNodeServiceTest("initialize"));
103
    // MNStorage tests
104
    suite.addTest(new MNodeServiceTest("testCreate"));
105
    suite.addTest(new MNodeServiceTest("testUpdate"));
106
    suite.addTest(new MNodeServiceTest("testDelete"));
107
    // MNRead tests
108
    suite.addTest(new MNodeServiceTest("testGet"));
109
    suite.addTest(new MNodeServiceTest("testGetChecksum"));
110
    suite.addTest(new MNodeServiceTest("testGetSystemMetadata"));
111
    suite.addTest(new MNodeServiceTest("testDescribe"));
112
    suite.addTest(new MNodeServiceTest("testListObjects"));
113
    // suite.addTest(new MNodeServiceTest("testSynchronizationFailed"));
114
    // MNCore tests
115
    suite.addTest(new MNodeServiceTest("testPing"));
116
    suite.addTest(new MNodeServiceTest("testGetLogRecords"));
117
    suite.addTest(new MNodeServiceTest("testGetOperationStatistics"));
118
    suite.addTest(new MNodeServiceTest("testGetCapabilities"));
119
    // suite.addTest(new MNodeServiceTest("testGetObjectStatistics"));
120
    // suite.addTest(new MNodeServiceTest("testGetStatus"));
121
    // MNAuthorization tests
122
    suite.addTest(new MNodeServiceTest("testIsAuthorized"));
123
    suite.addTest(new MNodeServiceTest("testSetAccessPolicy"));
124
    // MNreplication tests
125
    // suite.addTest(new MNodeServiceTest("testReplicate"));
126
    
127
		
128
		return suite;
129
		
130
	}
131
	
132
	/**
133
	 * Constructor for the tests
134
	 * 
135
	 * @param name - the name of the test
136
	 */
137
	public MNodeServiceTest(String name) {
138
		super(name);
139
		
140
	}
141

    
142
	/**
143
	 * Initial blank test
144
	 */
145
	public void initialize() {
146
		assertTrue(1 == 1);
147
		
148
	}
149
	
150
	/**
151
	 * Test getting a known object
152
	 */
153
	public void testGet() {
154
    printTestHeader("testGet");
155

    
156
		try {
157
	    Session session = getTestSession();
158
	    Identifier guid = new Identifier();
159
	    guid.setValue("testGet." + System.currentTimeMillis());
160
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
161
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
162
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
163
	    InputStream result = MNodeService.getInstance().get(session, guid);
164
	    // go back to beginning of original stream
165
	    object.reset();
166
	    // check
167
	    assertTrue(object.available() > 0);
168
	    assertTrue(result.available() > 0);
169
	    assertTrue(IOUtils.contentEquals(result, object));
170
	    
171
    } catch (UnsupportedEncodingException e) {
172
	    e.printStackTrace();
173
	    fail("Unexpected error: " + e.getMessage());
174

    
175
    } catch (InvalidToken e) {
176
	    e.printStackTrace();
177
	    fail("Unexpected error: " + e.getMessage());
178
	    
179
    } catch (ServiceFailure e) {
180
	    e.printStackTrace();
181
	    fail("Unexpected error: " + e.getMessage());
182
	    
183
    } catch (NotAuthorized e) {
184
	    e.printStackTrace();
185
	    fail("Unexpected error: " + e.getMessage());
186
	    
187
    } catch (IdentifierNotUnique e) {
188
	    e.printStackTrace();
189
	    fail("Unexpected error: " + e.getMessage());
190
	    
191
    } catch (UnsupportedType e) {
192
	    e.printStackTrace();
193
	    fail("Unexpected error: " + e.getMessage());
194
	    
195
    } catch (InsufficientResources e) {
196
	    e.printStackTrace();
197
	    fail("Unexpected error: " + e.getMessage());
198
	    
199
    } catch (InvalidSystemMetadata e) {
200
	    e.printStackTrace();
201
	    fail("Unexpected error: " + e.getMessage());
202
	    
203
    } catch (NotImplemented e) {
204
	    e.printStackTrace();
205
	    fail("Unexpected error: " + e.getMessage());
206
	    
207
    } catch (InvalidRequest e) {
208
	    e.printStackTrace();
209
	    fail("Unexpected error: " + e.getMessage());
210
	    
211
    } catch (NotFound e) {
212
	    e.printStackTrace();
213
	    fail("Unexpected error: " + e.getMessage());
214
	    
215
    } catch (Exception e) {
216
	    e.printStackTrace();
217
	    fail("Unexpected error: " + e.getMessage());
218
	    
219
    }
220

    
221
	}
222

    
223
	/**
224
	 * Test getting the system metadata of an object
225
	 */
226
	public void testGetSystemMetadata() {    
227
    printTestHeader("testGetSystemMetadata");
228

    
229
    try {
230
	    Session session = getTestSession();
231
	    Identifier guid = new Identifier();
232
	    guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
233
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
234
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
235
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
236
	    SystemMetadata newsysmeta = MNodeService.getInstance().getSystemMetadata(session, pid);
237
	    assertEquals(newsysmeta.getIdentifier().getValue(), sysmeta.getIdentifier().getValue());
238
	    
239
    } catch (UnsupportedEncodingException e) {
240
	    e.printStackTrace();
241
	    fail("Unexpected error: " + e.getMessage());
242

    
243
    } catch (InvalidToken e) {
244
	    e.printStackTrace();	    
245
	    fail("Unexpected error: " + e.getMessage());
246

    
247
    } catch (ServiceFailure e) {
248
	    e.printStackTrace();
249
	    fail("Unexpected error: " + e.getMessage());
250

    
251
    } catch (NotAuthorized e) {
252
	    e.printStackTrace();
253
	    fail("Unexpected error: " + e.getMessage());
254

    
255
    } catch (IdentifierNotUnique e) {
256
	    e.printStackTrace();
257
	    fail("Unexpected error: " + e.getMessage());
258
	    
259
    } catch (UnsupportedType e) {
260
	    e.printStackTrace();
261
	    fail("Unexpected error: " + e.getMessage());
262

    
263
    } catch (InsufficientResources e) {
264
	    e.printStackTrace();
265
	    fail("Unexpected error: " + e.getMessage());
266

    
267
    } catch (InvalidSystemMetadata e) {
268
	    e.printStackTrace();
269
	    fail("Unexpected error: " + e.getMessage());
270

    
271
    } catch (NotImplemented e) {
272
	    e.printStackTrace();
273
	    fail("Unexpected error: " + e.getMessage());
274

    
275
    } catch (InvalidRequest e) {
276
	    e.printStackTrace();
277
	    fail("Unexpected error: " + e.getMessage());
278

    
279
    } catch (NotFound e) {
280
	    e.printStackTrace();
281
	    fail("Unexpected error: " + e.getMessage());
282

    
283
    } catch (Exception e) {
284
	    e.printStackTrace();
285
	    fail("Unexpected error: " + e.getMessage());
286

    
287
    }
288
    
289
	}
290

    
291
	/**
292
	 * Test object creation
293
	 */
294
	public void testCreate() {
295
    printTestHeader("testCreate");
296
    
297
		try {
298
	    Session session = getTestSession();
299
	    Identifier guid = new Identifier();
300
	    guid.setValue("testCreate." + System.currentTimeMillis());
301
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
302
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
303
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
304
	    assertEquals(guid, pid);
305
    } catch (UnsupportedEncodingException e) {
306
	    e.printStackTrace();
307
	    fail("Unexpected error: " + e.getMessage());
308

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

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

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

    
321
    } catch (IdentifierNotUnique e) {
322
	    e.printStackTrace();
323
	    fail("Unexpected error: " + e.getMessage());
324

    
325
    } catch (UnsupportedType e) {
326
	    e.printStackTrace();
327
	    fail("Unexpected error: " + e.getMessage());
328

    
329
    } catch (InsufficientResources e) {
330
	    e.printStackTrace();
331
	    fail("Unexpected error: " + e.getMessage());
332

    
333
    } catch (InvalidSystemMetadata e) {
334
	    e.printStackTrace();
335
	    fail("Unexpected error: " + e.getMessage());
336

    
337
    } catch (NotImplemented e) {
338
	    e.printStackTrace();
339
	    fail("Unexpected error: " + e.getMessage());
340

    
341
    } catch (InvalidRequest e) {
342
	    e.printStackTrace();
343
	    fail("Unexpected error: " + e.getMessage());
344

    
345
    } catch (Exception e) {
346
	    e.printStackTrace();
347
	    fail("Unexpected error: " + e.getMessage());
348

    
349
    }
350
      
351
  }
352

    
353
	/**
354
	 * test object deletion
355
	 */
356
	public void testDelete() {
357
    printTestHeader("testDelete");
358

    
359
		try {
360
	    Session session = getTestSession();
361
	    Identifier guid = new Identifier();
362
	    guid.setValue("testDelete." + System.currentTimeMillis());
363
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
364
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
365
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
366
      Identifier deletedPid = MNodeService.getInstance().delete(session, pid);
367
      assertEquals(pid, deletedPid);
368
      
369
		} catch (UnsupportedEncodingException e) {
370
	    e.printStackTrace();
371
	    
372
    } catch (Exception e) {
373
	    e.printStackTrace();
374
	    fail("Unexpected error: " + e.getMessage());
375

    
376
    } 
377

    
378
	}
379

    
380
	/**
381
	 * Test object updating
382
	 */
383
	public void testUpdate() {
384
    printTestHeader("testUpdate");
385
    
386
		try {
387
	    Session session = getTestSession();
388
	    Identifier guid = new Identifier();
389
	    guid.setValue("testUpdate." + System.currentTimeMillis());
390
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
391
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
392
	    Identifier newPid = new Identifier();
393
	    newPid.setValue("testUpdate." + System.currentTimeMillis());
394
	    Identifier pid = 
395
	    	MNodeService.getInstance().create(session, guid, object, sysmeta);
396
	    // TODO: before update(), modify the system metadata
397
	    
398
	    Identifier updatedPid = 
399
	    	MNodeService.getInstance().update(session, pid, object, newPid, sysmeta);
400
	    assertEquals(updatedPid.getValue(), newPid.getValue());
401
	    
402
    } catch (UnsupportedEncodingException e) {
403
	    e.printStackTrace();
404
	    fail("Unexpected error: " + e.getMessage());
405

    
406
    } catch (InvalidToken e) {
407
	    e.printStackTrace();
408
	    fail("Unexpected error: " + e.getMessage());
409

    
410
    } catch (ServiceFailure e) {
411
	    e.printStackTrace();
412
	    fail("Unexpected error: " + e.getMessage());
413

    
414
    } catch (NotAuthorized e) {
415
	    e.printStackTrace();
416
	    fail("Unexpected error: " + e.getMessage());
417

    
418
    } catch (IdentifierNotUnique e) {
419
	    e.printStackTrace();
420
	    fail("Unexpected error: " + e.getMessage());
421

    
422
    } catch (UnsupportedType e) {
423
	    e.printStackTrace();
424
	    fail("Unexpected error: " + e.getMessage());
425

    
426
    } catch (InsufficientResources e) {
427
	    e.printStackTrace();
428
	    fail("Unexpected error: " + e.getMessage());
429

    
430
    } catch (InvalidSystemMetadata e) {
431
	    e.printStackTrace();
432
	    fail("Unexpected error: " + e.getMessage());
433

    
434
    } catch (NotImplemented e) {
435
	    e.printStackTrace();
436
	    fail("Unexpected error: " + e.getMessage());
437

    
438
    } catch (InvalidRequest e) {
439
	    e.printStackTrace();
440
	    fail("Unexpected error: " + e.getMessage());
441

    
442
    } catch (Exception e) {
443
	    e.printStackTrace();
444
	    fail("Unexpected error: " + e.getMessage());
445

    
446
    }
447
	}
448

    
449
	public void testReplicate() {
450
		fail("Not yet implemented");
451
	}
452

    
453
	/**
454
	 * Test describing an object
455
	 */
456
	public void testDescribe() {
457
    printTestHeader("testDescribe");
458

    
459
    try {
460
	    Session session = getTestSession();
461
	    Identifier guid = new Identifier();
462
	    guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
463
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
464
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
465
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
466
	    DescribeResponse describeResponse = MNodeService.getInstance().describe(session, pid);
467
	    assertEquals(describeResponse.getDataONE_Checksum().getValue(), sysmeta.getChecksum().getValue());
468
	    assertEquals(describeResponse.getDataONE_ObjectFormat().getFormatName(), sysmeta.getObjectFormat().getFormatName());
469
	    
470
    } catch (UnsupportedEncodingException e) {
471
	    e.printStackTrace();
472
	    fail("Unexpected error: " + e.getMessage());
473

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

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

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

    
486
    } catch (IdentifierNotUnique e) {
487
	    e.printStackTrace();
488
	    fail("Unexpected error: " + e.getMessage());
489
	    
490
    } catch (UnsupportedType e) {
491
	    e.printStackTrace();
492
	    fail("Unexpected error: " + e.getMessage());
493

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

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

    
502
    } catch (NotImplemented e) {
503
	    e.printStackTrace();
504
	    fail("Unexpected error: " + e.getMessage());
505

    
506
    } catch (InvalidRequest e) {
507
	    e.printStackTrace();
508
	    fail("Unexpected error: " + e.getMessage());
509

    
510
    } catch (NotFound e) {
511
	    e.printStackTrace();
512
	    fail("Unexpected error: " + e.getMessage());
513

    
514
    } catch (Exception e) {
515
	    e.printStackTrace();
516
	    fail("Unexpected error: " + e.getMessage());
517

    
518
    }
519
	}
520

    
521
	/**
522
	 * Test getting the checksum of an object
523
	 */
524
	public void testGetChecksum() {
525
    printTestHeader("testGetChecksum");
526

    
527
	  try {
528
	    Session session = getTestSession();
529
	    Identifier guid = new Identifier();
530
	    guid.setValue("testGetChecksum." + System.currentTimeMillis());
531
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
532
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
533
	    Identifier pid = MNodeService.getInstance().create(session, guid, object, sysmeta);
534
	    Checksum checksum = MNodeService.getInstance().getChecksum(session, pid, "MD5");
535
	    assertEquals(checksum.getValue(), sysmeta.getChecksum().getValue());
536
    
537
	  } catch (UnsupportedEncodingException e) {
538
	    e.printStackTrace();
539
	    fail("Unexpected error: " + e.getMessage());
540

    
541
    } catch (InvalidToken e) {
542
	    e.printStackTrace();
543
	    fail("Unexpected error: " + e.getMessage());
544

    
545
    } catch (ServiceFailure e) {
546
	    e.printStackTrace();
547
	    fail("Unexpected error: " + e.getMessage());
548

    
549
    } catch (NotAuthorized e) {
550
	    e.printStackTrace();
551
	    fail("Unexpected error: " + e.getMessage());
552

    
553
    } catch (IdentifierNotUnique e) {
554
	    e.printStackTrace();
555
	    fail("Unexpected error: " + e.getMessage());
556

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

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

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

    
569
    } catch (NotImplemented e) {
570
	    e.printStackTrace();
571
	    fail("Unexpected error: " + e.getMessage());
572

    
573
    } catch (InvalidRequest e) {
574
	    e.printStackTrace();
575
	    fail("Unexpected error: " + e.getMessage());
576

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

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

    
585
    }
586
	  
587
	}
588

    
589
	/**
590
	 * Testing listing objects on the Member Node
591
	 */
592
	public void testListObjects() {
593
	    printTestHeader("testListObjects");
594
	
595
	    try {
596
	
597
		    Session session = getTestSession();
598
		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
599
		    Date startTime = sdf.parse("2010-01-01");
600
		    Date endTime = new Date();
601
		    ObjectFormat objectFormat = null;
602
		    boolean replicaStatus = false;
603
		    int start = 0;
604
		    int count = 1;
605
	    
606
		    // insert at least one object 
607
		    testCreate();
608
		    // now check that we have at least one
609
		    ObjectList objectList = 
610
		    	MNodeService.getInstance().listObjects(session, startTime, endTime, 
611
		    		objectFormat, replicaStatus, start, count);
612
		    assertNotNull(objectList);
613
		    assertTrue(objectList.getCount() == count);
614
		    assertTrue(objectList.getStart() == 0);
615
		    assertTrue(objectList.getTotal() > 1);
616
		    
617
	    } catch (Exception e) {
618
		    e.printStackTrace();
619
		    fail("Unexpected error: " + e.getMessage());
620
	
621
	    }
622
	}
623

    
624
	public void testGetCapabilities() {
625
		try {
626
			Node node = MNodeService.getInstance().getCapabilities();
627
			assertNotNull(node);
628
			// TODO: should probably test other parts of the node information
629
		} catch (Exception e) {
630
			e.printStackTrace();
631
			fail("Probably not yet implemented: " + e.getMessage());
632
		}
633
		
634
	}
635

    
636
	public void testGetOperationStatistics() {
637
		try {
638
			Session session = getTestSession();
639
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
640
		    Date startTime = sdf.parse("2010-01-01");
641
		    Date endTime = new Date();
642
			MonitorList monitorList = 
643
				MNodeService.getInstance().getOperationStatistics(
644
						session, 
645
						startTime, 
646
						endTime, 
647
						session.getSubject(), 
648
						Event.READ, 
649
						null //formatId
650
						);
651
			
652
			assertNotNull(monitorList);
653
			// TODO: should probably test other parts of the information
654
		} catch (Exception e) {
655
			e.printStackTrace();
656
			fail("Probably not yet implemented: " + e.getMessage());
657
		}
658
	}
659

    
660
	public void testPing() {
661

    
662
		try {
663
	    boolean pingable = MNodeService.getInstance().ping();
664
	    assertTrue(pingable);
665
	    
666
    } catch (NotImplemented e) {
667
	    e.printStackTrace();
668
	    fail("Unexpected error: " + e.getMessage());
669

    
670
    } catch (ServiceFailure e) {
671
	    e.printStackTrace();
672
	    fail("Unexpected error: " + e.getMessage());
673

    
674
    } catch (NotAuthorized e) {
675
	    e.printStackTrace();
676
	    fail("Unexpected error: " + e.getMessage());
677

    
678
    } catch (InvalidRequest e) {
679
	    e.printStackTrace();
680
	    fail("Unexpected error: " + e.getMessage());
681

    
682
    } catch (InsufficientResources e) {
683
	    e.printStackTrace();
684
	    fail("Unexpected error: " + e.getMessage());
685

    
686
    } catch (UnsupportedType e) {
687
	    e.printStackTrace();
688
	    fail("Unexpected error: " + e.getMessage());
689

    
690
    }
691
		
692
	}
693

    
694
	public void testSynchronizationFailed() {
695
		fail("Not yet implemented");
696
	}
697

    
698
	public void testGetLogRecords() {
699
    printTestHeader("testLogRecords");
700

    
701
    Log log = null;
702
    Session session = getTestSession();
703
    Date fromDate = new Date();
704
    Calendar calendar = Calendar.getInstance();
705
    calendar.setTime(fromDate);
706
    calendar.roll(Calendar.YEAR, false);
707
    fromDate = calendar.getTime();
708
    Date toDate = new Date();
709
    Event event = Event.CREATE;
710
    int start = 0;
711
    int count = 1;
712
    
713
	  try {
714
	    log = MNodeService.getInstance().getLogRecords(session, fromDate, toDate, 
715
	    	event, start, count);
716
	    
717
	    assertNotNull(log);	    
718
	    assertTrue(log.getCount() == count);
719
	    assertTrue(log.getStart() == start);
720
	    assertTrue(log.getTotal() >= 1);
721
	    	
722
    } catch (InvalidToken e) {
723
	    e.printStackTrace();
724
	    fail("Unexpected error: " + e.getMessage());
725

    
726
    } catch (ServiceFailure e) {
727
	    e.printStackTrace();
728
	    fail("Unexpected error: " + e.getMessage());
729
	    
730
    } catch (NotAuthorized e) {
731
	    e.printStackTrace();
732
	    fail("Unexpected error: " + e.getMessage());
733
	    
734
    } catch (InvalidRequest e) {
735
	    e.printStackTrace();
736
	    fail("Unexpected error: " + e.getMessage());
737
	    
738
    } catch (NotImplemented e) {
739
	    e.printStackTrace();
740
	    fail("Unexpected error: " + e.getMessage());
741
	    
742
    }
743
	}
744

    
745
	/**
746
	 * Testing setting access on a known object
747
	 */
748
	public void testSetAccessPolicy() {
749
    printTestHeader("testSetAccess");
750
    
751
    boolean accessWasSet = false;
752
    
753
    try {
754
	    // create an object to set access on
755
	    Session session = getTestSession();
756
	    Identifier guid = new Identifier();
757
	    guid.setValue("testSetAccess." + System.currentTimeMillis());
758
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
759
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
760
	    Identifier pid = 
761
	    	MNodeService.getInstance().create(session, guid, object, sysmeta);
762
	    // set the access
763
	    AccessPolicy accessPolicy = new AccessPolicy();
764
	    AccessRule allow = new AccessRule();
765
	    allow.addPermission(Permission.WRITE);
766
	    Subject publicSubject = new Subject();
767
	    publicSubject.setValue(Constants.PUBLIC_SUBJECT);
768
	    allow.addSubject(publicSubject);
769
	    accessPolicy.addAllow(allow);
770
	    
771
	    accessWasSet = 
772
	    	MNodeService.getInstance().setAccessPolicy(session, pid, accessPolicy);
773
	    assertTrue(accessWasSet);
774
	    // test that it is enforced
775
	    session.setSubject(publicSubject);
776
	    boolean isAuthorized = MNodeService.getInstance().isAuthorized(session, pid, Permission.WRITE);
777
	    assertTrue(isAuthorized);
778

    
779
    } catch (UnsupportedEncodingException e) {
780
	    e.printStackTrace();
781
	    
782
    } catch (InvalidToken e) {
783
	    e.printStackTrace();
784
	    fail("Unexpected error: " + e.getMessage());
785
	    
786
    } catch (ServiceFailure e) {
787
	    e.printStackTrace();
788
	    fail("Unexpected error: " + e.getMessage());
789
	    
790
    } catch (NotAuthorized e) {
791
	    e.printStackTrace();
792
	    fail("Unexpected error: " + e.getMessage());
793
	    
794
    } catch (IdentifierNotUnique e) {
795
	    e.printStackTrace();
796
	    fail("Unexpected error: " + e.getMessage());
797
	    
798
    } catch (UnsupportedType e) {
799
	    e.printStackTrace();
800
	    fail("Unexpected error: " + e.getMessage());
801
	    
802
    } catch (InsufficientResources e) {
803
	    e.printStackTrace();
804
	    fail("Unexpected error: " + e.getMessage());
805
	    
806
    } catch (InvalidSystemMetadata e) {
807
	    e.printStackTrace();
808
	    fail("Unexpected error: " + e.getMessage());
809
	    
810
    } catch (NotImplemented e) {
811
	    e.printStackTrace();
812
	    fail("Unexpected error: " + e.getMessage());
813
	    
814
    } catch (InvalidRequest e) {
815
	    e.printStackTrace();
816
	    fail("Unexpected error: " + e.getMessage());
817
	    
818
    } catch (NotFound e) {
819
	    e.printStackTrace();
820
	    fail("Unexpected error: " + e.getMessage());
821
	    
822
    } catch (Exception e) {
823
	    e.printStackTrace();
824
	    fail("Unexpected error: " + e.getMessage());
825
	    
826
    }
827
	    
828
	}
829

    
830
	/**
831
	 * Test if a subject is authorized to read a known object
832
	 */
833
	public void testIsAuthorized() {
834
    printTestHeader("testIsAuthorized");
835
    
836
		try {
837
	    Session session = getTestSession();
838
	    Identifier guid = new Identifier();
839
	    guid.setValue("testIsAuthorized." + System.currentTimeMillis());
840
	    InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
841
	    SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
842
	    Identifier pid = 
843
	    	MNodeService.getInstance().create(session, guid, object, sysmeta);
844
	    boolean isAuthorized = 
845
	    	MNodeService.getInstance().isAuthorized(session, pid, Permission.READ);
846
	    assertEquals(isAuthorized, true);
847
	    
848
    } catch (UnsupportedEncodingException e) {
849
	    e.printStackTrace();
850
	    fail("Unexpected error: " + e.getMessage());
851

    
852
    } catch (InvalidToken e) {
853
	    e.printStackTrace();
854
	    fail("Unexpected error: " + e.getMessage());
855

    
856
    } catch (ServiceFailure e) {
857
	    e.printStackTrace();
858
	    fail("Unexpected error: " + e.getMessage());
859

    
860
    } catch (NotAuthorized e) {
861
	    e.printStackTrace();
862
	    fail("Unexpected error: " + e.getMessage());
863

    
864
    } catch (IdentifierNotUnique e) {
865
	    e.printStackTrace();
866
	    fail("Unexpected error: " + e.getMessage());
867

    
868
    } catch (UnsupportedType e) {
869
	    e.printStackTrace();
870
	    fail("Unexpected error: " + e.getMessage());
871

    
872
    } catch (InsufficientResources e) {
873
	    e.printStackTrace();
874
	    fail("Unexpected error: " + e.getMessage());
875

    
876
    } catch (InvalidSystemMetadata e) {
877
	    e.printStackTrace();
878
	    fail("Unexpected error: " + e.getMessage());
879

    
880
    } catch (NotImplemented e) {
881
	    e.printStackTrace();
882
	    fail("Unexpected error: " + e.getMessage());
883

    
884
    } catch (InvalidRequest e) {
885
	    e.printStackTrace();
886
	    fail("Unexpected error: " + e.getMessage());
887

    
888
    } catch (Exception e) {
889
	    e.printStackTrace();
890
	    fail("Unexpected error: " + e.getMessage());
891

    
892
    }
893
	}
894

    
895
  
896
	
897
	
898
}
(4-4/6)