3                              ' '   '    '     &     G    G R   \ \   '        '  g  { u0      )2      ! "#$%&'(  )* +,- . / 01  2 3456789  :;<  =>?@Al BCDE  FGHIJKLM  NOP  QRSTU V WXYZ <[ \]^ g_`a bc defg hijk InnerClasses cnSubmitterLjava/lang/String;mnListLjava/util/List; Signature5Ljava/util/List;cnList mnV2NoSync#Lorg/dataone/service/types/v1/Node;SYNC_WAIT_MINUTESJ ConstantValueREPLICATION_WAIT_MINUTES-()VCodeLineNumberTableLocalVariableTablethis[Lorg/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation;setupservice&Lorg/dataone/service/types/v1/Service;i$Ljava/util/Iterator; mnCallAdapter0Lorg/dataone/integration/adapters/MNCallAdapter; capabilities serviceListe1Ljava/lang/Exception;ne synchronizeZv2Capabilities#Lorg/dataone/service/types/v2/Node;cnItercn0Lorg/dataone/integration/adapters/CNCallAdapter;mnNoSyncLocalVariableTypeTable8Ljava/util/List;9Ljava/util/Iterator; StackMapTablelmjnRuntimeVisibleAnnotationsLorg/junit/Before;tearDownnodeRef,Lorg/dataone/service/types/v1/NodeReference;currentCapabilitiescNodeLorg/junit/After;getTestDescription()Ljava/lang/String;testSystemMetadataChangedbe.Lorg/dataone/service/exceptions/BaseException;replicaNodeRefreplicaHolderNodereplicaHolderMN4Lorg/dataone/integration/adapters/CommonCallAdapter;replicaSysmeta-Lorg/dataone/service/types/v2/SystemMetadata;replica&Lorg/dataone/service/types/v1/Replica; accessRule)Lorg/dataone/service/types/v1/AccessRule; replPolicy0Lorg/dataone/service/types/v1/ReplicationPolicy;pid)Lorg/dataone/service/types/v1/Identifier;sysmetaoriginalDateModifiedLjava/util/Date;successcnNode pollingPidhandler!Lorg/dataone/client/RetryHandler;fetchedCNSysmeta dateModifiedhandler2 replicaList replicasFoundIe2 createdPidmnPLorg/dataone/client/RetryHandler;8Ljava/util/List;opqrst-Lorg/dataone/integration/webTest/WebTestName;valueYsystemMetadataChanged: tests that changes made to system metadata by an MN are propegated4Lorg/dataone/integration/webTest/WebTestDescription;This test needs to be run in an environment with two or more MNs, one of which must have synchronization disabled (so we can test if CN.synchronize() works on its own correctly).The test checks whether the following events on the MN trigger the correct changes: Some metadata is created and changed on an MN, so when the CN sees it, it'll be a new object from its point of view.The MN calls CN.synchronize() to notify the CN to update its version of the object. (Asynchronous call.)We then need to wait for the CN to synchronize.When that happens, the CN should update its own copy, then propegate the change to the replica MNs. We check that the CN's as well as the other MNs' copies are up to date.Lorg/junit/Test;%testSystemMetadataChanged_ExistingObj accessPolicy+Lorg/dataone/service/types/v1/AccessPolicy;mnSysmetaModMaybem1zsystemMetadataChanged: tests that changes made to system metadata by an MN are propegated when the object is not a new oneThis test needs to be run in an environment with two or more MNs, one of which must have synchronization disabled (so we can test if CN.synchronize() works on its own correctly).The test checks whether the following events on the MN trigger the correct changes: Some metadata is created on an MN then waits for the CN to sync this data. The data is then modified on the MN.The MN calls CN.synchronize() to notify the CN to update its version of the object. (Asynchronous call.)We then need to wait for the CN to synchronize.When that happens, the CN should update its own copy, then propegate the change to the replica MNs. We check that the CN's as well as the other MNs' copies are up to date.!testSetReplicationStatus_NoChangeistatusUpdateFailures serialVersionLjava/math/BigInteger;u\setReplicationStatus: calling CN.setReplicationStatus() doesn't succeed regardless of statusCalling setReplicaStatus with an unchanging status should not succeed - the update should only be valid if updating the replica status to a new one. access$000"()Lorg/apache/commons/logging/Log; access$100 access$200 access$300m(Lorg/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation;)Ljava/util/List;x0 access$400 access$500 access$600 access$700 access$800 access$900 access$1000 access$1100 SourceFile/SystemMetadataFunctionalTestImplementation.java vw java/util/ArrayList xyz {|*Test requires at least one CN to function!n }~ .org/dataone/integration/adapters/CNCallAdapter  !org/dataone/service/types/v1/Nodev2    yl    .org/dataone/integration/adapters/MNCallAdapter   $org/dataone/service/types/v1/Service / MNReplicationm    java/lang/Exceptionjava/lang/StringBuilder+MN failed V2 getCapabilities(), skipping :  s / / #Unable to fetch node list from CN: / *v2 CNs available:  *v2 MNs available supporting replication: CN: /v2 MN: UThis test requires at least two v2 MNs that are tier 4 (support replication) to work.+This test requires at least one CN to work.-org/dataone/service/exceptions/NotImplemented-org/dataone/service/exceptions/ServiceFailure0org/dataone/client/exception/ClientSideException&Unable to get MN capabilities. Error:   / : /:MN returned NULL capabilities from getCapabilities(). MN:  !org/dataone/service/types/v2/Node  +Unable to disable synchronization on MN! :  Environment for test must have at least one v2 MN with synchronize disabled (so we can test if CN.synchronize() works on its own correctly).]Cannot reenable sync on MN, no reference to MN with sync disabled is saved! Reenable in LDAP. java/lang/AssertionErrorBUnable to update MN capabilities to re-enable synchronization on:  Reenable in LDAP. 0Tests the MN-triggered system metadata updating.testRightsHolder=testSystemMetadataChanged_ExistingObj: creating test objectpublic  .org/dataone/service/types/v1/ReplicationPolicy testSystemMetadataChanged_ /    ,org/dataone/service/exceptions/BaseException / Unable to create a test object: o  2testSystemMetadataChanged: created test object: 6testSystemMetadataChanged: fetching sysmeta for pid  from auth MNCtestSystemMetadataChanged: original sysmeta.serialVersion :  ItestSystemMetadataChanged: original sysmeta.dateSystemMetadataChanged: 8testSystemMetadataChanged: updating sysmeta on auth MN (Call to MN updateSystemMetadata failed: =MN should have modified its own system metadata successfully.DtestSystemMetadataChanged: updated sysmeta on auth MN successfullytestSystemMetadataChanged: polling the CN for the systemMetadata every 30 seconds while CN.synchronize() to run. (up to 15 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$1 r +org/dataone/service/types/v2/SystemMetadata`testSystemMetadataChanged: done waiting for CN.synchronize(), verifying CN has correct sysmetaq rtestSystemMetadataChanged: sysmeta.dateSysMetadataModified should have been modified by the time it's synced to CNBtestSystemMetadataChanged: CN sysmeta matches updates made on MNtestSystemMetadataChanged: waiting for CN to trigger replication. polling the CN for the systemMetadata every 30 seconds until we have replica info in sysmeta. (waiting up to 45 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$2TtestSystemMetadataChanged: done waiting for replication, fetching sysmeta for pid  from CN HSystem metadata fetched from CN should now have a non-empty replica list?testSystemMetadataChanged: looking at MNs that have a replica$org/dataone/service/types/v1/Replica  /testSystemMetadataChanged: found replica MN: 2org/dataone/integration/adapters/CommonCallAdapterUtestSystemMetadataChanged_ExistingObj: checking if replica MN holds updated sysmeta'Should have found at least one replica. 2Unable to delete test pid after running the test: Testing failed with exception: &testSystemMetadataChanged_ExistingObj_>testSystemMetadataChanged_ExistingObj: created test object: OtestSystemMetadataChanged_ExistingObj: waiting for CN sync (up to 15 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$3Ecn.getSystemMetadata() should successfully fetch the sysmeta for pid  from AtestSystemMetadataChanged_ExistingObj: fetched sysmeta for pid  from CN successfullyBtestSystemMetadataChanged_ExistingObj: fetching sysmeta for pid  )org/dataone/service/types/v1/AccessPolicy  JtestSystemMetadataChanged_ExistingObj: new sysmeta.serialVersion : DtestSystemMetadataChanged_ExistingObj: updating sysmeta on auth MNafter updSysmeta, date is: PtestSystemMetadataChanged_ExistingObj: updated sysmeta on auth MN successfully_testSystemMetadataChanged_ExistingObj: waiting for CN.synchronize() to run (up to 15 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$4~testSystemMetadataChanged_ExistingObj: sysmeta.dateSysMetadataModified should have been modified by the time it's synced to CNtestSystemMetadataChanged_ExistingObj: waiting for CN to trigger replication so we have replica info in sysmeta (up to 45 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$5_testSystemMetadataChanged_ExistingObj: done waiting for replication, fetched sysmeta for pid PReplica list fetched from CN (after having time to replicate should not be null!KtestSystemMetadataChanged_ExistingObj: looking at MNs that have a replica;testSystemMetadataChanged_ExistingObj: found replica MN: 9testSetReplicationStatus_NoChange: creating test object public-2:testSetReplicationStatus_NoChange: created test object: [org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$6=testSetReplicationStatus_NoChange: fetched sysmeta for pid >testSetReplicationStatus_NoChange: fetching sysmeta for pid QtestSetReplicationStatus_NoChange: original sysmeta.dateSystemMetadataChanged: KtestSetReplicationStatus_NoChange: original sysmeta.serialVersion : @testSetReplicationStatus_NoChange: updating sysmeta on auth MNLtestSetReplicationStatus_NoChange: updated sysmeta on auth MN successfully[testSetReplicationStatus_NoChange: waiting for CN.synchronize() to run (up to 15 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$7ztestSetReplicationStatus_NoChange: sysmeta.dateSysMetadataModified should have been modified by the time it's synced to CNtestSetReplicationStatus_NoChange: waiting for CN to trigger replication so we have replica info in sysmeta (up to 45 minutes)[org/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation$8[testSetReplicationStatus_NoChange: done waiting for replication, fetched sysmeta for pid ]Test can't continue if replica list fetched from CN (after having time to replicate) is null!]Test can't continue if system metadata fetched from CN does not have a non-empty replica listMtestSetReplicationStatus_NoChange: calling setReplicationStatus (iteration )  01010Setting replication status to INVALIDATED failed  FtestSetReplicationStatus_NoChange: status update failure (iteration ) =testSetReplicationStatus_NoChange: status update failures: sysmeta should not have been updated if the ReplicationStatus is unchanged, and serialVersion should not have been incremented for each attemptu ~ dataone.it.cnode.submitter.cn cnDevUNM1 Yorg/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation3org/dataone/integration/ContextAwareTestCaseDataonejava/util/Iteratorjava/lang/Stringjava/util/List'org/dataone/service/types/v1/Identifier'org/dataone/service/types/v1/AccessRulejava/util/Dateorg/dataone/client/RetryHandler*org/dataone/service/types/v1/NodeReferencejava/lang/Throwablejava/math/BigIntegerlog Lorg/apache/commons/logging/Log;getCoordinatingNodeIterator()Ljava/util/Iterator;,org/apache/commons/collections/IteratorUtilstoList&(Ljava/util/Iterator;)Ljava/util/List;size()Iorg/junit/Assert assertTrue(Ljava/lang/String;Z)V getSessionA(Ljava/lang/String;)Lorg/dataone/client/rest/MultipartRestClient;get(I)Ljava/lang/Object;e(Lorg/dataone/client/rest/MultipartRestClient;Lorg/dataone/service/types/v1/Node;Ljava/lang/String;)V listNodes)()Lorg/dataone/service/types/v2/NodeList;%org/dataone/service/types/v2/NodeList getNodeList()Ljava/util/List;iteratorhasNext()Znext()Ljava/lang/Object;getType)()Lorg/dataone/service/types/v1/NodeType;%org/dataone/service/types/v1/NodeTypeMN'Lorg/dataone/service/types/v1/NodeType;getCapabilities%()Lorg/dataone/service/types/v1/Node; getServices)()Lorg/dataone/service/types/v1/Services;%org/dataone/service/types/v1/ServicesgetServiceListgetNameequalsIgnoreCase(Ljava/lang/String;)Z getAvailable()Ljava/lang/Boolean;java/lang/Boolean booleanValueadd(Ljava/lang/Object;)Zappend-(Ljava/lang/String;)Ljava/lang/StringBuilder; getIdentifier.()Lorg/dataone/service/types/v1/NodeReference;getValuetoStringorg/apache/commons/logging/Logwarn(Ljava/lang/Object;)VgetNodeBaseServiceUrl*(Ljava/lang/Object;Ljava/lang/Throwable;)V(I)Ljava/lang/StringBuilder;info getBaseURLjava/lang/ObjectgetClass()Ljava/lang/Class;java/lang/Class getSimpleName getMessage isSynchronizesetSynchronize(Z)V(org/dataone/service/types/v2/TypeFactoryconvertTypeFromType7(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;updateNodeCapabilitiesx(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/NodeReference;Lorg/dataone/service/types/v2/Node;)ZerrorgetNodeCapabilitiesQ(Lorg/dataone/service/types/v1/NodeReference;)Lorg/dataone/service/types/v2/Node;'org/dataone/service/types/v1/PermissionREAD)Lorg/dataone/service/types/v1/Permission;$org/dataone/integration/APITestUtilsbuildAccessRulef(Ljava/lang/String;Lorg/dataone/service/types/v1/Permission;)Lorg/dataone/service/types/v1/AccessRule;setNumberReplicas(Ljava/lang/Integer;)V(org/dataone/integration/ExampleUtilitiesgenerateIdentifier)org/dataone/client/v1/types/D1TypeBuilderbuildIdentifier=(Ljava/lang/String;)Lorg/dataone/service/types/v1/Identifier;createTestObject(Lorg/dataone/client/D1Node;Lorg/dataone/service/types/v1/Identifier;Lorg/dataone/service/types/v1/AccessRule;Lorg/dataone/service/types/v1/ReplicationPolicy;)Lorg/dataone/service/types/v1/Identifier;java/lang/Threadsleep(J)VgetSystemMetadata~(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v2/SystemMetadata;getLatestRequestUrl handleFail'(Ljava/lang/String;Ljava/lang/String;)VgetDateSysMetadataModified()Ljava/util/Date;getSerialVersion()Ljava/math/BigInteger;-(Ljava/lang/Object;)Ljava/lang/StringBuilder;updateSystemMetadata(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;Lorg/dataone/service/types/v2/SystemMetadata;)Z(Lorg/dataone/integration/it/testImplementations/SystemMetadataFunctionalTestImplementation;Lorg/dataone/integration/adapters/CNCallAdapter;Lorg/dataone/service/types/v1/Identifier;)Vexecute(JJ)Ljava/lang/Object;after(Ljava/util/Date;)ZgetReplicaListgetReplicaMemberNodeequalsdeletez(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v1/Identifier; getSubject:(Ljava/lang/String;)Lorg/dataone/service/types/v1/Subject;$org/dataone/service/types/v1/SubjectCHANGE_PERMISSIONaddAllow,(Lorg/dataone/service/types/v1/AccessRule;)VsetAccessPolicy.(Lorg/dataone/service/types/v1/AccessPolicy;)VgetAccessPolicy-()Lorg/dataone/service/types/v1/AccessPolicy; getNodeId.org/dataone/service/types/v1/ReplicationStatus REQUESTED0Lorg/dataone/service/types/v1/ReplicationStatus;setReplicationStatus(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;Lorg/dataone/service/types/v1/NodeReference;Lorg/dataone/service/types/v1/ReplicationStatus;Lorg/dataone/service/exceptions/BaseException;)ZprintStackTraceintValue"org/dataone/configuration/SettingsgetConfiguration2()Lorg/apache/commons/configuration/Configuration;.org/apache/commons/configuration/Configuration getString8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;!/*H  *Y*Y*L+ *+ *  Y *M,N--:Y ::::9:  !" #$*%Wç':'Y()*+,*-.M#N'Y(/*,0*--1'Y(2** 3-4'Y(5** 3-4*N-0-:'Y(6*7*-4*N-0-:'Y(8*7*-49*  :*  N*::Y :::6:'Y(>*?@*A*B*-1%'Y(C*7*-.sD6 N^- *-E*::Y :::F:G G:GHG:,IJW*ED:'Y(K*7*L*?@*A*B*-MQN*E &Z &mtw;mtw<mtw='il&DS TVWX'Z=[Za{bdeghikliqopru s!t@wcxz{|}46Wjmtwy$'.47?IVciln$' @Z  S I " {g!66y1jy  mv  WA75n<$  ' Ze6I ]"'Q, K  !"!#< !B$#B$O5 5R U !5 !!"!$2& M  !!"!%  !!"!$@ !L !&'(.}*EOM*L Y +M*E+N,-P:Q,-JW-NRY'Y(S**E+,*T*-U1OR&6  19@FORS|>9)*@+S)} ],1L?! $)&-./-V 0 LYW*EMX4YZ[N\Y]:^'Y(_*`*-a:::*,-bLce,f:':*,h'Y(i*j*-kl:'Y(m*+j*-4'Y(n*+j*o*-4,+f:'Y(p*qr-4'Y(s*lr-4t46,+u6': *,h'Y(v* w*-k x y4*: Y  : z4+: {Y*  |:  }: 4 l6 44Y* :}: 'Y(*+j**-4 +:  :  46::::*:K:+,,):'Y(*,*-4~YW:4+:S + ,+WN'Y(*+j*--1N'Y(*-?@*A*-B*-M+ ,+W[N'Y(*+j*--18:+ ,+W%:'Y(*+j*-1 Wqtg3=@g-8;&-^&&-^&fY(17QTWbhqtv & 03=@Badku"%&79>?ALQwy4|=}D~Xbe-18;<[^_B v"12B"12 9R3*456789:n(;<1=>Q?@TA8WBC3DE  F@ {GH kI8 UJ,KHDLeMN<O_-O OP@Q  {GR ,KRDLStT"UVTWXY# T"UVTWXY#T"UVTWX! TZWZ#T"UVTWX! TZWZ#*T"UVTWX! TZWZ#[\!N*T"UVTWX! TZWZ#JT"UVTWX! TZWZ# T"B$b$8B$b] T"]B$!T"&^_s`a_sbcd LYW*EM*N Y -:X4YZ[:\Y]:^'Y(*`*-a::: *,bLce,f:': *,h'Y(i*j*-k l: 'Y(*+j*-44Y*:  }: 'Y(*j***-  'Y(*+j**-4'Y(*+j*o*-4,+f:W[:Y:   'Y(*qr-446 ,+u6 ':*,h'Y(v*w*-k,f:'Y(*lr-4x 44Y*:  }: 'Y(*j***-   l 6 4Y*:  }: 'Y(*+j**-4 :   46::::*:K:+,,):'Y(*,*-4~YW:4+:S + ,+W:'Y(*+j*-1:'Y(*?@*A*B*-M+ ,+W]:'Y(*+j*-18:+ ,+W%:'Y(*+j*-1 xgg&5,&]hk&5,]&a#5?IRXrux8[~      29CM[-k.239=_adef$h.l1mPnWpZq{rstvryz| ),.]ahkmB "12 "12{9eRW3*Z45678P9::I;<R=>r?@uA8xBC GH I8 Zef  D g8QJL1MN O./m O OP@Q #E5GR LS T"! UVTWXY#y T"! UVTWXZWh T"! UVTWXZWhT"! UVTWXZWiY#T"! UVTWXZWiWhT"! UVTWXZWiWhrT"! UVTWXZWiW#T"! UVTWXZWiW#RT"! UVTWXZWiW#*T"! UVTWXZWiW#[\!N*T"! UVTWXZWiW#JT"! UVTWXZWiW# T"! B$d$;B$d] T"! ]B$!T"! &^_sja_skcl LYW*EM*N Y -:4YZ[:\Y]:^'Y(*`*-a::: *,bLce,+f:l: ²Z[,+uW': *,h'Y(i*j*-k 'Y(ö*+j*-4Y*:  }: 'Y(*j***-  'Y(ƶ*+j**-4'Y(Ƕ*+j*o*-4,+f:'Y(ȶ*lr-4'Y(ɶ*qr-4ʹ46 ,+u6 ': *,h'Y(v* w*-k x ˹4̹4Y*:  }: 'Y(*j***-   l 6  й4Y*:  }: 'Y(Ӷ*+j**-4 :   66 'Y(ֶ*3׶*-4+,زٻr?@u}A8xzBC GH I8 D lJ LnN0op O'/f O OP@Q #E5GR LSu T"! UVTWXY#h T"! UVTWXZWh T"! UVTWXZWh T"! UVTWXZWY#eh T"! UVTWXZWhrT"! UVTWXZW#T"! UVTWXZW#RT"! UVTWXZW#DYB;T"! UVTWXZW#qT"! UVTWXZW#q)T"! B$d$;B$d] T"! ]B$!T"! &^_sra_ssctuHvuHwuHxy/*H z{uH|uH}uH~uHuHuHuHuH( JB{