3A                              ' + + +   2  2 2  +   &   '     O  O  O    +   !" #$% +&' +()* +,-./ 012 o3  4 56789:;<= >!?@ABC D EFGHIJK LMN +O P!Q +RST UVWXYZ +[ \] }^_`abc }defghijklmnopqrstuv wxyz{ | } ~    }   & ( 0@  cn0Lorg/dataone/integration/adapters/CNCallAdapter;mnsLjava/util/List; Signature5Ljava/util/List;v1mnsv2mnsv1v2mns LOG_AGG_WAITJ ConstantValue()VCodeLineNumberTableLocalVariableTablethis\Lorg/dataone/integration/it/testImplementations/LogAggregationFunctionalTestImplementations;getTestDescription()Ljava/lang/String;setup(Ljava/util/Iterator;)Vn#Lorg/dataone/service/types/v1/Node;i$Ljava/util/Iterator;eLjava/lang/Exception;service&Lorg/dataone/service/types/v1/Service;cap serviceListe1v1mn0Lorg/dataone/integration/adapters/MNCallAdapter;v2mnv1capabilitiesv2capabilitiesmNodecnItercnListmnListLocalVariableTypeTable8Ljava/util/List;9Ljava/util/Iterator; StackMapTableEE<(Ljava/util/Iterator;)VgetMNCallAdapterD(Ljava/lang/String;)Lorg/dataone/integration/adapters/MNCallAdapter;certificateFilenameLjava/lang/String;testMnGetLogRecords_AccesslogEntry'Lorg/dataone/service/types/v2/LogEntry;publicPidFoundZtestPersonPidFoundtestRightsHolderPidFounderr errorString mnCnCallermnPublicCallermnTestPersonCallermnTestRightsHolderCallerpublicAccessRule)Lorg/dataone/service/types/v1/AccessRule;testPersonAccessRuletestRightsHolderAccessRule publicPid)Lorg/dataone/service/types/v1/Identifier; testPersonPidtestRightsHolderPidisLjava/io/InputStream;errorsLjava/util/ArrayList; publicLog"Lorg/dataone/service/types/v2/Log; testPersonLogtestRightsHolderLogcnLogPublicPidcnLogTestPersonPidcnLogTestRightsHolderPid)Ljava/util/ArrayList;%'2RuntimeVisibleAnnotations-Lorg/dataone/integration/webTest/WebTestName;value!getLogRecords() user-based access4Lorg/dataone/integration/webTest/WebTestDescription;Tests that an authenticated user may only view their own records or public records, and that a CN caller may view all records. Note: allowing access to more than the CN is optional for an MN, so authentication failures for non-CN subjects are ignored.testMnQuery_Access&Ljava/io/UnsupportedEncodingException;sysmetaPublicObj-Lorg/dataone/service/types/v2/SystemMetadata;sysmetaTestPersonObjsysmetaTestRightsHolderObjpublicPidEncodedtestPersonPidEncodedtestRightsHolderPidEncodedpublicQueryPublicObjpublicQueryPersonObjpublicQueryRightsHolderObjpublicObjContents LogContents InnerClassesALorg/dataone/integration/ContextAwareTestCaseDataone$LogContents;personObjContentsrightsHolderObjContentstestPersonQueryPublicObjtestPersonQueryPersonObjtestPersonQueryRightsHolderObjtestRightsHolderQueryPublicObjtestRightsHolderQueryPersonObj$testRightsHolderQueryRightsHolderObjcnQueryPublicObjcnQueryPersonObjcnQueryRightsHolderObjWquery() user-based access~Tests that an authenticated user may only view their own records or public records, and that a CN caller may view all records.testCnGetLogRecords_AggregatingmnIdpidiImn logRecordsnumMNs skippedMNsmnCallAdapterspids*Ljava/util/ArrayList;GLjava/util/ArrayList;'getLogRecords() create on MN read on CNwTests the getLogRecords() call. After creating objects on MNs and waiting, verifies that logs are aggregated on the CN.testQuery_Params queryContents pidEncodedtitle titleEncodedauthor authorEncodedqueryResult_idqueryResult_titlequeryResult_authorqueryResult_pidTitleAuthorquery() parametersTests the query() call with different parameters - verifies that a handful of parameters work for filtering down on the created object.testCnGetLogRecords_Access publicObjPidtestPersonObjPidtestRightsHolderObjPid Ljava/lang/InterruptedException;publicLogRecordstestPersonLogRecordstestRightsHolderLogRecordsmnIds.getLogRecords() create on MN test access on CNTests the getLogRecords() call. Assumes that aggregation works, sothe testCnGetLogRecords_Aggregating test should be working. After creating objects on MNs and waiting, verifies that logs returned are based on the identity of the caller. SourceFile0LogAggregationFunctionalTestImplementations.java sRuns create/read/etc methods agains MNs in the environment and verifies that the corresponding logs end up on a CN.java/util/ArrayList        0Test requires at least one CN, but got zero CNs.   java/lang/StringBuilder Using CN  !org/dataone/service/types/v1/Node  for tests  .org/dataone/integration/adapters/CNCallAdapter ? v2          java/lang/Exceptionjava/lang/AssertionError#Unable to fetch node list from CN:  .org/dataone/integration/adapters/MNCallAdapterv1    $org/dataone/service/types/v1/ServiceMNCore     )Unable to assess v1 capabilities for MN:  :    )Unable to assess v2 capabilities for MN: MNs available: MN: yTest requires that the environment has at least one MN to work with that supports logging for CN log aggregation. Found: only v1 MN available for use! () Glibclient used by tests calls the /v1/log and /v2/log endpoint with theIidFilter parameter. The v1 MN may still be using the pidFilter parameter! =Not enough (responsive) MNs to test with in this environment.  <=public testPersontestRightsHolder'org/dataone/service/types/v1/AccessRule        !testMnGetLogRecords_Access_public %testMnGetLogRecords_Access_testPerson+testMnGetLogRecords_Access_testRightsHolder   LtestMnGetLogRecords_Access: Unable to get or create a test object with pid:  ,  java/lang/InterruptedException ,org/dataone/service/exceptions/NotAuthorized 1 Unable to fetch Log records for public subject. UExpected a NotAuthorized (only CN or MN admin should have access) but got exception:  5 Unable to fetch Log records for testPerson subject. ; Unable to fetch Log records for testRightsHolder subject. - Unable to fetch Log records for CN subject. Got exception:  !%org/dataone/service/types/v2/LogEntry "#IPublic subject should have access to public-accessible object we created.QPublic subject should NOT have access to testPerson-accessible object we created.WPublic subject should NOT have access to testRightsHolder-accessible object we created.MtestPerson subject should have access to public-accessible object we created.QtestPerson subject should have access to testPerson-accessible object we created.[testPerson subject should NOT have access to testRightsHolder-accessible object we created.StestRightsHolder subject should have access to public-accessible object we created.[testRightsHolder subject should NOT have access to testPerson-accessible object we created.]testRightsHolder subject should have access to testRightsHolder-accessible object we created. CN subject ($?) should have access to public-accessible object we created on . pid: C) should have access to testPerson-accessible object we created on I) should have access to testRightsHolder-accessible object we created on java/lang/String $testMnGetLogRecords_Access ran into  errors: testMnQuery_Access_public_testMnQuery_Access_testPerson_$testMnQuery_Access_testRightsHolder_ %procured test object:  on &'(DtestMnQuery_Access: Unable to get or create a test object with pid: )*failed to fetch sysmetaUTF-8+ ,-$java/io/UnsupportedEncodingException=testMnQuery_Access() unable to encode identifiers using UTF-8solr q=identifier: ./ 01/, Unable to run solr query for public subject. 2fQuery run by public subject should retrieve a positive result count for public-created object. For MN . pid: fQuery run by public subject should retrieve a zero result count for testPerson-created object. For MN lQuery run by public subject should retrieve a zero result count for testRightsHolder-created object. For MN 3ZQuery run by public subject should retrieve result docs for public-created object. For MN bQuery run by public subject should NOT retrieve result docs for testPerson-created object. For MN hQuery run by public subject should NOT retrieve result docs for testRightsHolder-created object. For MN 3, Unable to run solr query for testPerson subject. jQuery run by testPerson subject should retrieve a positive result count for public-created object. For MN nQuery run by testPerson subject should retrieve a positive result count for testPerson-created object. For MN pQuery run by testPerson subject should retrieve a zero result count for testRightsHolder-created object. For MN ^Query run by testPerson subject should retrieve result docs for public-created object. For MN bQuery run by testPerson subject should retrieve result docs for testPerson-created object. For MN lQuery run by testPerson subject should NOT retrieve result docs for testRightsHolder-created object. For MN 9, Unable to run solr query for testRightsHolder subject. pQuery run by testRightsHolder subject should retrieve a positive result count for public-created object. For MN xQuery run by testRightsHolder subject should NOT retrieve a positive result count for testPerson-created object. For MN zQuery run by testRightsHolder subject should retrieve a positive result count for testRightsHolder-created object. For MN dQuery run by testRightsHolder subject should retrieve result docs for public-created object. For MN lQuery run by testRightsHolder subject should NOT retrieve result docs for testPerson-created object. For MN nQuery run by testRightsHolder subject should retrieve result docs for testRightsHolder-created object. For MN 6Unable to run solr query for testRightsHolder subject. 45Query run by CN subject (G) should retrieve a positive result count for public-created object on ;) should retrieve result docs for public-created object on testMnQuery_Access ran into 6 7: 8- testCnGetLogRecords_Aggregating__obj22org/dataone/integration/adapters/CommonCallAdapter9 :;QtestCnGetLogRecords_Aggregating: Unable to get or create a test object with pid:  on MN  (mn #) < GtestCnGetLogRecords_Aggregating: Should be able to get record for pid:  on originating mn =call adapter: ?testCnGetLogRecords_Aggregating: Unable to get record for pid:  : got exception: >MtestCnGetLogRecords_Aggregating: waiting for log aggregation: (4.0 minutes)> testCnGetLogRecords_Aggregating: unable to fetch log records for pid  Got exception: ?>testCnGetLogRecords_Aggregating: getLogRecords() call for pid ? should have a total number of results greater than zero on CN (waited @ minutes for log aggregation)1 should contain more than zero log entries on CN )testCnGetLogRecords_Aggregating ran into BtestQuery_Params: Unable to get or create a test object with pid: `"PISCO: Physical Oceanography: moored temperature data: Terrace Point, California, USA (TPT001)""Margaret McManus".testQuery_Params() unable to encode parametersIquery made by as CN should return some results when filtering on pid for 3 Unable to run solr query with params: identifier. q=title:Kquery made by as CN should return some results when filtering on title for . Unable to run solr query with params: title.  q=author:Lquery made by as CN should return some results when filtering on author for / Unable to run solr query with params: author.  &q=title: &q=author:cquery made by as CN should return some results when filtering on identifier, title, and author for B Unable to run solr query with params: identifier, title, author. testQuery_Params ran into "'"testCnGetLogRecords_Access_public_&testCnGetLogRecords_Access_testPerson_,testCnGetLogRecords_Access_testRightsHolder_HtestCnGetLogRecords_Access: Unable to get or create a test object on MN HtestCnGetLogRecords_Access: waiting for log aggregation: (4.0 minutes)!log aggregation wait interrupted!!getLogRecords run by CN subject (J) should retrieve a positive number of results for public-created object (N) should retrieve a positive number of results for testPerson-created object (T) should retrieve a positive number of results for testRightsHolder-created object ($testCnGetLogRecords_Access ran into Zorg/dataone/integration/it/testImplementations/LogAggregationFunctionalTestImplementations3org/dataone/integration/ContextAwareTestCaseDataonejava/util/Iteratorjava/util/List'org/dataone/service/types/v1/Identifierjava/io/InputStreamjava/lang/Throwable org/dataone/service/types/v2/Log?org/dataone/integration/ContextAwareTestCaseDataone$LogContents+org/dataone/service/types/v2/SystemMetadata,org/apache/commons/collections/IteratorUtilstoList&(Ljava/util/Iterator;)Ljava/util/List;size()Iorg/junit/Assert assertTrue(Ljava/lang/String;Z)Vlog Lorg/apache/commons/logging/Log;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;get(I)Ljava/lang/Object; getBaseURLtoStringorg/apache/commons/logging/Loginfo(Ljava/lang/Object;)V cnSubmitter getSessionA(Ljava/lang/String;)Lorg/dataone/client/rest/MultipartRestClient;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;iterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object;getType)()Lorg/dataone/service/types/v1/NodeType;%org/dataone/service/types/v1/NodeTypeMN'Lorg/dataone/service/types/v1/NodeType;add(Ljava/lang/Object;)ZgetNodeBaseServiceUrl*(Ljava/lang/String;Ljava/lang/Throwable;)Vping()Ljava/util/Date;getCapabilities%()Lorg/dataone/service/types/v1/Node; getServices)()Lorg/dataone/service/types/v1/Services;%org/dataone/service/types/v1/ServicesgetServiceListgetNameequals getVersion getAvailable()Ljava/lang/Boolean;java/lang/Boolean booleanValuejava/lang/ObjectgetClass()Ljava/lang/Class;java/lang/Class getSimpleName getMessage(I)Ljava/lang/StringBuilder;warn)org/dataone/client/v1/types/D1TypeBuilder buildSubject:(Ljava/lang/String;)Lorg/dataone/service/types/v1/Subject; addSubject)(Lorg/dataone/service/types/v1/Subject;)V'org/dataone/service/types/v1/PermissionCHANGE_PERMISSION)Lorg/dataone/service/types/v1/Permission; addPermission,(Lorg/dataone/service/types/v1/Permission;)V getSubjectbuildIdentifier=(Ljava/lang/String;)Lorg/dataone/service/types/v1/Identifier;procureTestObject(Lorg/dataone/integration/adapters/CommonCallAdapter;Lorg/dataone/service/types/v1/AccessRule;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v1/Identifier;f(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Ljava/io/InputStream;org/apache/commons/io/IOUtils closeQuietly(Ljava/io/InputStream;)VgetValuejava/lang/Threadsleep(J)V getLogRecords(Lorg/dataone/service/types/v1/Session;Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Lorg/dataone/service/types/v2/Log;getLatestRequestUrl*(Ljava/lang/Object;Ljava/lang/Throwable;)VgetLogEntryList getIdentifier+()Lorg/dataone/service/types/v1/Identifier;$org/dataone/service/types/v1/Subject(Lorg/dataone/integration/adapters/CommonCallAdapter;Lorg/dataone/service/types/v1/AccessRule;Lorg/dataone/service/types/v1/Identifier;Ljava/lang/String;Ljava/lang/String;Lorg/dataone/service/types/v1/ReplicationPolicy;)Lorg/dataone/service/types/v1/Identifier; getNodeId.()Lorg/dataone/service/types/v1/NodeReference;*org/dataone/service/types/v1/NodeReferencegetSystemMetadata~(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v2/SystemMetadata;java/net/URLEncoderencode8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;querya(Lorg/dataone/service/types/v1/Session;Ljava/lang/String;Ljava/lang/String;)Ljava/io/InputStream;getNumQueryContentsX(Ljava/io/InputStream;)Lorg/dataone/integration/ContextAwareTestCaseDataone$LogContents; existingLogs docsReturned handleFail'(Ljava/lang/String;Ljava/lang/String;)V(I)Vcontains replaceAlljava/lang/IntegervalueOf(I)Ljava/lang/Integer;error-(Ljava/lang/Object;)Ljava/lang/StringBuilder;getCanonicalNamegetTotal(D)Ljava/lang/StringBuilder;!         /*  -+ *Y*Y*Y*Y+ M ,  Y,*Y,YN* :!&":#$ -%W֧(:'YY(*)*- :!":+Y,-:+Y-::: .W/:  01:  :  !> "2: 3 45", 65 78  :A: Y9:; <=; >.W/:  01:  :  !> "2: 3 45" 65 78  : A: Y?:; <=; ># * %W* %W@*%W*%W  * %W* %W Y@* A* :!1": YB˻YC* A*  &E&PS&:1 23!4,617D9p:<>?@?CABEF,G?IBJEMKNRO\P{QTUW[XY^_`a!bFeJfMhPlSiUjnopqrstuvxz{:|\~-# {,!" eE RX# \N$ <% !,!"  E X# N$ U<% ,&'?('B)E* +:$8,1\-./4\N$0 N$0 ,11\- . 2@34563456d54)B7$4a 3455489988854AB7=854AB7=$34554-47k:3455:;<=* +Y+*-* +Y+*-* W YD*EFGH+Y+*,-'YIJ" '3NZ>?2'&_@*KL*LKM*MKN*NK:OYP:LQRSTOYP:MWMURSTOYP:NWNURSTVW:XW: YW: : *+Z:+[:  \M: 'YY]^_ <=; > *:  \ *+ Z: + [:  \M: 'YY] ^_ <=; > *: \*+ Z: + [:  \M: 'YY] ^_ <=; > *: \`b: Y: : ,^d: G:B: Y,fgh<=;>i:- ^d:G:B: Y-fjh<=;>i: ^d:H:C: Yfkh<=;>i:::+^d:B:'YY+flm<=;>*+ ^d:B:'YY+flm<=;>*+ ^d:B:'YY+flm<=;>* 666 n :!B"o:pq6p q6p q6  rsW  tsW  usW666n :!B"o:pq6p q6p q6  vsW  wsW  xsW666n :!B"o:pq6p q6p q6  ysW  zsW  {sW6@n8n :!""o:pq6B Y|U}~+:^sW6@n8n :!""o:p q6B Y|U}+: ^sW6@n8n :!""o:p q6B Y|U}+: ^sW k: :!-":Y:ϻ'YY AJ& & UWU_s{&_s{ce&7HKe7HP&e& &HY\&&'19BHRZcis{ U_jsx{}47HKMPR  HY\^   +.;>KNQV^c k!p"x%}&'(*+,-./01234567:; < =?2@?ABBOCRD_EbFeGjHrIwJKLOPQRSRUVYZ%[G\T]W\Z__`cdefgfij'm/n3oPpnqs(7> > }> = R= >  = ^= = 0ABICDED|FD0ABICDED|FD20ABI CD ED|FDAB)GAB1)AB)PG?:43dH?I'J'K'zL''qMNBVONc5PNQRSR TR UV WX YZ 7a[Z\Z]Z^Z_Z CDEDFD/ W` 2A 39999aaabbbc7d [7d [7d He39999aaabbbcfghD7>39999aaabbbcfgghD7>39999aaabbbcfggghD7?39999aaabbbcfgggggg7>S7>S7>39999aaabbbcfgggggg4%i 39999aaabbbcfgggggg4%i 39999aaabbbcfgggggg4%i 4%C4%C4%C643(jklsmnlsop$ +*KL*LKM*MKN*NK:OYP:LQRSTOYP:MWMURSTOYP:NWNURSTW:W: W: *+L: Y^+C: 'YY^_ <=; > *MW*+ MU}: Y ^+C: 'YY ^_ <=; > *NW*+ NU}: Y ^+C: 'YY ^_ <=; > *: : : +: + : + : : i:::^: ^: ^::'Y*Y:::::::,Y::,Y::,Y::@:'YY,fm<=;>J1Y,:^sW1Y,: ^sW1Y,: ^sW1Y,:^sW1Y,: ^sW1Y,: ^sW:::-Y::-Y::-Y::@:'YY-fm<=;>J1Y-:^sW1Y-: ^sW1Y-: ^sW1Y-:^sW1Y-: ^sW1Y-: ^sW:::Y::Y::Y::A:'YYfm<=;>J2Y:^sW2Y: ^sW2Y: ^sW2Y:^sW2Y: ^sW2Y: ^sW::: +Y::+Y::+Y:  ::!*+fBYU}+:^sWBYU}+:^sWk:!:""!-"":#Y!#:!ϻ'YYA!J &]`&&7RU&l(+&!$& &  &^z{|}'19BHRZcis{/]`b.147@IRUWcfilx!(+-hp @Hv~!$&ai 9Ao w   "^f !#$( ):+B,q.y/345789:; < ? = "> ,B 4C sQ {R [ \ ] ^ _ *a-> b> > W   %q-; &; "<  "  ! G?# 4" dH?! + #I' J' K' L'' MNB ONc PN QR SR TR 1rs 4ts 7us fv?iw?lx?WX~yV{zVx{Vu|ro|VyVvVVV}VV}VzV / W`2X) 39999aaabbb7?M7?M7?&39999aaabbb7 /39999aaabbb666 39999aaabbb666fccc7<555555w39999aaabbb666fcccccc7<555555z39999aaabbb666fccccccccc7=666666w!39999aaabbb666fcccccccccccc7 FF643(jklsnls * <YMYN* :!]":**-+Y-sW-+Y,-sWOYP:LQRSTY:6-+:Y¶W:^sW*-ZWp: ,ĶsW YŶ^ƶ-+:ǶAȶ_ <=; > 4`b:6,Ķʙ:-+:W:^d: Y˶^̶-+:  n n  : YͶ Yζ-Ͷ'YY϶^̶-+fж<Ѷ* ҹӸb:Y:6>,Ķʙ):*:W: 'YY*ֶ׶ضٶ <=; > * ښIY۶ܶ*)ݶ޶sWnn IY۶*)ݶ޶sWk::!-": Y :ϻ'YYAJ &c #&c&?i jkl<mXnqpqstuwz{|} {z #%AaUb7U~<K&dk ?Rn'MZ % RR #ZA7G? !4dH? umXdXMNXWX/*md`W`2 &3ff418'af[ 3ffaf6b7lHew 3ffafb9g: 3ffafb9g:3ffafb7Re f 3ffaffg7S EE643(jklsnlsP*KLOYPM,LQR,STWN*+,-ZWB:'YY-^_<=;>*:::::-^:::: 'Y *Y: : +Y:  :   Y+fsW \P:  Y+fm <=; >sW \ :  \ : +Y:  :   Y+fsW \P:  Y+fm <=; >sW \ :  \ : +Y:  :   Y+fsW \P:  Y+fm <=; >sW \ : \: +Y:  : Y+fsW \P: Y+fm<=;>sW \ : \ k: :!-":Y:ϻ'YY AJ&.1& &N FNNPN[&[CK&CK&B:BBDB.K &.13pswz~       FKNX[x "#$'%C*H+K&M'*+*;=@ABGHCD:G?HBGLOTPXQuRSV3=  q $  9 $ 9 $ M9 $9 uG?_4XdH?I'MN&RsJ?wF?zC?~??<?WX V [bV V "V / W` 2139ab7>0 39ab66666 SfcG7Bd JcG7Bd JcG7Bd ^cG7Bd 643(jklsnls * <YMYNY:* :!<":-+Y,-sW,sWOYP:LQRSTOYP:MWMURSTOYP:NWNURST6: : : ,: Y W: Y W: Y W: *- ZW*- ZW*- ZW8: ĶsW Y-+: * Ӹb: iY:6   Ķʙ: : : , : Y W:Y W:Y W:*^: *^: *^: E:'YY*ֶ׶ٶ<=;>* nC n 6YU}^ȶsW nC n 6YU}^ȶsW nD n 7YU}^ȶsW .l: :  !- ": Y  : ϻ'YYA Jnq&cN&F^ _`a%bFc\dpesg|hijklmnopqstuvyz{|8~J\nqs~s5Nbv,_t.F*0C? s3 R R R  @ Z Z Z ? R5sRNZR G? 4 eH?    XX%X|MNONhPNJWX/* `%JW`203fff4B_ 3fffaaa 3fffaaabbb74Re f3fffaaafggg6bbb7AGGH 3fffaaaf643)jklsnls }~