Project

General

Profile

1 6309 cjones
/**
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 6338 cjones
29 6309 cjones
import java.io.ByteArrayInputStream;
30
import java.io.InputStream;
31
import java.io.UnsupportedEncodingException;
32 6326 leinfelder
import java.text.SimpleDateFormat;
33 6312 cjones
import java.util.Calendar;
34 6309 cjones
import java.util.Date;
35
36
import junit.framework.Test;
37
import junit.framework.TestSuite;
38
39 6324 leinfelder
import org.apache.commons.io.IOUtils;
40 6348 leinfelder
import org.dataone.configuration.Settings;
41 6372 leinfelder
import org.dataone.service.util.Constants;
42 6309 cjones
import org.dataone.service.exceptions.IdentifierNotUnique;
43
import org.dataone.service.exceptions.InsufficientResources;
44
import org.dataone.service.exceptions.InvalidRequest;
45
import org.dataone.service.exceptions.InvalidSystemMetadata;
46
import org.dataone.service.exceptions.InvalidToken;
47
import org.dataone.service.exceptions.NotAuthorized;
48
import org.dataone.service.exceptions.NotFound;
49
import org.dataone.service.exceptions.NotImplemented;
50
import org.dataone.service.exceptions.ServiceFailure;
51 6333 leinfelder
import org.dataone.service.exceptions.SynchronizationFailed;
52 6309 cjones
import org.dataone.service.exceptions.UnsupportedType;
53 6366 leinfelder
import org.dataone.service.types.v1.AccessPolicy;
54
import org.dataone.service.types.v1.AccessRule;
55
import org.dataone.service.types.v1.Checksum;
56
import org.dataone.service.types.v1.DescribeResponse;
57
import org.dataone.service.types.v1.Event;
58
import org.dataone.service.types.v1.Identifier;
59
import org.dataone.service.types.v1.Log;
60
import org.dataone.service.types.v1.MonitorList;
61
import org.dataone.service.types.v1.Node;
62
import org.dataone.service.types.v1.NodeReference;
63
import org.dataone.service.types.v1.ObjectFormatIdentifier;
64
import org.dataone.service.types.v1.ObjectList;
65
import org.dataone.service.types.v1.Permission;
66
import org.dataone.service.types.v1.Session;
67
import org.dataone.service.types.v1.Subject;
68
import org.dataone.service.types.v1.SystemMetadata;
69 6309 cjones
import org.junit.After;
70
import org.junit.Before;
71
72
/**
73
 * A JUnit test to exercise the Metacat Member Node service implementation.
74
 * This also tests a few of the D1NodeService superclass methods
75
 *
76
 * @author cjones
77
 *
78
 */
