Revision 10108
Added by Jing Tao about 8 years ago
test/edu/ucsb/nceas/metacat/dataone/MNodeServiceTest.java | ||
---|---|---|
183 | 183 |
|
184 | 184 |
suite.addTest(new MNodeServiceTest("testPermissionOfUpdateSystemmeta")); |
185 | 185 |
|
186 |
|
|
186 |
suite.addTest(new MNodeServiceTest("testUpdateSystemMetadataWithCircularObsoletesChain")); |
|
187 | 187 |
|
188 |
suite.addTest(new MNodeServiceTest("testUpdateSystemMetadataWithCircularObsoletedByChain")); |
|
188 | 189 |
|
189 | 190 |
return suite; |
190 | 191 |
|
... | ... | |
2529 | 2530 |
} |
2530 | 2531 |
|
2531 | 2532 |
} |
2533 |
|
|
2534 |
|
|
2535 |
/** |
|
2536 |
* Test if the updateSystemmetadata method can catch the circular obsoletes fields chain |
|
2537 |
*/ |
|
2538 |
public void testUpdateSystemMetadataWithCircularObsoletesChain() throws Exception{ |
|
2539 |
|
|
2540 |
Date date = new Date(); |
|
2541 |
Thread.sleep(1000); |
|
2542 |
String str = "object1"; |
|
2543 |
//insert a test document |
|
2544 |
Session session = getTestSession(); |
|
2545 |
Identifier guid = new Identifier(); |
|
2546 |
guid.setValue(generateDocumentId()); |
|
2547 |
InputStream object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2548 |
SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object1); |
|
2549 |
MNodeService.getInstance(request).create(session, guid, object1, sysmeta); |
|
2550 |
|
|
2551 |
//Test the generating object succeeded. |
|
2552 |
SystemMetadata metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2553 |
Thread.sleep(1000); |
|
2554 |
Identifier guid1 = new Identifier(); |
|
2555 |
guid1.setValue(generateDocumentId()); |
|
2556 |
object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2557 |
sysmeta = createSystemMetadata(guid1, session.getSubject(), object1); |
|
2558 |
MNodeService.getInstance(request).create(session, guid1, object1, sysmeta); |
|
2559 |
//Test the generating object succeeded. |
|
2560 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid1); |
|
2561 |
|
|
2562 |
Thread.sleep(1000); |
|
2563 |
Identifier guid2 = new Identifier(); |
|
2564 |
guid2.setValue(generateDocumentId()); |
|
2565 |
object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2566 |
sysmeta = createSystemMetadata(guid2, session.getSubject(), object1); |
|
2567 |
MNodeService.getInstance(request).create(session, guid2, object1, sysmeta); |
|
2568 |
//Test the generating object succeeded. |
|
2569 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid2); |
|
2570 |
|
|
2571 |
// test to create a circular obsoletes chain: guid obsoletes guid |
|
2572 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2573 |
metadata.setObsoletes(guid); |
|
2574 |
try { |
|
2575 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid, metadata); |
|
2576 |
fail("We can't update the system metadata which the obsoletes field is itself"); |
|
2577 |
} catch (InvalidRequest e) { |
|
2578 |
assertTrue("The update system metadata should fail and the error message should have the wording - circular chain", e.getMessage().contains("a circular chain")); |
|
2579 |
} |
|
2580 |
|
|
2581 |
// guid obsolete guid1 |
|
2582 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2583 |
metadata.setObsoletes(guid1); |
|
2584 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid, metadata); |
|
2585 |
|
|
2586 |
// guid1 obsoletedBy guid |
|
2587 |
// guid1 obsoletes guid2 |
|
2588 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid1); |
|
2589 |
metadata.setObsoletes(guid2); |
|
2590 |
metadata.setObsoletedBy(guid); |
|
2591 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid1, metadata); |
|
2592 |
|
|
2593 |
// crete a circular obsolete chain: |
|
2594 |
// guid2 obsoletes guid |
|
2595 |
//guid2 obsoletedBy guid1 |
|
2596 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid2); |
|
2597 |
metadata.setObsoletes(guid); |
|
2598 |
metadata.setObsoletedBy(guid1); |
|
2599 |
|
|
2600 |
try { |
|
2601 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid2, metadata); |
|
2602 |
fail("We can't update the system metadata which has a circular obsoletes chain"); |
|
2603 |
} catch (InvalidRequest e) { |
|
2604 |
assertTrue("The update system metadata should fail and the error message should have the wording - circular chain", e.getMessage().contains("a circular chain")); |
|
2605 |
} |
|
2606 |
|
|
2607 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid2); |
|
2608 |
metadata.setObsoletedBy(guid1); |
|
2609 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid2, metadata); |
|
2610 |
} |
|
2611 |
|
|
2612 |
|
|
2613 |
|
|
2614 |
|
|
2615 |
/** |
|
2616 |
* Test if the updateSystemmetadata method can catch the circular obsoletedBy chain |
|
2617 |
*/ |
|
2618 |
public void testUpdateSystemMetadataWithCircularObsoletedByChain() throws Exception{ |
|
2619 |
|
|
2620 |
Date date = new Date(); |
|
2621 |
Thread.sleep(1000); |
|
2622 |
String str = "object1"; |
|
2623 |
//insert a test document |
|
2624 |
Session session = getTestSession(); |
|
2625 |
Identifier guid = new Identifier(); |
|
2626 |
guid.setValue(generateDocumentId()); |
|
2627 |
InputStream object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2628 |
SystemMetadata sysmeta = createSystemMetadata(guid, session.getSubject(), object1); |
|
2629 |
MNodeService.getInstance(request).create(session, guid, object1, sysmeta); |
|
2630 |
|
|
2631 |
//Test the generating object succeeded. |
|
2632 |
SystemMetadata metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2633 |
Thread.sleep(1000); |
|
2634 |
Identifier guid1 = new Identifier(); |
|
2635 |
guid1.setValue(generateDocumentId()); |
|
2636 |
object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2637 |
sysmeta = createSystemMetadata(guid1, session.getSubject(), object1); |
|
2638 |
MNodeService.getInstance(request).create(session, guid1, object1, sysmeta); |
|
2639 |
//Test the generating object succeeded. |
|
2640 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid1); |
|
2641 |
|
|
2642 |
Thread.sleep(1000); |
|
2643 |
Identifier guid2 = new Identifier(); |
|
2644 |
guid2.setValue(generateDocumentId()); |
|
2645 |
object1 = new ByteArrayInputStream(str.getBytes("UTF-8")); |
|
2646 |
sysmeta = createSystemMetadata(guid2, session.getSubject(), object1); |
|
2647 |
MNodeService.getInstance(request).create(session, guid2, object1, sysmeta); |
|
2648 |
//Test the generating object succeeded. |
|
2649 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid2); |
|
2650 |
|
|
2651 |
|
|
2652 |
// guid obsolete guid1 |
|
2653 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2654 |
metadata.setObsoletes(guid1); |
|
2655 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid, metadata); |
|
2656 |
|
|
2657 |
// guid1 obsoletes guid2 |
|
2658 |
// guid1 obsoletedBy guid1 (a circular chain) |
|
2659 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid1); |
|
2660 |
metadata.setObsoletes(guid2); |
|
2661 |
metadata.setObsoletedBy(guid1); |
|
2662 |
try { |
|
2663 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid1, metadata); |
|
2664 |
fail("We can't update the system metadata which the obsoletes field is itself"); |
|
2665 |
} catch (InvalidRequest e) { |
|
2666 |
assertTrue("The update system metadata should fail and the error message should have the wording - circular chain", e.getMessage().contains("a circular chain")); |
|
2667 |
} |
|
2668 |
|
|
2669 |
|
|
2670 |
// guid1 obsoletes guid2 |
|
2671 |
// guid1 obsoletedBy guid |
|
2672 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid1); |
|
2673 |
metadata.setObsoletes(guid2); |
|
2674 |
metadata.setObsoletedBy(guid); |
|
2675 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid1, metadata); |
|
2676 |
|
|
2677 |
|
|
2678 |
//guid2 obsoletedBy guid1 |
|
2679 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid2); |
|
2680 |
metadata.setObsoletedBy(guid1); |
|
2681 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid2, metadata); |
|
2682 |
|
|
2683 |
|
|
2684 |
//guid2 obsoletedBy guid1 |
|
2685 |
//guid1 obsoletedBy guid |
|
2686 |
//guid obsoletedBy guid2 (created a circle) |
|
2687 |
metadata = MNodeService.getInstance(request).getSystemMetadata(session, guid); |
|
2688 |
metadata.setObsoletedBy(guid2); |
|
2689 |
try { |
|
2690 |
MNodeService.getInstance(request).updateSystemMetadata(session, guid, metadata); |
|
2691 |
fail("We can't update the system metadata which has a circular obsoletes chain"); |
|
2692 |
} catch (InvalidRequest e) { |
|
2693 |
assertTrue("The update system metadata should fail and the error message should have the wording - circular chain", e.getMessage().contains("a circular chain")); |
|
2694 |
} |
|
2695 |
|
|
2696 |
|
|
2697 |
} |
|
2532 | 2698 |
} |
Also available in: Unified diff
Add junit test methods for testing circular obsoletes/obsoletedBy chain in the mn.updateSystemmetadata method.