From a3a0e7f1a9e73b2bbcf496211739fa10329c6acb Mon Sep 17 00:00:00 2001 From: git_admin Date: Mon, 27 Apr 2026 06:58:39 +0000 Subject: [PATCH] Tower: upload cetmix_tower_yaml 16.0.3.1.0 (via marketplace) --- addons/cetmix_tower_yaml/tests/test_yaml_export_wizard.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 addons/cetmix_tower_yaml/tests/test_yaml_export_wizard.py diff --git a/addons/cetmix_tower_yaml/tests/test_yaml_export_wizard.py b/addons/cetmix_tower_yaml/tests/test_yaml_export_wizard.py new file mode 100644 index 0000000..fd78bbd --- /dev/null +++ b/addons/cetmix_tower_yaml/tests/test_yaml_export_wizard.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjQgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KaW1wb3J0IGJhc2U2NAoKaW1wb3J0IHlhbWwKCmZyb20gb2Rvby5leGNlcHRpb25zIGltcG9ydCBBY2Nlc3NFcnJvciwgVmFsaWRhdGlvbkVycm9yCgpmcm9tIG9kb28uYWRkb25zLmJhc2UudGVzdHMuY29tbW9uIGltcG9ydCBCYXNlQ29tbW9uCgoKY2xhc3MgVGVzdFlhbWxFeHBvcnRXaXphcmQoQmFzZUNvbW1vbik6CiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRVcENsYXNzKGNscywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICBzdXBlcigpLnNldFVwQ2xhc3MoKmFyZ3MsICoqa3dhcmdzKQoKICAgICAgICAjIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpbGUgaGVhZGVyCiAgICAgICAgIyBpcyBwcmVzZW50IGluIHRoZSBZQU1MIGNvZGUKICAgICAgICBjbHMuZmlsZV9oZWFkZXIgPSAiIiIKIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHdpdGggQ2V0bWl4IFRvd2VyLgojIERldGFpbHMgYW5kIGRvY3VtZW50YXRpb246IGh0dHBzOi8vY2V0bWl4LmNvbS90b3dlcgoiIiIKICAgICAgICAjIENyZWF0ZSBhIGNvbW1hbmQKICAgICAgICBjbHMuVG93ZXJDb21tYW5kID0gY2xzLmVudlsiY3gudG93ZXIuY29tbWFuZCJdCiAgICAgICAgY2xzLmNvbW1hbmRfdGVzdF93aXphcmQgPSBjbHMuVG93ZXJDb21tYW5kLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X2NvbW1hbmRfZnJvbV95YW1sIiwKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgQ29tbWFuZCBGcm9tIFlhbWwiLAogICAgICAgICAgICAgICAgImNvZGUiOiAiZWNobyAnVGVzdCBDb21tYW5kIEZyb20gWWFtbCciLAogICAgICAgICAgICB9CiAgICAgICAgKQogICAgICAgIGNscy5jb21tYW5kX3Rlc3Rfd2l6YXJkXzIgPSBjbHMuVG93ZXJDb21tYW5kLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X2NvbW1hbmRfZnJvbV95YW1sXzIiLAogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBDb21tYW5kIEZyb20gWWFtbCAyIiwKICAgICAgICAgICAgICAgICJjb2RlIjogImVjaG8gJ1Rlc3QgQ29tbWFuZCBGcm9tIFlhbWwgMiciLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIENyZWF0ZSBhIGZsaWdodCBwbGFuCiAgICAgICAgY2xzLkZsaWdodFBsYW4gPSBjbHMuZW52WyJjeC50b3dlci5wbGFuIl0KICAgICAgICBjbHMuZmxpZ2h0X3BsYW5fdGVzdF93aXphcmQgPSBjbHMuRmxpZ2h0UGxhbi5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgRmxpZ2h0IFBsYW4gRnJvbSBZYW1sIiwKICAgICAgICAgICAgICAgICJsaW5lX2lkcyI6IFsKICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tYW5kX2lkIjogY2xzLmNvbW1hbmRfdGVzdF93aXphcmQuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBDcmVhdGUgYSBzZXJ2ZXIgdGVtcGxhdGUKICAgICAgICBjbHMuU2VydmVyVGVtcGxhdGUgPSBjbHMuZW52WyJjeC50b3dlci5zZXJ2ZXIudGVtcGxhdGUiXQogICAgICAgIGNscy5zZXJ2ZXJfdGVtcGxhdGVfdGVzdF93aXphcmQgPSBjbHMuU2VydmVyVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFNlcnZlciBUZW1wbGF0ZSBGcm9tIFlhbWwiLAogICAgICAgICAgICAgICAgImZsaWdodF9wbGFuX2lkIjogY2xzLmZsaWdodF9wbGFuX3Rlc3Rfd2l6YXJkLmlkLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIENyZWF0ZSBhIHdpemFyZCBhbmQgdHJpZ2dlciBvbmNoYW5nZQogICAgICAgIGNscy5ZYW1sRXhwb3J0V2l6YXJkID0gY2xzLmVudlsiY3gudG93ZXIueWFtbC5leHBvcnQud2l6Il0KICAgICAgICBjbHMudGVzdF93aXphcmQgPSBjbHMuWWFtbEV4cG9ydFdpemFyZC53aXRoX2NvbnRleHQoCiAgICAgICAgICAgIGFjdGl2ZV9tb2RlbD0iY3gudG93ZXIuc2VydmVyLnRlbXBsYXRlIiwKICAgICAgICAgICAgYWN0aXZlX2lkcz1bY2xzLnNlcnZlcl90ZW1wbGF0ZV90ZXN0X3dpemFyZC5pZF0sCiAgICAgICAgKS5jcmVhdGUoe30pCiAgICAgICAgY2xzLnRlc3Rfd2l6YXJkLm9uY2hhbmdlX2V4cGxvZGVfY2hpbGRfcmVjb3JkcygpCgogICAgZGVmIHRlc3RfdXNlcl93aXRob3V0X2V4cG9ydF9ncm91cF9jYW5ub3RfZXhwb3J0KHNlbGYpOgogICAgICAgICIiIlRlc3QgaWYgdXNlciB3aXRob3V0IGV4cG9ydCBncm91cCBjYW5ub3QgZXhwb3J0IiIiCgogICAgICAgICMgVG93ZXIgbWFuYWdlciB1c2VyIHdpdGhvdXQgZXhwb3J0IGdyb3VwCiAgICAgICAgc2VsZi51c2VyX3lhbWxfZXhwb3J0ID0gc2VsZi5lbnZbInJlcy51c2VycyJdLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTm8gWWFtbCBFeHBvcnQgVXNlciIsCiAgICAgICAgICAgICAgICAibG9naW4iOiAibm9feWFtbF9leHBvcnRfdXNlciIsCiAgICAgICAgICAgICAgICAiZ3JvdXBzX2lkIjogWwogICAgICAgICAgICAgICAgICAgICg0LCBzZWxmLmVudi5yZWYoImNldG1peF90b3dlcl9zZXJ2ZXIuZ3JvdXBfbWFuYWdlciIpLmlkKQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFjY2Vzc0Vycm9yKToKICAgICAgICAgICAgc2VsZi50ZXN0X3dpemFyZC53aXRoX3VzZXIoc2VsZi51c2VyX3lhbWxfZXhwb3J0KS5yZWFkKFtdKQoKICAgIGRlZiB0ZXN0X3lhbWxfZXhwb3J0X3dpemFyZF95YW1sX2dlbmVyYXRpb24oc2VsZik6CiAgICAgICAgIiIiVGVzdCBjb2RlIGdlbmVyYXRpb24gb2YgWUFNTCBleHBvcnQgd2l6YXJkLiIiIgoKICAgICAgICB3aXphcmRfeWFtbCA9ICIiIgojIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgd2l0aCBDZXRtaXggVG93ZXIuCiMgRGV0YWlscyBhbmQgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9jZXRtaXguY29tL3Rvd2VyCmNldG1peF90b3dlcl95YW1sX3ZlcnNpb246IDEKcmVjb3JkczoKLSBjZXRtaXhfdG93ZXJfbW9kZWw6IGNvbW1hbmQKICBhY2Nlc3NfbGV2ZWw6IG1hbmFnZXIKICByZWZlcmVuY2U6IHRlc3RfY29tbWFuZF9mcm9tX3lhbWwKICBuYW1lOiBUZXN0IENvbW1hbmQgRnJvbSBZYW1sCiAgYWN0aW9uOiBzc2hfY29tbWFuZAogIGFsbG93X3BhcmFsbGVsX3J1bjogZmFsc2UKICBub3RlOiBmYWxzZQogIHBhdGg6IGZhbHNlCiAgaWZfZmlsZV9leGlzdHM6IHNraXAKICBkaXNjb25uZWN0X2ZpbGU6IGZhbHNlCiAgZmx5X2hlcmU6IGZhbHNlCiAgY29kZTogZWNobyAnVGVzdCBDb21tYW5kIEZyb20gWWFtbCcKICBub19zcGxpdF9mb3Jfc3VkbzogZmFsc2UKICBzZXJ2ZXJfc3RhdHVzOiBmYWxzZQotIGNldG1peF90b3dlcl9tb2RlbDogY29tbWFuZAogIGFjY2Vzc19sZXZlbDogbWFuYWdlcgogIHJlZmVyZW5jZTogdGVzdF9jb21tYW5kX2Zyb21feWFtbF8yCiAgbmFtZTogVGVzdCBDb21tYW5kIEZyb20gWWFtbCAyCiAgYWN0aW9uOiBzc2hfY29tbWFuZAogIGFsbG93X3BhcmFsbGVsX3J1bjogZmFsc2UKICBub3RlOiBmYWxzZQogIHBhdGg6IGZhbHNlCiAgaWZfZmlsZV9leGlzdHM6IHNraXAKICBkaXNjb25uZWN0X2ZpbGU6IGZhbHNlCiAgZmx5X2hlcmU6IGZhbHNlCiAgY29kZTogZWNobyAnVGVzdCBDb21tYW5kIEZyb20gWWFtbCAyJwogIG5vX3NwbGl0X2Zvcl9zdWRvOiBmYWxzZQogIHNlcnZlcl9zdGF0dXM6IGZhbHNlCiIiIgoKICAgICAgICAjIC0tIDEgLS0KICAgICAgICAjIFRlc3Qgd2l0aCB0d28gY29tbWFuZHMKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICAiZGVmYXVsdF9leHBsb2RlX2NoaWxkX3JlY29yZHMiOiBUcnVlLAogICAgICAgICAgICAiZGVmYXVsdF9yZW1vdmVfZW1wdHlfdmFsdWVzIjogVHJ1ZSwKICAgICAgICAgICAgImFjdGl2ZV9tb2RlbCI6ICJjeC50b3dlci5jb21tYW5kIiwKICAgICAgICAgICAgImFjdGl2ZV9pZHMiOiBbc2VsZi5jb21tYW5kX3Rlc3Rfd2l6YXJkLmlkLCBzZWxmLmNvbW1hbmRfdGVzdF93aXphcmRfMi5pZF0sCiAgICAgICAgfQogICAgICAgIHdpemFyZCA9IHNlbGYuWWFtbEV4cG9ydFdpemFyZC53aXRoX2NvbnRleHQoY29udGV4dCkuY3JlYXRlKHt9KSAgIyBweWxpbnQ6IGRpc2FibGU9Y29udGV4dC1vdmVycmlkZGVuICMgbmV3IG5lZWQgYSBuZXcgY2xlYW4gY29udGV4dAogICAgICAgIHdpemFyZC5vbmNoYW5nZV9leHBsb2RlX2NoaWxkX3JlY29yZHMoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2l6YXJkLnlhbWxfY29kZSwgd2l6YXJkX3lhbWwpCgogICAgZGVmIHRlc3RfeWFtbF9leHBvcnRfd2l6YXJkKHNlbGYpOgogICAgICAgICIiIlRlc3QgdGhlIFlBTUwgZXhwb3J0IHdpemFyZC4iIiIKCiAgICAgICAgIyAtLSAxIC0tCiAgICAgICAgIyBUZXN0IHdpemFyZCBhY3Rpb24KICAgICAgICByZXN1bHQgPSBzZWxmLnRlc3Rfd2l6YXJkLmFjdGlvbl9nZW5lcmF0ZV95YW1sX2ZpbGUoKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHJlc3VsdFsidHlwZSJdLCAiaXIuYWN0aW9ucy5hY3Rfd2luZG93IiwgIkFjdGlvbiBzaG91bGQgYmUgYSB3aW5kb3ciCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHJlc3VsdFsicmVzX21vZGVsIl0sCiAgICAgICAgICAgICJjeC50b3dlci55YW1sLmV4cG9ydC53aXouZG93bmxvYWQiLAogICAgICAgICAgICAiUmVzdWx0IG1vZGVsIHNob3VsZCBiZSB0aGUgZG93bmxvYWQgd2l6YXJkIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFsicmVzX2lkIl0sICJXaXphcmQgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIikKCiAgICAgICAgIyAtLSAyIC0tCiAgICAgICAgIyBFbnN1cmUgZG93bmxvYWQgd2l6YXJkIGZpbGUgbmFtZSBpcyBnZW5lcmF0ZWQKICAgICAgICAjIGJhc2VkIG9uIHRoZSByZWNvcmQgcmVmZXJlbmNlCiAgICAgICAgZG93bmxvYWRfd2l6YXJkID0gc2VsZi5lbnZbImN4LnRvd2VyLnlhbWwuZXhwb3J0Lndpei5kb3dubG9hZCJdLmJyb3dzZSgKICAgICAgICAgICAgcmVzdWx0WyJyZXNfaWQiXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBkb3dubG9hZF93aXphcmQueWFtbF9maWxlX25hbWUsCiAgICAgICAgICAgIGYic2VydmVyX3RlbXBsYXRlX3tzZWxmLnNlcnZlcl90ZW1wbGF0ZV90ZXN0X3dpemFyZC5yZWZlcmVuY2V9LnlhbWwiLAogICAgICAgICAgICAiWUFNTCBmaWxlIG5hbWUgc2hvdWxkIGJlIGdlbmVyYXRlZCBiYXNlZCBvbiByZWNvcmQgcmVmZXJlbmNlIiwKICAgICAgICApCgogICAgICAgICMgLS0gMyAtLQogICAgICAgICMgRGVjb2RlIFlBTUwgZmlsZSBhbmQgY2hlY2sgaWYgaXQncyB2YWxpZAogICAgICAgIHlhbWxfZmlsZV9jb250ZW50ID0gYmFzZTY0LmRlY29kZWJ5dGVzKGRvd25sb2FkX3dpemFyZC55YW1sX2ZpbGUpLmRlY29kZSgKICAgICAgICAgICAgInV0Zi04IgogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB5YW1sX2ZpbGVfY29udGVudCwKICAgICAgICAgICAgc2VsZi50ZXN0X3dpemFyZC55YW1sX2NvZGUsCiAgICAgICAgICAgICJZQU1MIGZpbGUgY29udGVudCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIFlBTUwgY29kZSIsCiAgICAgICAgKQoKICAgICAgICAjIC0tIDQgLS0KICAgICAgICAjIFRlc3QgaWYgZW1wdHkgWUFNTCBjb2RlIGlzIGhhbmRsZWQgY29ycmVjdGx5CiAgICAgICAgc2VsZi50ZXN0X3dpemFyZC55YW1sX2NvZGUgPSAiIgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsaWRhdGlvbkVycm9yKToKICAgICAgICAgICAgc2VsZi50ZXN0X3dpemFyZC5hY3Rpb25fZ2VuZXJhdGVfeWFtbF9maWxlKCkKCiAgICBkZWYgdGVzdF9yZWZlcmVuY2Vfb2JqZWN0X3VuaXF1ZW5lc3Moc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIGVhY2ggcmVmZXJlbmNlIGlzIGV4cG9ydGVkIGFzIGEgZnVsbCBvYmplY3Qgb25seSBvbmNlCiAgICAgICAgKG90aGVyIHRpbWVzIG9ubHkgYXMgcmVmKS4KICAgICAgICAiIiIKCiAgICAgICAgIyBQcmVwYXJlIFlBTUwgZXhwb3J0IGZvciBmbGlnaHRfcGxhbiB3aXRoIHR3byBzYW1lIGNvbW1hbmRzCiAgICAgICAgc2VsZi5mbGlnaHRfcGxhbl90ZXN0X3dpemFyZC5saW5lX2lkcyA9IFsKICAgICAgICAgICAgKDAsIDAsIHsiY29tbWFuZF9pZCI6IHNlbGYuY29tbWFuZF90ZXN0X3dpemFyZC5pZH0pLAogICAgICAgICAgICAoMCwgMCwgeyJjb21tYW5kX2lkIjogc2VsZi5jb21tYW5kX3Rlc3Rfd2l6YXJkLmlkfSksCiAgICAgICAgXQoKICAgICAgICAjIFByZXBhcmUgWUFNTCBjb2RlCiAgICAgICAgc2VsZi50ZXN0X3dpemFyZC5vbmNoYW5nZV9leHBsb2RlX2NoaWxkX3JlY29yZHMoKQogICAgICAgIHlhbWxfZGF0YSA9IHlhbWwuc2FmZV9sb2FkKHNlbGYudGVzdF93aXphcmQueWFtbF9jb2RlKQoKICAgICAgICAjIHJlZmVyZW5jZSBjb3VudGVycwogICAgICAgIHJlZl9mdWxsID0gc2V0KCkKICAgICAgICByZWZfcmVmcyA9IHNldCgpCgogICAgICAgICMgUmVjdXJzaXZlbHkgd2FsayB0aHJvdWdoIHRoZSBZQU1MIGRhdGEgYW5kIGNvdW50IHJlZmVyZW5jZXMKICAgICAgICBkZWYgd2FsayhvYmopOgogICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICAgICAgICAgICAgICByZWYgPSBvYmouZ2V0KCJyZWZlcmVuY2UiKQogICAgICAgICAgICAgICAgIyBkaWN0IG9ubHkgd2l0aCAicmVmZXJlbmNlIiA9IHJlZiwgb3RoZXJ3aXNlIOKAlCBmdWxsIG9iamVjdAogICAgICAgICAgICAgICAgaWYgcmVmOgogICAgICAgICAgICAgICAgICAgIGlmIGxpc3Qob2JqLmtleXMoKSkgPT0gWyJyZWZlcmVuY2UiXToKICAgICAgICAgICAgICAgICAgICAgICAgcmVmX3JlZnMuYWRkKHJlZikKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICByZWZfZnVsbC5hZGQocmVmKQogICAgICAgICAgICAgICAgZm9yIHYgaW4gb2JqLnZhbHVlcygpOgogICAgICAgICAgICAgICAgICAgIHdhbGsodikKICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgbGlzdCk6CiAgICAgICAgICAgICAgICBmb3IgdiBpbiBvYmo6CiAgICAgICAgICAgICAgICAgICAgd2Fsayh2KQoKICAgICAgICAjIFdhbGsgdGhyb3VnaCB0aGUgWUFNTCBkYXRhCiAgICAgICAgd2Fsayh5YW1sX2RhdGFbInJlY29yZHMiXSkKCiAgICAgICAgIyBFYWNoIHJlZmVyZW5jZSBhcyBhIGZ1bGwgb2JqZWN0IOKAlCBvbmx5IG9uY2UKICAgICAgICBmb3IgcmVmIGluIHJlZl9mdWxsOgogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgbGlzdChyZWZfZnVsbCkuY291bnQocmVmKSwKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICBmIlJlZmVyZW5jZSAne3JlZn0nIGFwcGVhcnMgYXMgYSBmdWxsIG9iamVjdCBtb3JlIHRoYW4gb25jZSIsCiAgICAgICAgICAgICkKICAgICAgICAjIENoZWNrIHRoYXQgbm8gZnVsbCBvYmplY3RzIGFwcGVhciBtb3JlIHRoYW4gb25jZQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihyZWZfZnVsbCksCiAgICAgICAgICAgIGxlbihzZXQocmVmX2Z1bGwpKSwKICAgICAgICAgICAgIlNvbWUgZnVsbCBvYmplY3RzIGFwcGVhciBtb3JlIHRoYW4gb25jZSIsCiAgICAgICAgKQoKICAgICAgICAjIENoZWNrIHRoYXQgZm9yIGVhY2ggcmVmIHRoZXJlIGlzIG5vIG9ubHkgcmVmZXJlbmNlLCBidXQgbm8gZnVsbCBvYmplY3QKICAgICAgICBmb3IgcmVmIGluIHJlZl9yZWZzOgogICAgICAgICAgICBzZWxmLmFzc2VydEluKAogICAgICAgICAgICAgICAgcmVmLAogICAgICAgICAgICAgICAgcmVmX2Z1bGwsCiAgICAgICAgICAgICAgICBmIlJlZmVyZW5jZSAne3JlZn0nIGlzIHVzZWQgb25seSBhcyBhIHJlZmVyZW5jZSwgIgogICAgICAgICAgICAgICAgImJ1dCBubyBmdWxsIG9iamVjdCBwcmVzZW50IiwKICAgICAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2V4cG9ydF9yZXF1aXJlZF9tb2RlbF9uYW1lX2luX3lhbWwoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCB0aGF0IHRoZSBtb2RlbCBuYW1lIGlzIHJlcXVpcmVkIGluIHRoZSBZQU1MIGZpbGUgZm9yIGVhY2ggcmVjb3JkCiAgICAgICAgIiIiCiAgICAgICAgIyBjcmVhdGUgYSBjb21tYW5kIHRvIHJ1biBmbGlnaHQgcGxhbgogICAgICAgIGNvbW1hbmRfcnVuX2ZsaWdodF9wbGFuID0gc2VsZi5Ub3dlckNvbW1hbmQuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJSdW4gRmxpZ2h0IFBsYW4iLAogICAgICAgICAgICAgICAgImFjdGlvbiI6ICJwbGFuIiwKICAgICAgICAgICAgICAgICJmbGlnaHRfcGxhbl9pZCI6IHNlbGYuZmxpZ2h0X3BsYW5fdGVzdF93aXphcmQuaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgIyBleHBvcnQgMiBjb21tYW5kczogY29tbWFuZF9ydW5fZmxpZ2h0X3BsYW4gYW5kIGNvbW1hbmRfdGVzdF93aXphcmQKICAgICAgICB3aXphcmQgPSBzZWxmLllhbWxFeHBvcnRXaXphcmQud2l0aF9jb250ZXh0KAogICAgICAgICAgICBhY3RpdmVfbW9kZWw9ImN4LnRvd2VyLmNvbW1hbmQiLAogICAgICAgICAgICBhY3RpdmVfaWRzPVtjb21tYW5kX3J1bl9mbGlnaHRfcGxhbi5pZCwgc2VsZi5jb21tYW5kX3Rlc3Rfd2l6YXJkLmlkXSwKICAgICAgICApLmNyZWF0ZSh7fSkKCiAgICAgICAgd2l6YXJkLm9uY2hhbmdlX2V4cGxvZGVfY2hpbGRfcmVjb3JkcygpCgogICAgICAgIHlhbWxfZGF0YSA9IHlhbWwuc2FmZV9sb2FkKHdpemFyZC55YW1sX2NvZGUpCgogICAgICAgICMgY2hlY2sgdGhhdCB0aGUgbW9kZWwgbmFtZSBpcyBwcmVzZW50IGluIHRoZSBZQU1MIGZpbGUgZm9yIGVhY2ggcmVjb3JkCiAgICAgICAgZm9yIHJlY29yZCBpbiB5YW1sX2RhdGFbInJlY29yZHMiXToKICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiY2V0bWl4X3Rvd2VyX21vZGVsIiwgcmVjb3JkKQoKICAgIGRlZiB0ZXN0X2RlZmF1bHRfeWFtbF9maWxlX25hbWVfaXNfdXNlZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBXaXphcmQgc2hvdWxkIHByZS1maWxsIGB5YW1sX2ZpbGVfbmFtZWAgd2l0aCB0aGUgYXV0by1nZW5lcmF0ZWQKICAgICAgICB2YWx1ZSB0aGF0IGVuZHMgd2l0aCAnLnlhbWwnIGFuZCBjb250YWlucyB0aGUgbW9kZWwgcHJlZml4LgogICAgICAgICIiIgogICAgICAgIHdpeiA9IHNlbGYuWWFtbEV4cG9ydFdpemFyZC53aXRoX2NvbnRleHQoCiAgICAgICAgICAgIGFjdGl2ZV9tb2RlbD0iY3gudG93ZXIuY29tbWFuZCIsCiAgICAgICAgICAgIGFjdGl2ZV9pZHM9W3NlbGYuY29tbWFuZF90ZXN0X3dpemFyZC5pZF0sCiAgICAgICAgKS5jcmVhdGUoe30pCgogICAgICAgIGRlZmF1bHRfbmFtZSA9IHdpei55YW1sX2ZpbGVfbmFtZQoKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAogICAgICAgICAgICBkZWZhdWx0X25hbWUuZW5kc3dpdGgoIi55YW1sIiksCiAgICAgICAgICAgICJEZWZhdWx0IGZpbGUgbmFtZSBtdXN0IE5PIGhhdmUgLnlhbWwgc3VmZml4IiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRJbigKICAgICAgICAgICAgImNvbW1hbmRfIiwKICAgICAgICAgICAgZGVmYXVsdF9uYW1lLAogICAgICAgICAgICAiRGVmYXVsdCBmaWxlIG5hbWUgc2hvdWxkIGluY2x1ZGUgbW9kZWwgcHJlZml4IiwKICAgICAgICApCgogICAgZGVmIHRlc3RfeWFtbF9maWxlX25hbWVfaXNfYXV0b19maXhlZChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBXaGVuIHRoZSB1c2VyIGFzc2lnbnMgYW4gaW52YWxpZCBuYW1lLCB3aXphcmQgc2hvdWxkIGF1dG8tc2FuaXRpc2UKICAgICAgICBpdCB0byBhIHNhZmUgKmJhc2VuYW1lKiAobG93ZXJjYXNlLCB1bmRlcnNjb3Jlcywgbm8gZXh0ZW5zaW9uKS4KICAgICAgICAiIiIKICAgICAgICB3aXogPSBzZWxmLllhbWxFeHBvcnRXaXphcmQud2l0aF9jb250ZXh0KAogICAgICAgICAgICBhY3RpdmVfbW9kZWw9ImN4LnRvd2VyLmNvbW1hbmQiLAogICAgICAgICAgICBhY3RpdmVfaWRzPVtzZWxmLmNvbW1hbmRfdGVzdF93aXphcmQuaWRdLAogICAgICAgICkuY3JlYXRlKHt9KQoKICAgICAgICAjIHVzZXIgZW50ZXJzIGEgJ2RpcnR5JyBuYW1lIHdpdGggc3BhY2VzLCBjYXBpdGFscywgc3ltYm9scwogICAgICAgIHdpei53cml0ZSh7InlhbWxfZmlsZV9uYW1lIjogIk15IEZpbGUhQCMgLllBTUwifSkKCiAgICAgICAgIyB3cml0ZSgpIG92ZXJyaWRlIHN0cmlwcyB0byBhIGJhc2VuYW1lIFdJVEhPVVQgJy55YW1sJwogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHdpei55YW1sX2ZpbGVfbmFtZSwKICAgICAgICAgICAgIm15X2ZpbGUiLAogICAgICAgICAgICAiV2l6YXJkIGZpZWxkIG11c3QgaG9sZCBvbmx5IHRoZSBjbGVhbmVkIGJhc2VuYW1lLCB3aXRob3V0IGV4dGVuc2lvbiIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X2FjdGlvbl9nZW5lcmF0ZV9hcHBlbmRzX2V4dGVuc2lvbihzZWxmKToKICAgICAgICAiIiIKICAgICAgICBXaGVuIGdlbmVyYXRpbmcgdGhlIGRvd25sb2FkIHJlY29yZCwgdGhlIHN5c3RlbSBtdXN0IGFwcGVuZAogICAgICAgIHRoZSBgLnlhbWxgIGV4dGVuc2lvbiB0byB0aGUgc2FuaXRpemVkIGJhc2VuYW1lLgogICAgICAgICIiIgogICAgICAgIHdpeiA9IHNlbGYuWWFtbEV4cG9ydFdpemFyZC53aXRoX2NvbnRleHQoCiAgICAgICAgICAgIGFjdGl2ZV9tb2RlbD0iY3gudG93ZXIuY29tbWFuZCIsCiAgICAgICAgICAgIGFjdGl2ZV9pZHM9W3NlbGYuY29tbWFuZF90ZXN0X3dpemFyZC5pZF0sCiAgICAgICAgKS5jcmVhdGUoe30pCiAgICAgICAgd2l6Lm9uY2hhbmdlX2V4cGxvZGVfY2hpbGRfcmVjb3JkcygpCiAgICAgICAgYWN0ID0gd2l6LmFjdGlvbl9nZW5lcmF0ZV95YW1sX2ZpbGUoKQogICAgICAgIGRvd25sb2FkID0gc2VsZi5lbnZbImN4LnRvd2VyLnlhbWwuZXhwb3J0Lndpei5kb3dubG9hZCJdLmJyb3dzZShhY3RbInJlc19pZCJdKQogICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkb3dubG9hZC55YW1sX2ZpbGVfbmFtZS5lbmRzd2l0aCgiLnlhbWwiKSkKCiAgICBkZWYgdGVzdF9jdXN0b21fcmVxdWlyZXNfdGV4dChzZWxmKToKICAgICAgICAiIiJDcmVhdGluZyBhIHRlbXBsYXRlIHdpdGggbGljZW5zZSAnY3VzdG9tJyBidXQgbm8gdGV4dCBtdXN0IGZhaWwiIiIKICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbGlkYXRpb25FcnJvcik6CiAgICAgICAgICAgIHNlbGYuZW52WyJjeC50b3dlci55YW1sLm1hbmlmZXN0LnRtcGwiXS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmFkIE1hbmlmZXN0IiwKICAgICAgICAgICAgICAgICAgICAibGljZW5zZSI6ICJjdXN0b20iLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCgogICAgICAgIHRtcGxfb2sgPSBzZWxmLmVudlsiY3gudG93ZXIueWFtbC5tYW5pZmVzdC50bXBsIl0uY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJHb29kIE1hbmlmZXN0IiwKICAgICAgICAgICAgICAgICJsaWNlbnNlIjogImN1c3RvbSIsCiAgICAgICAgICAgICAgICAibGljZW5zZV90ZXh0IjogIkN1c3RvbSBsaWNlbnNlIHRlcm1zIiwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtcGxfb2subGljZW5zZSwgImN1c3RvbSIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXBsX29rLmxpY2Vuc2VfdGV4dCwgIkN1c3RvbSBsaWNlbnNlIHRlcm1zIikKCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWxpZGF0aW9uRXJyb3IpOgogICAgICAgICAgICBzZWxmLmVudlsiY3gudG93ZXIueWFtbC5tYW5pZmVzdC50bXBsIl0uY3JlYXRlKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkJhZCBNYW5pZmVzdCAyIiwKICAgICAgICAgICAgICAgICAgICAibGljZW5zZSI6ICJjdXN0b20iLAogICAgICAgICAgICAgICAgICAgICJsaWNlbnNlX3RleHQiOiAiICAgICIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKCiAgICBkZWYgdGVzdF93aXphcmRfcmVzZXRzX3ByaWNlX29uX2xpY2Vuc2VfY2hhbmdlKHNlbGYpOgogICAgICAgICIiIldpemFyZCBtdXN0IHJlc2V0IHByaWNlL2N1cnJlbmN5IHdoZW4gbGljZW5zZSBjaGFuZ2VzIGF3YXkgZnJvbSAnY3VzdG9tJyIiIgogICAgICAgIHdpeiA9IHNlbGYuWWFtbEV4cG9ydFdpemFyZC5uZXcoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJtYW5pZmVzdF9saWNlbnNlIjogImN1c3RvbSIsCiAgICAgICAgICAgICAgICAibWFuaWZlc3RfcHJpY2UiOiA0Mi4wLAogICAgICAgICAgICAgICAgIm1hbmlmZXN0X2N1cnJlbmN5IjogIkVVUiIsCiAgICAgICAgICAgIH0KICAgICAgICApCiAgICAgICAgd2l6Lm1hbmlmZXN0X2xpY2Vuc2UgPSAiYWdwbC0zIgogICAgICAgIHdpei5fb25jaGFuZ2VfbWFuaWZlc3RfbGljZW5zZSgpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aXoubWFuaWZlc3RfcHJpY2UsIDAuMCkKICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdpei5tYW5pZmVzdF9jdXJyZW5jeSkKCiAgICAgICAgd2l6Lm1hbmlmZXN0X3ByaWNlID0gNy41CiAgICAgICAgd2l6Lm1hbmlmZXN0X2N1cnJlbmN5ID0gIlVTRCIKICAgICAgICB3aXoubWFuaWZlc3RfbGljZW5zZSA9ICJjdXN0b20iCiAgICAgICAgd2l6Ll9vbmNoYW5nZV9tYW5pZmVzdF9saWNlbnNlKCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpei5tYW5pZmVzdF9wcmljZSwgNy41KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2l6Lm1hbmlmZXN0X2N1cnJlbmN5LCAiVVNEIikK \ No newline at end of file