=== Test case: gdpr_SUITE:remove_offline/1 (click for source code) === Config value: [{watchdog,<0.13146.0>}, {protocol,http}, {schema_endpoint,admin}, {listener_opts,#{host => "localhost",module => mongoose_graphql_handler, password => <<"secret">>,path => "/api/graphql", schema_endpoint => admin,username => <<"admin">>}}, {{ejabberd_cwd,mongooseim@localhost}, "/home/circleci/project/_build/mim1/rel/mongooseim"}, {preset,"ldap_mnesia"}, {mim_data_dir,"/home/circleci/project/big_tests/tests/gdpr_SUITE_data"}, {tc_logfile,"/home/circleci/project/big_tests/ct_report/ct_run.test@94ef96fe7e6f.2023-11-13_20.03.17/big_tests.tests.gdpr_SUITE.logs/run.2023-11-13_20.04.40/gdpr_suite.remove_offline.html"}, {tc_group_properties,[{name,remove_personal_data}]}, {tc_group_path,[]}, {data_dir,"/home/circleci/project/big_tests/_build/default/lib/mongoose_tests/ebin/gdpr_SUITE_data/"}, {priv_dir,"/home/circleci/project/big_tests/ct_report/ct_run.test@94ef96fe7e6f.2023-11-13_20.03.17/big_tests.tests.gdpr_SUITE.logs/run.2023-11-13_20.04.40/log_private/"}, {{saved_modules,mongooseim@localhost,<<"localhost">>}, #{mod_adhoc => #{iqdisc => one_queue,report_commands_node => false}, mod_amp => #{}, mod_bosh => #{backend => mnesia,inactivity => 30,max_pause => 120, max_wait => infinity,server_acks => false}, mod_cache_users => #{number_of_segments => 5,strategy => fifo,time_to_live => 2}, mod_carboncopy => #{iqdisc => no_queue}, mod_disco => #{extra_domains => [],iqdisc => one_queue,server_info => [], users_can_see_hidden_services => false}, mod_presence => #{}, mod_register => #{access => register, ip_access => [{allow,"127.0.0.0/8"},{deny,"0.0.0.0/0"}], iqdisc => one_queue,password_strength => 0, registration_watchers => []}, mod_roster => #{backend => mnesia,iqdisc => one_queue,store_current_id => false, versioning => false}, mod_sic => #{iqdisc => one_queue}, mod_stream_management => #{ack => true,ack_freq => 1,backend => mnesia,buffer => true, buffer_max => 100,resume_timeout => 600, stale_h => #{enabled => false,geriatric => 3600,repeat_after => 1800}}, mod_vcard => #{backend => ldap, host => {prefix,<<"vjud.">>}, iqdisc => parallel, ldap => #{base => <<"ou=Users,dc=esl,dc=com">>, binary_search_fields => [],deref => never, filter => <<"(objectClass=inetOrgPerson)">>, pool_tag => default, search_fields => [{<<"User">>,<<"%u">>}, {<<"Full Name">>,<<"displayName">>}, {<<"Given Name">>,<<"givenName">>}, {<<"Middle Name">>,<<"initials">>}, {<<"Family Name">>,<<"sn">>}, {<<"Nickname">>,<<"%u">>}, {<<"Birthday">>,<<"birthDay">>}, {<<"Country">>,<<"c">>}, {<<"City">>,<<"l">>}, {<<"Email">>,<<"mail">>}, {<<"Organization Name">>,<<"o">>}, {<<"Organization Unit">>,<<"ou">>}], search_operator => 'and', search_reported => [{<<"Full Name">>,<<"FN">>}, {<<"Given Name">>,<<"FIRST">>}, {<<"Middle Name">>,<<"MIDDLE">>}, {<<"Family Name">>,<<"LAST">>}, {<<"Nickname">>,<<"NICK">>}, {<<"Birthday">>,<<"BDAY">>}, {<<"Country">>,<<"CTRY">>}, {<<"City">>,<<"LOCALITY">>}, {<<"Email">>,<<"EMAIL">>}, {<<"Organization Name">>,<<"ORGNAME">>}, {<<"Organization Unit">>,<<"ORGUNIT">>}], uids => [{<<"uid">>,<<"%u">>}], vcard_map => [{<<"NICKNAME">>,<<"%u">>,[]}, {<<"FN">>,<<"%s">>,[<<"displayName">>]}, {<<"FAMILY">>,<<"%s">>,[<<"sn">>]}, {<<"GIVEN">>,<<"%s">>,[<<"givenName">>]}, {<<"MIDDLE">>,<<"%s">>,[<<"initials">>]}, {<<"ORGNAME">>,<<"%s">>,[<<"o">>]}, {<<"ORGUNIT">>,<<"%s">>,[<<"ou">>]}, {<<"CTRY">>,<<"%s">>,[<<"c">>]}, {<<"LOCALITY">>,<<"%s">>,[<<"l">>]}, {<<"STREET">>,<<"%s">>,[<<"street">>]}, {<<"REGION">>,<<"%s">>,[<<"st">>]}, {<<"PCODE">>,<<"%s">>,[<<"postalCode">>]}, {<<"TITLE">>,<<"%s">>,[<<"title">>]}, {<<"URL">>,<<"%s">>,[<<"labeleduri">>]}, {<<"DESC">>,<<"%s">>,[<<"description">>]}, {<<"TEL">>,<<"%s">>,[<<"telephoneNumber">>]}, {<<"EMAIL">>,<<"%s">>,[<<"mail">>]}, {<<"BDAY">>,<<"%s">>,[<<"birthDay">>]}, {<<"ROLE">>,<<"%s">>,[<<"employeeType">>]}, {<<"PHOTO">>,<<"%s">>,[<<"jpegPhoto">>]}]}, matches => 30,search => true}}}] === Current directory is "/home/circleci/project/big_tests/ct_report/ct_run.test@94ef96fe7e6f.2023-11-13_20.03.17" === Started at 2023-11-13 20:04:42
*** User 2023-11-13 20:04:42.596 ***🔗 alicE_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.596 ***🔗 alicE_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='bc390a711b6d7743' from='localhost' version='1.0' xml:lang='en'>
*** User 2023-11-13 20:04:42.597 ***🔗 alicE_remove_offline_619@localhost/res1 in <stream:features> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>PLAIN</mechanism> </mechanisms> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.597 ***🔗 alicE_remove_offline_619@localhost/res1 out <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>AGFsaWNFX3JlbW92ZV9vZmZsaW5lXzYxOQBtYXR5Z3J5c2E=</auth>
*** User 2023-11-13 20:04:42.598 ***🔗 alicE_remove_offline_619@localhost/res1 in <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
*** User 2023-11-13 20:04:42.598 ***🔗 alicE_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.598 ***🔗 alicE_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a9daa03dd8aa1315' from='localhost' version='1.0' xml:lang='en' to='alice_remove_offline_619@localhost'>
*** User 2023-11-13 20:04:42.599 ***🔗 alicE_remove_offline_619@localhost/res1 in <stream:features> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.599 ***🔗 alicE_remove_offline_619@localhost/res1 out <iq type='set' id='cc42b76381e73b914c968f325b927aa4'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <resource>res1</resource> </bind> </iq>
*** User 2023-11-13 20:04:42.599 ***🔗 alicE_remove_offline_619@localhost/res1 in <iq id='cc42b76381e73b914c968f325b927aa4' type='result'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <jid>alice_remove_offline_619@localhost/res1</jid> </bind> </iq>
*** User 2023-11-13 20:04:42.599 ***🔗 alice_remove_offline_619@localhost/res1 out <iq type='set' id='d0b9d930bc1ac2f4ec4e45c46ba11c4f'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.600 ***🔗 alice_remove_offline_619@localhost/res1 in <iq from='localhost' to='alice_remove_offline_619@localhost/res1' id='d0b9d930bc1ac2f4ec4e45c46ba11c4f' type='result'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.600 ***🔗 alice_remove_offline_619@localhost/res1 out <presence/>
*** User 2023-11-13 20:04:42.601 ***🔗 alice_remove_offline_619@localhost/res1 in <presence from='alice_remove_offline_619@localhost/res1' to='alice_remove_offline_619@localhost/res1'/>
*** User 2023-11-13 20:04:42.601 ***🔗 bOb_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.602 ***🔗 bOb_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='5dbd312a5b379375' from='localhost' version='1.0' xml:lang='en'>
*** User 2023-11-13 20:04:42.602 ***🔗 bOb_remove_offline_619@localhost/res1 in <stream:features> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>PLAIN</mechanism> </mechanisms> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.602 ***🔗 bOb_remove_offline_619@localhost/res1 out <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>AGJPYl9yZW1vdmVfb2ZmbGluZV82MTkAbWFrcm9saWth</auth>
*** User 2023-11-13 20:04:42.603 ***🔗 bOb_remove_offline_619@localhost/res1 in <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
*** User 2023-11-13 20:04:42.603 ***🔗 bOb_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.604 ***🔗 bOb_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='ff1d27d01f8bd715' from='localhost' version='1.0' xml:lang='en' to='bob_remove_offline_619@localhost'>
*** User 2023-11-13 20:04:42.604 ***🔗 bOb_remove_offline_619@localhost/res1 in <stream:features> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.604 ***🔗 bOb_remove_offline_619@localhost/res1 out <iq type='set' id='8e5badb153e4c950ebbb79eff8eb1ed0'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <resource>res1</resource> </bind> </iq>
*** User 2023-11-13 20:04:42.604 ***🔗 bOb_remove_offline_619@localhost/res1 in <iq id='8e5badb153e4c950ebbb79eff8eb1ed0' type='result'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <jid>bob_remove_offline_619@localhost/res1</jid> </bind> </iq>
*** User 2023-11-13 20:04:42.605 ***🔗 bob_remove_offline_619@localhost/res1 out <iq type='set' id='4f3e91cbb388608ea390d6c46e914598'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.605 ***🔗 bob_remove_offline_619@localhost/res1 in <iq from='localhost' to='bob_remove_offline_619@localhost/res1' id='4f3e91cbb388608ea390d6c46e914598' type='result'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.605 ***🔗 bob_remove_offline_619@localhost/res1 out <presence/>
*** User 2023-11-13 20:04:42.606 ***🔗 bob_remove_offline_619@localhost/res1 in <presence from='bob_remove_offline_619@localhost/res1' to='bob_remove_offline_619@localhost/res1'/>
*** User 2023-11-13 20:04:42.607 ***🔗 kate_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.607 ***🔗 kate_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='16ad811f5cc9b98d' from='localhost' version='1.0' xml:lang='en'>
*** User 2023-11-13 20:04:42.607 ***🔗 kate_remove_offline_619@localhost/res1 in <stream:features> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>PLAIN</mechanism> </mechanisms> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.607 ***🔗 kate_remove_offline_619@localhost/res1 out <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>AGthdGVfcmVtb3ZlX29mZmxpbmVfNjE5AG1ha3Jvd2U7cA==</auth>
*** User 2023-11-13 20:04:42.609 ***🔗 kate_remove_offline_619@localhost/res1 in <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
*** User 2023-11-13 20:04:42.609 ***🔗 kate_remove_offline_619@localhost/res1 out <stream:stream to='localhost' version='1.0' xml:lang='en' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>
*** User 2023-11-13 20:04:42.609 ***🔗 kate_remove_offline_619@localhost/res1 in <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='9cb404fd79ef631d' from='localhost' version='1.0' xml:lang='en' to='kate_remove_offline_619@localhost'>
*** User 2023-11-13 20:04:42.609 ***🔗 kate_remove_offline_619@localhost/res1 in <stream:features> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://www.erlang-solutions.com/products/mongooseim.html' ver='hrrptIuoH3BHt7UccOPi+EUROLc='/> <register xmlns='http://jabber.org/features/iq-register'/> <amp xmlns='http://jabber.org/feature/amp'/> <sm xmlns='urn:xmpp:sm:3'/> </stream:features>
*** User 2023-11-13 20:04:42.609 ***🔗 kate_remove_offline_619@localhost/res1 out <iq type='set' id='8e1207d67ee7151bf84932446c0e6bef'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <resource>res1</resource> </bind> </iq>
*** User 2023-11-13 20:04:42.610 ***🔗 kate_remove_offline_619@localhost/res1 in <iq id='8e1207d67ee7151bf84932446c0e6bef' type='result'> <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'> <jid>kate_remove_offline_619@localhost/res1</jid> </bind> </iq>
*** User 2023-11-13 20:04:42.610 ***🔗 kate_remove_offline_619@localhost/res1 out <iq type='set' id='db0028516d6b98ba11f8a529719cd3dd'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.610 ***🔗 kate_remove_offline_619@localhost/res1 in <iq from='localhost' to='kate_remove_offline_619@localhost/res1' id='db0028516d6b98ba11f8a529719cd3dd' type='result'> <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/> </iq>
*** User 2023-11-13 20:04:42.610 ***🔗 kate_remove_offline_619@localhost/res1 out <presence/>
*** User 2023-11-13 20:04:42.611 ***🔗 kate_remove_offline_619@localhost/res1 in <presence from='kate_remove_offline_619@localhost/res1' to='kate_remove_offline_619@localhost/res1'/>
*** User 2023-11-13 20:04:42.612 ***🔗 alice_remove_offline_619@localhost/res1 out </stream:stream>
*** User 2023-11-13 20:04:42.612 ***🔗 alice_remove_offline_619@localhost/res1 in </stream:stream>
*** User 2023-11-13 20:04:42.612 ***🔗 bob_remove_offline_619@localhost/res1 out <message to='alice_remove_offline_619@localhost/res1' type='chat'> <body>Hey!</body> </message>
*** User 2023-11-13 20:04:42.612 ***🔗 bob_remove_offline_619@localhost/res1 out <message to='alice_remove_offline_619@localhost/res1' type='chat'> <body>Here is Johnny!</body> </message>
*** User 2023-11-13 20:04:42.612 ***🔗 kate_remove_offline_619@localhost/res1 out <message to='alice_remove_offline_619@localhost/res1' type='chat'> <body>Where is Johnny ?</body> </message>
*** User 2023-11-13 20:04:42.714 ***🔗 waiting for timeout is done in 100 miliseconds
*** User 2023-11-13 20:04:42.718 ***🔗 REST request: Code: 200 Req: {<0.13180.0>,<<"/api/graphql">>,<<"POST">>, [{<<"Content-Type">>,<<"application/json">>}, {<<"Request-Id">>,<<"7d2fa6d2621a34a3">>}, {<<"authorization">>,<<"Basic YWRtaW46c2VjcmV0">>}], <<"{\"variables\":{\"user\":\"alice_remove_offline_619@localhost/res1\"},\"query\":\"mutation ($user: JID!) { account { removeUser(user: $user) { jid message } } }\"}">>} Result: {{<<"200">>,<<"OK">>}, [{<<"vary">>,<<"accept">>}, {<<"server">>,<<"Cowboy">>}, {<<"date">>,<<"Mon, 13 Nov 2023 20:04:41 GMT">>}, {<<"content-type">>,<<"application/json">>}, {<<"content-length">>,<<"168">>}], <<"{\"data\":{\"account\":{\"removeUser\":{\"message\":\"User alice_remove_offline_619@localhost/res1 successfully unregistered\",\"jid\":\"alice_remove_offline_619@localhost/res1\"}}}}">>, 307,2715} Params: #{body => <<"{\"variables\":{\"user\":\"alice_remove_offline_619@localhost/res1\"},\"query\":\"mutation ($user: JID!) { account { removeUser(user: $user) { jid message } } }\"}">>, creds => {<<"admin">>,<<"secret">>}, method => <<"POST">>,path => <<"/api/graphql">>,port => 5551, return_headers => true,return_maps => true, role => {graphql,admin}, server => #{node => mongooseim@localhost}}
*** System report during gdpr_SUITE:remove_offline/1 in remove_personal_data 2023-11-13 20:04:42.719 ***🔗 =ERROR REPORT==== 13-Nov-2023::20:04:42.719245 === acc: [{roster,["jid","name","subscription","ask","groups","askmessage", "xs"], []}] class: error handler: {hook_handler,50,fun mod_vcard:get_personal_data/3, #{hook_name => get_personal_data, hook_tag => <<"localhost">>, host_type => <<"localhost">>}} key: {get_personal_data,<<"localhost">>} params: #{jid => {jid,<<"alice_remove_offline_619">>,<<"localhost">>,<<>>}} reason: function_clause stacktrace: [{exml,to_iolist, [[],not_pretty], [{file, "/home/circleci/project/_build/default/lib/exml/src/exml.erl"}, {line,112}]}, {exml,to_binary,1, [{file, "/home/circleci/project/_build/default/lib/exml/src/exml.erl"}, {line,90}]}, {mod_vcard,get_personal_data,3, [{file,"/home/circleci/project/src/vcard/mod_vcard.erl"}, {line,110}]}, {gen_hook,apply_hook_function,3, [{file,"/home/circleci/project/src/gen_hook.erl"}, {line,251}]}, {gen_hook,run_hook,4, [{file,"/home/circleci/project/src/gen_hook.erl"}, {line,237}]}, {mongoose_hooks,run_fold,4, [{file, "/home/circleci/project/src/hooks/mongoose_hooks.erl"}, {line,1440}]}, {erpc,execute_call,4,[{file,"erpc.erl"},{line,589}]}] text: <<"Error running hook">> what: hook_failed
*** User 2023-11-13 20:04:42.720 ***🔗 waiting for timeout is done in 0 miliseconds
*** User 2023-11-13 20:04:42.720 ***🔗 kate_remove_offline_619@localhost/res1 out </stream:stream>
*** User 2023-11-13 20:04:42.721 ***🔗 kate_remove_offline_619@localhost/res1 in </stream:stream>
*** User 2023-11-13 20:04:42.721 ***🔗 bob_remove_offline_619@localhost/res1 out </stream:stream>
*** User 2023-11-13 20:04:42.721 ***🔗 bob_remove_offline_619@localhost/res1 in </stream:stream>
=== Ended at 2023-11-13 20:04:42 === successfully completed test case === === Returned value: ok
Test run history | Top level test index | Latest test result