Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hbOHR-00068i-A3 for pgadmin-hackers@arkaria.postgresql.org; Thu, 13 Jun 2019 11:52:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hbOHP-0005iR-TA for pgadmin-hackers@arkaria.postgresql.org; Thu, 13 Jun 2019 11:52:31 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hbOHP-0005eF-GA for pgadmin-hackers@lists.postgresql.org; Thu, 13 Jun 2019 11:52:31 +0000 Received: from mail-qt1-x82a.google.com ([2607:f8b0:4864:20::82a]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hbOHI-0001t4-DY for pgadmin-hackers@postgresql.org; Thu, 13 Jun 2019 11:52:30 +0000 Received: by mail-qt1-x82a.google.com with SMTP id j19so22104761qtr.12 for ; Thu, 13 Jun 2019 04:52:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=FYydw9CU3LdbFc34HO3sNitPcBuPkTQs7LMou8rq+B4=; b=PEGOwvF6LhpD/N/GnalLOiZL1o6tjLfJRih4CrvYHv7pe5+yyDEcVcyagiARrCgqMe NITwEuzzF6TumzhHM9Vg841Mouo0aPS5lz1Rm8J793V48H3Ao4tSRggnh27UVZ0v1SmC 1Ei74TcS4z0GF6A3b8RXgPVqwdJtd55gm7bCpeO5ccfiDrpM/GgNDzSRvxuV7szgO4gk orUA4rnP4Ll2epJvMyQsu6LxWSWL++ChHyd0SLnbrhv+/dT8Y9R10AX/fUiXEiU+hB17 PWesV9szLTcuWnDLE4qQpUDlTdnT52ZrK/rplIr4Z/q/QvFYA7Y8ROgPQukw4tD3xdD0 2Piw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=FYydw9CU3LdbFc34HO3sNitPcBuPkTQs7LMou8rq+B4=; b=TdxZyNzPrlFahXmFIptE6Zlr1Nq4qgmh6ubMFrlRGff39wC4DTm1+NlluU2vgzIb6V RVpHo3rCfMSLfdJPixgO12Xv0NVmJrwtPYQ/QzoeP/Zqgia4642Lib5mKgc0Rp9y2/Iq Z8O0gR6427zOX+PfhP0K4Wv8Oct7TrcaiWidlC9HBD/Wj2mtszeI5TVJT9ZkasD2ehui 7J/E7hEjXDUiCZHp08LqKmZXigWtaLDW6+8NrfWb642gwIeXCl8eFUWgU1mPGmecSSc9 idjHILWoL22Jn46/9mMg6eSlqmFuExjTsZSJWwIJLc5ZFeeZO32GKJcLnSL7zsYrQLba qeEQ== X-Gm-Message-State: APjAAAVx1BLgCiKH3qzhf5jcejsfmfZlVr/WaU/1HTP7mGt6QpVlv+mg ZnVTMACgjVN3JP4gLuerT6khNWYtgCZSt9JtC6Kc/7R1NntnTg== X-Google-Smtp-Source: APXvYqwOmuour6dwaD1Lwq7DEcpFdlAaUO7CwljBmDiNHOq96lKHLJ0Szl3NgR8h/x3EXxrH2+dGwAON71bqsaHXsoE= X-Received: by 2002:ac8:2834:: with SMTP id 49mr57516588qtq.326.1560426741936; Thu, 13 Jun 2019 04:52:21 -0700 (PDT) MIME-Version: 1.0 From: Akshay Joshi Date: Thu, 13 Jun 2019 17:22:11 +0530 Message-ID: Subject: [pgAdmin4][Patch]: Feature #4202 Implement new framework to test Reverse Engineering SQL To: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000a6f357058b33293f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000a6f357058b33293f Content-Type: multipart/alternative; boundary="000000000000a6f354058b33293d" --000000000000a6f354058b33293d Content-Type: text/plain; charset="UTF-8" Hi Hackers I have implemented the new test framework to test the Reverse Engineering SQL. I have integrated it as a part of API/Regression test suite. It will work when we run all the test cases or module wise test case. *How it works*: Attached patch contains the generic framework to read all the JSON files from the *tests->version based (example 9.6_plus, 10_plus or default) folder. *Run all the test scenarios present in the JSON file in sequential order. Format of the JSON file is mentioned in "web/pgadmin/browser/server_groups/servers/databases/casts/tests/default/test.json" For expected SQL we will have following two options: - Provide the expected sql in scenario itself as parameter *"expected_sql" : ""*. - Create a output file with any name in the same directory where the JSON file resides and specify the parameter "*expected_sql_file": ""* Attached patch contains both the above mentioned examples. Please review it. -- *Thanks & Regards* *Akshay Joshi* *Sr. Software Architect* *EnterpriseDB Software India Private Limited* *Mobile: +91 976-788-8246* --000000000000a6f354058b33293d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers

I have implemented the new t= est framework to test the Reverse Engineering SQL. I have integrated it as = a part of API/Regression test suite. It will work when we run all the=C2=A0= test cases or module wise test case.

How it wor= ks: Attached patch contains the generic framework to read all the JSON = files from the tests->version based (example 9.6_plus, 10_plus or def= ault) folder. Run all the test scenarios present in the JSON file in se= quential order.

Format of the JSON file is mention= ed in "<path_of_source>web/pgadmin/browser/server_groups/servers= /databases/casts/tests/default/test.json"

For= expected SQL we will have following two options:
  • Provide= the expected sql in scenario itself as parameter "expected_sql&quo= t; : "<SQL>".
  • Create a output file with any= name in the same directory where the JSON file resides and specify the par= ameter "expected_sql_file": "<name of the file>&quo= t;
Attached patch contains both the above menti= oned examples.

Please review it.
--
Thanks & Regards
Akshay Joshi
Sr. S= oftware Architect
Enter= priseDB Software India Private Limited
Mobile: +91 976-78= 8-8246
=
--000000000000a6f354058b33293d-- --000000000000a6f357058b33293f Content-Type: application/octet-stream; name="Test_Re_SQL.patch" Content-Disposition: attachment; filename="Test_Re_SQL.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jwulpa5r0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2FsdGVyX2ltcGxpY2l0X2Nhc3Quc3FsIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3Rl c3RzL2RlZmF1bHQvYWx0ZXJfaW1wbGljaXRfY2FzdC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAuLjk4YjdlNDUyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2Nhc3RzL3Rlc3RzL2RlZmF1 bHQvYWx0ZXJfaW1wbGljaXRfY2FzdC5zcWwKQEAgLTAsMCArMSw5IEBACistLSBDYXN0OiBtb25l eSAtPiBiaWdpbnQKKworLS0gRFJPUCBDQVNUIChtb25leSBBUyBiaWdpbnQpOworCitDUkVBVEUg Q0FTVCAobW9uZXkgQVMgYmlnaW50KQorCVdJVEhPVVQgRlVOQ1RJT04KKwlBUyBJTVBMSUNJVDsK KworQ09NTUVOVCBPTiBDQVNUIChtb25leSBBUyBiaWdpbnQpIElTICdDYXN0IGZyb20gbW9uZXkg dG8gYmlnaW50JzsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2NyZWF0ZV9pbXBsaWNpdF9j YXN0LnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L2NyZWF0ZV9pbXBsaWNpdF9jYXN0LnNxbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjhmZmU1MDAKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2Fz dHMvdGVzdHMvZGVmYXVsdC9jcmVhdGVfaW1wbGljaXRfY2FzdC5zcWwKQEAgLTAsMCArMSw3IEBA CistLSBDYXN0OiBtb25leSAtPiBiaWdpbnQKKworLS0gRFJPUCBDQVNUIChtb25leSBBUyBiaWdp bnQpOworCitDUkVBVEUgQ0FTVCAobW9uZXkgQVMgYmlnaW50KQorCVdJVEhPVVQgRlVOQ1RJT04K KwlBUyBJTVBMSUNJVDsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90ZXN0cy9kZWZhdWx0L3Rlc3QuanNvbiBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9jYXN0cy90 ZXN0cy9kZWZhdWx0L3Rlc3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uNmY0MWRhOGEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvY2FzdHMvdGVzdHMvZGVmYXVsdC90ZXN0Lmpzb24K QEAgLTAsMCArMSw2OCBAQAoreworICAic2NlbmFyaW9zIjogWworICAgIHsKKyAgICAgICJ0eXBl IjogImNyZWF0ZSIsCisgICAgICAibmFtZSI6ICJDcmVhdGUgSU1QTElDSVQgQ2FzdCIsCisgICAg ICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9iaiIsCisgICAgICAic3FsX2VuZHBvaW50IjogIk5P REUtY2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJjYXN0Y29udGV4dCI6 ICJJTVBMSUNJVCIsCisgICAgICAgICJlbmNvZGluZyI6ICJVVEY4IiwKKyAgICAgICAgIm5hbWUi OiAibW9uZXktPmJpZ2ludCIsCisgICAgICAgICJzcmN0eXAiOiAibW9uZXkiLAorICAgICAgICAi dHJndHlwIjogImJpZ2ludCIKKyAgICAgIH0sCisgICAgICAiZXhwZWN0ZWRfc3FsX2ZpbGUiOiAi Y3JlYXRlX2ltcGxpY2l0X2Nhc3Quc3FsIgorICAgIH0sCisgICAgeworICAgICAgInR5cGUiOiAi YWx0ZXIiLAorICAgICAgIm5hbWUiOiAiQWx0ZXIgSU1QTElDSVQgQ2FzdCIsCisgICAgICAiZW5k cG9pbnQiOiAiTk9ERS1jYXN0Lm9ial9pZCIsCisgICAgICAic3FsX2VuZHBvaW50IjogIk5PREUt Y2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJkZXNjcmlwdGlvbiI6ICJD YXN0IGZyb20gbW9uZXkgdG8gYmlnaW50IgorICAgICAgfSwKKyAgICAgICJleHBlY3RlZF9zcWxf ZmlsZSI6ICJhbHRlcl9pbXBsaWNpdF9jYXN0LnNxbCIKKyAgICB9LAorICAgIHsKKyAgICAgICJ0 eXBlIjogImRlbGV0ZSIsCisgICAgICAibmFtZSI6ICJEcm9wIElNUExJQ0lUIENhc3QiLAorICAg ICAgImVuZHBvaW50IjogIk5PREUtY2FzdC5kZWxldGVfaWQiLAorICAgICAgImRhdGEiOiB7Cisg ICAgICAgICJuYW1lIjogIm1vbmV5LT5iaWdpbnQiCisgICAgICB9CisgICAgfSwKKyAgICB7Cisg ICAgICAidHlwZSI6ICJjcmVhdGUiLAorICAgICAgIm5hbWUiOiJDcmVhdGUgRVhQTElDSVQgQ2Fz dCIsCisgICAgICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9iaiIsCisgICAgICAic3FsX2VuZHBv aW50IjogIk5PREUtY2FzdC5zcWxfaWQiLAorICAgICAgImRhdGEiOiB7CisgICAgICAgICJjYXN0 Y29udGV4dCI6ICJFWFBMSUNJVCIsCisgICAgICAgICJlbmNvZGluZyI6ICJVVEY4IiwKKyAgICAg ICAgIm5hbWUiOiAibW9uZXktPmJpZ2ludCIsCisgICAgICAgICJzcmN0eXAiOiAibW9uZXkiLAor ICAgICAgICAidHJndHlwIjogImJpZ2ludCIKKyAgICAgIH0sCisgICAgICAiZXhwZWN0ZWRfc3Fs IjogIi0tIENhc3Q6IG1vbmV5IC0+IGJpZ2ludFxuXG4tLSBEUk9QIENBU1QgKG1vbmV5IEFTIGJp Z2ludCk7XG5cbkNSRUFURSBDQVNUIChtb25leSBBUyBiaWdpbnQpXG5cdFdJVEhPVVQgRlVOQ1RJ T047IgorICAgIH0sCisgICAgeworICAgICAgInR5cGUiOiAiYWx0ZXIiLAorICAgICAgIm5hbWUi OiAiQWx0ZXIgRVhQTElDSVQgQ2FzdCIsCisgICAgICAiZW5kcG9pbnQiOiAiTk9ERS1jYXN0Lm9i al9pZCIsCisgICAgICAic3FsX2VuZHBvaW50IjogIk5PREUtY2FzdC5zcWxfaWQiLAorICAgICAg ImRhdGEiOiB7CisgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDYXN0IGZyb20gbW9uZXkgdG8gYmln aW50IgorICAgICAgfSwKKyAgICAgICJleHBlY3RlZF9zcWwiOiAiLS0gQ2FzdDogbW9uZXkgLT4g YmlnaW50XG5cbi0tIERST1AgQ0FTVCAobW9uZXkgQVMgYmlnaW50KTtcblxuQ1JFQVRFIENBU1Qg KG1vbmV5IEFTIGJpZ2ludClcblx0V0lUSE9VVCBGVU5DVElPTjtcblxuQ09NTUVOVCBPTiBDQVNU IChtb25leSBBUyBiaWdpbnQpIElTICdDYXN0IGZyb20gbW9uZXkgdG8gYmlnaW50JzsiCisgICAg fSwKKyAgICB7CisgICAgICAidHlwZSI6ICJkZWxldGUiLAorICAgICAgIm5hbWUiOiAiRHJvcCBF WFBMSUNJVCBDYXN0IiwKKyAgICAgICJlbmRwb2ludCI6ICJOT0RFLWNhc3QuZGVsZXRlX2lkIiwK KyAgICAgICJkYXRhIjogeworICAgICAgICAibmFtZSI6ICJtb25leS0+YmlnaW50IgorICAgICAg fQorICAgIH0KKyAgXQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvcm91dGUucHkg Yi93ZWIvcGdhZG1pbi91dGlscy9yb3V0ZS5weQppbmRleCBiMjA2Y2IyZS4uNmY1YmI3OTkgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL3JvdXRlLnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0 aWxzL3JvdXRlLnB5CkBAIC01Myw5ICs1Myw4IEBAIGNsYXNzIFRlc3RzR2VuZXJhdG9yUmVnaXN0 cnkoQUJDTWV0YSk6CiAgICAgICAgIEFCQ01ldGEuX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywg ZCkKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBsb2FkX2dlbmVyYXRvcnMoY2xzLCBwa2df cm9vdCwgZXhjbHVkZV9wa2dzLCBmb3JfbW9kdWxlcz1bXSk6Ci0KLSAgICAgICAgY2xzLnJlZ2lz dHJ5ID0gZGljdCgpCisgICAgZGVmIGxvYWRfZ2VuZXJhdG9ycyhjbHMsIHBrZ19yb290LCBleGNs dWRlX3BrZ3MsIGZvcl9tb2R1bGVzPVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0X21v ZHVsZV9saXN0PVRydWUpOgogCiAgICAgICAgIGFsbF9tb2R1bGVzID0gW10KIApAQCAtNjgsNiAr NjcsMTMgQEAgY2xhc3MgVGVzdHNHZW5lcmF0b3JSZWdpc3RyeShBQkNNZXRhKToKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBmbW9kIGluIGZvcl9tb2R1bGVzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZS5lbmRzd2l0aChmbW9kKV0KIAorICAgICAgICAj IFNldCB0aGUgbW9kdWxlIGxpc3QgYW5kIGV4Y2x1ZGUgcGFja2FnZXMgaW4gdGhlIEJhc2VUZXN0 R2VuZXJhdG9yCisgICAgICAgICMgZm9yIFJldmVyc2UgRW5naW5lZXIgU1FMIHRlc3QgY2FzZXMu CisgICAgICAgIEJhc2VUZXN0R2VuZXJhdG9yLnNldEV4Y2x1ZGVQa2dzKGV4Y2x1ZGVfcGtncykK KyAgICAgICAgaWYgc2V0X21vZHVsZV9saXN0IGlzIFRydWU6CisgICAgICAgICAgICBjbHMucmVn aXN0cnkgPSBkaWN0KCkKKyAgICAgICAgICAgIEJhc2VUZXN0R2VuZXJhdG9yLnNldE1vZHVsZUxp c3QoYWxsX21vZHVsZXMpCisKICAgICAgICAgIyBDaGVjayBmb3IgU0VSVkVSIG1vZGUKICAgICAg ICAgZm9yIG1vZHVsZV9uYW1lIGluIGFsbF9tb2R1bGVzOgogICAgICAgICAgICAgdHJ5OgpAQCAt MTIzLDMgKzEyOSwxMSBAQCBjbGFzcyBCYXNlVGVzdEdlbmVyYXRvcih1bml0dGVzdC5UZXN0Q2Fz ZSk6CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFRlc3REYXRhYmFzZU5hbWUoY2xzLCBk YXRhYmFzZV9uYW1lKToKICAgICAgICAgY2xzLnRlc3RfZGIgPSBkYXRhYmFzZV9uYW1lCisKKyAg ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0TW9kdWxlTGlzdChjbHMsIG1vZHVsZV9saXN0KToK KyAgICAgICAgY2xzLm1vZHVsZV9saXN0ID0gbW9kdWxlX2xpc3QKKworICAgIEBjbGFzc21ldGhv ZAorICAgIGRlZiBzZXRFeGNsdWRlUGtncyhjbHMsIGV4Y2x1ZGVfcGtncyk6CisgICAgICAgIGNs cy5leGNsdWRlX3BrZ3MgPSBleGNsdWRlX3BrZ3MKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9u L3JlX3NxbC9fX2luaXRfXy5weSBiL3dlYi9yZWdyZXNzaW9uL3JlX3NxbC9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTY5ZGUyOWIKZGlmZiAtLWdpdCBh L3dlYi9yZWdyZXNzaW9uL3JlX3NxbC90ZXN0cy9fX2luaXRfXy5weSBiL3dlYi9yZWdyZXNzaW9u L3JlX3NxbC90ZXN0cy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMC4uZTY5ZGUyOWIKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3JlX3NxbC90ZXN0cy90 ZXN0X3Jlc3FsLnB5IGIvd2ViL3JlZ3Jlc3Npb24vcmVfc3FsL3Rlc3RzL3Rlc3RfcmVzcWwucHkK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmQ3OTMwZjI0Ci0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcmVfc3FsL3Rlc3RzL3Rlc3RfcmVzcWwucHkKQEAgLTAs MCArMSwyMjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOSwgVGhlIHBnQWRtaW4gRGV2 ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0 Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2ltcG9ydCBqc29uCitpbXBv cnQgb3MKKworZnJvbSBmbGFzayBpbXBvcnQgdXJsX2ZvcgorZnJvbSBwZ2FkbWluLnV0aWxzLnJv dXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgorZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0 X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCitmcm9tIHBnYWRtaW4uYnJvd3Nlci5z ZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnRlc3RzIGltcG9ydCBcCisgICAgdXRpbHMg YXMgZGF0YWJhc2VfdXRpbHMKK2Zyb20gcGdhZG1pbi51dGlscy52ZXJzaW9uZWRfdGVtcGxhdGVf bG9hZGVyIGltcG9ydCBcCisgICAgZ2V0X3ZlcnNpb25fbWFwcGluZ19kaXJlY3RvcmllcworCisK K2RlZiBjcmVhdGVfcmVzcWxfbW9kdWxlX2xpc3QoYWxsX21vZHVsZXMsIGV4Y2x1ZGVfcGtncyk6 CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgbW9kdWxl IGxpc3QgZm9yIHJldmVyc2UgZW5naW5lZXJpbmcKKyAgICBTUUwgYnkgaXRlcmF0aW5nIGFsbCB0 aGUgbW9kdWxlcy4KKworICAgIDpwYXJhbSBhbGxfbW9kdWxlczogTGlzdCBvZiBhbGwgdGhlIG1v ZHVsZXMKKyAgICA6cGFyYW0gZXhjbHVkZV9wa2dzOiBMaXN0IG9mIGV4Y2x1ZGUgcGFja2FnZXMK KyAgICA6cmV0dXJuOgorICAgICIiIgorICAgIHJlc3FsX21vZHVsZV9saXN0ID0gZGljdCgpCisK KyAgICBmb3IgbW9kdWxlIGluIGFsbF9tb2R1bGVzOgorICAgICAgICBpZiAidGVzdHMuIiBpbiBz dHIobW9kdWxlKSBhbmQgbm90IGFueShzdHIobW9kdWxlKS5zdGFydHN3aXRoKAorICAgICAgICAg ICAgICAgICdwZ2FkbWluLicgKyBzdHIoZXhjbHVkZV9wa2cpKSBmb3IgZXhjbHVkZV9wa2cgaW4g ZXhjbHVkZV9wa2dzCisgICAgICAgICk6CisgICAgICAgICAgICBjb21wbGV0ZV9tb2R1bGVfbmFt ZSA9IG1vZHVsZS5zcGxpdCgiLnRlc3QiKQorICAgICAgICAgICAgbW9kdWxlX25hbWVfbGlzdCA9 IGNvbXBsZXRlX21vZHVsZV9uYW1lWzBdLnNwbGl0KCIuIikKKyAgICAgICAgICAgIG1vZHVsZV9u YW1lID0gbW9kdWxlX25hbWVfbGlzdFtsZW4obW9kdWxlX25hbWVfbGlzdCkgLSAxXQorCisgICAg ICAgICAgICByZXNxbF9tb2R1bGVfbGlzdFttb2R1bGVfbmFtZV0gPSBvcy5wYXRoLmpvaW4oKm1v ZHVsZV9uYW1lX2xpc3QpCisKKyAgICByZXR1cm4gcmVzcWxfbW9kdWxlX2xpc3QKKworCitjbGFz cyBSZXZlcnNlRW5naW5lZXJpbmdTUUxUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CisgICAg IiIiIFRoaXMgY2xhc3Mgd2lsbCB0ZXN0IHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIFNRTCIiIgor CisgICAgc2NlbmFyaW9zID0gWworICAgICAgICAoJ1JldmVyc2UgRW5naW5lZXJpbmcgU1FMIFRl c3QgQ2FzZXMnLCBkaWN0KCkpCisgICAgXQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAg ICAjIEdldCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbgorICAgICAgICBzZWxmLmRiX2NvbiA9IGRh dGFiYXNlX3V0aWxzLmNvbm5lY3RfZGF0YWJhc2UoCisgICAgICAgICAgICBzZWxmLCB1dGlscy5T RVJWRVJfR1JPVVAsIHNlbGYuc2VydmVyX2luZm9ybWF0aW9uWydzZXJ2ZXJfaWQnXSwKKyAgICAg ICAgICAgIHNlbGYuc2VydmVyX2luZm9ybWF0aW9uWydkYl9pZCddKQorICAgICAgICBpZiBub3Qg c2VsZi5kYl9jb25bJ2luZm8nXSA9PSAiRGF0YWJhc2UgY29ubmVjdGVkLiI6CisgICAgICAgICAg ICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlLiIpCisKKyAg ICAgICAgIyBHZXQgdGhlIGFwcGxpY2F0aW9uIHBhdGgKKyAgICAgICAgc2VsZi5hcHBwYXRoID0g b3MuZ2V0Y3dkKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAjIENyZWF0ZSB0 aGUgbW9kdWxlIGxpc3Qgb24gd2hpY2ggcmV2ZXJzZSBlbmdpbmVlcmluZyBzcWwgdGVzdAorICAg ICAgICAjIGNhc2VzIHdpbGwgYmUgZXhlY3V0ZWQuCisgICAgICAgIHJlc3FsX21vZHVsZV9saXN0 ID0gY3JlYXRlX3Jlc3FsX21vZHVsZV9saXN0KAorICAgICAgICAgICAgQmFzZVRlc3RHZW5lcmF0 b3IubW9kdWxlX2xpc3QsIEJhc2VUZXN0R2VuZXJhdG9yLmV4Y2x1ZGVfcGtncykKKworICAgICAg ICBmb3IgbW9kdWxlIGluIHJlc3FsX21vZHVsZV9saXN0OgorICAgICAgICAgICAgbW9kdWxlX3Bh dGggPSByZXNxbF9tb2R1bGVfbGlzdFttb2R1bGVdCisgICAgICAgICAgICAjIEdldCB0aGUgZm9s ZGVyIG5hbWUgYmFzZWQgb24gc2VydmVyIHZlcnNpb24gbnVtYmVyIGFuZAorICAgICAgICAgICAg IyB0aGVpciBleGlzdGVuY2UuCisgICAgICAgICAgICBzdGF0dXMsIHNlbGYudGVzdF9mb2xkZXIg PSBzZWxmLmdldF90ZXN0X2ZvbGRlcihtb2R1bGVfcGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBJdGVyYXRl IGFsbCB0aGUgZmlsZXMgaW4gdGhlIHRlc3QgZm9sZGVyIGFuZCBjaGVjayBmb3IKKyAgICAgICAg ICAgICMgdGhlIEpTT04gZmlsZXMuCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlz dGRpcihzZWxmLnRlc3RfZm9sZGVyKToKKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRz d2l0aCgiLmpzb24iKToKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGVfZmlsZV9uYW1lID0g b3MucGF0aC5qb2luKHNlbGYudGVzdF9mb2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAg ICAgd2l0aCBvcGVuKGNvbXBsZXRlX2ZpbGVfbmFtZSkgYXMganNvbmZwOgorICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YSA9IGpzb24ubG9hZChqc29uZnApCisgICAgICAgICAgICAgICAgICAg ICAgICBmb3Iga2V5LCBzY2VuYXJpb3MgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV90ZXN0X2Nhc2Uoc2NlbmFyaW9zKQorCisgICAgZGVm IHRlYXJEb3duKHNlbGYpOgorICAgICAgICBkYXRhYmFzZV91dGlscy5kaXNjb25uZWN0X2RhdGFi YXNlKAorICAgICAgICAgICAgc2VsZiwgc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ3NlcnZlcl9p ZCddLAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ2RiX2lkJ10pCisKKyAg ICBkZWYgZ2V0X3VybChzZWxmLCBlbmRwb2ludCwgb2JqZWN0X2lkPU5vbmUpOgorICAgICAgICAi IiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgdXJsLgorCisgICAg ICAgIDpwYXJhbSBlbmRwb2ludDoKKyAgICAgICAgOnBhcmFtIG9iamVjdF9pZDoKKyAgICAgICAg OnJldHVybjoKKyAgICAgICAgIiIiCisgICAgICAgIG9iamVjdF91cmwgPSBOb25lCisgICAgICAg IGZvciBydWxlIGluIHNlbGYuYXBwLnVybF9tYXAuaXRlcl9ydWxlcyhlbmRwb2ludCk6CisgICAg ICAgICAgICBvcHRpb25zID0ge30KKyAgICAgICAgICAgIGZvciBhcmcgaW4gcnVsZS5hcmd1bWVu dHM6CisgICAgICAgICAgICAgICAgaWYgYXJnID09ICdnaWQnOgorICAgICAgICAgICAgICAgICAg ICBvcHRpb25zWydnaWQnXSA9IGludCh1dGlscy5TRVJWRVJfR1JPVVApCisgICAgICAgICAgICAg ICAgZWxpZiBhcmcgPT0gJ3NpZCc6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3NpZCdd ID0gaW50KHNlbGYuc2VydmVyX2luZm9ybWF0aW9uWydzZXJ2ZXJfaWQnXSkKKyAgICAgICAgICAg ICAgICBlbGlmIGFyZyA9PSAnZGlkJzoKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1snZGlk J10gPSBpbnQoc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ2RiX2lkJ10pCisgICAgICAgICAgICAg ICAgZWxpZiBhcmcgPT0gJ3NjaWQnOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25zWydzY2lk J10gPSBpbnQoc2VsZi5zZXJ2ZXJfaW5mb3JtYXRpb25bJ3NjaGVtYV9pZCddKQorICAgICAgICAg ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG9iamVjdF9pZCBpcyBub3QgTm9u ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNbYXJnXSA9IGludChvYmplY3RfaWQp CisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hcHAudGVzdF9yZXF1ZXN0X2NvbnRleHQoKToKKyAg ICAgICAgICAgICAgICBvYmplY3RfdXJsID0gdXJsX2ZvcihydWxlLmVuZHBvaW50LCAqKm9wdGlv bnMpCisKKyAgICAgICAgcmV0dXJuIG9iamVjdF91cmwKKworICAgIGRlZiBleGVjdXRlX3Rlc3Rf Y2FzZShzZWxmLCBzY2VuYXJpb3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlv biB3aWxsIHJ1biB0aGUgdGVzdCBjYXNlcyBmb3Igc3BlY2lmaWMgbW9kdWxlLgorCisgICAgICAg IDpwYXJhbSBtb2R1bGVfbmFtZTogTmFtZSBvZiB0aGUgbW9kdWxlCisgICAgICAgIDpwYXJhbSBz Y2VuYXJpb3M6IExpc3Qgb2Ygc2NlbmFyaW9zCisgICAgICAgIDpyZXR1cm46CisgICAgICAgICIi IgorICAgICAgICBvYmplY3RfaWQgPSBOb25lCisgICAgICAgIGZvciBzY2VuYXJpbyBpbiBzY2Vu YXJpb3M6CisgICAgICAgICAgICBwcmludChzY2VuYXJpb1snbmFtZSddKQorCisgICAgICAgICAg ICBpZiAndHlwZScgaW4gc2NlbmFyaW8gYW5kIHNjZW5hcmlvWyd0eXBlJ10gPT0gJ2NyZWF0ZSc6 CisgICAgICAgICAgICAgICAgIyBHZXQgdGhlIHVybCBhbmQgY3JlYXRlIHRoZSBzcGVjaWZpYyBu b2RlLgorICAgICAgICAgICAgICAgIGNyZWF0ZV91cmwgPSBzZWxmLmdldF91cmwoc2NlbmFyaW9b J2VuZHBvaW50J10pCisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnRlc3Rlci5wb3N0 KGNyZWF0ZV91cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGE9anNvbi5kdW1wcyhzY2VuYXJpb1snZGF0YSddKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSdodG1sL2pzb24nKQorICAgICAg ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisg ICAgICAgICAgICAgICAgcmVzcF9kYXRhID0ganNvbi5sb2FkcyhyZXNwb25zZS5kYXRhLmRlY29k ZSgndXRmOCcpKQorICAgICAgICAgICAgICAgIG9iamVjdF9pZCA9IHJlc3BfZGF0YVsnbm9kZSdd WydfaWQnXQorCisgICAgICAgICAgICAgICAgIyBDb21wYXJlIHRoZSByZXZlcnNlIGVuZ2luZWVy aW5nIFNRTAorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcmVfc3FsKHNjZW5hcmlvLCBvYmpl Y3RfaWQpCisgICAgICAgICAgICBlbGlmICd0eXBlJyBpbiBzY2VuYXJpbyBhbmQgc2NlbmFyaW9b J3R5cGUnXSA9PSAnYWx0ZXInOgorICAgICAgICAgICAgICAgICMgR2V0IHRoZSB1cmwgYW5kIGNy ZWF0ZSB0aGUgc3BlY2lmaWMgbm9kZS4KKyAgICAgICAgICAgICAgICBhbHRlcl91cmwgPSBzZWxm LmdldF91cmwoc2NlbmFyaW9bJ2VuZHBvaW50J10sIG9iamVjdF9pZCkKKyAgICAgICAgICAgICAg ICByZXNwb25zZSA9IHNlbGYudGVzdGVyLnB1dChhbHRlcl91cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1qc29uLmR1bXBzKHNjZW5hcmlvWydkYXRh J10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19y ZWRpcmVjdHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXNwb25z ZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICAgICAgICAgIHJlc3BfZGF0YSA9IGpzb24ubG9h ZHMocmVzcG9uc2UuZGF0YS5kZWNvZGUoJ3V0ZjgnKSkKKyAgICAgICAgICAgICAgICBvYmplY3Rf aWQgPSByZXNwX2RhdGFbJ25vZGUnXVsnX2lkJ10KKworICAgICAgICAgICAgICAgICMgQ29tcGFy ZSB0aGUgcmV2ZXJzZSBlbmdpbmVlcmluZyBTUUwKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNr X3JlX3NxbChzY2VuYXJpbywgb2JqZWN0X2lkKQorICAgICAgICAgICAgZWxpZiAndHlwZScgaW4g c2NlbmFyaW8gYW5kIHNjZW5hcmlvWyd0eXBlJ10gPT0gJ2RlbGV0ZSc6CisgICAgICAgICAgICAg ICAgIyBHZXQgdGhlIGRlbGV0ZSB1cmwgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGNyZWF0ZWQgYWJv dmUuCisgICAgICAgICAgICAgICAgZGVsZXRlX3VybCA9IHNlbGYuZ2V0X3VybChzY2VuYXJpb1sn ZW5kcG9pbnQnXSwgb2JqZWN0X2lkKQorICAgICAgICAgICAgICAgIGRlbGV0ZV9yZXNwb25zZSA9 IHNlbGYudGVzdGVyLmRlbGV0ZShkZWxldGVfdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfcmVkaXJlY3RzPVRydWUpCisgICAg ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZGVsZXRlX3Jlc3BvbnNlLnN0YXR1c19jb2Rl LCAyMDApCisKKyAgICBkZWYgZ2V0X3Rlc3RfZm9sZGVyKHNlbGYsIG1vZHVsZV9wYXRoKToKKyAg ICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgdGhlIGFwcHJvcHJpYXRl IHRlc3QgZm9sZGVyIGJhc2VkIG9uCisgICAgICAgIHNlcnZlciB2ZXJzaW9uIGFuZCB0aGVpciBl eGlzdGVuY2UuCisKKyAgICAgICAgOnBhcmFtIG1vZHVsZV9wYXRoOiBQYXRoIG9mIHRoZSBtb2R1 bGUgdG8gYmUgdGVzdGVkLgorICAgICAgICA6cmV0dXJuOgorICAgICAgICAiIiIKKyAgICAgICAg IyBKb2luIHRoZSBhcHBsaWNhdGlvbiBwYXRoIGFuZCB0aGUgbW9kdWxlIHBhdGgKKyAgICAgICAg YWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmFwcHBhdGgsIG1vZHVsZV9wYXRoKQor ICAgICAgICAjIEl0ZXJhdGUgdGhlIHZlcnNpb24gbWFwcGluZyBkaXJlY3Rvcmllcy4KKyAgICAg ICAgZm9yIHZlcnNpb25fbWFwcGluZyBpbiBnZXRfdmVyc2lvbl9tYXBwaW5nX2RpcmVjdG9yaWVz KAorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWyd0eXBlJ10pOgorICAgICAgICAgICAgaWYg dmVyc2lvbl9tYXBwaW5nWydudW1iZXInXSA+IFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5z ZXJ2ZXJfaW5mb3JtYXRpb25bJ3NlcnZlcl92ZXJzaW9uJ106CisgICAgICAgICAgICAgICAgY29u dGludWUKKworICAgICAgICAgICAgY29tcGxldGVfcGF0aCA9IG9zLnBhdGguam9pbihhYnNvbHV0 ZV9wYXRoLCAndGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2ZXJzaW9uX21hcHBpbmdbJ25hbWUnXSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5leGlz dHMoY29tcGxldGVfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUsIGNvbXBsZXRl X3BhdGgKKworICAgICAgICByZXR1cm4gRmFsc2UsIE5vbmUKKworICAgIGRlZiBjaGVja19yZV9z cWwoc2VsZiwgc2NlbmFyaW8sIG9iamVjdF9pZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlz IGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0IHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIFNRTC4KKyAg ICAgICAgOnBhcmFtIHNjZW5hcmlvOgorICAgICAgICA6cGFyYW0gb2JqZWN0X2lkOgorICAgICAg ICA6cmV0dXJuOgorICAgICAgICAiIiIKKyAgICAgICAgc3FsX3VybCA9IHNlbGYuZ2V0X3VybChz Y2VuYXJpb1snc3FsX2VuZHBvaW50J10sIG9iamVjdF9pZCkKKyAgICAgICAgcmVzcG9uc2UgPSBz ZWxmLnRlc3Rlci5nZXQoc3FsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzcG9u c2Uuc3RhdHVzX2NvZGUsIDIwMCkKKyAgICAgICAgcmVzcF9zcWwgPSByZXNwb25zZS5kYXRhLmRl Y29kZSgndW5pY29kZV9lc2NhcGUnKQorCisgICAgICAgICMgUmVtb3ZlIGZpcnN0IGFuZCBsYXN0 IGRvdWJsZSBxdW90ZXMKKyAgICAgICAgaWYgcmVzcF9zcWwuc3RhcnRzd2l0aCgnIicpIGFuZCBy ZXNwX3NxbC5lbmRzd2l0aCgnIicpOgorICAgICAgICAgICAgcmVzcF9zcWwgPSByZXNwX3NxbFsx Oi0xXQorCisgICAgICAgICMgQ2hlY2sgaWYgZXhwZWN0ZWQgc3FsIGlzIGdpdmVuIGluIEpTT04g ZmlsZSBvciBwYXRoIG9mIHRoZSBvdXRwdXQKKyAgICAgICAgIyBmaWxlIGlzIGdpdmVuCisgICAg ICAgIGlmICdleHBlY3RlZF9zcWxfZmlsZScgaW4gc2NlbmFyaW86CisgICAgICAgICAgICBvdXRw dXRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RfZm9sZGVyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2NlbmFyaW9bJ2V4cGVjdGVkX3NxbF9maWxlJ10pCisK KyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG91dHB1dF9maWxlKToKKyAgICAgICAgICAg ICAgICBmcCA9IG9wZW4ob3V0cHV0X2ZpbGUsICJyIikKKyAgICAgICAgICAgICAgICAjIFVzZWQg cnN0cmlwIHRvIHJlbW92ZSB0cmFpbGluZyBcbgorICAgICAgICAgICAgICAgIHNxbCA9IGZwLnJl YWQoKS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNxbCwgcmVz cF9zcWwpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFs c2UoIkV4cGVjdGVkIFNRTCBGaWxlIG5vdCBmb3VuZCIpCisgICAgICAgIGVsaWYgJ2V4cGVjdGVk X3NxbCcgaW4gc2NlbmFyaW86CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzY2VuYXJp b1snZXhwZWN0ZWRfc3FsJ10sIHJlc3Bfc3FsKQpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24v cnVudGVzdHMucHkgYi93ZWIvcmVncmVzc2lvbi9ydW50ZXN0cy5weQppbmRleCA0ZjgxMzE0NS4u ZjM4ZmFhY2QgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CisrKyBiL3dl Yi9yZWdyZXNzaW9uL3J1bnRlc3RzLnB5CkBAIC0yNTksNiArMjU5LDExIEBAIGRlZiBnZXRfdGVz dF9tb2R1bGVzKGFyZ3VtZW50cyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGV4Y2x1ZGVfcGtncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yX21vZHVsZXMpCiAKKyAgICAjIExvYWQgdGhlIHJldmVyc2Ug ZW5naW5lZXJpbmcgc3FsIHRlc3QgbW9kdWxlCisgICAgVGVzdHNHZW5lcmF0b3JSZWdpc3RyeS5s b2FkX2dlbmVyYXRvcnMoCisgICAgICAgICdyZWdyZXNzaW9uLnJlX3NxbCcsIGV4Y2x1ZGVfcGtn cywKKyAgICAgICAgc2V0X21vZHVsZV9saXN0PUZhbHNlKQorCiAgICAgIyBTb3J0IG1vZHVsZSBs aXN0IHNvIHRoYXQgdGVzdCBzdWl0ZSBleGVjdXRlcyB0aGUgdGVzdCBjYXNlcyBzZXF1ZW50aWFs bHkKICAgICBtb2R1bGVfbGlzdCA9IFRlc3RzR2VuZXJhdG9yUmVnaXN0cnkucmVnaXN0cnkuaXRl bXMoKQogICAgIG1vZHVsZV9saXN0ID0gc29ydGVkKG1vZHVsZV9saXN0LCBrZXk9bGFtYmRhIG1v ZHVsZV90dXBsZTogbW9kdWxlX3R1cGxlWzBdKQpAQCAtNDM4LDYgKzQ0Myw5IEBAIGlmIF9fbmFt ZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgICAgc2VydmVyWydzc2xtb2RlJ10KICAg ICAgICAgICAgICkKIAorICAgICAgICAgICAgIyBBZGQgdGhlIHNlcnZlciB2ZXJzaW9uIGluIHNl cnZlciBpbmZvcm1hdGlvbgorICAgICAgICAgICAgc2VydmVyX2luZm9ybWF0aW9uWydzZXJ2ZXJf dmVyc2lvbiddID0gY29ubmVjdGlvbi5zZXJ2ZXJfdmVyc2lvbgorCiAgICAgICAgICAgICAjIERy b3AgdGhlIGRhdGFiYXNlIGlmIGFscmVhZHkgZXhpc3RzLgogICAgICAgICAgICAgdGVzdF91dGls cy5kcm9wX2RhdGFiYXNlKGNvbm5lY3Rpb24sIHRlc3RfZGJfbmFtZSkKICAgICAgICAgICAgICMg Q3JlYXRlIGRhdGFiYXNlCg== --000000000000a6f357058b33293f--