79 6324 leinfelder
public class MNodeServiceTest extends D1NodeServiceTest {
80 6309 cjones
81 6354 cjones
  /**
82
   * Set up the test fixtures
83
   *
84
   * @throws Exception
85
   */
86
  @Before
87
  public void setUp() throws Exception {
88
    super.setUp();
89
    // set up the configuration for d1client
90
    Settings.getConfiguration().setProperty("D1Client.cnClassName", MockCNode.class.getName());
91
  }
92 6309 cjones
93 6354 cjones
  /**
94
   * Remove the test fixtures
95
   */
96
  @After
97
  public void tearDown() {
98
  }
99
100
  /**
101
   * Build the test suite
102
   * @return
103
   */
104
  public static Test suite() {
105
106
    TestSuite suite = new TestSuite();
107 6309 cjones
    suite.addTest(new MNodeServiceTest("initialize"));
108
    // MNStorage tests
109
    suite.addTest(new MNodeServiceTest("testCreate"));
110 6314 cjones
    suite.addTest(new MNodeServiceTest("testUpdate"));
111
    suite.addTest(new MNodeServiceTest("testDelete"));
112 6309 cjones
    // MNRead tests
113 6314 cjones
    suite.addTest(new MNodeServiceTest("testGet"));
114
    suite.addTest(new MNodeServiceTest("testGetChecksum"));
115
    suite.addTest(new MNodeServiceTest("testGetSystemMetadata"));
116
    suite.addTest(new MNodeServiceTest("testDescribe"));
117 6326 leinfelder
    suite.addTest(new MNodeServiceTest("testListObjects"));
118 6333 leinfelder
    suite.addTest(new MNodeServiceTest("testSynchronizationFailed"));
119 6309 cjones
    // MNCore tests
120
    suite.addTest(new MNodeServiceTest("testPing"));
121
    suite.addTest(new MNodeServiceTest("testGetLogRecords"));
122 6327 leinfelder
    suite.addTest(new MNodeServiceTest("testGetOperationStatistics"));
123
    suite.addTest(new MNodeServiceTest("testGetCapabilities"));
124 6329 leinfelder
    // include these when they are part of the MN interface definitions
125 6327 leinfelder
    // suite.addTest(new MNodeServiceTest("testGetObjectStatistics"));
126
    // suite.addTest(new MNodeServiceTest("testGetStatus"));
127 6309 cjones
    // MNAuthorization tests
128 6325 leinfelder
    suite.addTest(new MNodeServiceTest("testIsAuthorized"));
129
    suite.addTest(new MNodeServiceTest("testSetAccessPolicy"));
130 6309 cjones
    // MNreplication tests
131 6329 leinfelder
    suite.addTest(new MNodeServiceTest("testReplicate"));
132 6309 cjones
133 6354 cjones
134
    return suite;
135
136
  }
137
138
  /**
139
   * Constructor for the tests
140
   *
141
   * @param name - the name of the test
142
   */
143
  public MNodeServiceTest(String name) {
144
    super(name);
145
146
  }
147 6309 cjones
148 6354 cjones
  /**
149
   * Initial blank test
150
   */
151
  public void initialize() {
152
    assertTrue(1 == 1);
153
154
  }
155
156
  /**
157
   * Test getting a known object
158
   */
159
  public void testGet() {
160 6309 cjones
    printTestHeader("testGet");
161
162 6354 cjones
    try {
163
      Session session = getTestSession();
164
      Identifier guid = new Identifier();
165
      guid.setValue("testGet." + System.currentTimeMillis());
166
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
167
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
168 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
169
      InputStream result = MNodeService.getInstance(request).get(session, guid);
170 6354 cjones
      // go back to beginning of original stream
171
      object.reset();
172
      // check
173
      assertTrue(object.available() > 0);
174
      assertTrue(result.available() > 0);
175
      assertTrue(IOUtils.contentEquals(result, object));
176
177 6309 cjones
    } catch (UnsupportedEncodingException e) {
178 6354 cjones
      e.printStackTrace();
179
      fail("Unexpected error: " + e.getMessage());
180 6309 cjones
181
    } catch (InvalidToken e) {
182 6354 cjones
      e.printStackTrace();
183
      fail("Unexpected error: " + e.getMessage());
184
185 6309 cjones
    } catch (ServiceFailure e) {
186 6354 cjones
      e.printStackTrace();
187
      fail("Unexpected error: " + e.getMessage());
188
189 6309 cjones
    } catch (NotAuthorized e) {
190 6354 cjones
      e.printStackTrace();
191
      fail("Unexpected error: " + e.getMessage());
192
193 6309 cjones
    } catch (IdentifierNotUnique e) {
194 6354 cjones
      e.printStackTrace();
195
      fail("Unexpected error: " + e.getMessage());
196
197 6309 cjones
    } catch (UnsupportedType e) {
198 6354 cjones
      e.printStackTrace();
199
      fail("Unexpected error: " + e.getMessage());
200
201 6309 cjones
    } catch (InsufficientResources e) {
202 6354 cjones
      e.printStackTrace();
203
      fail("Unexpected error: " + e.getMessage());
204
205 6309 cjones
    } catch (InvalidSystemMetadata e) {
206 6354 cjones
      e.printStackTrace();
207
      fail("Unexpected error: " + e.getMessage());
208
209 6309 cjones
    } catch (NotImplemented e) {
210 6354 cjones
      e.printStackTrace();
211
      fail("Unexpected error: " + e.getMessage());
212
213 6309 cjones
    } catch (InvalidRequest e) {
214 6354 cjones
      e.printStackTrace();
215
      fail("Unexpected error: " + e.getMessage());
216
217 6309 cjones
    } catch (NotFound e) {
218 6354 cjones
      e.printStackTrace();
219
      fail("Unexpected error: " + e.getMessage());
220
221 6309 cjones
    } catch (Exception e) {
222 6354 cjones
      e.printStackTrace();
223
      fail("Unexpected error: " + e.getMessage());
224
225 6309 cjones
    }
226
227 6354 cjones
  }
228 6309 cjones
229 6354 cjones
  /**
230
   * Test getting the system metadata of an object
231
   */
232
  public void testGetSystemMetadata() {
233 6309 cjones
    printTestHeader("testGetSystemMetadata");
234
235
    try {
236 6354 cjones
      Session session = getTestSession();
237
      Identifier guid = new Identifier();
238
      guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
239
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
240
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
241 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
242
      SystemMetadata newsysmeta = MNodeService.getInstance(request).getSystemMetadata(session, pid);
243 6354 cjones
      assertEquals(newsysmeta.getIdentifier().getValue(), sysmeta.getIdentifier().getValue());
244
245 6309 cjones
    } catch (UnsupportedEncodingException e) {
246 6354 cjones
      e.printStackTrace();
247
      fail("Unexpected error: " + e.getMessage());
248 6309 cjones
249
    } catch (InvalidToken e) {
250 6354 cjones
      e.printStackTrace();
251
      fail("Unexpected error: " + e.getMessage());
252 6309 cjones
253
    } catch (ServiceFailure e) {
254 6354 cjones
      e.printStackTrace();
255
      fail("Unexpected error: " + e.getMessage());
256 6309 cjones
257
    } catch (NotAuthorized e) {
258 6354 cjones
      e.printStackTrace();
259
      fail("Unexpected error: " + e.getMessage());
260 6309 cjones
261
    } catch (IdentifierNotUnique e) {
262 6354 cjones
      e.printStackTrace();
263
      fail("Unexpected error: " + e.getMessage());
264
265 6309 cjones
    } catch (UnsupportedType e) {
266 6354 cjones
      e.printStackTrace();
267
      fail("Unexpected error: " + e.getMessage());
268 6309 cjones
269
    } catch (InsufficientResources e) {
270 6354 cjones
      e.printStackTrace();
271
      fail("Unexpected error: " + e.getMessage());
272 6309 cjones
273
    } catch (InvalidSystemMetadata e) {
274 6354 cjones
      e.printStackTrace();
275
      fail("Unexpected error: " + e.getMessage());
276 6309 cjones
277
    } catch (NotImplemented e) {
278 6354 cjones
      e.printStackTrace();
279
      fail("Unexpected error: " + e.getMessage());
280 6309 cjones
281
    } catch (InvalidRequest e) {
282 6354 cjones
      e.printStackTrace();
283
      fail("Unexpected error: " + e.getMessage());
284 6309 cjones
285
    } catch (NotFound e) {
286 6354 cjones
      e.printStackTrace();
287
      fail("Unexpected error: " + e.getMessage());
288 6309 cjones
289
    } catch (Exception e) {
290 6354 cjones
      e.printStackTrace();
291
      fail("Unexpected error: " + e.getMessage());
292 6309 cjones
293
    }
294
295 6354 cjones
  }
296 6309 cjones
297 6354 cjones
  /**
298
   * Test object creation
299
   */
300
  public void testCreate() {
301 6309 cjones
    printTestHeader("testCreate");
302
303 6354 cjones
    try {
304
      Session session = getTestSession();
305
      Identifier guid = new Identifier();
306
      guid.setValue("testCreate." + System.currentTimeMillis());
307
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
308
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
309 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
310 6354 cjones
      assertEquals(guid.getValue(), pid.getValue());
311 6309 cjones
    } catch (UnsupportedEncodingException e) {
312 6354 cjones
      e.printStackTrace();
313
      fail("Unexpected error: " + e.getMessage());
314 6309 cjones
315
    } catch (InvalidToken e) {
316 6354 cjones
      e.printStackTrace();
317
      fail("Unexpected error: " + e.getMessage());
318 6309 cjones
319
    } catch (ServiceFailure e) {
320 6354 cjones
      e.printStackTrace();
321
      fail("Unexpected error: " + e.getMessage());
322 6309 cjones
323
    } catch (NotAuthorized e) {
324 6354 cjones
      e.printStackTrace();
325
      fail("Unexpected error: " + e.getMessage());
326 6309 cjones
327
    } catch (IdentifierNotUnique e) {
328 6354 cjones
      e.printStackTrace();
329
      fail("Unexpected error: " + e.getMessage());
330 6309 cjones
331
    } catch (UnsupportedType e) {
332 6354 cjones
      e.printStackTrace();
333
      fail("Unexpected error: " + e.getMessage());
334 6309 cjones
335
    } catch (InsufficientResources e) {
336 6354 cjones
      e.printStackTrace();
337
      fail("Unexpected error: " + e.getMessage());
338 6309 cjones
339
    } catch (InvalidSystemMetadata e) {
340 6354 cjones
      e.printStackTrace();
341
      fail("Unexpected error: " + e.getMessage());
342 6309 cjones
343
    } catch (NotImplemented e) {
344 6354 cjones
      e.printStackTrace();
345
      fail("Unexpected error: " + e.getMessage());
346 6309 cjones
347
    } catch (InvalidRequest e) {
348 6354 cjones
      e.printStackTrace();
349
      fail("Unexpected error: " + e.getMessage());
350 6309 cjones
351
    } catch (Exception e) {
352 6354 cjones
      e.printStackTrace();
353
      fail("Unexpected error: " + e.getMessage());
354 6309 cjones
355
    }
356
357
  }
358
359 6354 cjones
  /**
360
   * test object deletion
361
   */
362
  public void testDelete() {
363 6309 cjones
    printTestHeader("testDelete");
364
365 6354 cjones
    try {
366
      Session session = getTestSession();
367
      Identifier guid = new Identifier();
368
      guid.setValue("testDelete." + System.currentTimeMillis());
369
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
370
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
371 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
372
      Identifier deletedPid = MNodeService.getInstance(request).delete(session, pid);
373 6333 leinfelder
      assertEquals(pid.getValue(), deletedPid.getValue());
374 6309 cjones
375 6354 cjones
    } catch (UnsupportedEncodingException e) {
376
      e.printStackTrace();
377
378 6324 leinfelder
    } catch (Exception e) {
379 6354 cjones
      e.printStackTrace();
380
      fail("Unexpected error: " + e.getMessage());
381 6309 cjones
382 6324 leinfelder
    }
383 6309 cjones
384 6354 cjones
  }
385 6309 cjones
386 6354 cjones
  /**
387
   * Test object updating
388
   */
389
  public void testUpdate() {
390 6309 cjones
    printTestHeader("testUpdate");
391
392 6354 cjones
    try {
393
      Session session = getTestSession();
394
      Identifier guid = new Identifier();
395
      guid.setValue("testUpdate." + System.currentTimeMillis());
396
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
397
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
398
      Identifier newPid = new Identifier();
399 6596 leinfelder
      newPid.setValue("testUpdate." + (System.currentTimeMillis() + 1)); // ensure it is different from original
400 6354 cjones
      Identifier pid =
401 6542 leinfelder
        MNodeService.getInstance(request).create(session, guid, object, sysmeta);
402 6338 cjones
403 6354 cjones
      SystemMetadata newSysMeta = createSystemMetadata(newPid, session.getSubject(), object);
404
405
      // do the update
406
      Identifier updatedPid =
407 6542 leinfelder
        MNodeService.getInstance(request).update(session, pid, object, newPid, newSysMeta);
408 6338 cjones
409 6354 cjones
      // get the updated system metadata
410 6338 cjones
      SystemMetadata updatedSysMeta =
411 6542 leinfelder
        MNodeService.getInstance(request).getSystemMetadata(session, updatedPid);
412 6338 cjones
413 6354 cjones
      assertEquals(updatedPid.getValue(), newPid.getValue());
414 6366 leinfelder
//      assertTrue(updatedSysMeta.getObsolete(0).getValue().equals(pid.getValue()));
415
//      assertTrue(updatedSysMeta.getDerivedFrom(0).getValue().equals(pid.getValue()));
416 6354 cjones
417 6309 cjones
    } catch (UnsupportedEncodingException e) {
418 6354 cjones
      e.printStackTrace();
419
      fail("Unexpected error: " + e.getMessage());
420 6309 cjones
421
    } catch (InvalidToken e) {
422 6354 cjones
      e.printStackTrace();
423
      fail("Unexpected error: " + e.getMessage());
424 6309 cjones
425
    } catch (ServiceFailure e) {
426 6354 cjones
      e.printStackTrace();
427
      fail("Unexpected error: " + e.getMessage());
428 6309 cjones
429
    } catch (NotAuthorized e) {
430 6354 cjones
      e.printStackTrace();
431
      fail("Unexpected error: " + e.getMessage());
432 6309 cjones
433
    } catch (IdentifierNotUnique e) {
434 6354 cjones
      e.printStackTrace();
435
      fail("Unexpected error: " + e.getMessage());
436 6309 cjones
437
    } catch (UnsupportedType e) {
438 6354 cjones
      e.printStackTrace();
439
      fail("Unexpected error: " + e.getMessage());
440 6309 cjones
441
    } catch (InsufficientResources e) {
442 6354 cjones
      e.printStackTrace();
443
      fail("Unexpected error: " + e.getMessage());
444 6309 cjones
445
    } catch (InvalidSystemMetadata e) {
446 6354 cjones
      e.printStackTrace();
447
      fail("Unexpected error: " + e.getMessage());
448 6309 cjones
449
    } catch (NotImplemented e) {
450 6354 cjones
      e.printStackTrace();
451
      fail("Unexpected error: " + e.getMessage());
452 6309 cjones
453
    } catch (InvalidRequest e) {
454 6354 cjones
      e.printStackTrace();
455
      fail("Unexpected error: " + e.getMessage());
456 6309 cjones
457
    } catch (Exception e) {
458 6354 cjones
      e.printStackTrace();
459
      fail("Unexpected error: " + e.getMessage());
460 6309 cjones
461
    }
462 6354 cjones
  }
463 6309 cjones
464 6354 cjones
  /**
465
   * We currently expect this unit test to fail because it should rely on a different member node
466
   * to retrieve the object from. Currently it gets the object from itself and throws
467
   * and expected error for duplicate entry.
468
   *
469
   */
470
  public void testReplicate() {
471
      printTestHeader("testReplicate");
472
      try {
473
        Session session = getTestSession();
474
        Identifier guid = new Identifier();
475
        guid.setValue("testReplicate." + System.currentTimeMillis());
476
        InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
477
        SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
478
        // save locally
479 6542 leinfelder
        Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
480 6354 cjones
        // get our node reference (attempting to replicate with self)
481 6542 leinfelder
        NodeReference sourceNode = MNodeService.getInstance(request).getCapabilities().getIdentifier();
482 6354 cjones
        // attempt to replicate with ourselves -- this should fail!
483
      boolean result = false;
484
      try {
485 6542 leinfelder
        result = MNodeService.getInstance(request).replicate(session, sysmeta, sourceNode);
486 6354 cjones
      } catch (Exception inu) {
487
        // we are expecting this to fail since we already have the doc
488
        result = true;
489
      }
490
      assertTrue(result);
491
      } catch (Exception e) {
492
        e.printStackTrace();
493
      fail("Probably not yet implemented: " + e.getMessage());
494
    }
495
  }
496 6309 cjones
497 6354 cjones
  /**
498
   * Test describing an object
499
   */
500
  public void testDescribe() {
501 6314 cjones
    printTestHeader("testDescribe");
502 6309 cjones
503
    try {
504 6354 cjones
      Session session = getTestSession();
505
      Identifier guid = new Identifier();
506
      guid.setValue("testGetSystemMetadata." + System.currentTimeMillis());
507
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
508
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
509 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
510
      DescribeResponse describeResponse = MNodeService.getInstance(request).describe(session, pid);
511 6354 cjones
      assertEquals(describeResponse.getDataONE_Checksum().getValue(), sysmeta.getChecksum().getValue());
512 6597 leinfelder
      assertEquals(describeResponse.getDataONE_ObjectFormatIdentifier().getValue(), sysmeta.getFormatId().getValue());
513 6354 cjones
514 6309 cjones
    } catch (UnsupportedEncodingException e) {
515 6354 cjones
      e.printStackTrace();
516
      fail("Unexpected error: " + e.getMessage());
517 6309 cjones
518
    } catch (InvalidToken e) {
519 6354 cjones
      e.printStackTrace();
520
      fail("Unexpected error: " + e.getMessage());
521 6309 cjones
522
    } catch (ServiceFailure e) {
523 6354 cjones
      e.printStackTrace();
524
      fail("Unexpected error: " + e.getMessage());
525 6309 cjones
526
    } catch (NotAuthorized e) {
527 6354 cjones
      e.printStackTrace();
528
      fail("Unexpected error: " + e.getMessage());
529 6309 cjones
530
    } catch (IdentifierNotUnique e) {
531 6354 cjones
      e.printStackTrace();
532
      fail("Unexpected error: " + e.getMessage());
533
534 6309 cjones
    } catch (UnsupportedType e) {
535 6354 cjones
      e.printStackTrace();
536
      fail("Unexpected error: " + e.getMessage());
537 6309 cjones
538
    } catch (InsufficientResources e) {
539 6354 cjones
      e.printStackTrace();
540
      fail("Unexpected error: " + e.getMessage());
541 6309 cjones
542
    } catch (InvalidSystemMetadata e) {
543 6354 cjones
      e.printStackTrace();
544
      fail("Unexpected error: " + e.getMessage());
545 6309 cjones
546
    } catch (NotImplemented e) {
547 6354 cjones
      e.printStackTrace();
548
      fail("Unexpected error: " + e.getMessage());
549 6309 cjones
550
    } catch (InvalidRequest e) {
551 6354 cjones
      e.printStackTrace();
552
      fail("Unexpected error: " + e.getMessage());
553 6309 cjones
554
    } catch (NotFound e) {
555 6354 cjones
      e.printStackTrace();
556
      fail("Unexpected error: " + e.getMessage());
557 6309 cjones
558
    } catch (Exception e) {
559 6354 cjones
      e.printStackTrace();
560
      fail("Unexpected error: " + e.getMessage());
561 6309 cjones
562
    }
563 6354 cjones
  }
564 6309 cjones
565 6354 cjones
  /**
566
   * Test getting the checksum of an object
567
   */
568
  public void testGetChecksum() {
569 6309 cjones
    printTestHeader("testGetChecksum");
570
571 6354 cjones
    try {
572
      Session session = getTestSession();
573
      Identifier guid = new Identifier();
574
      guid.setValue("testGetChecksum." + System.currentTimeMillis());
575
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
576
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
577 6542 leinfelder
      Identifier pid = MNodeService.getInstance(request).create(session, guid, object, sysmeta);
578
      Checksum checksum = MNodeService.getInstance(request).getChecksum(session, pid, "MD5");
579 6354 cjones
      assertEquals(checksum.getValue(), sysmeta.getChecksum().getValue());
580 6309 cjones
581 6354 cjones
    } catch (UnsupportedEncodingException e) {
582
      e.printStackTrace();
583
      fail("Unexpected error: " + e.getMessage());
584 6309 cjones
585
    } catch (InvalidToken e) {
586 6354 cjones
      e.printStackTrace();
587
      fail("Unexpected error: " + e.getMessage());
588 6309 cjones
589
    } catch (ServiceFailure e) {
590 6354 cjones
      e.printStackTrace();
591
      fail("Unexpected error: " + e.getMessage());
592 6309 cjones
593
    } catch (NotAuthorized e) {
594 6354 cjones
      e.printStackTrace();
595
      fail("Unexpected error: " + e.getMessage());
596 6309 cjones
597
    } catch (IdentifierNotUnique e) {
598 6354 cjones
      e.printStackTrace();
599
      fail("Unexpected error: " + e.getMessage());
600 6309 cjones
601
    } catch (UnsupportedType e) {
602 6354 cjones
      e.printStackTrace();
603
      fail("Unexpected error: " + e.getMessage());
604 6309 cjones
605
    } catch (InsufficientResources e) {
606 6354 cjones
      e.printStackTrace();
607
      fail("Unexpected error: " + e.getMessage());
608 6309 cjones
609
    } catch (InvalidSystemMetadata e) {
610 6354 cjones
      e.printStackTrace();
611
      fail("Unexpected error: " + e.getMessage());
612 6309 cjones
613
    } catch (NotImplemented e) {
614 6354 cjones
      e.printStackTrace();
615
      fail("Unexpected error: " + e.getMessage());
616 6309 cjones
617
    } catch (InvalidRequest e) {
618 6354 cjones
      e.printStackTrace();
619
      fail("Unexpected error: " + e.getMessage());
620 6309 cjones
621
    } catch (NotFound e) {
622 6354 cjones
      e.printStackTrace();
623
      fail("Unexpected error: " + e.getMessage());
624 6309 cjones
625
    } catch (Exception e) {
626 6354 cjones
      e.printStackTrace();
627
      fail("Unexpected error: " + e.getMessage());
628 6309 cjones
629
    }
630 6354 cjones
631
  }
632 6309 cjones
633 6354 cjones
  /**
634
   * Testing listing objects on the Member Node
635
   */
636
  public void testListObjects() {
637
      printTestHeader("testListObjects");
638
639
      try {
640
641
        Session session = getTestSession();
642
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
643
        Date startTime = sdf.parse("2010-01-01");
644
        Date endTime = new Date();
645
        ObjectFormatIdentifier objectFormatId = null;
646
        boolean replicaStatus = false;
647
        int start = 0;
648
        int count = 1;
649
650
        // insert at least one object
651
        testCreate();
652
        // now check that we have at least one
653
        ObjectList objectList =
654 6542 leinfelder
          MNodeService.getInstance(request).listObjects(session, startTime, endTime,
655 6354 cjones
              objectFormatId, replicaStatus, start, count);
656
        assertNotNull(objectList);
657
        assertTrue(objectList.getCount() == count);
658
        assertTrue(objectList.getStart() == 0);
659
        assertTrue(objectList.getTotal() > 1);
660
661
      } catch (Exception e) {
662
        e.printStackTrace();
663
        fail("Unexpected error: " + e.getMessage());
664
665
      }
666
  }
667 6309 cjones
668 6354 cjones
  public void testGetCapabilities() {
669
      printTestHeader("testGetCapabilities");
670
    try {
671 6542 leinfelder
      Node node = MNodeService.getInstance(request).getCapabilities();
672 6354 cjones
      assertNotNull(node);
673
      // TODO: should probably test other parts of the node information
674
    } catch (Exception e) {
675
      e.printStackTrace();
676
      fail("Probably not yet implemented: " + e.getMessage());
677
    }
678
679
  }
680 6309 cjones
681 6354 cjones
  public void testGetOperationStatistics() {
682
      printTestHeader("testGetOperationStatistics");
683
    try {
684
      Session session = getTestSession();
685
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
686
        Date startTime = sdf.parse("2010-01-01");
687
        Date endTime = new Date();
688
      MonitorList monitorList =
689 6542 leinfelder
        MNodeService.getInstance(request).getOperationStatistics(
690 6354 cjones
            session,
691
            startTime,
692
            endTime,
693
            session.getSubject(),
694
            Event.CREATE,
695
            null //formatId
696
            );
697
698
      assertNotNull(monitorList);
699
      // TODO: should probably test other parts of the information
700
    } catch (Exception e) {
701
      e.printStackTrace();
702
      fail("Probably not yet implemented: " + e.getMessage());
703
    }
704
  }
705 6309 cjones
706 6354 cjones
  public void testPing() {
707 6309 cjones
708 6354 cjones
    try {
709 6542 leinfelder
      boolean pingable = MNodeService.getInstance(request).ping();
710 6354 cjones
      assertTrue(pingable);
711
712 6309 cjones
    } catch (NotImplemented e) {
713 6354 cjones
      e.printStackTrace();
714
      fail("Unexpected error: " + e.getMessage());
715 6309 cjones
716
    } catch (ServiceFailure e) {
717 6354 cjones
      e.printStackTrace();
718
      fail("Unexpected error: " + e.getMessage());
719 6309 cjones
720
    } catch (NotAuthorized e) {
721 6354 cjones
      e.printStackTrace();
722
      fail("Unexpected error: " + e.getMessage());
723 6309 cjones
724
    } catch (InvalidRequest e) {
725 6354 cjones
      e.printStackTrace();
726
      fail("Unexpected error: " + e.getMessage());
727 6309 cjones
728
    } catch (InsufficientResources e) {
729 6354 cjones
      e.printStackTrace();
730
      fail("Unexpected error: " + e.getMessage());
731 6309 cjones
732
    } catch (UnsupportedType e) {
733 6354 cjones
      e.printStackTrace();
734
      fail("Unexpected error: " + e.getMessage());
735 6309 cjones
736
    }
737 6354 cjones
738
  }
739 6309 cjones
740 6354 cjones
  public void testSynchronizationFailed() {
741
    printTestHeader("testSynchronizationFailed");
742
    try {
743
        Session session = getTestSession();
744
745
        // create the object
746
        Identifier pid = new Identifier();
747
        pid.setValue("testSynchronizationFailed." + System.currentTimeMillis());
748
        InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
749
        SystemMetadata sysmeta = createSystemMetadata(pid, session.getSubject(), object);
750 6542 leinfelder
        Identifier retPid = MNodeService.getInstance(request).create(session, pid, object, sysmeta);
751 6354 cjones
        assertEquals(retPid.getValue(), pid.getValue());
752
753
        // pretend the sync failed
754
      SynchronizationFailed syncFailed =
755
        new SynchronizationFailed("0000", "Testing Synch Failure");
756 6366 leinfelder
      syncFailed.setPid(pid.getValue());
757 6542 leinfelder
      MNodeService.getInstance(request).synchronizationFailed(session, syncFailed );
758 6354 cjones
    } catch (Exception e) {
759
      e.printStackTrace();
760
        fail("Unexpected error: " + e.getMessage());
761
    }
762 6333 leinfelder
763 6354 cjones
  }
764 6309 cjones
765 6354 cjones
  public void testGetLogRecords() {
766 6312 cjones
    printTestHeader("testLogRecords");
767 6309 cjones
768
    Log log = null;
769
    Session session = getTestSession();
770 6312 cjones
    Date fromDate = new Date();
771
    Calendar calendar = Calendar.getInstance();
772
    calendar.setTime(fromDate);
773
    calendar.roll(Calendar.YEAR, false);
774
    fromDate = calendar.getTime();
775 6309 cjones
    Date toDate = new Date();
776
    Event event = Event.CREATE;
777 6324 leinfelder
    int start = 0;
778
    int count = 1;
779 6309 cjones
780 6354 cjones
    try {
781 6542 leinfelder
      log = MNodeService.getInstance(request).getLogRecords(session, fromDate, toDate,
782 6354 cjones
        event, start, count);
783
784
      assertNotNull(log);
785
      assertTrue(log.getCount() == count);
786
      assertTrue(log.getStart() == start);
787
      assertTrue(log.getTotal() >= 1);
788
789 6309 cjones
    } catch (InvalidToken e) {
790 6354 cjones
      e.printStackTrace();
791
      fail("Unexpected error: " + e.getMessage());
792 6309 cjones
793
    } catch (ServiceFailure e) {
794 6354 cjones
      e.printStackTrace();
795
      fail("Unexpected error: " + e.getMessage());
796
797 6309 cjones
    } catch (NotAuthorized e) {
798 6354 cjones
      e.printStackTrace();
799
      fail("Unexpected error: " + e.getMessage());
800
801 6309 cjones
    } catch (InvalidRequest e) {
802 6354 cjones
      e.printStackTrace();
803
      fail("Unexpected error: " + e.getMessage());
804
805 6309 cjones
    } catch (NotImplemented e) {
806 6354 cjones
      e.printStackTrace();
807
      fail("Unexpected error: " + e.getMessage());
808
809 6309 cjones
    }
810 6354 cjones
  }
811 6309 cjones
812 6354 cjones
  /**
813
   * Testing setting access on a known object
814
   */
815
  public void testSetAccessPolicy() {
816 6309 cjones
    printTestHeader("testSetAccess");
817
818 6577 cjones
    //boolean accessWasSet = false;
819
    //
820
    //try {
821
    //  // create an object to set access on
822
    //  Session session = getTestSession();
823
    //  Identifier guid = new Identifier();
824
    //  guid.setValue("testSetAccess." + System.currentTimeMillis());
825
    //  InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
826
    //  SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
827
    //  Identifier pid =
828
    //    MNodeService.getInstance(request).create(session, guid, object, sysmeta);
829
    //  // set the access
830
    //  AccessPolicy accessPolicy = new AccessPolicy();
831
    //  AccessRule allow = new AccessRule();
832
    //  allow.addPermission(Permission.WRITE);
833
    //  Subject publicSubject = new Subject();
834
    //  publicSubject.setValue(Constants.SUBJECT_PUBLIC);
835
    //  allow.addSubject(publicSubject);
836
    //  accessPolicy.addAllow(allow);
837
    //
838
    //  accessWasSet =
839
    //    MNodeService.getInstance(request).setAccessPolicy(session, pid, accessPolicy);
840
    //  assertTrue(accessWasSet);
841
    //  // test that it is enforced
842
    //  session.setSubject(publicSubject);
843
    //  boolean isAuthorized = MNodeService.getInstance(request).isAuthorized(session, pid, Permission.WRITE);
844
    //  assertTrue(isAuthorized);
845
    //
846
    //} catch (UnsupportedEncodingException e) {
847
    //  e.printStackTrace();
848
    //
849
    //} catch (InvalidToken e) {
850
    //  e.printStackTrace();
851
    //  fail("Unexpected error: " + e.getMessage());
852
    //
853
    //} catch (ServiceFailure e) {
854
    //  e.printStackTrace();
855
    //  fail("Unexpected error: " + e.getMessage());
856
    //
857
    //} catch (NotAuthorized e) {
858
    //  e.printStackTrace();
859
    //  fail("Unexpected error: " + e.getMessage());
860
    //
861
    //} catch (IdentifierNotUnique e) {
862
    //  e.printStackTrace();
863
    //  fail("Unexpected error: " + e.getMessage());
864
    //
865
    //} catch (UnsupportedType e) {
866
    //  e.printStackTrace();
867
    //  fail("Unexpected error: " + e.getMessage());
868
    //
869
    //} catch (InsufficientResources e) {
870
    //  e.printStackTrace();
871
    //  fail("Unexpected error: " + e.getMessage());
872
    //
873
    //} catch (InvalidSystemMetadata e) {
874
    //  e.printStackTrace();
875
    //  fail("Unexpected error: " + e.getMessage());
876
    //
877
    //} catch (NotImplemented e) {
878
    //  e.printStackTrace();
879
    //  fail("Unexpected error: " + e.getMessage());
880
    //
881
    //} catch (InvalidRequest e) {
882
    //  e.printStackTrace();
883
    //  fail("Unexpected error: " + e.getMessage());
884
    //
885
    //} catch (NotFound e) {
886
    //  e.printStackTrace();
887
    //  fail("Unexpected error: " + e.getMessage());
888
    //
889
    //} catch (Exception e) {
890
    //  e.printStackTrace();
891
    //  fail("Unexpected error: " + e.getMessage());
892
    //
893
    //}
894 6354 cjones
895
  }
896 6309 cjones
897 6354 cjones
  /**
898
   * Test if a subject is authorized to read a known object
899
   */
900
  public void testIsAuthorized() {
901 6309 cjones
    printTestHeader("testIsAuthorized");
902
903 6354 cjones
    try {
904
      Session session = getTestSession();
905
      Identifier guid = new Identifier();
906
      guid.setValue("testIsAuthorized." + System.currentTimeMillis());
907
      InputStream object = new ByteArrayInputStream("test".getBytes("UTF-8"));
908
      SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object);
909
      Identifier pid =
910 6542 leinfelder
        MNodeService.getInstance(request).create(session, guid, object, sysmeta);
911 6354 cjones
      boolean isAuthorized =
912 6542 leinfelder
        MNodeService.getInstance(request).isAuthorized(session, pid, Permission.READ);
913 6354 cjones
      assertEquals(isAuthorized, true);
914
915 6309 cjones
    } catch (UnsupportedEncodingException e) {
916 6354 cjones
      e.printStackTrace();
917
      fail("Unexpected error: " + e.getMessage());
918 6309 cjones
919
    } catch (InvalidToken e) {
920 6354 cjones
      e.printStackTrace();
921
      fail("Unexpected error: " + e.getMessage());
922 6309 cjones
923
    } catch (ServiceFailure e) {
924 6354 cjones
      e.printStackTrace();
925
      fail("Unexpected error: " + e.getMessage());
926 6309 cjones
927
    } catch (NotAuthorized e) {
928 6354 cjones
      e.printStackTrace();
929
      fail("Unexpected error: " + e.getMessage());
930 6309 cjones
931
    } catch (IdentifierNotUnique e) {
932 6354 cjones
      e.printStackTrace();
933
      fail("Unexpected error: " + e.getMessage());
934 6309 cjones
935
    } catch (UnsupportedType e) {
936 6354 cjones
      e.printStackTrace();
937
      fail("Unexpected error: " + e.getMessage());
938 6309 cjones
939
    } catch (InsufficientResources e) {
940 6354 cjones
      e.printStackTrace();
941
      fail("Unexpected error: " + e.getMessage());
942 6309 cjones
943
    } catch (InvalidSystemMetadata e) {
944 6354 cjones
      e.printStackTrace();
945
      fail("Unexpected error: " + e.getMessage());
946 6309 cjones
947
    } catch (NotImplemented e) {
948 6354 cjones
      e.printStackTrace();
949
      fail("Unexpected error: " + e.getMessage());
950 6309 cjones
951
    } catch (InvalidRequest e) {
952 6354 cjones
      e.printStackTrace();
953
      fail("Unexpected error: " + e.getMessage());
954 6309 cjones
955
    } catch (Exception e) {
956 6354 cjones
      e.printStackTrace();
957
      fail("Unexpected error: " + e.getMessage());
958 6309 cjones
959
    }
960 6354 cjones
  }
961 6309 cjones
962
963 6354 cjones
964
965 6309 cjones
}