diff options
Diffstat (limited to 'test/units/modules/network/f5')
311 files changed, 0 insertions, 50036 deletions
diff --git a/test/units/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm b/test/units/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm Binary files differdeleted file mode 100644 index 1692813534..0000000000 --- a/test/units/modules/network/f5/fixtures/MyApp-0.1.0-0001.noarch.rpm +++ /dev/null diff --git a/test/units/modules/network/f5/fixtures/basic-iapp.tmpl b/test/units/modules/network/f5/fixtures/basic-iapp.tmpl deleted file mode 100644 index 7f9a681b74..0000000000 --- a/test/units/modules/network/f5/fixtures/basic-iapp.tmpl +++ /dev/null @@ -1,25 +0,0 @@ -sys application template good_templ { - actions { - definition { - html-help { - # HTML Help for the template - } - implementation { - # TMSH implementation code - } - macro { - # TMSH macro code - } - presentation { - # APL presentation language - } - role-acl { admin manager resource-admin } - run-as none - } - } - description "My basic template" - partition Common - requires-modules { ltm } - ignore-verification true - requires-bigip-version-min 11.6.0 -} diff --git a/test/units/modules/network/f5/fixtures/cert1.crt b/test/units/modules/network/f5/fixtures/cert1.crt deleted file mode 100644 index 1d22f30289..0000000000 --- a/test/units/modules/network/f5/fixtures/cert1.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:46:09 2016 GMT - Not After : Jun 25 16:46:09 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert1.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:d6:0f:bd:26:ef:14:4d:09:f6:db:8b:01:f5:4e: - 6c:03:b1:35:20:16:b8:1b:7c:e6:b6:8d:97:1b:b0: - 4f:8a:b6:cb:54:7e:7a:ff:fd:af:02:db:bf:9d:cf: - 9a:4c:0d:87:93:8b:cc:61:f3:23:a9:6f:8e:d4:82: - 2c:93:b6:e2:fa:37:ed:8a:d3:23:8f:6d:b5:78:4a: - 38:ba:93:f9:4a:1c:40:06:33:d7:c0:98:20:d4:16: - ac:a4:a5:6b:41:20:4c:3a:55:7e:c7:50:e7:95:07: - 4e:86:15:86:7a:0f:6c:57:d2:07:1c:97:24:51:5b: - 4e:f5:52:3a:f8:4f:95:6b:6c:83:1f:34:4e:ee:b0: - ae:fe:46:90:38:f1:4d:85:72:8b:46:bc:d1:62:37: - 65:5a:de:bb:16:51:1e:f5:cb:a0:ef:d6:7b:11:6f: - 3b:0c:49:17:bc:4d:8c:f5:d9:f0:35:6b:f7:b6:4d: - 50:eb:47:81:e3:06:f2:bd:ec:67:4f:ab:2b:03:aa: - e2:1e:42:22:a9:c9:59:dc:0d:19:fb:c5:02:1d:d7: - 58:e4:04:53:0a:1d:79:bb:c1:33:f1:cd:b7:10:2e: - b4:6e:9b:dc:60:66:05:50:9f:20:66:a1:71:00:51: - 54:cf:0a:70:f4:7c:45:c6:f0:a7:1c:11:2f:3e:a3: - 1f:bf - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 2D:FB:27:C7:B4:32:FF:F7:87:DB:2D:A7:76:AE:F0:96:7E:DA:DC:17 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 3f:46:1c:3b:58:b4:99:f3:75:00:47:d2:fe:ba:ba:9a:04:46: - 62:b6:2d:a0:0f:8f:c0:95:2a:58:8b:61:f5:14:90:30:26:37: - 94:a1:a6:29:20:c9:b5:08:d7:f9:15:cb:9d:9c:19:ed:2f:a4: - e6:91:48:85:1a:f7:ab:17:5e:79:23:69:b8:3c:0c:48:ae:c8: - ba:90:d0:05:fb:33:7e:86:fd:12:f8:2d:0f:ff:16:15:9a:dc: - 76:48:7d:65:5b:4e:93:14:e8:be:37:d1:13:f7:a7:b1:cd:ad: - ae:4f:e1:72:b9:53:2d:cd:e6:42:76:44:93:21:28:58:c0:44: - ab:3c:da:5b:e5:55:ab:04:86:4d:9c:4c:33:f4:4e:13:98:e9: - 0f:d1:a3:70:2b:1d:11:20:47:26:f6:d8:45:7f:88:ad:f2:c1: - 81:0f:be:cd:6c:79:80:94:30:eb:8d:cc:f3:7d:a1:3e:6c:6f: - fa:8f:f3:1f:2e:76:97:3f:8a:1b:67:3b:e0:f9:b1:3c:6b:dc: - 64:1b:00:73:e9:89:81:f6:7f:51:f3:51:c8:b9:96:5f:fd:55: - f8:77:6f:88:bc:65:b3:e2:30:a4:00:7a:79:68:e0:36:8b:a9: - 1b:06:9b:20:fe:fe:98:aa:56:58:c8:08:a4:7b:12:59:ff:3d: - bd:5e:13:3b:c6:c7:8a:00:5b:cb:27:18:02:ee:cb:38:c2:b7: - a9:51:04:ef:31:ca:49:09:48:14:13:eb:91:e2:26:8c:88:5f: - 1c:78:e1:0d:90:29:d7:c1:fc:c8:89:fd:4d:53:0b:99:58:c2: - 1a:24:3d:c0:a2:4c:a3:d9:c7:95:c5:bc:72:fa:02:f1:ab:dd: - aa:2b:9e:a0:bb:1a:68:2d:09:8c:a2:99:0d:26:ec:9e:30:19: - 01:5a:41:45:63:b3:c5:db:24:32:4c:fe:7f:f3:ce:e9:4d:00: - 64:cf:bb:15:34:2d:31:6e:4f:c0:96:40:9b:32:35:65:92:01: - 29:7e:74:02:50:fd:3b:3b:3a:a3:9f:6a:c0:a5:be:3f:c3:07: - d6:8c:2a:c6:f4:0f:32:bd:3b:fc:45:90:d2:46:ee:6f:c3:2f: - 26:8c:97:0c:e8:da:9a:97:03:0b:86:17:45:a6:62:69:4e:8d: - cf:f8:bf:ea:2f:dc:ff:95:14:15:bd:92:2d:8a:08:cf:ce:8a: - b0:f6:34:0a:a2:0e:49:31:44:e1:47:fb:37:52:53:59:93:25: - 40:cc:ac:67:2d:a2:b6:9b:75:fd:13:a5:a7:93:4f:72:05:75: - cd:b1:37:f6:3b:69:3b:24:a1:1f:23:f0:cd:bb:ae:18:b3:aa: - eb:9f:d7:97:06:ba:fd:44 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ2MDlaFw0zNjA2MjUxNjQ2MDlaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0MS5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDWD70m7xRNCfbbiwH1TmwDsTUgFrgbfOa2jZcb -sE+KtstUfnr//a8C27+dz5pMDYeTi8xh8yOpb47UgiyTtuL6N+2K0yOPbbV4Sji6 -k/lKHEAGM9fAmCDUFqykpWtBIEw6VX7HUOeVB06GFYZ6D2xX0gcclyRRW071Ujr4 -T5VrbIMfNE7usK7+RpA48U2FcotGvNFiN2Va3rsWUR71y6Dv1nsRbzsMSRe8TYz1 -2fA1a/e2TVDrR4HjBvK97GdPqysDquIeQiKpyVncDRn7xQId11jkBFMKHXm7wTPx -zbcQLrRum9xgZgVQnyBmoXEAUVTPCnD0fEXG8KccES8+ox+/AgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBQt+yfHtDL/94fbLad2rvCWftrcFzAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAP0YcO1i0 -mfN1AEfS/rq6mgRGYrYtoA+PwJUqWIth9RSQMCY3lKGmKSDJtQjX+RXLnZwZ7S+k -5pFIhRr3qxdeeSNpuDwMSK7IupDQBfszfob9EvgtD/8WFZrcdkh9ZVtOkxTovjfR -E/ensc2trk/hcrlTLc3mQnZEkyEoWMBEqzzaW+VVqwSGTZxMM/ROE5jpD9GjcCsd -ESBHJvbYRX+IrfLBgQ++zWx5gJQw643M832hPmxv+o/zHy52lz+KG2c74PmxPGvc -ZBsAc+mJgfZ/UfNRyLmWX/1V+HdviLxls+IwpAB6eWjgNoupGwabIP7+mKpWWMgI -pHsSWf89vV4TO8bHigBbyycYAu7LOMK3qVEE7zHKSQlIFBPrkeImjIhfHHjhDZAp -18H8yIn9TVMLmVjCGiQ9wKJMo9nHlcW8cvoC8avdqiueoLsaaC0JjKKZDSbsnjAZ -AVpBRWOzxdskMkz+f/PO6U0AZM+7FTQtMW5PwJZAmzI1ZZIBKX50AlD9Ozs6o59q -wKW+P8MH1owqxvQPMr07/EWQ0kbub8MvJoyXDOjampcDC4YXRaZiaU6Nz/i/6i/c -/5UUFb2SLYoIz86KsPY0CqIOSTFE4Uf7N1JTWZMlQMysZy2itpt1/ROlp5NPcgV1 -zbE39jtpOyShHyPwzbuuGLOq65/Xlwa6/UQ= ------END CERTIFICATE----- diff --git a/test/units/modules/network/f5/fixtures/cert1.key b/test/units/modules/network/f5/fixtures/cert1.key deleted file mode 100644 index a89a29161c..0000000000 --- a/test/units/modules/network/f5/fixtures/cert1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA1g+9Ju8UTQn224sB9U5sA7E1IBa4G3zmto2XG7BPirbLVH56 -//2vAtu/nc+aTA2Hk4vMYfMjqW+O1IIsk7bi+jftitMjj221eEo4upP5ShxABjPX -wJgg1BaspKVrQSBMOlV+x1DnlQdOhhWGeg9sV9IHHJckUVtO9VI6+E+Va2yDHzRO -7rCu/kaQOPFNhXKLRrzRYjdlWt67FlEe9cug79Z7EW87DEkXvE2M9dnwNWv3tk1Q -60eB4wbyvexnT6srA6riHkIiqclZ3A0Z+8UCHddY5ARTCh15u8Ez8c23EC60bpvc -YGYFUJ8gZqFxAFFUzwpw9HxFxvCnHBEvPqMfvwIDAQABAoIBAQCjQ7PP+y8vpvbp -8bbXoy2ND15mkA1xoazR9WIYEzxHny2rzx//GTyfYH1gXtPfR75tEYYb+vbrJxP4 -DyTysN2jXH7HkEwh+9oZ2fo0i+Hp3WwTjvzyftUjDfw1Q5lvPbQGFekxGgrXRpBk -ggxkEllfDeiwrLJdftfVEhe6BfD/0YibwQeHN7VoC4V8wOanKtDmx74W/1f7WhwQ -nKQnCrbYqNJa2nGvWiKU5Suvfb0v7tCnQYlfnCpUfj+wcnxlgmGkcyq1L+qC1qC8 -PO5i3T3LM5Yg8CSeGhO/q6gw/fUowuBN1cluTqN97oLHiEM5tLdjeVWwa1Vp0liv -1WXGT4eBAoGBAPtumMmyVTIorvV6KGNI/Eo6jfE0HOXVdXtm4iToDDuiYwto7/Ge -/kV+11Fpu0lV+eYPfZn175Of8FnQPwczQF1OOH/aQ/ViY8j87bZUbCy25mWrfNkh -2rRlyI3/OsSfL5SkyWpYB0yhSJZV9mSQJTZolB4GQRNPKtqi7NpB4WxBAoGBANnz -VS4JBJO75yeSG5BzPp5VVKm+nu0Betlva8GsHdEic8OM9bGpVozGysAW3Xdxp7q6 -gLJGyyuzpsxldCc/IdIlF5fz7gkLl4NoYanz9PSEr2XZLh9+2yXGkPFlC3IeHAUB -E+2UO9MFpWrmfKoAnYZCR6vJDxtQBpAlTUvJEYv/AoGBAPha62K32327P+7MJl7D -9ijgI9rwjebcbbpiCtlHuOWi5lCb6/7v/NvqiYcqeEvdOAXuoTNWAbsBTel5UPis -wFQp8pcfouccs9IRPEFQrLWSSIx+0sirrxtoOq1AQe18DAS4rRd1MmiYG1ocOVBm -LcvLixsJNHh9R6hFLM3+K0vBAoGANkmJ+gF9Bl9TYGPgQcay3jVa9Tzp0RcBRo+e -Q4tfkewG8bp2qF4JlN8fOWF4oHvKz5QM4lsH2EbTUS4kFHKBNhrPGaZEsDQW9UBW -s0J0zUMPfUrvViD+7RXcnIQSqcYeLJDsKc02aYWKgmoOuzmUAxEXUQ6vmJoCSH1C -F5JpsHkCgYEArwTSzb1+/ThQhK1JN8hJ4jMjQ8E7PzLTMILrdDALn2g1T4VzL7N7 -UG6oUieMlo/UH6cv6330dwaGVklXZbyDKSDROIafFcOpVfcvDUgJCjp3CaY9A2zG -+EPkRpeHKXAIgG+QuOwVOtYWcWltnBf61slTqiY2vKX1+ZGmrMrw1Zw= ------END RSA PRIVATE KEY----- diff --git a/test/units/modules/network/f5/fixtures/cert2.crt b/test/units/modules/network/f5/fixtures/cert2.crt deleted file mode 100644 index 30674bc8e7..0000000000 --- a/test/units/modules/network/f5/fixtures/cert2.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 2 (0x2) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:49:00 2016 GMT - Not After : Jun 25 16:49:00 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert2.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:c6:9e:84:99:4d:69:98:c2:42:95:ed:43:ca:24: - 05:64:9d:67:81:1c:ff:56:7b:ad:d1:cb:09:39:28: - 4f:ac:aa:1b:34:61:3a:b1:e3:57:d4:9e:15:40:77: - 91:20:2b:e8:7e:d3:91:1e:46:50:6c:2f:4b:00:c2: - f2:3a:43:89:d9:81:73:84:5f:02:db:49:ac:3b:9e: - fe:c0:77:2e:53:ea:ce:da:ff:49:98:21:1d:31:4d: - 0f:14:20:30:36:9a:23:b4:28:08:06:59:81:30:03: - 86:09:0b:5b:e1:72:63:5e:54:ac:90:b1:82:55:b8: - 12:00:d5:01:26:be:6a:eb:fc:58:5b:8a:7a:fe:46: - 23:a3:eb:5d:6c:e0:f6:79:00:5d:5b:49:82:42:62: - e2:58:e8:65:54:14:be:99:25:8b:b7:df:cf:53:26: - f2:7a:fd:b9:f9:f3:d5:af:06:d6:1e:ba:66:4d:41: - 8c:5d:aa:23:41:7f:f4:27:21:a0:30:09:86:13:c4: - 57:1b:13:45:63:6b:3b:a3:7f:d1:1a:cd:fd:07:51: - 0f:1a:e1:d9:25:3e:d2:77:e1:c7:60:db:12:df:ef: - 71:65:c8:c7:1a:42:94:6f:57:2a:d7:67:30:0f:33: - 31:ba:90:4d:d1:80:38:08:e7:90:7a:04:0e:8f:b0: - 2a:73 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 43:71:A9:16:2B:DA:DC:5F:FD:82:87:78:26:48:4E:77:21:47:44:D6 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 15:ac:f9:cb:bc:88:c0:d3:74:83:88:cd:19:94:bb:87:7e:fd: - 4d:25:09:9b:08:84:64:c5:37:c7:99:b3:25:ee:6e:82:46:b0: - 13:f9:05:ad:4d:4a:b2:e3:29:5d:0d:55:9e:9c:62:1d:95:f2: - 19:49:5e:d3:5b:58:98:ce:e8:f5:e5:c1:ce:b5:a8:7a:b1:f8: - 14:fe:25:10:12:5b:41:53:d2:47:ab:20:e5:50:da:b6:ba:00: - 21:94:6b:dd:0b:24:15:dc:c0:4e:b8:1d:cc:9e:5f:10:5e:46: - 3f:96:c9:f8:28:bb:13:31:d6:d2:6c:48:41:bb:23:ab:23:64: - 73:d6:2b:2e:9a:77:d4:08:fb:e0:e8:50:2c:49:7f:98:9e:f6: - 37:30:2b:7c:97:c6:a7:1e:5b:dc:ce:bb:1e:58:e4:bd:05:4c: - ad:07:d6:03:c5:a9:57:a4:26:e2:10:f7:f9:63:1a:2a:6a:9c: - 52:98:33:bf:ea:70:cd:c0:86:32:80:6e:70:54:87:74:3c:41: - 53:a1:c6:53:44:c7:74:a6:11:b6:48:66:86:f9:04:ca:ec:5d: - 4f:ce:7f:64:51:34:52:53:98:a8:70:62:f7:3b:fb:39:11:9a: - e1:e2:d3:00:0b:6b:d2:33:3c:44:de:c3:6b:e1:6f:c9:be:d2: - 2c:8a:f0:b3:d3:4c:12:2f:ad:9d:6b:40:89:23:94:93:6d:12: - 6c:38:89:fa:fe:ad:02:55:55:8b:c3:86:7f:15:c4:3a:a9:70: - e9:06:6c:26:09:28:9f:6e:94:f2:a1:27:5c:89:4c:42:ac:65: - 90:92:d2:6d:09:7c:d8:a1:bf:5b:25:e4:db:ed:71:41:d7:e2: - 61:47:89:9e:46:29:9d:f9:f4:94:cf:f5:b3:e8:df:6a:47:34: - d1:ed:fc:a4:58:fe:82:e1:6e:e9:05:65:f5:d2:57:9a:d1:42: - 64:ae:0c:bb:07:14:39:a2:c0:85:e4:25:a5:c4:e6:3f:e6:da: - d0:18:4f:e0:01:ba:99:2e:1f:75:35:c3:fa:a3:e7:e1:75:1b: - 1c:19:93:cc:96:eb:3f:ce:8b:10:40:36:63:f5:66:dc:6d:75: - 31:ba:db:27:21:b4:15:00:e9:ce:d0:08:e3:b0:1c:e3:29:c9: - 63:5a:c8:5c:ca:db:ce:51:b7:87:22:c6:ba:42:d7:ab:29:b4: - 87:fa:27:9a:18:22:90:9f:da:c0:90:c4:49:64:38:38:2e:a2: - ea:87:c1:8b:4e:8b:ff:a7:53:45:4f:d8:8b:86:69:ea:87:1d: - f6:e6:44:14:1f:69:ee:2c:de:5a:a1:df:a8:57:13:65:4d:5b: - ce:6e:f2:15:2a:c5:32:08 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ5MDBaFw0zNjA2MjUxNjQ5MDBaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0Mi5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDGnoSZTWmYwkKV7UPKJAVknWeBHP9We63Rywk5 -KE+sqhs0YTqx41fUnhVAd5EgK+h+05EeRlBsL0sAwvI6Q4nZgXOEXwLbSaw7nv7A -dy5T6s7a/0mYIR0xTQ8UIDA2miO0KAgGWYEwA4YJC1vhcmNeVKyQsYJVuBIA1QEm -vmrr/Fhbinr+RiOj611s4PZ5AF1bSYJCYuJY6GVUFL6ZJYu3389TJvJ6/bn589Wv -BtYeumZNQYxdqiNBf/QnIaAwCYYTxFcbE0Vjazujf9Eazf0HUQ8a4dklPtJ34cdg -2xLf73FlyMcaQpRvVyrXZzAPMzG6kE3RgDgI55B6BA6PsCpzAgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBRDcakWK9rcX/2Ch3gmSE53IUdE1jAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAFaz5y7yI -wNN0g4jNGZS7h379TSUJmwiEZMU3x5mzJe5ugkawE/kFrU1KsuMpXQ1VnpxiHZXy -GUle01tYmM7o9eXBzrWoerH4FP4lEBJbQVPSR6sg5VDatroAIZRr3QskFdzATrgd -zJ5fEF5GP5bJ+Ci7EzHW0mxIQbsjqyNkc9YrLpp31Aj74OhQLEl/mJ72NzArfJfG -px5b3M67HljkvQVMrQfWA8WpV6Qm4hD3+WMaKmqcUpgzv+pwzcCGMoBucFSHdDxB -U6HGU0THdKYRtkhmhvkEyuxdT85/ZFE0UlOYqHBi9zv7ORGa4eLTAAtr0jM8RN7D -a+Fvyb7SLIrws9NMEi+tnWtAiSOUk20SbDiJ+v6tAlVVi8OGfxXEOqlw6QZsJgko -n26U8qEnXIlMQqxlkJLSbQl82KG/WyXk2+1xQdfiYUeJnkYpnfn0lM/1s+jfakc0 -0e38pFj+guFu6QVl9dJXmtFCZK4MuwcUOaLAheQlpcTmP+ba0BhP4AG6mS4fdTXD -+qPn4XUbHBmTzJbrP86LEEA2Y/Vm3G11MbrbJyG0FQDpztAI47Ac4ynJY1rIXMrb -zlG3hyLGukLXqym0h/onmhgikJ/awJDESWQ4OC6i6ofBi06L/6dTRU/Yi4Zp6ocd -9uZEFB9p7izeWqHfqFcTZU1bzm7yFSrFMgg= ------END CERTIFICATE----- diff --git a/test/units/modules/network/f5/fixtures/cert2.key b/test/units/modules/network/f5/fixtures/cert2.key deleted file mode 100644 index 6d4bdf1526..0000000000 --- a/test/units/modules/network/f5/fixtures/cert2.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -Proc-Type: 4,ENCRYPTED -DEK-Info: AES-256-CBC,C56C8101A9C8D6B9AD0975807D4793BB - -rhV1cJee3XAlY83zIXytJOlvXFrsHmzyTVoOn26eOwgza8CuE5gQQzLXiT12zK0q -YAbYyyyEXJJogVU61s1vuCQRNiezUCwT4SBj7ni4rXqu5BYUxKh0wD0gjE519yNP -nqnPUYKdLkFY7I6RJjqCqkk8xnJm64g5zCqN58aR98Mkqr1898+lZ2OHqAsAYBNH -dM/SE7B7E4Mr1sAjpsn6L4PJ93WSwmEtH3nZTnPF9qtFuJwjUcHCN/r/s3QXki95 -eFX+7qW460lBfDeRUKXKqz4gO017AXu1kccrlHhdQoJGf3D+x9zwofG/uFeAH3iN -f9IRaiR2IN6SS67QFmOkI9S95tsFb4N8bmmfGV4w8wfxvDzGJuxzIb4gByX5xov4 -S22pDpkfn5YqxgC5ItSiFYpg01HEi2l79HwZqAn1kowLsuF1JJKAYL5IMS3DlrdH -AyA9CN28G6pYEjwFBbFgpOg64UNmrkxRncHxC4FuH7iGZNJL9+HQve/J5nlrnx6M -IU2myiZZhgbsl/V45ddXBDSlEdWFLHtEhcG+ICJP3EZAXHR0e9vyrWDk7T5zKhLP -ch9PNmIw+5zzpRuPu5NYw7V0ax8UOf2AydyBHeIQWuY52bai+QMDyQauomqpPXRY -tpCcW85P9jstY/F6TV32XQu/cHWolziJXI/QzWF5+uvnLMAsb3p5mriCG4DOTWF3 -KFSytTGnDQUUCLgaYSSKXL5Z52PVYmTjoqX8M6cvqSEdjK84wILQE0JMItQjGSIM -y5qHD7Mthf9YOJy1D86qtVumbaOBLw/rGPQS5QlK/m256xZ10LUslYczMpw1orN3 -3Uv8zHKk790XduHTllR0LwQXMJXG59hgiWAu3V3rsAkVSRpC3MI6IUZ2cfJvZ0Ds -FmUhCJ34JQxD4E/sT9uGAk6VIq/fAmM7/gq0oF4oqOFg4Zy1r3rc1Kvdoy1yKUi6 -JCI5bKCkgIthx4XUKQVtFMkHBDZAHr6i5Lzy4nM6I4S4/qL3JH4Q+739D1rjGVlq -OWcaeOzkkbJrE8h+A94UQao4R50LavKgq/o2n56tHG0RhXXyV5MC/X9rbSVipihR -rwNKnogdhAjY96IrOzdiHTArg8qZBGvHPoGUl3zjWFqNbHEs4NLSrEl6oEs6F/vC -zEZmi8gxqraw4u1GJnpoMuLO45PuhcxcXgJSvTh/OKDaR1u0ggEn7TxfAygm0ahP -i6NBgoZ/upTHAWqWht2JjSmQHQW7doVkp/BgNJq13oYF7FEUEg/ZtBTPKPR3CjM0 -ZKDGvKqWRVRyrw9FSwXn6WlSFfT3vhPMoW2jq1Kq5o/ZyhcquCVE8i+xq6hilcb5 -sNiV1tPWsZOFHx4T5hBVK+QnC8t7pCj38YpyEoY4/gffMtY85jsrLMlPYd5bmJ6O -x1tKiQauK+aX6IMu38YnHjCGnCkw1fF2OMSohbG2QfaKsmfkt8YLRuf2PTtjLtke -xGt0Irjac/sEZPc4SEIqnehNfXadiuMV3+4v6ey9vf782r76KH8gInY2gDsQ4X6d -1LVNCNAd/AGlitopL4hYomaeTjTzqIy5fMlGmTrpZjokenu/ILXsljZVAX2iyOAs ------END RSA PRIVATE KEY----- diff --git a/test/units/modules/network/f5/fixtures/chain1.crt b/test/units/modules/network/f5/fixtures/chain1.crt deleted file mode 100644 index 38dd8dc9cf..0000000000 --- a/test/units/modules/network/f5/fixtures/chain1.crt +++ /dev/null @@ -1,68 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIJAKql/ua7JdaGMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV -BAYTAkdCMRAwDgYDVQQIDAdFbmdsYW5kMRIwEAYDVQQKDAlBbGljZSBMdGQxKDAm -BgNVBAsMH0FsaWNlIEx0ZCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxGjAYBgNVBAMM -EUFsaWNlIEx0ZCBSb290IENBMB4XDTE3MDcyNTAzMTcwNloXDTM3MDcyMDAzMTcw -NloweTELMAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFs -aWNlIEx0ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEaMBgGA1UEAwwRQWxpY2UgTHRkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC7grIMGI9e11lKh++bhyhTAU4qsKgM52xkl4sctSkK5hyT -jY8YYfD9ERrrJov6LLCt8QiwFypoqdILTht4g6sGACoVGXigFbLNyhEhX64kIWwT -PNFFXezYJv87qxPeT0I+6oHwai3smrUsPzsK73vwWOlnAW0mxvSzWpzvc3CgCB1J -+vRhdPm0VgT5HuR20WDPvx0T+ftQRrhIHz/UZSTHo/CEcuJ9zjhEmQlZRhfxZiBW -FY8Mgs6bgAKC+KtAsFTqRAuXq++xOnIIBzXACluFxp7Fee1CZh2GPxmtzFSIJVH0 -pH6wf9Kxkr0zuiAt3nq3xQcQZVdRP3bWscxp0lYG8BjuMZppI+r+gG1k/7WsRU/A -SUiHi4EogznIuJ7o1LbcULpIKjHsHVKXYz+ff+hx7npisHIE9BoyBe9SbalJxIcS -7n9/Mw6UmKk/zxspXCwMLraaeoyy2vUoC/zXW2WQHq67IarSAVbCPEPliqydVZ9k -y1ZQKGdrpxxLdsbasNv3xnS50DBd4GsSnxdhzCXUUhvLQ8dZ/NRXvZ6wwcdeQ6PV -5+dQNgnm7yd4mxyBbqv6RBAa37uNKWNf4yAQ9j9QN8pzW+qzuusAcLxTdDbtyeMi -Dz5UHzF912m3KLlF/Aad2TbjrCR4K0CEozVT8lhFpZlNl+IdZyuSbZQ6tYrJ0wID -AQABo2MwYTAdBgNVHQ4EFgQUk2h12cau/s1k/IGR0OAUWZbf8a8wHwYDVR0jBBgw -FoAUk2h12cau/s1k/IGR0OAUWZbf8a8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADSBpj8O7Wrs0gpciOmJ7cmVUIoX -XTd+WgzustaUJoqpeCmzkeC7O9/a9Eat2LrmKIBoY6uzH1hnYwOxSdSdodBuUcOv -6hBl7rFCgg+ACRn7zaaInFRPdx4P+ovbfFFetKmg54XA8ZDb7YRpwj3zMtlV38Ca -WC1jP36ocn8UZ8av1ki7KNz/0PqzJ4sVs6IZrj2Lo0lDcu+29Nh5VJ7AZnOfUeas -4sQr3dPHPaMQBxz0rKr/FN4qx63kd9GmoGz4DEDnPeUl2v52i/48ym0Q7JrntD5J -qJaaoU4uxUMkmnD8wOmBBtXQ3eRpHE6W8ZcJGWkL8bRPrFnwxMk71N1guetetzoY -xX7E3/CtSV7CSJMF74hE/ULNG8XdWAYY3zojSStA8UzYzO/pCA/PcmxBzxnkch4W -3LetTSKH9mN9k2p51jGLWIbRGod5qffmtb76xRzhyhgryCV/afwfJxKeXwjDz8ty -J6qFBXclDjTWVHHOU8hGvu4Z4PD6cbQ68tLlfFoDRq6nqKufFKpxOyw9ioLcPWbz -+rJsnqE1+5QR4tisplmSQtQ5nI45Wns+UCmsEJm+gPkyp9pBQVudkEo1OSyCSSwZ -evwZgkD2YclUpxcQRQR/Sy4Kvrwv3D+6zfgovClqpI3SHvQ1v/TXa3wB/RTB1H0q -0Qn4FWp63AaOBNrC ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAweTELMAkGA1UEBhMCR0Ix -EDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0ZDEoMCYGA1UECwwf -QWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEaMBgGA1UEAwwRQWxpY2Ug -THRkIFJvb3QgQ0EwHhcNMTcwNzI1MDMxNzE0WhcNMjcwNzIzMDMxNzE0WjCBgTEL -MAkGA1UEBhMCR0IxEDAOBgNVBAgMB0VuZ2xhbmQxEjAQBgNVBAoMCUFsaWNlIEx0 -ZDEoMCYGA1UECwwfQWxpY2UgTHRkIENlcnRpZmljYXRlIEF1dGhvcml0eTEiMCAG -A1UEAwwZQWxpY2UgTHRkIEludGVybWVkaWF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAL1whyll1+/qWhAUdy6U5vtopX0wzJrg3dk8tIlpDChh -khTEK779aQNapRKpZmJ6hnCkg7buVOSBP2WqqGQ1s9cakBSFkDyy5hrqeSzIR93w -9n2sTc4EBD0b8QWn5D0hdoWLT3+OwFHCBf/vb+qA9Vz0P/PRPYUnKttQH6nXTj9C -+AzegfS4SbfDJ4XdhbzCewgUvr3rqP61AQuEwZq7qoVCA3bFSASUfbJgMBxJgfBG -KynueJ62L+wbZLXUDq9G3T0KIUlxgGIcPQ0tu2kW7uSeY5wZazuvNJCHM9HKsjUf -wb8GgavQRlgunE9zXAEr+iP2DQrmZXdhJkkb4EyG1vuTMK3DtGjlpXAVGsiuuZ1o -PVYZDVKhfKFN9tyop/dppxDTHyJlp2prtsudhtqwzYDqrUsMu4/LMWvxgUcTK4U7 -mPSBcvOb4fTqXirNRYsqi8BK/nxt/hUBVG0vEnoIH0ppzqWvMcsMtMi3535sErUJ -k8IVKYIGB9OKb9SzpERYT6+BH9sUURZ/xyhRd2pj7EiVAEVxrrVoedZJzLRuXH99 -qhFG2HnDAaDC9LX09GveTzgUVUfif5fJgGBkzslpM3z8t3THz9RjrqtrzKOCHcZF -cgt46oQByT0UjhIPCz3/6h04XzSszue8aTAwi1JaYhHoXEPolgJRoLeuFdsJtfyt -AgMBAAGjZjBkMB0GA1UdDgQWBBSiTrrHxly7SsSV+MqprYstABOIjDAfBgNVHSME -GDAWgBSTaHXZxq7+zWT8gZHQ4BRZlt/xrzASBgNVHRMBAf8ECDAGAQH/AgEAMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAakyu4lsOWz2+VHI0S6xb -M/afSDgnmI+i/1lSQ7UHM1XIvuINIzAcWndU1XuHyFjT7p9ZDPZ52gcseIenrKOD -EsJWKO3u33to3YUMfBCJi9VbTCtd6rkjuFggN6EKM1esqs0kgenWmvEQSv73OOii -UCAbif4fSva6C5PhgK7X0zE+hTsPxRZnN8baRlL01IHEraG+PfYCEpjvzExzoaW6 -aLNS0DAS1escb9K5u6Cf4KIxkdqpcYIW7v7tehj5KS3E0cRv3QAaMUBkMWTWlSP3 -irzC0OB8BFuYZ1OxDYnxhSY1mfwfI8kWrvA83okS8qwfjq/rty53VG3tON9GzGXg -P1SQ3xB/6yxSvskcbN1blfHJfJRpOIxBvAydhdBCh7PO0WJzTP8kmffMhOiT5AdE -jcJVxWSjwqUetomlNiErEvo7ZmxEwQZQE5wnuGM4eAbV87zLVrnj+viRo1dP7RFN -iRUwjrxKpozUY5AGY2hZdFrWObBe1AvLDQcNDUc+oMwgnIBC2YtO1cTKJ3IFru0f -Av48lyJ88AfO2W7pEfoVqAAZszu2s0VZB5W9fBOQLizvkjK8s5YeUPdhW3epEYF9 -I1PsTSNdN+abV5qNdIjgRVtNlV63+1y0Ez7J7RvO847ZYTuqHnfaRG03p10YnxBs -WcSe5ozInV3EZ9TxFcGQR+E= ------END CERTIFICATE----- diff --git a/test/units/modules/network/f5/fixtures/create_gtm_irule.tcl b/test/units/modules/network/f5/fixtures/create_gtm_irule.tcl deleted file mode 100644 index d2283646c5..0000000000 --- a/test/units/modules/network/f5/fixtures/create_gtm_irule.tcl +++ /dev/null @@ -1,8 +0,0 @@ -when LB_SELECTED { - # Capture IP address chosen by WIP load balancing - set wipHost [LB::server addr] -} - -when LB_FAILED { - set wipHost [LB::server addr] -} diff --git a/test/units/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json b/test/units/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json deleted file mode 100644 index 31fce52a7e..0000000000 --- a/test/units/modules/network/f5/fixtures/create_iapp_service_parameters_f5_http.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "name": "http_example", - "partition": "Common", - "template": "/Common/f5.http", - "inheritedDevicegroup": "true", - "deviceGroup": "none", - "inheritedTrafficGroup": "true", - "trafficGroup": "/Common/traffic-group-local-only", - "lists": [ - { - "name": "irules__irules", - "encrypted": "no", - "value": [ - "/Common/lgyft" - ] - }, - { - "name": "net__client_vlan", - "encrypted": "no", - "value": [ - "/Common/net2" - ] - } - ], - "tables": [ - { - "columnNames": [ - "name" - ], - "name": "pool__hosts", - "rows": [ - { - "row": [ - "demo.example.com" - ] - } - ] - }, - { - "columnNames": [ - "addr", - "connection_limit" - ], - "name": "pool__members", - "rows": [ - { - "row": [ - "10.1.1.1", - "0" - ] - }, - { - "row": [ - "10.1.1.2", - "0" - ] - } - ] - } - ], - "variables": [ - { - "name": "afm__policy", - "value": "/#do_not_use#" - }, - { - "name": "afm__dos_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "afm__protocol_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "asm__use_asm", - "value": "/#do_not_use#" - }, - { - "name": "client__http_compression", - "value": "/#do_not_use#" - }, - { - "name": "client__standard_caching_without_wa", - "value": "/#do_not_use#" - }, - { - "name": "client__tcp_wan_opt", - "value": "/#create_new#" - }, - { - "name": "monitor__monitor", - "value": "/#create_new#" - }, - { - "name": "monitor__frequency", - "value": "30" - }, - { - "name": "monitor__uri", - "value": "/my/path" - }, - { - "name": "monitor__response", - "value": "" - }, - { - "name": "net__client_mode", - "value": "wan" - }, - { - "name": "net__server_mode", - "value": "lan" - }, - { - "name": "net__vlan_mode", - "value": "all" - }, - { - "name": "pool__addr", - "value": "10.10.10.10" - }, - { - "name": "pool__http", - "value": "/#create_new#" - }, - { - "name": "pool__mask", - "value": "" - }, - { - "name": "pool__persist", - "value": "/#cookie#" - }, - { - "name": "pool__lb_method", - "value": "least-connections-member" - }, - { - "name": "pool__pool_to_use", - "value": "/#create_new#" - }, - { - "name": "pool__port_secure", - "value": "443" - }, - { - "name": "pool__redirect_port", - "value": "80" - }, - { - "name": "pool__redirect_to_https", - "value": "yes" - }, - { - "name": "pool__xff", - "value": "yes" - }, - { - "name": "server__oneconnect", - "value": "/#create_new#" - }, - { - "name": "server__tcp_lan_opt", - "value": "/#create_new#" - }, - { - "name": "ssl__cert", - "value": "/Common/default.crt" - }, - { - "name": "ssl__client_ssl_profile", - "value": "/#create_new#" - }, - { - "name": "ssl__key", - "value": "/Common/default.key" - }, - { - "name": "ssl__mode", - "value": "client_ssl" - }, - { - "name": "ssl__use_chain_cert", - "value": "/#do_not_use#" - }, - { - "name": "ssl_encryption_questions__advanced", - "value": "yes" - }, - { - "name": "stats__analytics", - "value": "/#do_not_use#" - }, - { - "name": "stats__request_logging", - "value": "/#do_not_use#" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/create_iapp_template.iapp b/test/units/modules/network/f5/fixtures/create_iapp_template.iapp deleted file mode 100644 index 995bd4d636..0000000000 --- a/test/units/modules/network/f5/fixtures/create_iapp_template.iapp +++ /dev/null @@ -1,56 +0,0 @@ -cli admin-partitions { - update-partition Common -} - -sys application template foo.iapp { - - actions { - definition { - - implementation { - set cfg { ltm virtual forwarding-repro { - destination 0.0.0.0:any - description "something 1" - mask any - profiles { - fastL4 { } - } - source 1.1.1.1/32 - translate-address disabled - translate-port disabled - vlans { __forwarding_vlans__ } - vlans-enabled -} } - - - if {![info exists {::var__forwarding_vlans}] || (${::var__forwarding_vlans} == "")} { - set {::var__forwarding_vlans} "{}" - puts "Info: assigning empty string to variable {::var__forwarding_vlans}" - } - - - set cfg [string map "__forwarding_vlans__ ${::var__forwarding_vlans} __app_service__ $tmsh::app_name.app/$tmsh::app_name " $cfg] - set fileId [open /var/tmp/demo.repro.cfg "w"] - puts -nonewline $fileId $cfg - close $fileId - - - tmsh::load sys config merge file /var/tmp/demo.repro.cfg - } - - presentation { - - include "/Common/f5.apl_common" - section var { - string forwarding_vlans display "xxlarge" - } - - text { - var "General variables" - var.forwarding_vlans "__var__forwarding_vlans__" - } - } - role-acl { admin manager resource-admin } - } - } -} diff --git a/test/units/modules/network/f5/fixtures/create_insecure_cert1.crt b/test/units/modules/network/f5/fixtures/create_insecure_cert1.crt deleted file mode 100644 index 1d22f30289..0000000000 --- a/test/units/modules/network/f5/fixtures/create_insecure_cert1.crt +++ /dev/null @@ -1,101 +0,0 @@ -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 1 (0x1) - Signature Algorithm: sha256WithRSAEncryption - Issuer: C=US, ST=New York, L=New York, O=ACME CA, OU=Coyote, CN=ourca.domain.local - Validity - Not Before: Jun 30 16:46:09 2016 GMT - Not After : Jun 25 16:46:09 2036 GMT - Subject: C=US, ST=New York, O=ACME, OU=Coyote, CN=cert1.domain.local - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - Public-Key: (2048 bit) - Modulus: - 00:d6:0f:bd:26:ef:14:4d:09:f6:db:8b:01:f5:4e: - 6c:03:b1:35:20:16:b8:1b:7c:e6:b6:8d:97:1b:b0: - 4f:8a:b6:cb:54:7e:7a:ff:fd:af:02:db:bf:9d:cf: - 9a:4c:0d:87:93:8b:cc:61:f3:23:a9:6f:8e:d4:82: - 2c:93:b6:e2:fa:37:ed:8a:d3:23:8f:6d:b5:78:4a: - 38:ba:93:f9:4a:1c:40:06:33:d7:c0:98:20:d4:16: - ac:a4:a5:6b:41:20:4c:3a:55:7e:c7:50:e7:95:07: - 4e:86:15:86:7a:0f:6c:57:d2:07:1c:97:24:51:5b: - 4e:f5:52:3a:f8:4f:95:6b:6c:83:1f:34:4e:ee:b0: - ae:fe:46:90:38:f1:4d:85:72:8b:46:bc:d1:62:37: - 65:5a:de:bb:16:51:1e:f5:cb:a0:ef:d6:7b:11:6f: - 3b:0c:49:17:bc:4d:8c:f5:d9:f0:35:6b:f7:b6:4d: - 50:eb:47:81:e3:06:f2:bd:ec:67:4f:ab:2b:03:aa: - e2:1e:42:22:a9:c9:59:dc:0d:19:fb:c5:02:1d:d7: - 58:e4:04:53:0a:1d:79:bb:c1:33:f1:cd:b7:10:2e: - b4:6e:9b:dc:60:66:05:50:9f:20:66:a1:71:00:51: - 54:cf:0a:70:f4:7c:45:c6:f0:a7:1c:11:2f:3e:a3: - 1f:bf - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Basic Constraints: - CA:FALSE - Netscape Comment: - OpenSSL Generated Certificate - X509v3 Subject Key Identifier: - 2D:FB:27:C7:B4:32:FF:F7:87:DB:2D:A7:76:AE:F0:96:7E:DA:DC:17 - X509v3 Authority Key Identifier: - keyid:4F:2A:15:49:E6:CC:05:2F:2B:F4:0E:CC:BA:2E:4C:DF:13:90:F0:78 - - Signature Algorithm: sha256WithRSAEncryption - 3f:46:1c:3b:58:b4:99:f3:75:00:47:d2:fe:ba:ba:9a:04:46: - 62:b6:2d:a0:0f:8f:c0:95:2a:58:8b:61:f5:14:90:30:26:37: - 94:a1:a6:29:20:c9:b5:08:d7:f9:15:cb:9d:9c:19:ed:2f:a4: - e6:91:48:85:1a:f7:ab:17:5e:79:23:69:b8:3c:0c:48:ae:c8: - ba:90:d0:05:fb:33:7e:86:fd:12:f8:2d:0f:ff:16:15:9a:dc: - 76:48:7d:65:5b:4e:93:14:e8:be:37:d1:13:f7:a7:b1:cd:ad: - ae:4f:e1:72:b9:53:2d:cd:e6:42:76:44:93:21:28:58:c0:44: - ab:3c:da:5b:e5:55:ab:04:86:4d:9c:4c:33:f4:4e:13:98:e9: - 0f:d1:a3:70:2b:1d:11:20:47:26:f6:d8:45:7f:88:ad:f2:c1: - 81:0f:be:cd:6c:79:80:94:30:eb:8d:cc:f3:7d:a1:3e:6c:6f: - fa:8f:f3:1f:2e:76:97:3f:8a:1b:67:3b:e0:f9:b1:3c:6b:dc: - 64:1b:00:73:e9:89:81:f6:7f:51:f3:51:c8:b9:96:5f:fd:55: - f8:77:6f:88:bc:65:b3:e2:30:a4:00:7a:79:68:e0:36:8b:a9: - 1b:06:9b:20:fe:fe:98:aa:56:58:c8:08:a4:7b:12:59:ff:3d: - bd:5e:13:3b:c6:c7:8a:00:5b:cb:27:18:02:ee:cb:38:c2:b7: - a9:51:04:ef:31:ca:49:09:48:14:13:eb:91:e2:26:8c:88:5f: - 1c:78:e1:0d:90:29:d7:c1:fc:c8:89:fd:4d:53:0b:99:58:c2: - 1a:24:3d:c0:a2:4c:a3:d9:c7:95:c5:bc:72:fa:02:f1:ab:dd: - aa:2b:9e:a0:bb:1a:68:2d:09:8c:a2:99:0d:26:ec:9e:30:19: - 01:5a:41:45:63:b3:c5:db:24:32:4c:fe:7f:f3:ce:e9:4d:00: - 64:cf:bb:15:34:2d:31:6e:4f:c0:96:40:9b:32:35:65:92:01: - 29:7e:74:02:50:fd:3b:3b:3a:a3:9f:6a:c0:a5:be:3f:c3:07: - d6:8c:2a:c6:f4:0f:32:bd:3b:fc:45:90:d2:46:ee:6f:c3:2f: - 26:8c:97:0c:e8:da:9a:97:03:0b:86:17:45:a6:62:69:4e:8d: - cf:f8:bf:ea:2f:dc:ff:95:14:15:bd:92:2d:8a:08:cf:ce:8a: - b0:f6:34:0a:a2:0e:49:31:44:e1:47:fb:37:52:53:59:93:25: - 40:cc:ac:67:2d:a2:b6:9b:75:fd:13:a5:a7:93:4f:72:05:75: - cd:b1:37:f6:3b:69:3b:24:a1:1f:23:f0:cd:bb:ae:18:b3:aa: - eb:9f:d7:97:06:ba:fd:44 ------BEGIN CERTIFICATE----- -MIIExjCCAq6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJVUzER -MA8GA1UECAwITmV3IFlvcmsxETAPBgNVBAcMCE5ldyBZb3JrMRAwDgYDVQQKDAdB -Q01FIENBMQ8wDQYDVQQLDAZDb3lvdGUxGzAZBgNVBAMMEm91cmNhLmRvbWFpbi5s -b2NhbDAeFw0xNjA2MzAxNjQ2MDlaFw0zNjA2MjUxNjQ2MDlaMF0xCzAJBgNVBAYT -AlVTMREwDwYDVQQIDAhOZXcgWW9yazENMAsGA1UECgwEQUNNRTEPMA0GA1UECwwG -Q295b3RlMRswGQYDVQQDDBJjZXJ0MS5kb21haW4ubG9jYWwwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDWD70m7xRNCfbbiwH1TmwDsTUgFrgbfOa2jZcb -sE+KtstUfnr//a8C27+dz5pMDYeTi8xh8yOpb47UgiyTtuL6N+2K0yOPbbV4Sji6 -k/lKHEAGM9fAmCDUFqykpWtBIEw6VX7HUOeVB06GFYZ6D2xX0gcclyRRW071Ujr4 -T5VrbIMfNE7usK7+RpA48U2FcotGvNFiN2Va3rsWUR71y6Dv1nsRbzsMSRe8TYz1 -2fA1a/e2TVDrR4HjBvK97GdPqysDquIeQiKpyVncDRn7xQId11jkBFMKHXm7wTPx -zbcQLrRum9xgZgVQnyBmoXEAUVTPCnD0fEXG8KccES8+ox+/AgMBAAGjezB5MAkG -A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -ZmljYXRlMB0GA1UdDgQWBBQt+yfHtDL/94fbLad2rvCWftrcFzAfBgNVHSMEGDAW -gBRPKhVJ5swFLyv0Dsy6LkzfE5DweDANBgkqhkiG9w0BAQsFAAOCAgEAP0YcO1i0 -mfN1AEfS/rq6mgRGYrYtoA+PwJUqWIth9RSQMCY3lKGmKSDJtQjX+RXLnZwZ7S+k -5pFIhRr3qxdeeSNpuDwMSK7IupDQBfszfob9EvgtD/8WFZrcdkh9ZVtOkxTovjfR -E/ensc2trk/hcrlTLc3mQnZEkyEoWMBEqzzaW+VVqwSGTZxMM/ROE5jpD9GjcCsd -ESBHJvbYRX+IrfLBgQ++zWx5gJQw643M832hPmxv+o/zHy52lz+KG2c74PmxPGvc -ZBsAc+mJgfZ/UfNRyLmWX/1V+HdviLxls+IwpAB6eWjgNoupGwabIP7+mKpWWMgI -pHsSWf89vV4TO8bHigBbyycYAu7LOMK3qVEE7zHKSQlIFBPrkeImjIhfHHjhDZAp -18H8yIn9TVMLmVjCGiQ9wKJMo9nHlcW8cvoC8avdqiueoLsaaC0JjKKZDSbsnjAZ -AVpBRWOzxdskMkz+f/PO6U0AZM+7FTQtMW5PwJZAmzI1ZZIBKX50AlD9Ozs6o59q -wKW+P8MH1owqxvQPMr07/EWQ0kbub8MvJoyXDOjampcDC4YXRaZiaU6Nz/i/6i/c -/5UUFb2SLYoIz86KsPY0CqIOSTFE4Uf7N1JTWZMlQMysZy2itpt1/ROlp5NPcgV1 -zbE39jtpOyShHyPwzbuuGLOq65/Xlwa6/UQ= ------END CERTIFICATE----- diff --git a/test/units/modules/network/f5/fixtures/create_insecure_key1.key b/test/units/modules/network/f5/fixtures/create_insecure_key1.key deleted file mode 100644 index a89a29161c..0000000000 --- a/test/units/modules/network/f5/fixtures/create_insecure_key1.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA1g+9Ju8UTQn224sB9U5sA7E1IBa4G3zmto2XG7BPirbLVH56 -//2vAtu/nc+aTA2Hk4vMYfMjqW+O1IIsk7bi+jftitMjj221eEo4upP5ShxABjPX -wJgg1BaspKVrQSBMOlV+x1DnlQdOhhWGeg9sV9IHHJckUVtO9VI6+E+Va2yDHzRO -7rCu/kaQOPFNhXKLRrzRYjdlWt67FlEe9cug79Z7EW87DEkXvE2M9dnwNWv3tk1Q -60eB4wbyvexnT6srA6riHkIiqclZ3A0Z+8UCHddY5ARTCh15u8Ez8c23EC60bpvc -YGYFUJ8gZqFxAFFUzwpw9HxFxvCnHBEvPqMfvwIDAQABAoIBAQCjQ7PP+y8vpvbp -8bbXoy2ND15mkA1xoazR9WIYEzxHny2rzx//GTyfYH1gXtPfR75tEYYb+vbrJxP4 -DyTysN2jXH7HkEwh+9oZ2fo0i+Hp3WwTjvzyftUjDfw1Q5lvPbQGFekxGgrXRpBk -ggxkEllfDeiwrLJdftfVEhe6BfD/0YibwQeHN7VoC4V8wOanKtDmx74W/1f7WhwQ -nKQnCrbYqNJa2nGvWiKU5Suvfb0v7tCnQYlfnCpUfj+wcnxlgmGkcyq1L+qC1qC8 -PO5i3T3LM5Yg8CSeGhO/q6gw/fUowuBN1cluTqN97oLHiEM5tLdjeVWwa1Vp0liv -1WXGT4eBAoGBAPtumMmyVTIorvV6KGNI/Eo6jfE0HOXVdXtm4iToDDuiYwto7/Ge -/kV+11Fpu0lV+eYPfZn175Of8FnQPwczQF1OOH/aQ/ViY8j87bZUbCy25mWrfNkh -2rRlyI3/OsSfL5SkyWpYB0yhSJZV9mSQJTZolB4GQRNPKtqi7NpB4WxBAoGBANnz -VS4JBJO75yeSG5BzPp5VVKm+nu0Betlva8GsHdEic8OM9bGpVozGysAW3Xdxp7q6 -gLJGyyuzpsxldCc/IdIlF5fz7gkLl4NoYanz9PSEr2XZLh9+2yXGkPFlC3IeHAUB -E+2UO9MFpWrmfKoAnYZCR6vJDxtQBpAlTUvJEYv/AoGBAPha62K32327P+7MJl7D -9ijgI9rwjebcbbpiCtlHuOWi5lCb6/7v/NvqiYcqeEvdOAXuoTNWAbsBTel5UPis -wFQp8pcfouccs9IRPEFQrLWSSIx+0sirrxtoOq1AQe18DAS4rRd1MmiYG1ocOVBm -LcvLixsJNHh9R6hFLM3+K0vBAoGANkmJ+gF9Bl9TYGPgQcay3jVa9Tzp0RcBRo+e -Q4tfkewG8bp2qF4JlN8fOWF4oHvKz5QM4lsH2EbTUS4kFHKBNhrPGaZEsDQW9UBW -s0J0zUMPfUrvViD+7RXcnIQSqcYeLJDsKc02aYWKgmoOuzmUAxEXUQ6vmJoCSH1C -F5JpsHkCgYEArwTSzb1+/ThQhK1JN8hJ4jMjQ8E7PzLTMILrdDALn2g1T4VzL7N7 -UG6oUieMlo/UH6cv6330dwaGVklXZbyDKSDROIafFcOpVfcvDUgJCjp3CaY9A2zG -+EPkRpeHKXAIgG+QuOwVOtYWcWltnBf61slTqiY2vKX1+ZGmrMrw1Zw= ------END RSA PRIVATE KEY----- diff --git a/test/units/modules/network/f5/fixtures/create_ltm_irule.tcl b/test/units/modules/network/f5/fixtures/create_ltm_irule.tcl deleted file mode 100644 index 5f7624a33f..0000000000 --- a/test/units/modules/network/f5/fixtures/create_ltm_irule.tcl +++ /dev/null @@ -1,18 +0,0 @@ -when RULE_INIT { - set static::FormBaseURL "/sp-ofba-form" - set static::FormReturnURL "/sp-ofba-completed" - set static::HeadAuthReq "X-FORMS_BASED_AUTH_REQUIRED" - set static::HeadAuthRet "X-FORMS_BASED_AUTH_RETURN_URL" - set static::HeadAuthSize "X-FORMS_BASED_AUTH_DIALOG_SIZE" - set static::HeadAuthSizeVal "800x600" - set static::ckname "MRHSession_SP" - set static::Basic_Realm_Text "SharePoint Authentication" -} - -when HTTP_REQUEST { - set apmsessionid [HTTP::cookie value MRHSession] -} - -when HTTP_RESPONSE { - # Insert persistent cookie for html content type and private session -} diff --git a/test/units/modules/network/f5/fixtures/data-group-address.txt b/test/units/modules/network/f5/fixtures/data-group-address.txt deleted file mode 100644 index d2f5a16877..0000000000 --- a/test/units/modules/network/f5/fixtures/data-group-address.txt +++ /dev/null @@ -1,5 +0,0 @@ -network 10.0.0.0 prefixlen 8 := "Network1", -network 172.16.0.0 prefixlen 12 := "Network2", -network 192.168.0.0 prefixlen 16 := "Network3", -host 192.168.20.1 := "Host1", -host 172.16.1.1 := "Host2", diff --git a/test/units/modules/network/f5/fixtures/data-group-integer.txt b/test/units/modules/network/f5/fixtures/data-group-integer.txt deleted file mode 100644 index 711ac1987b..0000000000 --- a/test/units/modules/network/f5/fixtures/data-group-integer.txt +++ /dev/null @@ -1,6 +0,0 @@ -1 := alpha -2 := bravo -3 := charlie -4 := x-ray -5 := yankee -6 := zulu diff --git a/test/units/modules/network/f5/fixtures/data-group-string.txt b/test/units/modules/network/f5/fixtures/data-group-string.txt deleted file mode 100644 index c30fca282c..0000000000 --- a/test/units/modules/network/f5/fixtures/data-group-string.txt +++ /dev/null @@ -1,6 +0,0 @@ -a := alpha -b := bravo -c := charlie -x := x-ray -y := yankee -z := zulu diff --git a/test/units/modules/network/f5/fixtures/fake_policy.tar.gz b/test/units/modules/network/f5/fixtures/fake_policy.tar.gz Binary files differdeleted file mode 100644 index cdc6202779..0000000000 --- a/test/units/modules/network/f5/fixtures/fake_policy.tar.gz +++ /dev/null diff --git a/test/units/modules/network/f5/fixtures/fake_policy.xml b/test/units/modules/network/f5/fixtures/fake_policy.xml deleted file mode 100644 index 590944a484..0000000000 --- a/test/units/modules/network/f5/fixtures/fake_policy.xml +++ /dev/null @@ -1,12174 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<policy bigip_version="11.5.4" integrity_check="d7ed8cbd2414d6ab935e5f837ef0f93e" name="/Common/fake_policy"> - <policy_version> - <timestamp>2017-04-11T08:05:22Z</timestamp> - <device_name>ltm4restlab.lab.local</device_name> - <policy_name>/Common/fake_policy</policy_name> - <last_change>Allowed Response Code 503 [add]: Response Code was set to 503.</last_change> - </policy_version> - <encoding>utf-8</encoding> - <maximum_http_length>8192</maximum_http_length> - <maximum_cookie_length>8192</maximum_cookie_length> - <description></description> - <trigger_asm_irule_event>Disabled</trigger_asm_irule_event> - <case_insensitive>false</case_insensitive> - <whitehat>false</whitehat> - <owa>false</owa> - <inspect_http_uploads>false</inspect_http_uploads> - <protocol_free>false</protocol_free> - <path_parameter_handling>as parameters</path_parameter_handling> - <mask_sensitive>true</mask_sensitive> - <trust_xff>false</trust_xff> - <learning> - <learning_type>policy based</learning_type> - </learning> - <csrf> - <enabled>false</enabled> - <ssl_only>false</ssl_only> - <enforcement_mode>enforcing</enforcement_mode> - <expiration_time_in_seconds>0</expiration_time_in_seconds> - </csrf> - <allowed_response_code>400</allowed_response_code> - <allowed_response_code>401</allowed_response_code> - <allowed_response_code>404</allowed_response_code> - <allowed_response_code>407</allowed_response_code> - <allowed_response_code>417</allowed_response_code> - <allowed_response_code>503</allowed_response_code> - <web_scraping> - <grace_threshold>100</grace_threshold> - <session_prevention_threshold>100</session_prevention_threshold> - <revalidation_threshold>2000</revalidation_threshold> - <rapid_surf_max_time_duration>1000</rapid_surf_max_time_duration> - <rapid_surf_max_page_changes>5</rapid_surf_max_page_changes> - <web_scraping_alarm>false</web_scraping_alarm> - <web_scraping_block>false</web_scraping_block> - <session_opening_anomaly_block>false</session_opening_anomaly_block> - <session_opening_anomaly_alarm>false</session_opening_anomaly_alarm> - <session_transactions_anomaly_alarm>false</session_transactions_anomaly_alarm> - <session_transactions_anomaly_block>false</session_transactions_anomaly_block> - <opening_client_side_integrity_defense>false</opening_client_side_integrity_defense> - <opening_rate_limiting>false</opening_rate_limiting> - <sessions_opened_per_second_increase_rate>500</sessions_opened_per_second_increase_rate> - <sessions_opened_per_second_maximum>50</sessions_opened_per_second_maximum> - <sessions_opened_per_second_minimum>25</sessions_opened_per_second_minimum> - <opening_max_prevention_duration>1800</opening_max_prevention_duration> - <opening_drop_ip_with_reputation>false</opening_drop_ip_with_reputation> - <transactions_tps_increase_rate>500</transactions_tps_increase_rate> - <transactions_per_second_maximum>400</transactions_per_second_maximum> - <transactions_per_second_minimum>200</transactions_per_second_minimum> - <transactions_max_prevention_duration>1800</transactions_max_prevention_duration> - <opening_persistent_storage_inconsistency>true</opening_persistent_storage_inconsistency> - <opening_persistent_storage_resets>true</opening_persistent_storage_resets> - <opening_persistent_storage_inconsistency_events_maximum>3</opening_persistent_storage_inconsistency_events_maximum> - <opening_persistent_storage_inconsistency_events_duration>600</opening_persistent_storage_inconsistency_events_duration> - <opening_persistent_storage_resets_maximum>2</opening_persistent_storage_resets_maximum> - <opening_persistent_storage_resets_duration>600</opening_persistent_storage_resets_duration> - <persistent_storage_max_prevention_duration>1800</persistent_storage_max_prevention_duration> - <use_persistent_storage>false</use_persistent_storage> - <persistent_data_validity_period>120</persistent_data_validity_period> - <session_opening_anomaly_enable>true</session_opening_anomaly_enable> - <suspicious_clients_alarm>false</suspicious_clients_alarm> - <suspicious_clients_block>false</suspicious_clients_block> - <fingerprinting_enable>false</fingerprinting_enable> - <fingerprint_resets_enabled>false</fingerprint_resets_enabled> - <fingerprint_resets_threshold>5</fingerprint_resets_threshold> - <fingerprint_resets_time_window>600</fingerprint_resets_time_window> - <detect_plugins>false</detect_plugins> - <suspicious_clients_prevention_duration>300</suspicious_clients_prevention_duration> - </web_scraping> - <blocking> - <enforcement_mode>transparent</enforcement_mode> - <maximum_decoding_passes>2</maximum_decoding_passes> - <maximum_headers>20</maximum_headers> - <maximum_parameters>500</maximum_parameters> - <response_page cause="default"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - </response_page> - <response_page cause="XML"> - <response_type>soap fault</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Content-type: text/xml -Connection: close</response_header> - <response_html_code><?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>The requested operation was rejected. Please consult with your administrator.Your support ID is: <%TS.request.ID()%></faultstring><detail/></soap:Fault></soap:Body></soap:Envelope></response_html_code> - </response_page> - <response_page cause="Ajax"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - <ajax_action_type>alert_popup</ajax_action_type> - <ajax_popup_message>The requested URL was rejected. Please consult with your administrator. Your support ID is: <%TS.request.ID()%></ajax_popup_message> - </response_page> - <response_page cause="Ajax_login"> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - <ajax_action_type>alert_popup</ajax_action_type> - <ajax_popup_message>The requested URL was rejected. Please consult with your administrator. Your support ID is: <%TS.request.ID()%></ajax_popup_message> - </response_page> - <response_page_settings> - <flg_ajax_enabled>disabled</flg_ajax_enabled> - </response_page_settings> - </blocking> - <session_awareness> - <enabled>false</enabled> - <use_apm_username>false</use_apm_username> - <lifetime_window>900</lifetime_window> - <violation_actions_enabled>false</violation_actions_enabled> - <session> - <track_all_threshold>5</track_all_threshold> - <block_illegal_threshold>5</block_illegal_threshold> - <block_all_threshold>20</block_all_threshold> - <track_all_threshold_enabled>true</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>true</block_all_threshold_enabled> - </session> - <ip_address> - <track_all_threshold>15</track_all_threshold> - <block_illegal_threshold>15</block_illegal_threshold> - <block_all_threshold>60</block_all_threshold> - <track_all_threshold_enabled>false</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>false</block_all_threshold_enabled> - </ip_address> - <user> - <track_all_threshold>5</track_all_threshold> - <block_illegal_threshold>5</block_illegal_threshold> - <block_all_threshold>20</block_all_threshold> - <track_all_threshold_enabled>true</track_all_threshold_enabled> - <block_illegal_threshold_enabled>false</block_illegal_threshold_enabled> - <block_all_threshold_enabled>true</block_all_threshold_enabled> - </user> - <track_all_period>600</track_all_period> - <block_illegal_period>600</block_illegal_period> - <block_all_period>600</block_all_period> - <block_all_period_enabled>false</block_all_period_enabled> - <block_only_autheticated>false</block_only_autheticated> - </session_awareness> - <gwt_profiles> - <character_set/> - </gwt_profiles> - <json_profiles> - <character_set/> - </json_profiles> - <xml_profiles> - <character_set/> - </xml_profiles> - <file_types> - <file_type name="*" type="wildcard"> - <learning_mode>Always</learning_mode> - <url_length>100</url_length> - <request_length>5000</request_length> - <query_string_length>1000</query_string_length> - <post_data_length>1000</post_data_length> - <check_response>false</check_response> - <in_staging>false</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <check_url_length>false</check_url_length> - <check_request_length>false</check_request_length> - <check_query_string_length>false</check_query_string_length> - <check_post_data_length>false</check_post_data_length> - </file_type> - </file_types> - <urls> - <url name="*" protocol="HTTPS" type="wildcard"> - <learning_mode>Never</learning_mode> - <check_flows>false</check_flows> - <is_entry_point>false</is_entry_point> - <is_referrer>false</is_referrer> - <can_change_domain_cookie>false</can_change_domain_cookie> - <user_config_level>basic</user_config_level> - <check_metachars>true</check_metachars> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <clickjacking_protection> - <enabled>false</enabled> - <allow_rendering_in_frames>N/A</allow_rendering_in_frames> - </clickjacking_protection> - <cors_enforcement_enable>false</cors_enforcement_enable> - <allow_cors>true</allow_cors> - <cors_allow_credentials_handling>unmodified</cors_allow_credentials_handling> - <cors_allow_credentials>allow</cors_allow_credentials> - <cors_check_maximum_age>false</cors_check_maximum_age> - <cors_maximum_age>1800</cors_maximum_age> - <cors_allowed_origins_handling>unmodified</cors_allowed_origins_handling> - <cors_allowed_methods_handling>unmodified</cors_allowed_methods_handling> - <cors_allowed_headers_handling>unmodified</cors_allowed_headers_handling> - <cors_exposed_headers_handling>unmodified</cors_exposed_headers_handling> - <flg_wildcard_includes_slash>true</flg_wildcard_includes_slash> - <parameter/> - <content_profile> - <header_name>*</header_name> - <header_value>*</header_value> - <header_order>0</header_order> - <enforcement_type>http</enforcement_type> - <in_classification>false</in_classification> - </content_profile> - </url> - <url name="*" protocol="HTTP" type="wildcard"> - <learning_mode>Never</learning_mode> - <check_flows>false</check_flows> - <is_entry_point>false</is_entry_point> - <is_referrer>false</is_referrer> - <can_change_domain_cookie>false</can_change_domain_cookie> - <user_config_level>basic</user_config_level> - <check_metachars>true</check_metachars> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <clickjacking_protection> - <enabled>false</enabled> - <allow_rendering_in_frames>N/A</allow_rendering_in_frames> - </clickjacking_protection> - <cors_enforcement_enable>false</cors_enforcement_enable> - <allow_cors>true</allow_cors> - <cors_allow_credentials_handling>unmodified</cors_allow_credentials_handling> - <cors_allow_credentials>allow</cors_allow_credentials> - <cors_check_maximum_age>false</cors_check_maximum_age> - <cors_maximum_age>1800</cors_maximum_age> - <cors_allowed_origins_handling>unmodified</cors_allowed_origins_handling> - <cors_allowed_methods_handling>unmodified</cors_allowed_methods_handling> - <cors_allowed_headers_handling>unmodified</cors_allowed_headers_handling> - <cors_exposed_headers_handling>unmodified</cors_exposed_headers_handling> - <flg_wildcard_includes_slash>true</flg_wildcard_includes_slash> - <parameter/> - <content_profile> - <header_name>*</header_name> - <header_value>*</header_value> - <header_order>0</header_order> - <enforcement_type>http</enforcement_type> - <in_classification>false</in_classification> - </content_profile> - </url> - <character_set/> - </urls> - <parameters> - <parameter name="*" type="wildcard"> - <learning_mode>When Violation Detected</learning_mode> - <is_mandatory>false</is_mandatory> - <allow_empty_value>true</allow_empty_value> - <value_type>user input</value_type> - <user_input_format></user_input_format> - <match_regular_expression></match_regular_expression> - <is_sensitive>false</is_sensitive> - <in_staging>true</in_staging> - <last_updated>2017-04-11T08:05:13Z</last_updated> - <parameter_name_metachars> - <check_metachars>true</check_metachars> - </parameter_name_metachars> - <check_maximum_length>false</check_maximum_length> - <check_metachars>true</check_metachars> - <check_attack_signatures>true</check_attack_signatures> - <allow_repeated_parameter_name>false</allow_repeated_parameter_name> - <in_classification>false</in_classification> - <disallow_file_upload_of_executables>true</disallow_file_upload_of_executables> - <is_base64>false</is_base64> - </parameter> - <character_set/> - <parameter_name_metachars> - <character_set/> - </parameter_name_metachars> - </parameters> - <sensitive_parameters> - <parameter_name>password</parameter_name> - </sensitive_parameters> - <flows> - <flow_access> - <expiration_period>0</expiration_period> - <response_page> - <response_type>default</response_type> - <response_header>HTTP/1.1 200 OK -Cache-Control: no-cache -Pragma: no-cache -Connection: close</response_header> - <response_html_code><html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: <%TS.request.ID()%></body></html></response_html_code> - </response_page> - </flow_access> - </flows> - <methods> - <method name="GET"> - <act_as>GET</act_as> - <user_config_level>basic</user_config_level> - </method> - <method name="POST"> - <act_as>POST</act_as> - <user_config_level>basic</user_config_level> - </method> - <method name="HEAD"> - <act_as>GET</act_as> - <user_config_level>basic</user_config_level> - </method> - </methods> - <headers> - <allowed_modified_cookie name="*" type="wildcard"> - <learning_mode>When Violation Detected</learning_mode> - <in_staging>true</in_staging> - <enforcement_mode>allow</enforcement_mode> - <http_only>false</http_only> - <secure>false</secure> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - </allowed_modified_cookie> - <character_set/> - </headers> - <attack_signatures> - <signature_set> - <set id="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></set> - <alarm>true</alarm> - <block>true</block> - <learn>true</learn> - </signature_set> - <enable_staging>true</enable_staging> - <staging_period_in_days>7</staging_period_in_days> - <signature signature_id="200000001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200000190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001211"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001260"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001263"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001265"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001281"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001283"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001331"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001383"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001393"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001395"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001407"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001409"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001413"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001417"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001418"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001445"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001477"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001478"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001480"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001481"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001482"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001483"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001484"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001485"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001486"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001487"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001488"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001489"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001490"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001491"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001492"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001493"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001494"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001496"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001497"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001498"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001499"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001500"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001504"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001505"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001506"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001507"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001508"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001509"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001510"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001511"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001512"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001513"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001514"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001515"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001516"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001517"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001518"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001519"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001520"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001521"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001522"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001523"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001524"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001525"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001526"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001527"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001528"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001529"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001530"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001531"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001532"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001533"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001534"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001535"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001536"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001537"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001538"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001539"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001540"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001541"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001542"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001543"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001544"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001545"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001546"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001547"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001548"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001549"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001550"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001551"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001552"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001553"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001554"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001555"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001556"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001557"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001558"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001559"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001560"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001561"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001562"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001563"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001564"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001565"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001566"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001567"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001568"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001569"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001570"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001571"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001572"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001573"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001574"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001575"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001576"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001577"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001578"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001579"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001580"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001581"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001582"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001583"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001584"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001585"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001586"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001587"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001588"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001589"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001590"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001591"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001592"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001593"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001594"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001595"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001596"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001597"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001598"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001599"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001600"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001601"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001602"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001603"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001604"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001605"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001606"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001607"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001608"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001609"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001610"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001611"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001612"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001613"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001614"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001615"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001616"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001617"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001618"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001619"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001620"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001621"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001622"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001623"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001624"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001625"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001626"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001627"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001628"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001629"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001630"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001631"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001632"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001633"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001634"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001635"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001636"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001637"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001638"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001639"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001640"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001641"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001642"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001643"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001644"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001645"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001646"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001647"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001648"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001649"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001650"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001651"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001652"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001653"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001654"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001655"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001657"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001658"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001659"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001660"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001661"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001662"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001663"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001664"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001665"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001666"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001667"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001668"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001669"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001670"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001671"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001672"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001673"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001674"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001675"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001676"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001677"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001678"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001679"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001680"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001681"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001682"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001683"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001684"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001685"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001686"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001687"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001688"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001689"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001690"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001691"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001692"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001693"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001694"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001695"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001696"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001697"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001698"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001699"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001715"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001716"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200001717"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002260"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002263"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002265"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002283"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002331"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002383"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002390"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002393"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002395"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002409"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002413"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002472"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002473"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002477"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002478"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002479"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002480"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002481"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002482"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002483"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002484"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002485"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002486"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002487"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002488"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002489"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002490"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002491"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002492"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002493"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002494"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002495"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002496"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002497"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002498"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002499"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002500"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002501"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002502"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002503"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002504"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002505"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002506"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002507"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002508"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002509"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002510"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002511"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002512"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002513"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002514"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002515"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002516"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002517"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002518"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002519"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002520"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002521"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002522"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002523"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002524"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002525"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002526"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002527"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002528"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002529"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002530"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002531"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002532"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002533"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002534"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002535"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002536"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002537"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002538"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002539"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002540"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002541"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002542"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002543"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002544"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002545"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002546"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002547"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002548"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002549"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002550"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002551"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002552"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002553"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002554"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002555"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002556"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002557"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002558"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002559"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002560"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002561"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002562"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002563"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002564"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002565"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002566"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002567"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002568"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002569"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002570"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002571"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002572"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002573"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002574"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002575"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002576"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002577"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002578"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002579"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002580"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002581"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002582"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002583"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002584"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002585"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002586"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002587"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002588"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002589"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002590"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002591"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002592"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002593"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002594"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002595"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002596"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002597"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002598"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002599"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002600"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002601"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002602"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002603"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002604"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002605"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200002606"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003257"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003258"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003259"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003261"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003262"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003264"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003266"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003267"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003268"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003269"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003270"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003271"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003272"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003273"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003274"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003275"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003276"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003277"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003278"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003279"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003280"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003281"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003282"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003284"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003285"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003286"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003287"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003288"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003289"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003290"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003291"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003292"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003293"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003294"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003295"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003296"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003297"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003298"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003299"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003301"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003302"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003303"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003325"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003326"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003327"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003328"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003329"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003333"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003334"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003335"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003336"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003337"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003338"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003339"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003340"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003341"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003342"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003343"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003344"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003345"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003346"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003347"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003348"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003349"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003350"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003351"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003352"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003353"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003354"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003355"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003356"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003357"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003358"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003359"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003360"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003361"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003362"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003363"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003364"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003365"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003366"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003367"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003368"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003369"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003370"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003371"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003372"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003373"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003374"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003375"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003376"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003377"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003378"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003379"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003380"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003381"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003382"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003384"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003385"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003386"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003387"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003388"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003389"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003390"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003391"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003392"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003394"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003396"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003397"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003398"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003399"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003400"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003401"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003402"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003403"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003404"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003405"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003406"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003407"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003408"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003410"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003411"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003412"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003414"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003415"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003416"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003417"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003418"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003419"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003420"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003421"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003422"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003423"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003424"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003425"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003426"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003427"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003428"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003429"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003430"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003431"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003432"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003433"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003434"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003435"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003436"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003437"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003438"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003439"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003440"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003441"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003442"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003443"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003444"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003445"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003446"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003447"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003448"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003449"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003450"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003451"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003452"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003453"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003454"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003455"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003456"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003457"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003458"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003459"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003460"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003461"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003462"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003463"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003464"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003465"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003466"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003467"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003468"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003469"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003470"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003471"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003472"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003473"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003474"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003475"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200003476"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200004198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200005008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200006031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200007013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200008003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009144"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009145"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009146"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009147"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009148"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009149"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009150"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009151"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009152"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009153"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009154"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009155"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009156"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009157"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009158"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009159"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009160"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009161"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009162"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009163"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009164"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009165"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009166"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009167"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009168"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009169"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009170"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009171"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009172"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009173"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009174"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009175"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009176"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009177"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009178"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009179"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009180"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009181"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009182"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009183"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009184"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009185"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009186"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009187"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009188"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009189"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009190"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009191"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009192"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009193"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009194"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009195"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009196"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009197"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009198"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009199"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009200"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009201"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009202"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009203"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009204"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009205"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009206"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009207"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009208"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009209"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009210"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009211"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009212"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009213"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009214"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009215"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009216"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009217"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009218"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009219"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009220"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009221"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009222"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009223"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009224"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009225"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009226"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009227"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009228"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009229"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009230"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009231"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009232"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009233"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009234"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009235"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009236"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009237"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009238"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009239"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009240"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009241"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009242"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009243"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009244"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009245"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009246"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009247"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009248"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009249"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009250"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009251"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009252"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009253"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009254"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009255"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200009256"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200010069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200011054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200012020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200013001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200014003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200015080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200016007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200018030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019068"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200019136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021023"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021024"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021052"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021070"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021076"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021112"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021113"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021114"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021115"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021116"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021117"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021118"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021119"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021120"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021121"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021122"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021123"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021124"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021125"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021126"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021127"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021128"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021129"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021130"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021131"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021132"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021133"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021134"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021135"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021136"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021137"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021138"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021139"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021140"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021141"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021142"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200021143"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022012"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022016"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022017"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200022019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023003"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200023004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100000"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100004"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100005"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100006"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100007"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100008"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100009"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100010"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100011"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100013"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100014"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100015"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100018"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100019"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100020"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100021"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100022"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100025"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100026"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100027"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100028"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100029"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100030"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100031"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100032"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100033"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100034"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100035"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100036"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100037"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100038"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100039"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100040"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100041"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100042"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100043"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100044"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100045"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100046"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100047"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100048"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100049"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100050"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100051"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100053"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100054"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100055"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100056"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100057"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100058"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100059"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100060"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100061"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100062"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100063"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100064"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100065"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100066"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100067"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100069"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100071"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100072"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100073"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100074"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100075"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100077"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100078"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100079"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100080"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100081"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100082"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100083"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100084"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100085"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100086"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100087"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100088"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100089"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100090"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100091"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100092"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100093"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100094"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100095"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100096"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100097"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100098"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100099"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100100"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100101"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100102"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100103"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100104"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100105"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100106"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100107"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100108"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100109"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100110"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100111"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100300"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100304"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100305"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100306"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100307"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100308"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100309"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100310"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100311"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100312"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100313"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100314"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100315"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100316"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100317"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100318"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100319"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100320"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100321"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100322"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100323"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100324"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100330"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200100332"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200200001"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="200200002"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - <signature signature_id="299999999"> - <enabled>true</enabled> - <in_staging>true</in_staging> - </signature> - </attack_signatures> - <data_guard> - <enabled>false</enabled> - <credit_card_numbers>false</credit_card_numbers> - <social_security_numbers>false</social_security_numbers> - <file_content>false</file_content> - <mask_data>false</mask_data> - <check_custom_patterns>false</check_custom_patterns> - <check_exception_patterns>false</check_exception_patterns> - <enforcement_mode>enforce_all_except_url_list</enforcement_mode> - </data_guard> - <policy_builder> - <enabled>false</enabled> - <http_protocol_compliance>true</http_protocol_compliance> - <evasion_techniques_detected>true</evasion_techniques_detected> - <learn_file_types>Always</learn_file_types> - <file_types_lengths>true</file_types_lengths> - <attack_signatures>true</attack_signatures> - <learn_urls>Never</learn_urls> - <urls_metachars>false</urls_metachars> - <learn_parameters>When Violation Detected</learn_parameters> - <learn_cookies>When Violation Detected</learn_cookies> - <learn_redirection_domains>Always</learn_redirection_domains> - <maximum_redirection_domains>100</maximum_redirection_domains> - <parameters_value_lengths>false</parameters_value_lengths> - <parameters_name_meta_characters>false</parameters_name_meta_characters> - <parameters_value_meta_characters>false</parameters_value_meta_characters> - <parameters_integer_value>true</parameters_integer_value> - <allowed_methods>false</allowed_methods> - <request_length_exceeds_buffer_size>true</request_length_exceeds_buffer_size> - <client_side_policy_building>false</client_side_policy_building> - <maximum_file_types>250</maximum_file_types> - <maximum_urls>10000</maximum_urls> - <maximum_parameters>10000</maximum_parameters> - <maximum_allowed_modified_cookies>100</maximum_allowed_modified_cookies> - <content_profiles>false</content_profiles> - <content_profile_classification>false</content_profile_classification> - <track_site_changes> - <untrusted> - <enabled>true</enabled> - <distinct_sessions>10</distinct_sessions> - <distinct_ips>10</distinct_ips> - <minimum_interval>300</minimum_interval> - <maximum_interval>604800</maximum_interval> - </untrusted> - <trusted> - <enabled>true</enabled> - <distinct_sessions>1</distinct_sessions> - <distinct_ips>1</distinct_ips> - <minimum_interval>0</minimum_interval> - <maximum_interval>604800</maximum_interval> - </trusted> - </track_site_changes> - <loosen_rule> - <untrusted> - <distinct_sessions>20</distinct_sessions> - <distinct_ips>20</distinct_ips> - <minimum_interval>3600</minimum_interval> - <maximum_interval>604800</maximum_interval> - </untrusted> - <trusted> - <distinct_sessions>1</distinct_sessions> - <distinct_ips>1</distinct_ips> - <minimum_interval>0</minimum_interval> - <maximum_interval>604800</maximum_interval> - </trusted> - </loosen_rule> - <tighten_rule> - <untrusted> - <distinct_sessions>500</distinct_sessions> - <distinct_ips>500</distinct_ips> - <total_requests>5000</total_requests> - <minimum_interval>86400</minimum_interval> - </untrusted> - <trusted> - <distinct_sessions>500</distinct_sessions> - <distinct_ips>500</distinct_ips> - <total_requests>5000</total_requests> - <minimum_interval>86400</minimum_interval> - </trusted> - </tighten_rule> - <dynamic_parameters> - <unique_value_sets>10</unique_value_sets> - <hidden_fields>false</hidden_fields> - <use_statistics_forms>false</use_statistics_forms> - <use_statistics_links>false</use_statistics_links> - </dynamic_parameters> - <parameter_level>global</parameter_level> - <collapse_to_global_occurrences>10</collapse_to_global_occurrences> - <all_trusted_ips>list</all_trusted_ips> - <valid_host_names>true</valid_host_names> - <csrf_urls>false</csrf_urls> - <learn_from_responses>true</learn_from_responses> - <encoding_failed_to_convert>false</encoding_failed_to_convert> - <check_max_cookie_header_length>false</check_max_cookie_header_length> - <check_max_http_header_length>false</check_max_http_header_length> - <collapse_urls>true</collapse_urls> - <collapse_urls_occurrences>500</collapse_urls_occurrences> - <collapse_urls_depth>2</collapse_urls_depth> - <response_code>1xx</response_code> - <response_code>2xx</response_code> - <response_code>3xx</response_code> - <filetype>bmp</filetype> - <filetype>gif</filetype> - <filetype>ico</filetype> - <filetype>jpeg</filetype> - <filetype>jpg</filetype> - <filetype>pcx</filetype> - <filetype>pdf</filetype> - <filetype>png</filetype> - <filetype>swf</filetype> - <filetype>wav</filetype> - </policy_builder> - <geolocation> - <enforcement_mode> - <mode>disallow</mode> - </enforcement_mode> - </geolocation> - <ip_reputation> - <enabled>false</enabled> - </ip_reputation> - <database_protection> - <enabled>false</enabled> - <user_source>APM Usernames and Session ID</user_source> - </database_protection> - <header name="*" type="wildcard"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="referer" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>true</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>true</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="cookie" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>false</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <header name="authorization" type="explicit"> - <is_mandatory>false</is_mandatory> - <check_signatures>true</check_signatures> - <is_base64>false</is_base64> - <percent_normalization>false</percent_normalization> - <uri_normalization>false</uri_normalization> - <html_normalization>false</html_normalization> - <enable_normalization_violation>false</enable_normalization_violation> - <is_default>true</is_default> - </header> - <redirection_domain name="*" type="wildcard"> - <include_subdomains>false</include_subdomains> - <learning_mode>Always</learning_mode> - </redirection_domain> - <redirection_protection> - <enabled>true</enabled> - </redirection_protection> -</policy> diff --git a/test/units/modules/network/f5/fixtures/load_afm_global_network_log_network.json b/test/units/modules/network/f5/fixtures/load_afm_global_network_log_network.json deleted file mode 100644 index cc4ef0d391..0000000000 --- a/test/units/modules/network/f5/fixtures/load_afm_global_network_log_network.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:security:log:profile:network:networkstate", - "name": "global-network", - "fullPath": "global-network", - "generation": 839, - "selfLink": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/network/global-network?ver=12.1.4", - "filter": { - "logAclMatchAccept": "disabled", - "logAclMatchDrop": "disabled", - "logAclMatchReject": "disabled", - "logAclToBoxDeny": "disabled", - "logGeoAlways": "disabled", - "logIpErrors": "disabled", - "logTcpErrors": "disabled", - "logTcpEvents": "disabled", - "logTranslationFields": "disabled" - }, - "format": { - "fieldListDelimiter": ",", - "type": "none" - }, - "rateLimit": { - "aclMatchAccept": 4294967295, - "aclMatchDrop": 4294967295, - "aclMatchReject": 4294967295, - "aggregateRate": 4294967295, - "ipErrors": 4294967295, - "tcpErrors": 4294967295, - "tcpEvents": 4294967295 - } -} diff --git a/test/units/modules/network/f5/fixtures/load_afm_log_global_network_profile.json b/test/units/modules/network/f5/fixtures/load_afm_log_global_network_profile.json deleted file mode 100644 index 205af5b8c5..0000000000 --- a/test/units/modules/network/f5/fixtures/load_afm_log_global_network_profile.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "kind": "tm:security:log:profile:profilestate", - "name": "global-network", - "partition": "Common", - "fullPath": "/Common/global-network", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network?ver=12.1.4", - "description": "Default logging profile for network events", - "ipIntelligence": { - "aggregateRate": 4294967295, - "logRtbh": "disabled", - "logShun": "disabled", - "logTranslationFields": "disabled" - }, - "nat": { - "endInboundSession": "disabled", - "endOutboundSession": { - "action": "disabled" - }, - "errors": "disabled", - "lsnLegacyMode": "disabled", - "quotaExceeded": "disabled", - "startInboundSession": "disabled", - "startOutboundSession": { - "action": "disabled" - } - }, - "portMisuse": { - "aggregateRate": 4294967295 - }, - "trafficStatistics": { - "activeFlows": "disabled", - "missedFlows": "disabled", - "reapedFlows": "disabled", - "syncookies": "disabled", - "syncookiesWhitelist": "disabled" - }, - "networkReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/network?ver=12.1.4", - "isSubcollection": true - }, - "protocolDnsReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/protocol-dns?ver=12.1.4", - "isSubcollection": true - }, - "protocolSipReference": { - "link": "https://localhost/mgmt/tm/security/log/profile/~Common~global-network/protocol-sip?ver=12.1.4", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_afm_schedule.json b/test/units/modules/network/f5/fixtures/load_afm_schedule.json deleted file mode 100644 index c9d51ebffc..0000000000 --- a/test/units/modules/network/f5/fixtures/load_afm_schedule.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:security:firewall:schedule:schedulestate", - "name": "foobar", - "partition": "Common", - "fullPath": "/Common/foobar", - "generation": 1835, - "selfLink": "https://localhost/mgmt/tm/security/firewall/schedule/~Common~foobar?ver=12.1.4", - "dailyHourEnd": "12:00", - "dailyHourStart": "6:00", - "dateValidEnd": "2019-06-13T16:00:00Z", - "dateValidStart": "2019-05-31T07:00:00Z", - "daysOfWeek": [ - "sunday", - "monday", - "friday", - "saturday" - ], - "description": "some description" -} diff --git a/test/units/modules/network/f5/fixtures/load_apm_acl.json b/test/units/modules/network/f5/fixtures/load_apm_acl.json deleted file mode 100644 index 564784dbf2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_apm_acl.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:apm:acl:aclstate", - "name": "lastone", - "partition": "Common", - "fullPath": "/Common/lastone", - "generation": 495, - "selfLink": "https://localhost/mgmt/tm/apm/acl/~Common~lastone?ver=12.1.4", - "aclOrder": 2, - "description": "foobar", - "locationSpecific": "true", - "pathMatchCase": "false", - "type": "static", - "entries": [ - { - "action": "discard", - "dstEndPort": 0, - "dstStartPort": 0, - "dstSubnet": "0.0.0.0/0", - "log": "none", - "protocol": 1, - "scheme": "any", - "srcEndPort": 0, - "srcStartPort": 0, - "srcSubnet": "0.0.0.0/0" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_apm_network_access.json b/test/units/modules/network/f5/fixtures/load_apm_network_access.json deleted file mode 100644 index 9c8b897f73..0000000000 --- a/test/units/modules/network/f5/fixtures/load_apm_network_access.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "kind": "tm:apm:resource:network-access:network-accessstate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 1140, - "selfLink": "https://localhost/mgmt/tm/apm/resource/network-access/~Common~test?ver=12.1.4", - "addressSpaceDhcpRequestsExcluded": "true", - "addressSpaceExcludeDnsName": [ - "baz.com", - "bazfoo.com" - ], - "addressSpaceIncludeDnsName": [ - "foo.com", - "bar.com" - ], - "addressSpaceLocDnsServersExcluded": "true", - "addressSpaceLocalSubnetsExcluded": "true", - "addressSpaceProtect": "false", - "applicationLaunchWarning": "true", - "autoLaunch": "false", - "clientInterfaceSpeed": 100000000, - "clientIpFilterEngine": "false", - "clientPowerManagement": "ignore", - "clientProxy": "false", - "clientProxyAddress": "any6", - "clientProxyEnforceSubnets": "true", - "clientProxyIgnoreAutoConfigError": "false", - "clientProxyLocalBypass": "false", - "clientProxyPort": 0, - "clientProxyUseHttpPac": "false", - "clientProxyUseLocalProxy": "false", - "clientTrayIcon": "true", - "compression": "none", - "customizationGroup": "/Common/test_resource_network_access_customization", - "customizationGroupReference": { - "link": "https://localhost/mgmt/tm/apm/policy/customization-group/~Common~test_resource_network_access_customization?ver=12.1.4" - }, - "dnsEnforceSearchOrder": "true", - "dnsPrimary": "any6", - "dnsRegisterConnection": "false", - "dnsSecondary": "any6", - "dnsUseDnsSuffixForRegistration": "false", - "dtls": "false", - "dtlsPort": 4433, - "executeLogoffScripts": "false", - "idleTimeoutThreshold": 0, - "idleTimeoutWindow": 0, - "ipv6DnsPrimary": "any6", - "ipv6DnsSecondary": "any6", - "ipv6LeasepoolName": "/Common/ipv6lease", - "ipv6LeasepoolNameReference": { - "link": "https://localhost/mgmt/tm/apm/resource/ipv6-leasepool/~Common~ipv6lease?ver=12.1.4" - }, - "leasepoolName": "/Common/ipv4lease", - "leasepoolNameReference": { - "link": "https://localhost/mgmt/tm/apm/resource/leasepool/~Common~ipv4lease?ver=12.1.4" - }, - "locationSpecific": "true", - "microsoftNetworkClient": "true", - "microsoftNetworkServer": "false", - "networkTunnel": "enabled", - "preserveSourcePortStrict": "none", - "provideClientCert": "true", - "proxyArp": "false", - "snat": "automap", - "splitTunneling": "true", - "supportedIpVersion": "ipv4-ipv6", - "syncWithActiveDirectory": "false", - "type": "network-access", - "winsPrimary": "any6", - "winsSecondary": "any6", - "addressSpaceExcludeSubnet": [ - { - "subnet": "192.168.1.0/24" - }, - { - "subnet": "192.168.2.1/32" - } - ], - "addressSpaceIncludeSubnet": [ - { - "subnet": "10.10.10.1/32" - }, - { - "subnet": "10.11.11.0/24" - } - ], - "ipv6AddressSpaceIncludeSubnet": [ - { - "subnet": "2607:f0d0:1002:51::4/128" - } - ], - "optimizedAppReference": { - "link": "https://localhost/mgmt/tm/apm/resource/network-access/~Common~test/optimized-app?ver=12.1.4", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_asm_dos.json b/test/units/modules/network/f5/fixtures/load_asm_dos.json deleted file mode 100644 index cab7b71ff2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_asm_dos.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "kind": "tm:security:dos:profile:application:applicationstate", - "name": "test", - "fullPath": "test", - "generation": 1442, - "selfLink": "https://localhost/mgmt/tm/security/dos/profile/~Common~test/application/test?ver=13.1.1.4", - "botDefense": { - "browserLegitCaptcha": "enabled", - "browserLegitEnabled": "enabled", - "crossDomainRequests": "allow-all", - "gracePeriod": 300, - "mode": "disabled" - }, - "botSignatures": { - "check": "disabled", - "categories": [ - { - "name": "DOS Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~DOS%20Tool?ver=13.1.1.4" - } - }, - { - "name": "E-Mail Collector", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~E-Mail%20Collector?ver=13.1.1.4" - } - }, - { - "name": "Exploit Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Exploit%20Tool?ver=13.1.1.4" - } - }, - { - "name": "Network Scanner", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Network%20Scanner?ver=13.1.1.4" - } - }, - { - "name": "Search Engine", - "partition": "Common", - "action": "report", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Search%20Engine?ver=13.1.1.4" - } - }, - { - "name": "Spam Bot", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Spam%20Bot?ver=13.1.1.4" - } - }, - { - "name": "Spyware", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Spyware?ver=13.1.1.4" - } - }, - { - "name": "Vulnerability Scanner", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Vulnerability%20Scanner?ver=13.1.1.4" - } - }, - { - "name": "Web Spider", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Web%20Spider?ver=13.1.1.4" - } - }, - { - "name": "Webserver Stress Tool", - "partition": "Common", - "action": "block", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/dos/bot-signature-category/~Common~Webserver%20Stress%20Tool?ver=13.1.1.4" - } - } - ] - }, - "captchaResponse": { - "failure": { - "body": "You have entered an invalid answer for the question. Please, try again.\n<br>\n%DOSL7.captcha.image% %DOSL7.captcha.change%\n<br>\n<b>What code is in the image\\?</b>\n%DOSL7.captcha.solution%\n<br>\n%DOSL7.captcha.submit%\n<br>\n<br>\nYour support ID is: %DOSL7.captcha.support_id%.", - "type": "default" - }, - "first": { - "body": "This question is for testing whether you are a human visitor and to prevent automated spam submission.\n<br>\n%DOSL7.captcha.image% %DOSL7.captcha.change%\n<br>\n<b>What code is in the image\\?</b>\n%DOSL7.captcha.solution%\n<br>\n%DOSL7.captcha.submit%\n<br>\n<br>\nYour support ID is: %DOSL7.captcha.support_id%.", - "type": "default" - } - }, - "heavyUrls": { - "automaticDetection": "enabled", - "exclude": [ - "/exclude.html" - ], - "latencyThreshold": 1000, - "protection": "disabled", - "includeList": [ - { - "name": "URL/test.htm", - "threshold": "auto", - "url": "/test.htm" - }, - { - "name": "URL/testy.htm", - "threshold": "auto", - "url": "/testy.htm" - } - ] - }, - "mobileDetection": { - "allowAndroidRootedDevice": "false", - "allowAnyAndroidPackage": "false", - "allowAnyIosPackage": "false", - "allowEmulators": "true", - "allowJailbrokenDevices": "true", - "clientSideChallengeMode": "pass", - "enabled": "disabled", - "iosAllowedPackageNames": [ - "foobarapp" - ], - "androidPublishers": [ - { - "name": "ca-bundle.crt", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ca-bundle.crt?ver=13.1.1.4" - } - } - ] - }, - "rtbhDurationSec": 300, - "rtbhEnable": "enabled", - "scrubbingDurationSec": 60, - "scrubbingEnable": "enabled", - "singlePageApplication": "enabled", - "stressBased": { - "behavioral": { - "dosDetection": "disabled", - "mitigationMode": "none", - "signatures": "disabled", - "signaturesApprovedOnly": "disabled" - }, - "deEscalationPeriod": 7200, - "deviceCaptchaChallenge": "disabled", - "deviceClientSideDefense": "disabled", - "deviceMaximumAutoTps": 5000, - "deviceMaximumTps": 200, - "deviceMinimumAutoTps": 5, - "deviceMinimumTps": 40, - "deviceRateLimiting": "disabled", - "deviceRequestBlockingMode": "rate-limit", - "deviceTpsIncreaseRate": 500, - "escalationPeriod": 120, - "geoCaptchaChallenge": "disabled", - "geoClientSideDefense": "disabled", - "geoMaximumAutoTps": 20000, - "geoMinimumAutoTps": 50, - "geoMinimumShare": 10, - "geoRateLimiting": "disabled", - "geoRequestBlockingMode": "rate-limit", - "geoShareIncreaseRate": 500, - "ipCaptchaChallenge": "disabled", - "ipClientSideDefense": "disabled", - "ipMaximumAutoTps": 5000, - "ipMaximumTps": 200, - "ipMinimumAutoTps": 5, - "ipMinimumTps": 40, - "ipRateLimiting": "enabled", - "ipRequestBlockingMode": "rate-limit", - "ipTpsIncreaseRate": 500, - "mode": "off", - "siteCaptchaChallenge": "disabled", - "siteClientSideDefense": "disabled", - "siteMaximumAutoTps": 20000, - "siteMaximumTps": 10000, - "siteMinimumAutoTps": 50, - "siteMinimumTps": 2000, - "siteRateLimiting": "disabled", - "siteTpsIncreaseRate": 500, - "thresholdsMode": "manual", - "urlCaptchaChallenge": "disabled", - "urlClientSideDefense": "disabled", - "urlEnableHeavy": "enabled", - "urlMaximumAutoTps": 5000, - "urlMaximumTps": 1000, - "urlMinimumAutoTps": 50, - "urlMinimumTps": 200, - "urlRateLimiting": "enabled", - "urlTpsIncreaseRate": 500 - }, - "tcpDump": { - "maximumDuration": 30, - "maximumSize": 10, - "recordTraffic": "disabled", - "repetitionInterval": "120" - }, - "tpsBased": { - "deEscalationPeriod": 7200, - "deviceCaptchaChallenge": "disabled", - "deviceClientSideDefense": "disabled", - "deviceMaximumAutoTps": 5000, - "deviceMaximumTps": 200, - "deviceMinimumAutoTps": 5, - "deviceMinimumTps": 40, - "deviceRateLimiting": "disabled", - "deviceRequestBlockingMode": "rate-limit", - "deviceTpsIncreaseRate": 500, - "escalationPeriod": 120, - "geoCaptchaChallenge": "disabled", - "geoClientSideDefense": "disabled", - "geoMaximumAutoTps": 20000, - "geoMinimumAutoTps": 50, - "geoMinimumShare": 10, - "geoRateLimiting": "disabled", - "geoRequestBlockingMode": "rate-limit", - "geoShareIncreaseRate": 500, - "ipCaptchaChallenge": "disabled", - "ipClientSideDefense": "disabled", - "ipMaximumAutoTps": 5000, - "ipMaximumTps": 200, - "ipMinimumAutoTps": 5, - "ipMinimumTps": 40, - "ipRateLimiting": "enabled", - "ipRequestBlockingMode": "rate-limit", - "ipTpsIncreaseRate": 500, - "mode": "off", - "siteCaptchaChallenge": "disabled", - "siteClientSideDefense": "disabled", - "siteMaximumAutoTps": 20000, - "siteMaximumTps": 10000, - "siteMinimumAutoTps": 50, - "siteMinimumTps": 2000, - "siteRateLimiting": "disabled", - "siteTpsIncreaseRate": 500, - "thresholdsMode": "manual", - "urlCaptchaChallenge": "disabled", - "urlClientSideDefense": "disabled", - "urlEnableHeavy": "enabled", - "urlMaximumAutoTps": 5000, - "urlMaximumTps": 1000, - "urlMinimumAutoTps": 50, - "urlMinimumTps": 200, - "urlRateLimiting": "enabled", - "urlTpsIncreaseRate": 500 - }, - "triggerIrule": "enabled", - "geolocations": [ - { - "name": "Afghanistan", - "blackListed": true - }, - { - "name": "Aland Islands", - "whiteListed": true - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_asm_policy_active.json b/test/units/modules/network/f5/fixtures/load_asm_policy_active.json deleted file mode 100644 index 001daa757a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_asm_policy_active.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "plainTextProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2", - "isSubCollection": true - }, - "learningMode": "manual", - "dataGuardReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2" - }, - "stagingSettings": { - "signatureStaging": true, - "placeSignaturesInStaging": false, - "enforcementReadinessPeriod": 7 - }, - "createdDatetime": "2017-09-21T11:52:24Z", - "geolocationEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2" - }, - "versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.", - "name": "fake_policy", - "caseInsensitive": false, - "loginPageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2", - "isSubCollection": true - }, - "fullPath": "/Common/fake_policy", - "description": "", - "attributes": { - "pathParameterHandling": "as-parameters", - "triggerAsmIruleEvent": "disabled", - "inspectHttpUploads": false, - "maskCreditCardNumbersInRequest": true, - "maximumHttpHeaderLength": "8192", - "useDynamicSessionIdInUrl": false, - "maximumCookieHeaderLength": "8192" - }, - "partition": "Common", - "webScrapingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2" - }, - "csrfProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2" - }, - "customXffHeaders": [], - "kind": "tm:asm:policies:policystate", - "virtualServers": [], - "ipIntelligenceReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2" - }, - "protocolIndependent": false, - "sessionAwarenessSettingsReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2" - }, - "signatureSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2", - "isSubCollection": true - }, - "parameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2", - "isSubCollection": true - }, - "allowedResponseCodes": [ - 400, - 401, - 404, - 407, - 417, - 503 - ], - "applicationLanguage": "utf-8", - "enforcementMode": "transparent", - "loginEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2" - }, - "navigationParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2", - "isSubCollection": true - }, - "gwtProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2", - "isSubCollection": true - }, - "whitelistIpReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2", - "isSubCollection": true - }, - "historyRevisionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2", - "isSubCollection": true - }, - "policyBuilderReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2" - }, - "responsePageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2", - "isSubCollection": true - }, - "vulnerabilityAssessmentReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2" - }, - "blockingSettingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2", - "isSubCollection": true - }, - "cookieReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2", - "isSubCollection": true - }, - "hostNameReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2", - "isSubCollection": true - }, - "versionDeviceName": "ltm4restlab.lab.local", - "selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2", - "signatureReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2", - "isSubCollection": true - }, - "filetypeReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2", - "isSubCollection": true - }, - "id": "0EHlYeS5noAOZLY3YsJjEw", - "manualVirtualServers": [], - "modifierName": "admin", - "versionDatetime": "2017-04-11T08:05:22Z", - "subPath": "/Common", - "sessionTrackingStatusReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2", - "isSubCollection": true - }, - "active": true, - "auditLogReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2", - "isSubCollection": true - }, - "trustXff": false, - "websocketUrlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2", - "isSubCollection": true - }, - "xmlProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2", - "isSubCollection": true - }, - "methodReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2", - "isSubCollection": true - }, - "redirectionProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2" - }, - "vulnerabilityReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2", - "isSubCollection": true - }, - "creatorName": "SYSTEM", - "urlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2", - "isSubCollection": true - }, - "headerReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2", - "isSubCollection": true - }, - "xmlValidationFileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2", - "isSubCollection": true - }, - "lastUpdateMicros": 1.506250903e+15, - "jsonProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2", - "isSubCollection": true - }, - "bruteForceAttackPreventionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2", - "isSubCollection": true - }, - "extractionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2", - "isSubCollection": true - }, - "characterSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2", - "isSubCollection": true - }, - "isModified": false, - "suggestionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2", - "isSubCollection": true - }, - "sensitiveParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2", - "isSubCollection": true - }, - "versionPolicyName": "/Common/fake_policy" -} diff --git a/test/units/modules/network/f5/fixtures/load_asm_policy_inactive.json b/test/units/modules/network/f5/fixtures/load_asm_policy_inactive.json deleted file mode 100644 index 5198888142..0000000000 --- a/test/units/modules/network/f5/fixtures/load_asm_policy_inactive.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "plainTextProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2", - "isSubCollection": true - }, - "learningMode": "manual", - "dataGuardReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2" - }, - "stagingSettings": { - "signatureStaging": true, - "placeSignaturesInStaging": false, - "enforcementReadinessPeriod": 7 - }, - "createdDatetime": "2017-09-21T11:52:24Z", - "geolocationEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2" - }, - "versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.", - "name": "fake_policy", - "caseInsensitive": false, - "loginPageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2", - "isSubCollection": true - }, - "fullPath": "/Common/fake_policy", - "description": "", - "attributes": { - "pathParameterHandling": "as-parameters", - "triggerAsmIruleEvent": "disabled", - "inspectHttpUploads": false, - "maskCreditCardNumbersInRequest": true, - "maximumHttpHeaderLength": "8192", - "useDynamicSessionIdInUrl": false, - "maximumCookieHeaderLength": "8192" - }, - "partition": "Common", - "webScrapingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2" - }, - "csrfProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2" - }, - "customXffHeaders": [], - "kind": "tm:asm:policies:policystate", - "virtualServers": [], - "ipIntelligenceReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2" - }, - "protocolIndependent": false, - "sessionAwarenessSettingsReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2" - }, - "signatureSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2", - "isSubCollection": true - }, - "parameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2", - "isSubCollection": true - }, - "allowedResponseCodes": [ - 400, - 401, - 404, - 407, - 417, - 503 - ], - "applicationLanguage": "utf-8", - "enforcementMode": "transparent", - "loginEnforcementReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2" - }, - "navigationParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2", - "isSubCollection": true - }, - "gwtProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2", - "isSubCollection": true - }, - "whitelistIpReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2", - "isSubCollection": true - }, - "historyRevisionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2", - "isSubCollection": true - }, - "policyBuilderReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2" - }, - "responsePageReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2", - "isSubCollection": true - }, - "vulnerabilityAssessmentReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2" - }, - "blockingSettingReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2", - "isSubCollection": true - }, - "cookieReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2", - "isSubCollection": true - }, - "hostNameReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2", - "isSubCollection": true - }, - "versionDeviceName": "ltm4restlab.lab.local", - "selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2", - "signatureReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2", - "isSubCollection": true - }, - "filetypeReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2", - "isSubCollection": true - }, - "id": "0EHlYeS5noAOZLY3YsJjEw", - "manualVirtualServers": [], - "modifierName": "", - "versionDatetime": "2017-04-11T08:05:22Z", - "subPath": "/Common", - "sessionTrackingStatusReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2", - "isSubCollection": true - }, - "active": false, - "auditLogReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2", - "isSubCollection": true - }, - "trustXff": false, - "websocketUrlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2", - "isSubCollection": true - }, - "xmlProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2", - "isSubCollection": true - }, - "methodReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2", - "isSubCollection": true - }, - "redirectionProtectionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2" - }, - "vulnerabilityReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2", - "isSubCollection": true - }, - "creatorName": "SYSTEM", - "urlReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2", - "isSubCollection": true - }, - "headerReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2", - "isSubCollection": true - }, - "xmlValidationFileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2", - "isSubCollection": true - }, - "lastUpdateMicros": 0, - "jsonProfileReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2", - "isSubCollection": true - }, - "bruteForceAttackPreventionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2", - "isSubCollection": true - }, - "extractionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2", - "isSubCollection": true - }, - "characterSetReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2", - "isSubCollection": true - }, - "isModified": false, - "suggestionReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2", - "isSubCollection": true - }, - "sensitiveParameterReference": { - "link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2", - "isSubCollection": true - }, - "versionPolicyName": "/Common/fake_policy" -} diff --git a/test/units/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json b/test/units/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json deleted file mode 100644 index b4d6038ef8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_auth_remote_role_role_info_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:auth:remote-role:role-info:role-infostate", - "name": "/Common/ldap_group", - "fullPath": "/Common/ldap_group", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/auth/remote-role/role-info/~Common~ldap_group?ver=13.1.0.7", - "attribute": "memberOf=cn=ldap_group,cn=ldap.group,ou=ldap", - "console": "disable", - "deny": "enabled", - "lineOrder": 1, - "role": "firewallmanager", - "userPartition": "All", - "userPartitionReference": { - "link": "https://localhost/mgmt/tm/auth/partition/All?ver=13.1.0.7" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_auth_user_no_pass.json b/test/units/modules/network/f5/fixtures/load_auth_user_no_pass.json deleted file mode 100644 index 79a51a79dd..0000000000 --- a/test/units/modules/network/f5/fixtures/load_auth_user_no_pass.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:auth:user:userstate", - "name": "someuser", - "fullPath": "someuser", - "generation": 76, - "selfLink": "https://localhost/mgmt/tm/auth/user/someuser?ver=13.0.0", - "description": "someuser", - "encryptedPassword": "!!", - "partitionAccess": [ - { - "name": "Common", - "role": "guest", - "nameReference": { - "link": "https://localhost/mgmt/tm/auth/partition/Common?ver=13.0.0" - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_auth_user_with_pass.json b/test/units/modules/network/f5/fixtures/load_auth_user_with_pass.json deleted file mode 100644 index 8c8256c2ea..0000000000 --- a/test/units/modules/network/f5/fixtures/load_auth_user_with_pass.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:auth:user:userstate", - "name": "someuser", - "fullPath": "someuser", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/auth/user/someuser?ver=13.0.0", - "description": "someuser", - "encryptedPassword": "$6$PiA0g2.L$M02nqo3eVvj22PbEUONdzFQq4tXp930FsBB0sZ94OJTDruobY/BhyEN1rHfw2udVKKlGtom1rNiCP/3nIVfde1", - "shell": "bash", - "partitionAccess": [ - { - "name": "all-partitions", - "role": "admin", - "nameReference": { - "link": "https://localhost/mgmt/tm/auth/partition/all-partitions?ver=13.0.0" - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_generic_parser.json b/test/units/modules/network/f5/fixtures/load_generic_parser.json deleted file mode 100644 index c7bdc5fba9..0000000000 --- a/test/units/modules/network/f5/fixtures/load_generic_parser.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:protocol:protocolstate", - "name": "foobar", - "partition": "Common", - "fullPath": "/Common/foobar", - "generation": 534, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/protocol/~Common~foobar?ver=14.1.0.3", - "defaultsFrom": "/Common/genericmsg", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/protocol/~Common~genericmsg?ver=14.1.0.3" - }, - "disableParser": "no", - "maxEgressBuffer": 32768, - "maxMessageSize": 32768, - "noResponse": "no" -} diff --git a/test/units/modules/network/f5/fixtures/load_generic_peer.json b/test/units/modules/network/f5/fixtures/load_generic_peer.json deleted file mode 100644 index bda5b8e587..0000000000 --- a/test/units/modules/network/f5/fixtures/load_generic_peer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:peer:peerstate", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 177, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/peer/~Common~test?ver=14.1.0.3", - "autoInitialization": "disabled", - "autoInitializationInterval": 5000, - "connectionMode": "per-peer", - "description": "foobar", - "numberConnections": 1, - "pool": "/Common/example", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~example?ver=14.1.0.3" - }, - "ratio": 1, - "transportConfig": "/Common/test_tranport", - "transportConfigReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~test_tranport?ver=14.1.0.3" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_generic_route.json b/test/units/modules/network/f5/fixtures/load_generic_route.json deleted file mode 100644 index f8299f0294..0000000000 --- a/test/units/modules/network/f5/fixtures/load_generic_route.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:route:routestate", - "name": "some", - "partition": "Common", - "fullPath": "/Common/some", - "generation": 228, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/route/~Common~some?ver=14.1.0.3", - "destinationAddress": "annoying_user", - "peerSelectionMode": "sequential", - "sourceAddress": "99.99.99.99", - "peers": [ - "/Common/testy" - ], - "peersReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/peer/~Common~testy?ver=14.1.0.3" - } - ] - } diff --git a/test/units/modules/network/f5/fixtures/load_generic_router.json b/test/units/modules/network/f5/fixtures/load_generic_router.json deleted file mode 100644 index 45c6722244..0000000000 --- a/test/units/modules/network/f5/fixtures/load_generic_router.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:router:routerstate", - "name": "messagerouter", - "partition": "Common", - "fullPath": "/Common/messagerouter", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/router/~Common~messagerouter?ver=14.1.0.3", - "ignoreClientPort": "no", - "inheritedTrafficGroup": "true", - "iruleScopeMessage": "no", - "maxPayloadPendingBytes": 32768, - "maxPendingBytes": 23768, - "maxPendingMessages": 64, - "maxRetries": 1, - "mirror": "disabled", - "mirroredMessageSweeperInterval": 1000, - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=14.1.0.3" - }, - "useLocalConnection": "yes" -} diff --git a/test/units/modules/network/f5/fixtures/load_generic_transport_config.json b/test/units/modules/network/f5/fixtures/load_generic_transport_config.json deleted file mode 100644 index 15121910cc..0000000000 --- a/test/units/modules/network/f5/fixtures/load_generic_transport_config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "kind": "tm:ltm:message-routing:generic:transport-config:transport-configstate", - "name": "gen1", - "partition": "Common", - "fullPath": "/Common/gen1", - "generation": 643, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1?expandSubcollections=true&ver=14.1.0.3", - "ipProtocol": "tcp", - "sourceAddressTranslation": { - "pool": "/Common/test_snat", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/snatpool/~Common~test_snat?ver=14.1.0.3" - }, - "type": "snat" - }, - "sourcePort": 0, - "rules": [ - "/Common/test" - ], - "rulesReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/rule/~Common~test?ver=14.1.0.3" - } - ], - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles?ver=14.1.0.3", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:message-routing:generic:transport-config:profiles:profilesstate", - "name": "diametersession", - "partition": "Common", - "fullPath": "/Common/diametersession", - "generation": 626, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles/~Common~diametersession?ver=14.1.0.3", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/message-routing/diameter/profile/session/~Common~diametersession?ver=14.1.0.3" - } - }, - { - "kind": "tm:ltm:message-routing:generic:transport-config:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 626, - "selfLink": "https://localhost/mgmt/tm/ltm/message-routing/generic/transport-config/~Common~gen1/profiles/~Common~tcp?ver=14.1.0.3", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=14.1.0.3" - } - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_datacenter_default.json b/test/units/modules/network/f5/fixtures/load_gtm_datacenter_default.json deleted file mode 100644 index 9e1f3b8d03..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_datacenter_default.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:gtm:datacenter:datacenterstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 278, - "selfLink": "https://localhost/mgmt/tm/gtm/datacenter/~Common~asd?ver=12.1.2", - "enabled": true -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json b/test/units/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json deleted file mode 100644 index 8373ac8239..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_datacenter_disabled.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:gtm:datacenter:datacenterstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 303, - "selfLink": "https://localhost/mgmt/tm/gtm/datacenter/~Common~foo?ver=12.1.2", - "contact": "admin@root.local", - "description": "This is a foo description", - "disabled": true, - "location": "New York" -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json b/test/units/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json deleted file mode 100644 index 6803287627..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_global_settings_general_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:gtm:global-settings:general:generalstate", - "selfLink": "https://localhost/mgmt/tm/gtm/global-settings/general?ver=13.1.0.4", - "autoDiscovery": "yes", - "autoDiscoveryInterval": 30, - "automaticConfigurationSaveTimeout": 15, - "cacheLdnsServers": "yes", - "domainNameCheck": "allow-underscore", - "drainPersistentRequests": "yes", - "forwardStatus": "disabled", - "gtmSetsRecursion": "no", - "heartbeatInterval": 10, - "monitorDisabledObjects": "no", - "nethsmTimeout": 20, - "sendWildcardRrs": "disabled", - "staticPersistCidrIpv4": 32, - "staticPersistCidrIpv6": 128, - "synchronization": "no", - "synchronizationGroupName": "default", - "synchronizationTimeTolerance": 10, - "synchronizationTimeout": 180, - "synchronizeZoneFiles": "no", - "synchronizeZoneFilesTimeout": 300, - "virtualsDependOnServerState": "yes" -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_irules.json b/test/units/modules/network/f5/fixtures/load_gtm_irules.json deleted file mode 100644 index 7ca9da1bf7..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_irules.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "kind": "tm:gtm:rule:rulestate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 92, - "selfLink": "https://localhost/mgmt/tm/gtm/rule/~Common~asdf?ver=12.1.2", - "apiAnonymous": "when DNS_REQUEST {\n if { [IP::addr [IP::remote_addr] equals 10.254.254.0/24] } {\n cname test.affilate.example.com\n\n } elseif { [IP::addr [IP::remote_addr] equals 10.0.0.0/8] } {\n cname test.internal.example.com\n\n }\n #everything else will be handled by the default pools in the main WIP\n}" - }, - { - "kind": "tm:gtm:rule:rulestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 93, - "selfLink": "https://localhost/mgmt/tm/gtm/rule/~Common~foo?ver=12.1.2", - "apiAnonymous": "when LB_SELECTED {\n # Capture IP address chosen by WIP load balancing\n set wipHost [LB::server addr]\n}\n\nwhen LB_FAILED {\n set wipHost [LB::server addr]\n}" - } - ] diff --git a/test/units/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json b/test/units/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json deleted file mode 100644 index 4b0f8f7205..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_monitor_firepass_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:gtm:monitor:firepass:firepassstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/firepass/~Common~foo?ver=13.1.0.4", - "cipherlist": "HIGH:!ADH", - "concurrencyLimit": 95, - "defaultsFrom": "/Common/firepass_gtm", - "destination": "1.1.1.1:80", - "ignoreDownResponse": "enabled", - "interval": 30, - "maxLoadAverage": 12, - "password": "secret", - "probeTimeout": 5, - "timeout": 90, - "username": "gtmuser" -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_monitor_http_1.json b/test/units/modules/network/f5/fixtures/load_gtm_monitor_http_1.json deleted file mode 100644 index 98151e51fe..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_monitor_http_1.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:gtm:monitor:http:httpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/http/~Common~foo?ver=13.1.0.4", - "defaultsFrom": "/Common/http", - "description": "my description", - "destination": "3.3.3.3:8080", - "ignoreDownResponse": "disabled", - "interval": 30, - "password": "secret", - "probeTimeout": 5, - "recv": "the receive string", - "reverse": "enabled", - "send": "GET /", - "timeout": 120, - "transparent": "enabled", - "username": "user1" -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json b/test/units/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json deleted file mode 100644 index d0d90152c1..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_monitor_tcp_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:monitor:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/gtm/monitor/tcp/~Common~foo?ver=13.1.0.4", - "defaultsFrom": "/Common/tcp", - "destination": "1.1.1.1:80", - "ignoreDownResponse": "disabled", - "interval": 30, - "probeTimeout": 5, - "recv": "the receive string", - "reverse": "enabled", - "send": "the send string", - "timeout": 120, - "transparent": "enabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_collection.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_a_collection.json deleted file mode 100644 index 7ed5344503..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_collection.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:acollectionstate", - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a?expandSubcollections=true&ver=13.0.0", - "items": [ - { - "kind": "tm:gtm:pool:a:astate", - "name": "foo.pool", - "partition": "Common", - "fullPath": "/Common/foo.pool", - "generation": 216, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool?ver=13.0.0", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/members?ver=13.0.0", - "isSubcollection": true - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_default.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_a_default.json deleted file mode 100644 index f90a84b213..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_default.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 94, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~asdf?ver=12.1.2", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~asdf/members?ver=12.1.2", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json deleted file mode 100644 index 70388c9144..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_example_stats.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astats", - "generation": 216, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/stats?ver=13.0.0", - "entries": { - "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/~Common~foo.pool:A/stats": { - "nestedStats": { - "kind": "tm:gtm:pool:a:astats", - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo.pool/~Common~foo.pool:A/stats?ver=13.0.0", - "entries": { - "alternate": { - "value": 0 - }, - "dropped": { - "value": 0 - }, - "fallback": { - "value": 0 - }, - "tmName": { - "description": "/Common/foo.pool" - }, - "poolType": { - "description": "A" - }, - "preferred": { - "value": 0 - }, - "returnFromDns": { - "value": 0 - }, - "returnToDns": { - "value": 0 - }, - "status.availabilityState": { - "description": "offline" - }, - "status.enabledState": { - "description": "enabled" - }, - "status.statusReason": { - "description": "No enabled pool members available" - } - } - } - } - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json deleted file mode 100644 index 44ae64a665..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_member_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "foo_gtm_server:bar", - "partition": "Common", - "fullPath": "/Common/foo_gtm_server:bar", - "generation": 398, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo-pool/members/~Common~foo_gtm_server:bar?ver=13.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 1, - "monitor": "default", - "ratio": 1 -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json deleted file mode 100644 index ba2ac716f0..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_a_with_members_1.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "kind": "tm:gtm:pool:a:astate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 142, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo?expandSubcollections=true&ver=12.0.0", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIp": "any", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAnswersReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs1", - "partition": "Common", - "fullPath": "/Common/server1:vs1", - "generation": 141, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs1?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 0, - "monitor": "default", - "ratio": 1 - }, - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs2", - "partition": "Common", - "fullPath": "/Common/server1:vs2", - "generation": 142, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs1?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 1, - "monitor": "/Common/tcp ", - "ratio": 1 - }, - { - "kind": "tm:gtm:pool:a:members:membersstate", - "name": "server1:vs3", - "partition": "Common", - "fullPath": "/Common/server1:vs3", - "generation": 141, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/a/~Common~foo/members/~Common~server1:vs3?ver=12.0.0", - "enabled": true, - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "memberOrder": 2, - "monitor": "default", - "ratio": 1 - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_pool_untyped_default.json b/test/units/modules/network/f5/fixtures/load_gtm_pool_untyped_default.json deleted file mode 100644 index c4ecb1dd13..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_pool_untyped_default.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "kind": "tm:gtm:pool:poolstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 92, - "selfLink": "https://localhost/mgmt/tm/gtm/pool/~Common~asdf?ver=11.6.1", - "alternateMode": "round-robin", - "dynamicRatio": "disabled", - "enabled": true, - "fallbackIpv4": "any", - "fallbackIpv6": "any6", - "fallbackMode": "return-to-dns", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "loadBalancingMode": "round-robin", - "manualResume": "disabled", - "maxAddressReturned": 1, - "monitor": "default", - "qosHitRatio": 5, - "qosHops": 0, - "qosKilobytesSecond": 3, - "qosLcs": 30, - "qosPacketRate": 1, - "qosRtt": 50, - "qosTopology": 0, - "qosVsCapacity": 0, - "qosVsScore": 0, - "ttl": 30, - "verifyMemberAvailability": "enabled", - "membersReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/~Common~asdf/members?ver=11.6.1", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_server_1.json b/test/units/modules/network/f5/fixtures/load_gtm_server_1.json deleted file mode 100644 index 4a14d9f27e..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_server_1.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "kind": "tm:gtm:server:serverstate", - "name": "baz", - "partition": "Common", - "fullPath": "/Common/baz", - "generation": 270, - "selfLink": "https://localhost/mgmt/tm/gtm/server/~Common~baz?ver=13.0.0", - "datacenter": "/Common/foo", - "datacenterReference": { - "link": "https://localhost/mgmt/tm/gtm/datacenter/~Common~foo?ver=13.0.0" - }, - "enabled": true, - "exposeRouteDomains": "no", - "iqAllowPath": "yes", - "iqAllowServiceCheck": "yes", - "iqAllowSnmp": "yes", - "limitCpuUsage": 0, - "limitCpuUsageStatus": "disabled", - "limitMaxBps": 0, - "limitMaxBpsStatus": "disabled", - "limitMaxConnections": 0, - "limitMaxConnectionsStatus": "disabled", - "limitMaxPps": 0, - "limitMaxPpsStatus": "disabled", - "limitMemAvail": 0, - "limitMemAvailStatus": "disabled", - "linkDiscovery": "disabled", - "monitor": "/Common/bigip ", - "proberFallback": "inherit", - "proberPreference": "inherit", - "product": "bigip", - "virtualServerDiscovery": "disabled", - "addresses": [ - { - "name": "1.1.1.1", - "deviceName": "bigip1", - "translation": "10.10.10.10" - }, - { - "name": "2.2.2.2", - "deviceName": "bigip2", - "translation": "20.20.20.20" - }, - { - "name": "3.3.3.3", - "deviceName": "bigip2", - "translation": "20.20.20.20" - }, - { - "name": "4.4.4.4", - "deviceName": "bigip3", - "translation": "none" - }, - { - "name": "5.5.5.5", - "deviceName": "bigip3", - "translation": "none" - } - ], - "devicesReference": { - "link": "https://localhost/mgmt/tm/gtm/server/~Common~baz/devices?ver=13.0.0", - "isSubcollection": true - }, - "virtualServersReference": { - "link": "https://localhost/mgmt/tm/gtm/server/~Common~baz/virtual-servers?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_server_virtual_2.json b/test/units/modules/network/f5/fixtures/load_gtm_server_virtual_2.json deleted file mode 100644 index 336c391b1b..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_server_virtual_2.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:gtm:server:virtual-servers:virtual-serversstate", - "name": "vs2", - "fullPath": "vs2", - "generation": 129, - "selfLink": "https://localhost/mgmt/tm/gtm/server/~Common~server1/virtual-servers/vs2?ver=13.0.0", - "destination": "6.6.6.6:8080", - "enabled": true, - "limitMaxBps": 100, - "limitMaxBpsStatus": "enabled", - "limitMaxConnections": 300, - "limitMaxConnectionsStatus": "enabled", - "limitMaxPps": 200, - "limitMaxPpsStatus": "enabled", - "monitor": "/Common/gtp ", - "translationAddress": "none", - "translationPort": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_gtm_wide_ip_with_pools.json b/test/units/modules/network/f5/fixtures/load_gtm_wide_ip_with_pools.json deleted file mode 100644 index a7be079cdd..0000000000 --- a/test/units/modules/network/f5/fixtures/load_gtm_wide_ip_with_pools.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "kind": "tm:gtm:wideip:a:astate", - "name": "foo.bar.com", - "partition": "Common", - "fullPath": "/Common/foo.bar.com", - "generation": 135, - "selfLink": "https://localhost/mgmt/tm/gtm/wideip/a/~Common~foo.bar.com?ver=13.0.0", - "enabled": true, - "failureRcode": "noerror", - "failureRcodeResponse": "disabled", - "failureRcodeTtl": 0, - "lastResortPool": "", - "minimalResponse": "enabled", - "persistCidrIpv4": 32, - "persistCidrIpv6": 128, - "persistence": "disabled", - "poolLbMode": "round-robin", - "ttlPersistence": 3600, - "pools": [ - { - "name": "baz", - "partition": "Common", - "order": 0, - "ratio": 10, - "nameReference": { - "link": "https://localhost/mgmt/tm/gtm/pool/a/~Common~baz?ver=13.0.0" - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_imish_output_1.json b/test/units/modules/network/f5/fixtures/load_imish_output_1.json deleted file mode 100644 index a2b72a2a7a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_imish_output_1.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "kind": "tm:util:bash:runstate", - "command": "run", - "utilCmdArgs": "-c 'imish -r 0 -e \"show running-config\"'", - "commandResult": "!\nno service password-encryption\n!\nline con 0\n login\nline vty 0 39\n login\n!\nend\n\n" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json b/test/units/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json deleted file mode 100644 index 5a0e9b75c4..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_dns_cache_resolver_1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "kind": "tm:ltm:dns:cache:resolver:resolverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 666, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/cache/resolver/~Common~foo?ver=13.1.0.7", - "allowedQueryTime": 200, - "answerDefaultZones": "no", - "maxConcurrentQueries": 1024, - "maxConcurrentTcp": 20, - "maxConcurrentUdp": 8192, - "msgCacheSize": 1048576, - "nameserverCacheCount": 16536, - "randomizeQueryNameCase": "yes", - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.7" - }, - "rrsetCacheSize": 10485760, - "rrsetRotate": "none", - "unwantedQueryReplyThreshold": 0, - "useIpv4": "yes", - "useIpv6": "yes", - "useTcp": "yes", - "useUdp": "yes", - "forwardZones": [ - { - "name": "foo1", - "nameservers": [ - { - "name": "1.1.1.1:53" - }, - { - "name": "2.2.2.2:53" - } - ] - }, - { - "name": "foo2" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json b/test/units/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json deleted file mode 100644 index e012103b00..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_dns_nameserver_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:ltm:dns:nameserver:nameserverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 8076, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~foo?ver=13.1.0.7", - "address": "127.0.0.1", - "port": 53, - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.7" - }, - "tsigKey": "/Common/key1", - "tsigKeyReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/tsig-key/~Common~key1?ver=13.1.0.7" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_dns_zone_1.json b/test/units/modules/network/f5/fixtures/load_ltm_dns_zone_1.json deleted file mode 100644 index 686de99bc1..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_dns_zone_1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:ltm:dns:zone:zonestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 812, - "selfLink": "https://localhost/mgmt/tm/ltm/dns/zone/~Common~foo?ver=13.1.0.8", - "dnsExpressAllowNotify": [ - "1.1.1.1" - ], - "dnsExpressEnabled": "yes", - "dnsExpressNotifyAction": "consume", - "dnsExpressNotifyTsigVerify": "yes", - "dnsExpressServer": "/Common/asd", - "dnsExpressServerReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~asd?ver=13.1.0.8" - }, - "responsePolicy": "no", - "serverTsigKey": "/Common/asd", - "serverTsigKeyReference": { - "link": "https://localhost/mgmt/tm/ltm/dns/tsig-key/~Common~asd?ver=13.1.0.8" - }, - "transferClients": [ - "/Common/asd" - ], - "transferClientsReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/dns/nameserver/~Common~asd?ver=13.1.0.8" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json b/test/units/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json deleted file mode 100644 index 2667968c55..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_fastl4_profile_1.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "kind": "tm:ltm:profile:fastl4:fastl4state", - "name": "fastL4", - "partition": "Common", - "fullPath": "/Common/fastL4", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/fastl4/~Common~fastL4?ver=13.1.0.8", - "appService": "none", - "clientTimeout": 30, - "defaultsFrom": "none", - "description": "none", - "explicitFlowMigration": "disabled", - "hardwareSynCookie": "disabled", - "idleTimeout": "300", - "ipDfMode": "preserve", - "ipTosToClient": "pass-through", - "ipTosToServer": "pass-through", - "ipTtlMode": "decrement", - "ipTtlV4": 255, - "ipTtlV6": 64, - "keepAliveInterval": "disabled", - "lateBinding": "disabled", - "linkQosToClient": "pass-through", - "linkQosToServer": "pass-through", - "looseClose": "disabled", - "looseInitialization": "disabled", - "mssOverride": 0, - "priorityToClient": "pass-through", - "priorityToServer": "pass-through", - "pvaAcceleration": "full", - "pvaDynamicClientPackets": 1, - "pvaDynamicServerPackets": 0, - "pvaFlowAging": "enabled", - "pvaFlowEvict": "enabled", - "pvaOffloadDynamic": "enabled", - "pvaOffloadState": "embryonic", - "reassembleFragments": "disabled", - "receiveWindowSize": 0, - "resetOnTimeout": "enabled", - "rttFromClient": "disabled", - "rttFromServer": "disabled", - "serverSack": "disabled", - "serverTimestamp": "disabled", - "softwareSynCookie": "disabled", - "synCookieEnable": "enabled", - "synCookieMss": 0, - "synCookieWhitelist": "disabled", - "tcpCloseTimeout": "5", - "tcpGenerateIsn": "disabled", - "tcpHandshakeTimeout": "5", - "tcpStripSack": "disabled", - "tcpTimeWaitTimeout": 0, - "tcpTimestampMode": "preserve", - "tcpWscaleMode": "preserve", - "timeoutRecovery": "disconnect" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_http2_profile.json b/test/units/modules/network/f5/fixtures/load_ltm_http2_profile.json deleted file mode 100644 index 3d8c9bce3c..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_http2_profile.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:profile:http2:http2state", - "name": "test", - "partition": "Common", - "fullPath": "/Common/test", - "generation": 5852, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http2/~Common~test?ver=13.1.0.8", - "activationModes": [ - "always" - ], - "appService": "none", - "concurrentStreamsPerConnection": 10, - "connectionIdleTimeout": 300, - "defaultsFrom": "/Common/http2", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http2/~Common~http2?ver=13.1.0.8" - }, - "description": "this is awful documentation", - "enforceTlsRequirements": "enabled", - "frameSize": 2048, - "headerTableSize": 4096, - "includeContentLength": "disabled", - "insertHeader": "disabled", - "insertHeaderName": "X-HTTP2", - "receiveWindow": 32, - "writeSize": 16384 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_http_profile_1.json b/test/units/modules/network/f5/fixtures/load_ltm_http_profile_1.json deleted file mode 100644 index 0d8f83c706..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_http_profile_1.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "kind": "tm:ltm:profile:http:httpstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 1405, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=13.1.0.6", - "acceptXff": "disabled", - "appService": "none", - "basicAuthRealm": "none", - "defaultsFrom": "none", - "description": "none", - "encryptCookies": [], - "enforcement": { - "excessClientHeaders": "reject", - "excessServerHeaders": "reject", - "knownMethods": [ - "CONNECT", - "DELETE", - "GET", - "HEAD", - "LOCK", - "OPTIONS", - "POST", - "PROPFIND", - "PUT", - "TRACE", - "UNLOCK" - ], - "maxHeaderCount": 64, - "maxHeaderSize": 32768, - "maxRequests": 0, - "oversizeClientHeaders": "reject", - "oversizeServerHeaders": "reject", - "pipeline": "allow", - "truncatedRedirects": "disabled", - "unknownMethod": "allow" - }, - "explicitProxy": { - "badRequestMessage": "none", - "badResponseMessage": "none", - "connectErrorMessage": "none", - "defaultConnectHandling": "deny", - "dnsErrorMessage": "none", - "dnsResolver": "none", - "hostNames": [], - "ipv6": "no", - "routeDomain": "none", - "tunnelName": "none" - }, - "fallbackHost": "none", - "fallbackStatusCodes": [], - "headerErase": "none", - "headerInsert": "none", - "hsts": { - "includeSubdomains": "enabled", - "maximumAge": 16070400, - "mode": "disabled", - "preload": "disabled" - }, - "insertXforwardedFor": "disabled", - "lwsSeparator": "none", - "lwsWidth": 80, - "oneconnectTransformations": "enabled", - "proxyType": "reverse", - "redirectRewrite": "none", - "requestChunking": "preserve", - "responseChunking": "selective", - "responseHeadersPermitted": [], - "serverAgentName": "BigIP", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "viaHostName": "none", - "viaRequest": "preserve", - "viaResponse": "preserve", - "xffAlternativeNames": [] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_irules.json b/test/units/modules/network/f5/fixtures/load_ltm_irules.json deleted file mode 100644 index b3e026a120..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_irules.json +++ /dev/null @@ -1,179 +0,0 @@ -[ - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_OA_BasicAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_OA_BasicAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_OA_BasicAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # Global variables\n # static::POLICY_RESULT_CACHE_AUTHFAILED\n # Administrator can set this into 1, when there is a necessity to cache failed policy result.\n # This may be needed to avoid account locked caused by the Active Sync device when it uses wrong passwords.\n # One possible scenario, is that when the user changes the password in Active Directory, but missed to changed in their devices.\n # Responses\n # On denied result\n # Administrator can customize the responses to the device depends on more complex conditions when necessary.\n # In those cases, please use ACCESS::respond command.\n # The following is the syntax of ACCESS::respond\n # ACCESS::respond <status code> [ content <body> ] [ <Additional Header> <Additional Header value>* ]\n # e.g. ACCESS::respond 401 content \"Error: Denied\" WWW-Authenticate \"basic realm=\\\"f5.com\\\"\" Connection close\n when RULE_INIT {\n # Please set the following global variables for customized responses.\n set static::actsync_401_http_body \"<html><title>Authentication Failured</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n # Second Virtual Server name for 401 NTLM responder\n set static::ACCESS_SECOND_VIRTUAL_NAME \"_ACCESS_401_NTLM_responder_HTTPS\"\n\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_AUTHFAILED \"policy_authfailed\"\n # The request with huge content length can not be used for starting ACCESS session.\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session. The following value is used for Outlook Anywhere.\n set static::OA_MAGIC_CONTENT_LEN 1073741824\n\n # Similar with OutlookAnywhere case, ACCESS can not use the request which is\n # larger then following size. This becomes an issue with application that using\n # Exchange Web Service as its main protocol such as Mac OS X applications\n # (e.g. Mail app, Microsoft Entourage, etc)\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session.\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n\n # Set it into 1 if the backend EWS handler accepts HTTP Basic Authentication.\n set static::EWS_BKEND_BASIC_AUTH 0\n # The following variable controls the polling mechanism.\n set static::POLICY_RESULT_POLL_INTERVAL 250\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 600\n\n # Set this global variable to 1 for caching authentication failure\n # Useful for avoiding account locked out.\n set static::POLICY_RESULT_CACHE_AUTHFAILED 0\n\n # set this global variable to set alternative timeout for particular session\n set static::POLICY_ALT_INACTIVITY_TIMEOUT 120\n\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/\"\n\n log -noname accesscontrol.local1.debug \"01490000:7: EWS_BKEND_BASIC_AUTH = $static::EWS_BKEND_BASIC_AUTH\"\n }\n when ACCESS_ACL_ALLOWED {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX [HTTP::method] [HTTP::uri] [HTTP::header Content-Length]\"\n\n # MSFT Exchange's EWS request handler always requesting NTLM even the connection has been\n # already authenticated if there is a HTTP Basic Auth in the request.\n if { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n if { $static::EWS_BKEND_BASIC_AUTH == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing HTTP Basic Authorization header\"\n HTTP::header remove Authorization\n }\n }\n }\n\n when HTTP_REQUEST {\n set http_path [ string tolower [HTTP::path] ]\n set f_clientless_mode 0\n set f_alt_inactivity_timeout 0\n set f_rpc_over_http 0\n set f_exchange_web_service 0\n set f_auto_discover 0\n set f_activesync 0\n set f_offline_address_book 0\n set f_availability_service 0\n\n # Here put appropriate pool when necessary.\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n # Supports for RPC over HTTP. (Outlook Anywhere)\n set f_rpc_over_http 1\n }\n \"/autodiscover/autodiscover.xml\" {\n # Supports for Auto Discover protocol.\n set f_auto_discover 1\n # This request does not require long inactivity timeout.\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/microsoft-server-activesync\" {\n # Supports for ActiveSync\n set f_activesync 1\n }\n \"/oab/*\" {\n # Supports for Offline Address Book\n set f_offline_address_book 1\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/ews/*\" {\n # Support for Exchange Web Service\n # Outlook's Availability Service borrows this protocol.\n set f_exchange_web_service 1\n }\n \"/as/*\" {\n # Support for Availability Service.\n # do nothing for now. (Untested)\n set f_availability_service 1\n }\n default {\n return\n }\n }\n\n set f_reqside_set_sess_id 0\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n set auth_info_b64enc \"\"\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } {\n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Restrict-to-single-client-ip: $PROFILE_RESTRICT_SINGLE_IP\"\n\n # First, do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n set http_hdr_auth [HTTP::header Authorization]\n if { [ string match -nocase {basic *} $http_hdr_auth ] != 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Not basic authentication. Ignore received auth header\"\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX No/Empty Auth header\"\n # clean up the cookie\n if { $MRHSession_cookie == \"\" } {\n HTTP::respond 401 content $static::actsync_401_http_body WWW-Authenticate \"Basic realm=\\\"[HTTP::header Host]\\\"\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n # Do nothing if we have a valid MRHSession cookie.\n }\n\n set f_release_request 0\n # Optimization for clients which support cookie\n if { $MRHSession_cookie != \"\" } {\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n set f_release_request 1\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n set f_release_request 1\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n if { $f_release_request == 0 } {\n set apm_username [string tolower [HTTP::username]]\n set apm_password [HTTP::password]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password\"] H* user_hash\n }\n else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n set user_key \"$apm_username.$user_hash\"\n unset user_hash\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP Hdr Auth: $http_hdr_auth\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX apm_username: $apm_username\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key = $user_key\"\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n set f_release_request 1\n }\n }\n }\n\n if { $http_content_len == $static::OA_MAGIC_CONTENT_LEN } {\n set f_oa_magic_content_len 1\n }\n\n set f_sleep_here 0\n set retry 1\n\n while { $f_release_request == 0 && $retry <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$retry for $http_method $http_uri $http_content_len\"\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Reading $user_key from table $static::ACCESS_USERKEY_TBLNAME\"\n\n set apm_cookie [table lookup -subtable $static::ACCESS_USERKEY_TBLNAME -notouch $user_key]\n if { $apm_cookie != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Verifying table cookie = $apm_cookie\"\n\n # Accessing SessionDB is not that cheap. Here we are trying to check known value.\n if { $apm_cookie == \"policy_authfailed\" || $apm_cookie == \"policy_inprogress\"} {\n # Do nothing\n } elseif { ! [ ACCESS::session exists $apm_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table cookie = $apm_cookie is out-of-sync\"\n # Table value is out of sync. Ignores it.\n set apm_cookie \"\"\n }\n }\n\n switch $apm_cookie {\n \"\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n # Outlook Anywhere request comes in pair. The one with 1G payload is not usable\n # for creating new session since 1G content-length is intended for client to upload\n # the data when needed.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for request with magic content-len\"\n set f_sleep_here 1\n } elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 && $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Here we are getting large EWS request, which can't be used for starting new session\n # in clientless-mode. Have it here waiting for next smaller one.\n # We are holding the request here in HTTP filter, and HTTP filter automatically\n # clamping down the TCP window when necessary.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for big EWS request\"\n set f_sleep_here 1\n } else {\n set apm_cookie \"policy_inprogress\"\n set f_reqside_set_sess_id 1\n set f_release_request 1\n }\n }\n \"policy_authfailed\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Found $user_key with AUTH_FAILED\"\n HTTP::respond 401 content $static::actsync_401_http_body\n set f_release_request 1\n }\n \"policy_inprogress\" {\n if { [ info exists f_activesync ] && ($f_activesync == 1) } {\n # For ActiveSync requests, aggressively starts new session.\n set f_reqside_set_sess_id 1\n set f_release_request 1\n } else {\n set f_sleep_here 1\n }\n }\n default {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Using MRHSession = $apm_cookie\"\n HTTP::header insert Cookie \"MRHSession=$apm_cookie\"\n set f_release_request 1\n }\n }\n\n if { $f_reqside_set_sess_id == 1 } {\n set f_reqside_set_sess_id 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key=$apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_POLICY_TIMEOUT\"\n set f_clientless_mode 1\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_POLICY_TIMEOUT\n }\n\n if { $f_sleep_here == 1 } {\n set f_sleep_here 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n after $static::POLICY_RESULT_POLL_INTERVAL\n }\n\n incr retry\n }\n\n if { ($f_release_request == 0) && ($retry >= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n\n if { [ info exists f_activesync ] && $f_activesync == 1 } {\n ACCESS::session data set \"session.user.microsoft-activesync\" 1\n }\n elseif { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n elseif { [ info exists f_availability_service ] && $f_availability_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-availabilityservice\" 1\n }\n elseif { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n ACCESS::session data set \"session.user.microsoft-rpcoverhttp\" 1\n }\n elseif { [ info exists f_offline_address_book ] && $f_offline_address_book == 1 } {\n ACCESS::session data set \"session.user.microsoft-offlineaddressbook\" 1\n }\n elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-exchangewebservice\" 1\n }\n }\n if { [ info exists f_alt_inactivity_timeout ] && $f_alt_inactivity_timeout == 1 } {\n ACCESS::session data set \"session.inactivity_timeout\" $static::POLICY_ALT_INACTIVITY_TIMEOUT\n }\n }\n\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n set inactivity_timeout [ACCESS::session data get \"session.inactivity_timeout\"]\n set max_sess_timeout [ACCESS::session data get \"session.max_session_timeout\"]\n if { $max_sess_timeout == \"\" } {\n set max_sess_timeout $PROFILE_MAX_SESS_TIMEOUT\n }\n\n switch $policy_result {\n \"allow\" {\n # We depends on this table record self-cleanup capability in order to\n # indirectly sync with session DB.\n set user_key_value $sid\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key => $sid $inactivity_timeout $max_sess_timeout\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key_value = $user_key_value\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n }\n \"deny\" {\n # When necessary the admin here can check appropriate session variable\n # and decide what response more appropriate then this default response.\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n if { $static::POLICY_RESULT_CACHE_AUTHFAILED == 1 } {\n set user_key_value $static::POLICY_AUTHFAILED\n } else {\n set f_delete_session 1\n }\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection Close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $user_key_value $inactivity_timeout $max_sess_timeout in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $user_key_value $inactivity_timeout $max_sess_timeout\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Deleting $user_key in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature CZnUb3niz9wZPWvOmjDB0Dy4ixqjBEhIZrAVGt8VYe7+wZkhcBUFTADz3S1y5uomVwhRkGL20PLH7tfanDlpr3+IppgAGQlp98sPUl5ndEoWA4Rr90QiRGNRl/V7jWK58SOdJCQOirnutVMoeYjBWLwuprXGts08PO0WML5s0xJNOY7WPuGNeG+7Ht2pIB0vu80CgnCNGZJGZH0QR3kMVOx3yUN0ro5bAOmQ/XWel4qkj0F5DN9ufvsmKtTvb+Lc3y+5PHGbbFAQIrZ7lntZUJl/F8e/d26HE3spmZzQpPzi16qYWaMOxbvT6oedxpyhwbmJLiRNGyZmnT6kHj93FA==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_OA_NtlmAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_OA_NtlmAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_OA_NtlmAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_FAILED \"policy_failed\"\n set static::POLICY_SUCCEED \"policy_succeed\"\n set static::POLICY_DONE_WAIT_SEC 5\n\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n set static::POLICY_RESULT_POLL_INTERVAL 100\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 100\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n set static::USE_NTLM_AUTH 0\n set static::USE_BASIC_AUTH 1\n set static::USE_NTLM_BASIC_AUTH 2\n\n set static::URL_DEFAULT 0\n set static::URL_RPC_OVER_HTTP 1\n set static::URL_AUTODISCOVER 2\n set static::URL_ACTIVE_SYNC 3\n set static::URL_OFFLINEADDRESSBOOK 4\n set static::URL_EXCHANGEWEBSERVICE 5\n\n set static::RECVD_AUTH_NONE 0\n set static::RECVD_AUTH_NTLM 1\n set static::RECVD_AUTH_BASIC 2\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; \\\n expires=Thu, 01-Jan-1970 00:00:01 GMT;\\\n path=/\"\n\n }\n\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set url_path $static::URL_DEFAULT\n set use_auth $static::USE_NTLM_AUTH\n set f_disable_sso 0\n\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n set url_path $static::URL_RPC_OVER_HTTP\n }\n \"/autodiscover/autodiscover.xml\" {\n set url_path $static::URL_ACTIVE_SYNC\n # Need to support both NTLM and Basic authentication for this URL\n set use_auth $static::USE_NTLM_BASIC_AUTH\n }\n \"/microsoft-server-activesync*\" {\n set url_path $static::URL_ACTIVE_SYNC\n # Use only Basic authentication for this URL\n set use_auth $static::USE_BASIC_AUTH\n set f_disable_sso 1\n }\n \"/oab*\" {\n set url_path $static::URL_OFFLINEADDRESSBOOK\n }\n \"/ews*\" {\n set url_path $static::URL_EXCHANGEWEBSERVICE\n }\n default {\n ECA::disable\n return\n }\n }\n\n if { ! [ info exists f_ntlm_auth_succeed ] } {\n set f_ntlm_auth_succeed 0\n }\n if { ! [ info exists sid_cache ] } {\n set sid_cache \"\"\n }\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } { \n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n\n if { ! [ info exists ECA_METADATA_ARG ] } {\n # Generating argument for ECA::metadata\n # The NTLM configuration name is derived from assigned virtual name with the algorithm as follows:\n # <virtual-fullpath> ::= <folder-path>\"/\"<virtual-basename> as \"/\" is the last \"/\" char.\n # <config-fullpath> ::= <folder-path>\"/\" \"exch_ntlm\" \"_\" <virtual-basename>\n # e.g. Let us say the virtual name is \"/prod/exch/vs1\", The folder path is \"/prod/exch/\",\n # then object name will be \"/prod/exch/exch_ntlm_vs1\".\n set vs_name [virtual name]\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX virtual: $vs_name\"\n set slash_index [ string last / $vs_name ]\n if { $slash_index == -1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Error: the virtual name does not contain folder information\"\n ACCESS::disable\n TCP::close\n return\n }\n set ECA_METADATA_ARG \"select_ntlm:\"\n append ECA_METADATA_ARG [ string range $vs_name 0 $slash_index ]\n append ECA_METADATA_ARG \"exch_ntlm_\"\n append ECA_METADATA_ARG [ string range $vs_name [ expr { $slash_index + 1 } ] end ]\n unset slash_index\n unset vs_name\n }\n\n if { $use_auth == $static::USE_NTLM_AUTH } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Enable ECA: $ECA_METADATA_ARG\"\n ECA::enable\n ECA::select $ECA_METADATA_ARG\n return\n } else {\n set recvd_auth $static::RECVD_AUTH_NONE\n set http_hdr_auth [HTTP::header Authorization]\n set auth_data [split $http_hdr_auth \" \"]\n if { $http_hdr_auth != \"\" } {\n if { [ llength $auth_data ] == 2 } {\n set auth_scheme [ lindex $auth_data 0]\n if { [string equal -nocase $auth_scheme \"ntlm\" ] == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Recv'd HTTP NTLM Authentication\"\n set recvd_auth $static::RECVD_AUTH_NTLM\n } elseif { [ string equal -nocase [ lindex $auth_data 0] \"basic\" ] == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Recv'd HTTP Basic Authentication\"\n set recvd_auth $static::RECVD_AUTH_BASIC\n set user [string tolower [HTTP::username]]\n set password [HTTP::password]\n }\n }\n }\n if { $use_auth == $static::USE_BASIC_AUTH } {\n if { $recvd_auth == $static::RECVD_AUTH_BASIC } {\n # Defer the process until later\n } else {\n HTTP::respond 401 -version 1.1 noserver WWW-Authenticate \"Basic realm=\\\"$http_hdr_host\\\"\" \\\n Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n } elseif { $use_auth == $static::USE_NTLM_BASIC_AUTH } {\n if { ($recvd_auth == $static::RECVD_AUTH_NTLM) || ($f_ntlm_auth_succeed == 1) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Enable ECA: $ECA_METADATA_ARG\"\n ECA::enable\n ECA::select $ECA_METADATA_ARG\n return\n } elseif { $recvd_auth == $static::RECVD_AUTH_BASIC } {\n # Defer the process until later\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Request Authorization: NTLM + Basic\"\n HTTP::respond 401 -version 1.1 noserver WWW-Authenticate \"Basic realm=\\\"$http_hdr_host\\\"\" \\\n WWW-Authenticate \"NTLM\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n return\n }\n }\n\n # Disable NTLM auth\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Disable ECA\"\n ECA::disable\n # Disable KCD sso\n set f_disable_sso 1\n\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Release the request\"\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched. Release the request\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n\n set user_key {}\n if { $PROFILE_RESTRICT_SINGLE_IP == 1 } {\n append user_key $src_ip\n }\n append user_key $password\n binary scan [md5 $user_key ] H* user_key\n set user_key \"$user.$user_key\"\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n HTTP::cookie remove MRHSession \n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n return\n }\n }\n\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $user\n HTTP::header insert \"password\" $password\n return\n }\n }\n\n when ECA_REQUEST_ALLOWED {\n set f_ntlm_auth_succeed 1\n\n if { $MRHSession_cookie == \"\" } {\n # Retrieve from SID cache\n set MRHSession_cookie $sid_cache\n HTTP::cookie insert name MRHSession value $sid_cache\n }\n\n if { $MRHSession_cookie != \"\" } {\n # Destroy session ID cache. This client should not need session ID cache \n if { ($sid_cache != \"\") && ($sid_cache != $MRHSession_cookie) } {\n set sid_cache \"\"\n }\n if { [ ACCESS::session exists -state_allow $MRHSession_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Release the request\"\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched. Release the request\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n }\n\n set MRHSession \"\"\n set sid_cache \"\"\n HTTP::cookie remove MRHSession\n\n # Build user_key\n set user_key {}\n append user_key [string tolower [ECA::username]] \"@\" [ string tolower [ECA::domainname] ]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n append user_key \":\" $src_ip\n }\n append user_key \":\" [ECA::client_machine_name]\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n set sid_cache $MRHSession_cookie\n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX APM Cookie found: $sid_cache\"\n return\n }\n }\n unset apm_cookie_list\n\n set try 1\n set start_policy_str $src_ip\n append start_policy_str [TCP::client_port]\n\n while { $try <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$try for $http_method $http_uri $http_content_len\"\n\n if { $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Wait at below\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX EXEC: table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n set policy_status [table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT]\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX DONE: table set -notouch -subtable $static::ACCESS_USERKEY_TBLNAME -excl $user_key $start_policy_str $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n if { $policy_status == $start_policy_str } {\n # ACCESS Policy has not started. Start one\n HTTP::header insert \"clientless-mode\" 1\n break\n } elseif { $policy_status == $static::POLICY_SUCCEED } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table is out-of-sync retry\"\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n continue\n } elseif { $policy_status == $static::POLICY_FAILED } {\n ACCESS::disable\n TCP::close\n return\n }\n # Wait at below\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n # Touch the entry table\n table lookup -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n after $static::POLICY_RESULT_POLL_INTERVAL\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set MRHSession_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $MRHSession_cookie != \"\" } {\n set sid_cache $MRHSession_cookie\n HTTP::cookie insert name MRHSession value $MRHSession_cookie\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX APM Cookie found: $sid_cache\"\n return\n }\n }\n\n incr try\n }\n\n if { $try > $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [ expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n\n unset try\n unset start_policy_str\n }\n\n when ECA_REQUEST_DENIED {\n set f_ntlm_auth_succeed 0\n }\n\n when HTTP_RESPONSE_RELEASE {\n if { ! [info exists user_key] } {\n return\n }\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: status: [HTTP::status]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: Server: [HTTP::header Server]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: Content-Length: [HTTP::header Content-Length]\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP response: WWW-Authenticate: [HTTP::header WWW-Authenticate]\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n }\n }\n\n when ACCESS_ACL_ALLOWED {\n if { [ info exists f_disable_sso ] && $f_disable_sso == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Disable WEBSSO\"\n WEBSSO::disable\n }\n }\n\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n switch $policy_result {\n \"allow\" {\n set user_key_value $sid\n set sid_cache $user_key_value\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n\n }\n \"deny\" {\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection Close\n set f_delete_session 1\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection Close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n\n if { $f_ntlm_auth_succeed == 1 } {\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $static::POLICY_SUCCEED\"\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $static::POLICY_SUCCEED\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $static::POLICY_FAILED $static::POLICY_DONE_WAIT_SEC $static::POLICY_DONE_WAIT_SEC_in table $static::ACCESS_USERKEY_TBLNAME\"\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $static::POLICY_FAILED $static::POLICY_DONE_WAIT_SEC $static::POLICY_DONE_WAIT_SEC\n }\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature d/SlmwsO4YeDlh3eJpLqam9ytq0/EkWnAce1XTQ5bxOyla0x/VHjkr9dvoo3awaxp7lEjAenIgwGpS2jL5R1hq48WGZN2nu9LDKVjTosrq7j1MHbeKiIW8yXc3IEUtbbkhkAGNnMmfDYMD8Vg7l+iBx6B/WvRTZLr+tmppFf0BIr2Z7FWWU6c9OVl8YH1VuqqFX/lKICn2EXDhebRDRVvuXobLvbjZQxj+tqdUU2vuLzXYot/RUgClXHrg6Z2ZC6/WuAq4pp/XA2kvzWotQiY9gEceQdMC7/BxPSR8xo4VPNqkFkEPjh5hehZP0tFONTZaMaH1klVg4QbvHH5MRiBQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_helper", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_helper", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_helper?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # The purpose of this iRule is for help the main virtual for the timing of the HTTP request retry\n # during the SSO process for OutlookAnywhere protocol request which has a Content-Length value of 1GB.\n\n when HTTP_REQUEST {\n # Waiting for the first chunk of data.\n HTTP::collect 1\n }\n\n when HTTP_REQUEST_DATA {\n # Respond 401 and close the connection once we received the data.\n HTTP::respond 401 WWW-Authenticate NTLM Connection close\n }\ndefinition-signature fnJWcC75FIDV4savxGjyZ5sTdRTen+3mItejhseH06qn+qBXjOl/j7wYRSLDv1IcFezF8BunbDftMHXrW7QRuPuxhjMIc4vaALE2CCGkO0xcs258F+nkPeeJKoR5mTHY/E5BWpOAISinUBUSA3/nUm8blXkMwVg/Q95360jcCOoi6csgJa97OSKIF9h9OQCylh1qGBsDRHEXCR3ycw5Eb4T2QQSdBn09vr8Hgdpi/9fUER97nzJe8T/RuoG+nQ7bc8F9yzG6nFa/CQtRYDybDrcNgllCfVloXZAHZS3dCpq6FnS/FaEWfSIujmV+lXkxY23Xz9Wf6i1h/feW9fEUiQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_ExchangeSupport_main", - "partition": "Common", - "fullPath": "/Common/_sys_APM_ExchangeSupport_main", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_ExchangeSupport_main?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \n # Global variables\n # static::POLICY_RESULT_CACHE_AUTHFAILED\n # Administrator can set this into 1, when there is a necessity to cache failed policy result.\n # This may be needed to avoid account locked caused by the Active Sync device when it uses wrong passwords.\n # One possible scenario, is that when the user changes the password in Active Directory, but missed to changed in their devices.\n # Responses\n # On denied result\n # Administrator can customize the responses to the device depends on more complex conditions when necessary.\n # In those cases, please use ACCESS::respond command.\n # The following is the syntax of ACCESS::respond\n # ACCESS::respond <status code> [ content <body> ] [ <Additional Header> <Additional Header value>* ]\n # e.g. ACCESS::respond 401 content \"Error: Denied\" WWW-Authenticate \"basic realm=\\\"f5.com\\\"\" Connection close\n when RULE_INIT {\n # Please set the following global variables for customized responses.\n set static::actsync_401_http_body \"<html><title>Authentication Failured</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n\n # Second Virtual Server name for 401 NTLM responder\n set static::ACCESS_SECOND_VIRTUAL_NAME \"_ACCESS_401_NTLM_responder_HTTPS\"\n\n set static::POLICY_INPROGRESS \"policy_inprogress\"\n set static::POLICY_AUTHFAILED \"policy_authfailed\"\n # The request with huge content length can not be used for starting ACCESS session.\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session. The following value is used for Outlook Anywhere.\n set static::OA_MAGIC_CONTENT_LEN 1073741824\n\n # Similar with OutlookAnywhere case, ACCESS can not use the request which is\n # larger then following size. This becomes an issue with application that using\n # Exchange Web Service as its main protocol such as Mac OS X applications\n # (e.g. Mail app, Microsoft Entourage, etc)\n # This kind of request will be put on hold, and this iRule will try to use another\n # request to start the session.\n set static::FIRST_BIG_POST_CONTENT_LEN 640000\n\n # Set it into 1 if the backend EWS handler accepts HTTP Basic Authentication.\n set static::EWS_BKEND_BASIC_AUTH 0\n # Set it into 1 if the backend RPC-over-HTTP handler accepts HTTP Basic Authentication.\n set static::RPC_OVER_HTTP_BKEND_BASIC_AUTH 0\n # The following variable controls the polling mechanism.\n set static::POLICY_RESULT_POLL_INTERVAL 250\n set static::POLICY_RESULT_POLL_MAXRETRYCYCLE 600\n\n # Set this global variable to 1 for caching authentication failure\n # Useful for avoiding account locked out.\n set static::POLICY_RESULT_CACHE_AUTHFAILED 0\n\n # set this global variable to set alternative timeout for particular session\n set static::POLICY_ALT_INACTIVITY_TIMEOUT 120\n\n set static::ACCESS_USERKEY_TBLNAME \"_access_userkey\"\n\n\n set static::ACCESS_DEL_COOKIE_HDR_VAL \"MRHSession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/\"\n\n log -noname accesscontrol.local1.debug \"01490000:7: RPC_OVER_HTTP_BKEND_BASIC_AUTH = $static::RPC_OVER_HTTP_BKEND_BASIC_AUTH\"\n log -noname accesscontrol.local1.debug \"01490000:7: EWS_BKEND_BASIC_AUTH = $static::EWS_BKEND_BASIC_AUTH\"\n }\n when ACCESS_ACL_ALLOWED {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX [HTTP::method] [HTTP::uri] [HTTP::header Content-Length]\"\n\n if { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n if { $static::RPC_OVER_HTTP_BKEND_BASIC_AUTH == 0 } {\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Use this virtual $static::ACCESS_SECOND_VIRTUAL_NAME just once. Will be reset back after disconnection.\"\n use virtual $static::ACCESS_SECOND_VIRTUAL_NAME\n }\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Remove HTTP Auth header\"\n HTTP::header remove Authorization\n }\n }\n # MSFT Exchange's EWS request handler always requesting NTLM even the connection has been\n # already authenticated if there is a HTTP Basic Auth in the request.\n if { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n if { $static::EWS_BKEND_BASIC_AUTH == 0 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing HTTP Basic Authorization header\"\n HTTP::header remove Authorization\n }\n }\n }\n\n when HTTP_REQUEST {\n set http_path [ string tolower [HTTP::path] ]\n set f_clientless_mode 0\n set f_alt_inactivity_timeout 0\n set f_rpc_over_http 0\n set f_exchange_web_service 0\n set f_auto_discover 0\n set f_activesync 0\n set f_offline_address_book 0\n set f_availability_service 0\n\n # Here put appropriate pool when necessary.\n switch -glob $http_path {\n \"/rpc/rpcproxy.dll\" {\n # Supports for RPC over HTTP. (Outlook Anywhere)\n set f_rpc_over_http 1\n }\n \"/autodiscover/autodiscover.xml\" {\n # Supports for Auto Discover protocol.\n set f_auto_discover 1\n # This request does not require long inactivity timeout.\n # Don't use this for now\n set f_alt_inactivity_timeout 0\n }\n \"/microsoft-server-activesync\" {\n # Supports for ActiveSync\n set f_activesync 1\n }\n \"/oab/*\" {\n # Supports for Offline Address Book\n set f_offline_address_book 1\n }\n \"/ews/*\" {\n # Support for Exchange Web Service\n # Outlook's Availability Service borrows this protocol.\n set f_exchange_web_service 1\n }\n \"/as/*\" {\n # Support for Availability Service.\n # do nothing for now. (Untested)\n set f_availability_service 1\n }\n default {\n return\n }\n }\n\n set f_reqside_set_sess_id 0\n set http_method [HTTP::method]\n set http_hdr_host [HTTP::host]\n set http_hdr_uagent [HTTP::header User-Agent]\n set src_ip [IP::remote_addr]\n set http_uri [HTTP::uri]\n set http_content_len [HTTP::header Content-Length]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n set auth_info_b64enc \"\"\n\n if { ! [ info exists PROFILE_POLICY_TIMEOUT ] } {\n set PROFILE_POLICY_TIMEOUT [PROFILE::access access_policy_timeout]\n }\n if { ! [ info exists PROFILE_MAX_SESS_TIMEOUT ] } {\n set PROFILE_MAX_SESS_TIMEOUT [PROFILE::access max_session_timeout]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP 1\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX method: $http_method\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Src IP: $src_ip\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX User-Agent: $http_hdr_uagent\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP uri: $http_uri\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP len: $http_content_len\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Restrict-to-single-client-ip: $PROFILE_RESTRICT_SINGLE_IP\"\n\n # First, do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n set http_hdr_auth [HTTP::header Authorization]\n if { [ string match -nocase {basic *} $http_hdr_auth ] != 1 } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Not basic authentication. Ignore received auth header\"\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX No/Empty Auth header\"\n # clean up the cookie\n if { $MRHSession_cookie == \"\" } {\n HTTP::respond 401 content $static::actsync_401_http_body WWW-Authenticate \"Basic realm=\\\"[HTTP::header Host]\\\"\" Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection close\n return\n }\n # Do nothing if we have a valid MRHSession cookie.\n }\n\n set f_release_request 0\n # Optimization for clients which support cookie\n if { $MRHSession_cookie != \"\" } {\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n set f_release_request 1\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n set f_release_request 1\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n }\n\n if { $f_release_request == 0 } {\n set apm_username [ string tolower [HTTP::username]]\n set apm_password [HTTP::password]\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password\"] H* user_hash\n } else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP Hdr Auth: $http_hdr_auth\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX apm_username: $apm_username\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key = $user_key\"\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n set f_release_request 1\n }\n }\n }\n\n if { $http_content_len == $static::OA_MAGIC_CONTENT_LEN } {\n set f_oa_magic_content_len 1\n }\n\n set f_sleep_here 0\n set retry 1\n\n while { $f_release_request == 0 && $retry <= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Trying #$retry for $http_method $http_uri $http_content_len\"\n\n # This is also going to touch the table entry timer.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Reading $user_key from table $static::ACCESS_USERKEY_TBLNAME\"\n\n set apm_cookie [table lookup -subtable $static::ACCESS_USERKEY_TBLNAME -notouch $user_key]\n if { $apm_cookie != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Verifying table cookie = $apm_cookie\"\n\n # Accessing SessionDB is not that cheap. Here we are trying to check known value.\n if { $apm_cookie == \"policy_authfailed\" || $apm_cookie == \"policy_inprogress\"} {\n # Do nothing\n } elseif { ! [ ACCESS::session exists $apm_cookie ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX table cookie = $apm_cookie is out-of-sync\"\n # Table value is out of sync. Ignores it.\n set apm_cookie \"\"\n }\n }\n\n switch $apm_cookie {\n \"\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX NO APM Cookie found\"\n\n if { [ info exists f_oa_magic_content_len ] && $f_oa_magic_content_len == 1 } {\n # Outlook Anywhere request comes in pair. The one with 1G payload is not usable\n # for creating new session since 1G content-length is intended for client to upload\n # the data when needed.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for request with magic content-len\"\n set f_sleep_here 1\n } elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 && $http_content_len > $static::FIRST_BIG_POST_CONTENT_LEN } {\n # Here we are getting large EWS request, which can't be used for starting new session\n # in clientless-mode. Have it here waiting for next smaller one.\n # We are holding the request here in HTTP filter, and HTTP filter automatically\n # clamping down the TCP window when necessary.\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Start to wait $static::POLICY_RESULT_POLL_INTERVAL ms for big EWS request\"\n set f_sleep_here 1\n } else {\n set apm_cookie \"policy_inprogress\"\n set f_reqside_set_sess_id 1\n set f_release_request 1\n }\n }\n \"policy_authfailed\" {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Found $user_key with AUTH_FAILED\"\n HTTP::respond 401 content $static::actsync_401_http_body\n set f_release_request 1\n }\n \"policy_inprogress\" {\n if { [ info exists f_activesync ] && ($f_activesync == 1) } {\n # For ActiveSync requests, aggressively starts new session.\n set f_reqside_set_sess_id 1\n set f_release_request 1\n } else {\n set f_sleep_here 1\n }\n }\n default {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Using MRHSession = $apm_cookie\"\n HTTP::header insert Cookie \"MRHSession=$apm_cookie\"\n set f_release_request 1\n }\n }\n\n if { $f_reqside_set_sess_id == 1 } {\n set f_reqside_set_sess_id 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key=$apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\"\n set f_clientless_mode 1\n HTTP::cookie remove MRHSession\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $apm_cookie $PROFILE_POLICY_TIMEOUT $PROFILE_MAX_SESS_TIMEOUT\n }\n\n if { $f_sleep_here == 1 } {\n set f_sleep_here 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Waiting $static::POLICY_RESULT_POLL_INTERVAL ms for $http_method $http_uri\"\n after $static::POLICY_RESULT_POLL_INTERVAL\n }\n\n incr retry\n }\n\n if { $f_release_request == 0 && $retry >= $static::POLICY_RESULT_POLL_MAXRETRYCYCLE } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Policy did not finish in [expr { $static::POLICY_RESULT_POLL_MAXRETRYCYCLE * $static::POLICY_RESULT_POLL_INTERVAL } ] ms. Close connection for $http_method $http_uri\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n ACCESS::disable\n TCP::close\n return\n }\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Releasing request $http_method $http_uri\"\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n\n if { [ info exists f_activesync ] && $f_activesync == 1 } {\n ACCESS::session data set \"session.user.microsoft-activesync\" 1\n }\n elseif { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n elseif { [ info exists f_availability_service ] && $f_availability_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-availabilityservice\" 1\n }\n elseif { [ info exists f_rpc_over_http ] && $f_rpc_over_http == 1 } {\n ACCESS::session data set \"session.user.microsoft-rpcoverhttp\" 1\n }\n elseif { [ info exists f_offline_address_book ] && $f_offline_address_book == 1 } {\n ACCESS::session data set \"session.user.microsoft-offlineaddressbook\" 1\n }\n elseif { [ info exists f_exchange_web_service ] && $f_exchange_web_service == 1 } {\n ACCESS::session data set \"session.user.microsoft-exchangewebservice\" 1\n }\n }\n if { [ info exists f_alt_inactivity_timeout ] && $f_alt_inactivity_timeout == 1 } {\n ACCESS::session data set \"session.inactivity_timeout\" $static::POLICY_ALT_INACTIVITY_TIMEOUT\n }\n }\n\n when HTTP_RESPONSE {\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n set content_len [ HTTP::header Content-Length ]\n if { $content_len > 0 } {\n HTTP::collect $content_len\n }\n }\n }\n when HTTP_RESPONSE_DATA {\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n if { [ regsub -line {<AuthPackage>Ntlm</AuthPackage>} [ HTTP::payload ] {<AuthPackage>Basic</AuthPackage>} payload ] != 0 } {\n HTTP::payload replace 0 $content_len $payload\n }\n }\n }\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set user_key_value \"\"\n set f_delete_session 0\n set policy_result [ACCESS::policy result]\n set sid [ ACCESS::session sid ]\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX ACCESS_POLICY_COMPLETED: policy_result = \\\"$policy_result\\\" user_key = \\\"$user_key\\\" sid = \\\"$sid\\\"\"\n\n set inactivity_timeout [ACCESS::session data get \"session.inactivity_timeout\"]\n set max_sess_timeout [ACCESS::session data get \"session.max_session_timeout\"]\n if { $max_sess_timeout == \"\" } {\n set max_sess_timeout $PROFILE_MAX_SESS_TIMEOUT\n }\n\n switch $policy_result {\n \"allow\" {\n # We depends on this table record self-cleanup capability in order to\n # indirectly sync with session DB.\n set user_key_value $sid\n\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Result: Allow: $user_key => $sid $inactivity_timeout $max_sess_timeout\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX user_key_value = $user_key_value\"\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX sid = $sid\"\n }\n \"deny\" {\n # When necessary the admin here can check appropriate session variable\n # and decide what response more appropriate then this default response.\n ACCESS::respond 401 content $static::actsync_401_http_body Set-Cookie $static::ACCESS_DEL_COOKIE_HDR_VAL Connection close\n if { $static::POLICY_RESULT_CACHE_AUTHFAILED == 1 } {\n set user_key_value $static::POLICY_AUTHFAILED\n } else {\n set f_delete_session 1\n }\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection close\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Got unsupported policy result for $user_key ($sid)\"\n set f_delete_session 1\n }\n }\n if { $user_key_value != \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Setting $user_key => $user_key_value $inactivity_timeout $max_sess_timeout in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table set -subtable $static::ACCESS_USERKEY_TBLNAME $user_key $user_key_value $inactivity_timeout $max_sess_timeout\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Deleting $user_key in table $static::ACCESS_USERKEY_TBLNAME\"\n\n table delete -subtable $static::ACCESS_USERKEY_TBLNAME $user_key\n }\n\n if { $f_delete_session == 1 } {\n ACCESS::session remove\n set f_delete_session 0\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Removing the session for $user_key.\"\n }\n }\ndefinition-signature feX9LM+vB6YOEdVF+EA1JtNyVkPaB7gwdW0JzaB083MXl4yPP2nZnjm+WAx3YQhsmLttq5UkPl1zHpr5H9cwJX1bu9BNMi/+n0bIqWOipDHhhSYQ+TH+a5jQUSeftISr52BSQxh0cQKZkzM3rFU/qRZn9D9Dbf0kDGiDC1KWwVosrdjp5tVHOiQXWx8zybbGPFfgBcIBE6IvOvGbh5ohebVL2ADZm0URRj2NM4ZvZ2T3C14k2rHGXnDdRsvhmf5USZ+FH1hoKtWRxqtFjkWIaqw8leenXeot1j2bdKy92/AVTC9oZj1HJN1ePuQo5v414zlUhMEtkVy/gaxvj1+vPQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_Office365_SAML_BasicAuth", - "partition": "Common", - "fullPath": "/Common/_sys_APM_Office365_SAML_BasicAuth", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_Office365_SAML_BasicAuth?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::ACCESS_LOG_ECP_PREFIX \"014d0002:7: ECP client\"\n }\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set http_hdr_auth [HTTP::header Authorization]\n set http_hdr_client_app [HTTP::header X-MS-Client-Application]\n set http_hdr_client_ip [HTTP::header X-MS-Forwarded-Client-IP]\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n\n if { ($http_path == \"/saml/idp/profile/redirectorpost/sso\") &&\n ($http_hdr_client_app != \"\") &&\n ($http_hdr_client_app contains \"Microsoft.Exchange\") } {\n HTTP::uri \"/saml/idp/profile/ecp/sso\"\n } elseif { ($http_path != \"/saml/idp/profile/ecp/sso\") } {\n return\n }\n set f_saml_ecp_request 1\n unset http_path\n\n # If MRHSession cookie from client is present, skip further processing.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n } else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n return\n }\n\n if { ($http_hdr_client_app != \"\") &&\n ($http_hdr_client_app contains \"Microsoft.Exchange\") &&\n ($http_hdr_client_ip != \"\") } {\n\t set src_ip $http_hdr_client_ip\n\t}\n unset http_hdr_client_app\n unset http_hdr_client_ip\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n\n # Only allow HTTP Basic Authentication.\n if { ($http_hdr_auth == \"\") || ([ string match -nocase {basic *} $http_hdr_auth ] != 1 ) } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_ECP_PREFIX ECP request does not contain HTTP Basic Authorization header.\"\n unset http_hdr_auth\n return\n }\n\n set apm_username [ string tolower [HTTP::username] ]\n set apm_password [HTTP::password]\n\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n }\n }\n\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n unset apm_username\n unset apm_password\n unset http_hdr_auth\n }\n\n when ACCESS_SESSION_STARTED {\n if { [ info exists f_saml_ecp_request ] && $f_saml_ecp_request == 1 } {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n }\n if { [ info exists src_ip ] } {\n ACCESS::session data set \"session.user.clientip\" $src_ip\n }\n }\n }\n\n when HTTP_RESPONSE {\n if { [ info exists f_saml_ecp_request ] && $f_saml_ecp_request == 1 } {\n unset f_saml_ecp_request\n unset apm_cookie\n }\n }\ndefinition-signature hbkbqtFWuaW9oegh6SzMveAg8WY7+tJBg32EgZs3djEixBoxjXoktrb/mcfl3FmsQXRgE6LgrZCeIvjqLdk/8/wq/4wnd4naYm2VALVoBPeETuCpWdmiyiwuvFC5G4VlYhqhYhRsx9mQhbRWm8/YvoBpvNnCCSdyx/wL+KcYQGU7Zv4woZrtruq4RiLCm6ohutAWdS2NbeIQHG37NFXT6wV6pR9EIqrkNetbXAdi6OZGuuthSXMSXMz64+CwkzpptxP3bhOsFvM/gq8FfWR8rsRJfxaHg+njkkgKSkH3TL7vhDnL3pXcHhH1/9P6qDU++YAyiXzppOlLHib33Rv0yw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_APM_activesync", - "partition": "Common", - "fullPath": "/Common/_sys_APM_activesync", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_APM_activesync?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen RULE_INIT {\n set static::actsync_401_http_body \"<html><title>Authentication Failed</title><body>Error: Authentication Failure</body></html>\"\n set static::actsync_503_http_body \"<html><title>Service is not available</title><body>Error: Service is not available</body></html>\"\n set static::ACCESS_LOG_PREFIX \"01490000:7:\"\n }\n when HTTP_REQUEST {\n set http_path [string tolower [HTTP::path]]\n set f_clientless_mode 0\n\n if { $http_path == \"/microsoft-server-activesync\" } {\n }\n elseif { $http_path == \"/autodiscover/autodiscover.xml\" } {\n set f_auto_discover 1\n }\n else return\n\n if { ! [ info exists src_ip ] } {\n set src_ip [IP::remote_addr]\n }\n if { ! [ info exists PROFILE_RESTRICT_SINGLE_IP ] } {\n set PROFILE_RESTRICT_SINGLE_IP \t 1\n }\n # Only allow HTTP Basic Authentication.\n set auth_info_b64enc \"\"\n set http_hdr_auth [HTTP::header Authorization]\n regexp -nocase {Basic (.*)} $http_hdr_auth match auth_info_b64enc\n if { $auth_info_b64enc == \"\" } {\n set http_hdr_auth \"\"\n }\n\n if { $http_hdr_auth == \"\" } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX Empty/invalid HTTP Basic Authorization header\"\n HTTP::respond 401 content $static::actsync_401_http_body Connection close\n return\n }\n\n set MRHSession_cookie [HTTP::cookie value MRHSession]\n # Do we have valid MRHSession cookie.\n if { $MRHSession_cookie != \"\" } {\n if { [ACCESS::session exists -state_allow -sid $MRHSession_cookie] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *VALID* MRHSession cookie: $MRHSession_cookie\"\n # Default profile access setting is false\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n return\n }\n elseif { [ IP::addr $src_ip equals [ ACCESS::session data get -sid $MRHSession_cookie \"session.user.clientip\" ] ] } {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP matched\"\n return\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX source IP does not matched\"\n }\n }\n else {\n log -noname accesscontrol.local1.debug \"$static::ACCESS_LOG_PREFIX HTTP *INVALID* MRHSession cookie: $MRHSession_cookie\"\n }\n set MRHSession_cookie \"\"\n HTTP::cookie remove MRHSession\n }\n\n set apm_username [ string tolower [HTTP::username] ]\n set apm_password [HTTP::password]\n\n if { $PROFILE_RESTRICT_SINGLE_IP == 0 } {\n binary scan [md5 \"$apm_password$\"] H* user_hash\n } else {\n binary scan [md5 \"$apm_password$src_ip\"] H* user_hash\n }\n set user_key {}\n append user_key $apm_username \".\" $user_hash\n unset user_hash\n\n set f_insert_clientless_mode 0\n set apm_cookie_list [ ACCESS::user getsid $user_key ]\n if { [ llength $apm_cookie_list ] != 0 } {\n set apm_cookie [ ACCESS::user getkey [ lindex $apm_cookie_list 0 ] ]\n if { $apm_cookie != \"\" } {\n HTTP::cookie insert name MRHSession value $apm_cookie\n } else {\n set f_insert_clientless_mode 1\n }\n } else {\n set f_insert_clientless_mode 1\n }\n\n if { $f_insert_clientless_mode == 1 } {\n HTTP::header insert \"clientless-mode\" 1\n HTTP::header insert \"username\" $apm_username\n HTTP::header insert \"password\" $apm_password\n }\n unset f_insert_clientless_mode\n }\n when ACCESS_SESSION_STARTED {\n if { [ info exists user_key ] } {\n ACCESS::session data set \"session.user.uuid\" $user_key\n ACCESS::session data set \"session.user.microsoft-exchange-client\" 1\n ACCESS::session data set \"session.user.activesync\" 1\n if { [ info exists f_auto_discover ] && $f_auto_discover == 1 } {\n set f_auto_discover 0\n ACCESS::session data set \"session.user.microsoft-autodiscover\" 1\n }\n }\n }\n when ACCESS_POLICY_COMPLETED {\n if { ! [ info exists user_key ] } {\n return\n }\n\n set policy_result [ACCESS::policy result]\n switch $policy_result {\n \"allow\" {\n }\n \"deny\" {\n ACCESS::respond 401 content $static::actsync_401_http_body Connection close\n ACCESS::session remove\n }\n default {\n ACCESS::respond 503 content $static::actsync_503_http_body Connection close\n ACCESS::session remove\n }\n }\n\n unset user_key\n }\ndefinition-signature jaSGZiyISQHfZu1LLt3cmS5U/vOKRUOkQZ6ZHyc0fdnKtv+VsbRUIgzQwpV1dsN+wzuFhWxEsvSzleGZSrRmlBRbO63jjeBg9jzCqj8/hfOHhPCMSP59w3/opbCnAlqt+TyCFDY1cJ6/b/SWS+irPeAt6gAl0kmw2TIBlJvxm93zTu8aWyBgQV+205oBEPjYVHjaFPGFPk5+5LnZWrBO1fC0jBqpkCT+LWxBGeVHRTC8sGup0SuhXFPfWu3oB1uTTo5SKr8ZxRUFUrLTHNj/W8RKWg2C34958TFngZNQhpxg+XGWEFJXpCkeM2fVJXN3mymRWxuanYLU26ZKXuNNxw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_krbdelegate", - "partition": "Common", - "fullPath": "/Common/_sys_auth_krbdelegate", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_krbdelegate?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n set thecert \"\"\n set ckname F5KRBAUTH\n set ckpass abc123\n set authprofiles [PROFILE::list auth]\n # Search the auth profiles for the krbdelegate(7) and grab cookie info\n foreach profname $authprofiles {\n if { [PROFILE::auth $profname type] == 7 } {\n set tmpckname [PROFILE::auth $profname cookie_name]\n set tmpckpass [PROFILE::auth $profname cookie_key]\n if {[PROFILE::auth $profname cookie_name] != \"\" } {\n set ckname $tmpckname\n set ckpass $tmpckpass\n break\n }\n }\n }\n set seecookie 0\n set insertcookie 0\n # check for the cookie\n if {not [info exists tmm_auth_http_sids(krbdelegate)]} {\n set tmm_auth_sid [AUTH::start pam default_krbdelegate]\n set tmm_auth_http_sids(krbdelegate) $tmm_auth_sid\n AUTH::subscribe $tmm_auth_sid\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(krbdelegate)\n }\n if { [PROFILE::exists clientssl] } {\n set certcmd \"SSL::cert 0\"\n set thecert [ eval $certcmd ]\n }\n if { $thecert == \"\" } {\n # if no cert, assume old kerb delegation\n # if there is no Authorization header and no cookie, get one.\n if { ([HTTP::header Authorization] == \"\") and\n (not [HTTP::cookie exists $ckname])} {\n HTTP::respond 401 WWW-Authenticate Negotiate\n return\n }\n }\n if {[HTTP::cookie exists $ckname]} {\n set ckval [HTTP::cookie decrypt $ckname $ckpass]\n AUTH::username_credential $tmm_auth_sid \"cookie\"\n AUTH::password_credential $tmm_auth_sid $ckval\n set seecookie 1\n } else {\n if { $thecert == \"\" } {\n # Kerberos Delegation - set username\n # Strip off the Negotiate before the base64d goodness\n AUTH::username_credential $tmm_auth_sid [lindex [HTTP::header Authorization] 1]\n }\n else {\n # Protocol Transition - set ttm_auth_sid\n AUTH::username_credential $tmm_auth_sid \"krpprottran\"\n AUTH::cert_credential $tmm_auth_sid $thecert\n }\n AUTH::password_credential $tmm_auth_sid \"xxxx\"\n }\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(krbdelegate)] or \\\n ($tmm_auth_http_sids(krbdelegate) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"krbdelegate\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n array set pamout [AUTH::response_data]\n HTTP::header replace Authorization \"Negotiate $pamout(krbdelegate:attr:SPNEGO)\"\n if {$seecookie == 0} {\n set insertcookie $pamout(krbdelegate:attr:KRB5CCNAME)\n }\n HTTP::release\n } else {\n HTTP::respond 401 WWW-Authenticate Negotiate \"Set-Cookie\" \"$ckname= ; expires=Wed Dec 31 16:00:00 1969\"\n }\n }\n }\n # When the response goes out, if we need to insert a cookie, do it.\n when HTTP_RESPONSE {\n if {$insertcookie != 0} {\n HTTP::cookie insert name $ckname value $insertcookie\n HTTP::cookie encrypt $ckname $ckpass\n }\n }\ndefinition-signature mILi/VF69pqpNg+XJ4nClBl8+zq4v9FsiBYnKjX3zLZOChRWKt5CwkwpsbCRzx5DnvHglp9uXDYrjqcAFvM5aRA2R5LAhKQSq6pVPwHdZUJluYv0t3n6af/vSyc7KYsx6gga1jLuiFZaEzmG8c+r4igxwEee874iQBjYaWhHyKYGhlhly/Ez2FE9DNRpRepz2sq/jaKzEmmMod3CCXurXVGlC/Pk8qnbNid1yC15DGosrAKW1d8lhYbVBaXVQ1ahrr/UPYnDdHB1BiWUzRSS4uOKuUyUmT/xPI14/Nwv8zdFvlu+AnnD543zH6KhdSHhJ3zCVy2HSZ5wPuN3YswcBA==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ldap", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ldap", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ldap?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(ldap)]} {\n set tmm_auth_sid [AUTH::start pam default_ldap]\n set tmm_auth_http_sids(ldap) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(ldap)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(ldap)] or \\\n ($tmm_auth_http_sids(ldap) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"ldap\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if {[AUTH::status] == 0} {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature d+BwFQlDUIY7Jf5jfpCFuEkwn/jJ+3ZjEQLQej71v7TxzQpxJps4rDaU2YxBNyM9CTAIWT3DRdLqYZAnIHqVpOIRIE/ALk0v0o79IxJIES4nUTE9UTHKM8GN13VBkihf1I8O9DmwOHgB1s0HV+A/dy5mDiyBFpbamyv6rJCASItyPp2Y7iKfcMHEFe+qgvZFA2B131QVAosIn6pFribwU5LSvArIul5pIgX1tcuI+BLPkaJy6xoN9AQcah/ufgUCOmAvkc/K5LteBkxG3ItldFNaxOtAPXDt5IDhrBuMxsvRs7P+vMbfNiGb+QSakipxML2EmwCRiacxQTZn/0DDrw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_radius", - "partition": "Common", - "fullPath": "/Common/_sys_auth_radius", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_radius?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(radius)]} {\n set tmm_auth_sid [AUTH::start pam default_radius]\n set tmm_auth_http_sids(radius) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(radius)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(radius)] or \\\n ($tmm_auth_http_sids(radius) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"radius\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature m0ZhOZjHe7lvErKAbir601WnOlWEPfEh/Qc5wayIKc6B16E4IF4F+Jh8QGdYRgNOrk3Qc3Gid6zQZcCcbIzfR3NKOxfVX+tl0KfiEN1lqBQMLu3/AooE+/YTC5oCPuvV6TK/JHRLiMiexYgRx6G+AFU7xg/w/YzgvV0bjsd9OxdIUB3WO5JOUweCG6q24zhVgN+3QIIiBnuKaMeHtRSw29xVpuQqgNKVG7RaPu15loA0xp8s4fxMF0YHDYPuQuu0PLfvYTqsSP0cI3Kdbsg5JgAIAcdHlFIW3NaUJBPMGRLOAvSGibIMVhFmUfC52LNQ4iORtokInaHyYUtPQ/yHIw==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_cc_ldap", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_cc_ldap", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_cc_ldap?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_cc_ldap_sid 0\n set tmm_auth_ssl_cc_ldap_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_cc_ldap_done 0\n if {$tmm_auth_ssl_cc_ldap_sid == 0} {\n set tmm_auth_ssl_cc_ldap_sid [AUTH::start pam default_ssl_cc_ldap]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_cc_ldap_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_cc_ldap_sid [SSL::cert 0]\n AUTH::authenticate $tmm_auth_ssl_cc_ldap_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_cc_ldap_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_cc_ldap_sid] and \\\n ($tmm_auth_ssl_cc_ldap_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_cc_ldap_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_cc_ldap_done == 0} {\n reject\n }\n }\n }\ndefinition-signature O2ctQteahGXIbb4l9/vERvtwKeyl51hGNNGgccddtwme/6opsgPJu5gaiVGUXYYDkbcjFdfgDTU9oDPkLl5JmZ3VcExnlnvxLpVDuM/fKqxbgoRQZ6nl0mEceHmWxRY9AlhrODtJZxNRbQBu4OOCYS+yWioKgKkrBwQaEoIFBPSSUmeIPZHTXdNnLXwxxkY75O5Sc4sTkYQ3BvTrlu/frnwweed6qw9bWatN865CIzP3Spq0ELY0Q4bvxo+0JdLheFv2BfKUethrjEXcxiD9Ros0fnvQ83qaCHqt18xEyhakdKAf4gKZJt9UApkRn+1ZTPNJFzgQyPPYQGvU/y9JAQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_crldp", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_crldp", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_crldp?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_crldp_sid 0\n set tmm_auth_ssl_crldp_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_crldp_done 0\n if {$tmm_auth_ssl_crldp_sid == 0} {\n set tmm_auth_ssl_crldp_sid [AUTH::start pam default_ssl_crldp]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_crldp_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_crldp_sid [SSL::cert 0]\n AUTH::cert_issuer_credential $tmm_auth_ssl_crldp_sid [SSL::cert issuer 0]\n AUTH::authenticate $tmm_auth_ssl_crldp_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_crldp_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_crldp_sid] and \\\n ($tmm_auth_ssl_crldp_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_crldp_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_crldp_done == 0} {\n reject\n }\n }\n }\ndefinition-signature PhTy24ctbtx0d4kFIFO6+Fr9W3a/7OetZ7nlh18mpH6BB9t1dB2LNayATLZ3q4iT4wLLdyyxA+g4jdrNBeuZVpM2JOBlhwcyIcTBFLQN4H/mkWErH4Vz9ZMxVduUxHN6fIh8zDQuJJYoRVlz087/vIVvk6ygbPwS9KqTdYBa3Nn79YmIVn1NXKyVoCg/40EZ3iNklwIfKctwqGU5ELKbhwk8CGCvexDbJcwRqv8nAETC4B/nc61jpGcihpOJchJFb3buTiAKwfxSYkx90UG4EnwsyA4GqUNIfS02Dj5rYSMH403CNNBKG2AA+ZGy9by2O3bb9lq/VNGPDmsnMEff1g==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_ssl_ocsp", - "partition": "Common", - "fullPath": "/Common/_sys_auth_ssl_ocsp", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_ssl_ocsp?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen CLIENT_ACCEPTED {\n set tmm_auth_ssl_ocsp_sid 0\n set tmm_auth_ssl_ocsp_done 0\n }\n when CLIENTSSL_CLIENTCERT {\n if {[SSL::cert count] == 0} {\n return\n }\n set tmm_auth_ssl_ocsp_done 0\n if {$tmm_auth_ssl_ocsp_sid == 0} {\n set tmm_auth_ssl_ocsp_sid [AUTH::start pam default_ssl_ocsp]\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_ssl_ocsp_sid\n }\n }\n AUTH::cert_credential $tmm_auth_ssl_ocsp_sid [SSL::cert 0]\n AUTH::cert_issuer_credential $tmm_auth_ssl_ocsp_sid [SSL::cert issuer 0]\n AUTH::authenticate $tmm_auth_ssl_ocsp_sid\n SSL::handshake hold\n }\n when CLIENTSSL_HANDSHAKE {\n set tmm_auth_ssl_ocsp_done 1\n }\n when AUTH_RESULT {\n if {[info exists tmm_auth_ssl_ocsp_sid] and \\\n ($tmm_auth_ssl_ocsp_sid == [AUTH::last_event_session_id])} {\n set tmm_auth_status [AUTH::status]\n if {$tmm_auth_status == 0} {\n set tmm_auth_ssl_ocsp_done 1\n SSL::handshake resume\n } elseif {$tmm_auth_status != -1 || $tmm_auth_ssl_ocsp_done == 0} {\n reject\n }\n }\n }\ndefinition-signature mHRNmZiszQh85wPdt5PxM2ASLXyW47LE3CM5tS11M1lTe9ttjlWDc6yBdy5VFjC6H2O2DJ+fyrBmeMen16RVWPhUoq8YOJC9ZiuuLc6T/rW9GsopSHFPBLRjL/EPulNkuGB/DtxYvwXfXOyBuVRw+E/TYkKVi6cIrk4+e9mOnCo9biWycrRfemWwYyDCqouEaDK2huYnQ1rKyYAvIWxfd3rXXw6+jdpuvL/6RFXJjaLTJ/f1pVMHP5kuI2K/dkeojqDDgr1d1GnjIFFX2Azh5qZpaL1urPfn/M6C/7sXzew1PU0ow10MQtKKqAno5IpEpn+cPZlCs3d2Y1khtMqUug==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_auth_tacacs", - "partition": "Common", - "fullPath": "/Common/_sys_auth_tacacs", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_auth_tacacs?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n if {not [info exists tmm_auth_http_sids(tacacs)]} {\n set tmm_auth_sid [AUTH::start pam default_tacacs]\n set tmm_auth_http_sids(tacacs) $tmm_auth_sid\n if {[info exists tmm_auth_subscription]} {\n AUTH::subscribe $tmm_auth_sid\n }\n } else {\n set tmm_auth_sid $tmm_auth_http_sids(tacacs)\n }\n AUTH::username_credential $tmm_auth_sid [HTTP::username]\n AUTH::password_credential $tmm_auth_sid [HTTP::password]\n AUTH::authenticate $tmm_auth_sid\n\n if {not [info exists tmm_auth_http_collect_count]} {\n HTTP::collect\n set tmm_auth_http_successes 0\n set tmm_auth_http_collect_count 1\n } else {\n incr tmm_auth_http_collect_count\n }\n }\n when AUTH_RESULT {\n if {not [info exists tmm_auth_http_sids(tacacs)] or \\\n ($tmm_auth_http_sids(tacacs) != [AUTH::last_event_session_id]) or \\\n (not [info exists tmm_auth_http_collect_count])} {\n return\n }\n if {[AUTH::status] == 0} {\n incr tmm_auth_http_successes\n }\n # If multiple auth sessions are pending and\n # one failure results in termination and this is a failure\n # or enough successes have now occurred\n if {([array size tmm_auth_http_sids] > 1) and \\\n ((not [info exists tmm_auth_http_sufficient_successes] or \\\n ($tmm_auth_http_successes >= $tmm_auth_http_sufficient_successes)))} {\n # Abort the other auth sessions\n foreach {type sid} [array get tmm_auth_http_sids] {\n unset tmm_auth_http_sids($type)\n if {($type ne \"tacacs\") and ($sid != -1)} {\n AUTH::abort $sid\n incr tmm_auth_http_collect_count -1\n }\n }\n }\n # If this is the last outstanding auth then either\n # release or respond to this session\n incr tmm_auth_http_collect_count -1\n if {$tmm_auth_http_collect_count == 0} {\n unset tmm_auth_http_collect_count\n if { [AUTH::status] == 0 } {\n HTTP::release\n } else {\n HTTP::respond 401\n }\n }\n }\ndefinition-signature GHNO23blFC/AnIkRk9DSySYK2LiesD7h2DliAMIsVIjBk/RFL8XvZ+8WuKMVibuCiAhPWWvUu6nKsTnk9pX5/kc4yV6qRHcaaO+UaqT1/KQZsVXShCf0YCzqjRQIduJhUFFn0MUDhDmo/8ti0Upo6loKBxW3TODx5y8Jf3dTKmX2oRMfrkiMEyVtv38O7MDwJ1H5/xF2z1r2+nWGUJThZq/ILpfzcdnI7X5j/PxnAGuL1zciRIZ/0RIyMvYch0GaoXaKLVaONzDm0nHEJ+hZ7Vp8mQZiRitc8MGs1Ku9yLamxosUFAdRVnNQOLXGrlvEm94oU6XR3mq0oeqx9+dnOQ==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "_sys_https_redirect", - "partition": "Common", - "fullPath": "/Common/_sys_https_redirect", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~_sys_https_redirect?ver=12.1.2", - "apiAnonymous": "nodelete nowrite \nwhen HTTP_REQUEST {\n HTTP::redirect https://[getfield [HTTP::host] \":\" 1][HTTP::uri]\n }\ndefinition-signature mwyl4XlRKRMQc0prWs7RtpgPcNfocOKb+MaFwAnQgAuUZZyG68OaGZsOCN3poUOFdHOc6fk2XAdGRmTRiP/7BCT7thsOX5zLFzA1N1wcr57KWVzEZt3ezxVXn2Z974OmbWm7P5Lclcr7N3adrLJMWfyfPPVF1tUYn0IQPD2QNMmfbcbr1oCuO93n/5dn0s6/EacHZGG53hVibW7xQuJXdMtoQ6ArSZ4U3n4vCDTb6NLYbAj6PirVzKY2pcsWFHFUSVrphSFwERc8+0XGHUE6Cb3ihzygoZc2cQ5jk3frFY70MkDluPTShFRbHd7PlMPRezrfkVZVeUHA/iBPcYcD+w==", - "apiRawValues": { - "verificationStatus": "signature-verified" - } - }, - { - "kind": "tm:ltm:rule:rulestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 94, - "selfLink": "https://localhost/mgmt/tm/ltm/rule/~Common~foo?ver=12.1.2", - "apiAnonymous": "when RULE_INIT {\n set static::FormBaseURL \"/sp-ofba-form\"\n set static::FormReturnURL \"/sp-ofba-completed\"\n set static::HeadAuthReq \"X-FORMS_BASED_AUTH_REQUIRED\"\n set static::HeadAuthRet \"X-FORMS_BASED_AUTH_RETURN_URL\"\n set static::HeadAuthSize \"X-FORMS_BASED_AUTH_DIALOG_SIZE\"\n set static::HeadAuthSizeVal \"800x600\"\n set static::ckname \"MRHSession_SP\"\n set static::Basic_Realm_Text \"SharePoint Authentication\"\n}\n\nwhen HTTP_REQUEST {\n set apmsessionid [HTTP::cookie value MRHSession]\n}\n\nwhen HTTP_RESPONSE {\n # Insert persistent cookie for html content type and private session\n}" - } -] diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_http.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_http.json deleted file mode 100644 index 79121b2b96..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_http.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "kind": "tm:ltm:monitor:http:httpstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/http/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/http", - "description": "this is a description", - "destination": "1.1.1.1:389", - "interval": 5, - "ipDscp": 0, - "manualResume": "disabled", - "password": "$M$7T$DpzEUVHt5rKkAfqrBh1PTA==", - "recv": "hello world", - "reverse": "enabled", - "send": "GET /\\r\\n", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0, - "username": "john" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_https.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_https.json deleted file mode 100644 index ff4f53f277..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_https.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "kind": "tm:ltm:monitor:https:httpsstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/https/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "cipherlist": "DEFAULT:+SHA:+3DES:+kEDH", - "compatibility": "enabled", - "defaultsFrom": "/Common/https", - "description": "this is a description", - "destination": "1.1.1.1:389", - "interval": 5, - "ipDscp": 0, - "manualResume": "disabled", - "password": "$M$7F$+F0VTCeKM4LbGkpC/u8pwg==", - "recv": "hello world", - "reverse": "disabled", - "send": "GET /\\r\\n", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0, - "username": "john" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp.json deleted file mode 100644 index fb9572f7e7..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp/~Common~foo?ver=12.1.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/tcp", - "destination": "10.10.10.10:80", - "interval": 20, - "ipDscp": 0, - "manualResume": "disabled", - "recv": "this is a receive string", - "reverse": "disabled", - "send": "this is a send string", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json deleted file mode 100644 index 1a5183466a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_echo.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp-echo:tcp-echostate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp-echo/~Common~foo?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "defaultsFrom": "/Common/tcp_echo", - "destination": "10.10.10.10", - "interval": 20, - "manualResume": "disabled", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json deleted file mode 100644 index ff99c31e69..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_tcp_half_open.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:ltm:monitor:tcp-half-open:tcp-half-openstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/tcp-half-open/~Common~foo?ver=13.0.0", - "defaultsFrom": "/Common/tcp_half_open", - "destination": "10.10.10.10:80", - "interval": 20, - "manualResume": "disabled", - "timeUntilUp": 60, - "timeout": 30, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_monitor_udp.json b/test/units/modules/network/f5/fixtures/load_ltm_monitor_udp.json deleted file mode 100644 index 636619a259..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_monitor_udp.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:monitor:udp:udpstate", - "name": "asdf", - "partition": "Common", - "fullPath": "/Common/asdf", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/ltm/monitor/udp/~Common~asdf?ver=13.0.0", - "adaptive": "disabled", - "adaptiveDivergenceType": "relative", - "adaptiveDivergenceValue": 25, - "adaptiveLimit": 200, - "adaptiveSamplingTimespan": 300, - "debug": "no", - "defaultsFrom": "/Common/udp", - "destination": "1.1.1.1:389", - "interval": 5, - "manualResume": "disabled", - "recv": "hello world", - "reverse": "disabled", - "send": "default send string", - "timeUntilUp": 0, - "timeout": 16, - "transparent": "disabled", - "upInterval": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_node_1.json b/test/units/modules/network/f5/fixtures/load_ltm_node_1.json deleted file mode 100644 index 96d25b03d1..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_node_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 158, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~foo?ver=13.0.0", - "address": "1.2.3.4", - "connectionLimit": 0, - "description": "my description of node", - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "unchecked" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_node_2.json b/test/units/modules/network/f5/fixtures/load_ltm_node_2.json deleted file mode 100644 index f23f6b5f42..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_node_2.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "fqdn-foo", - "partition": "Common", - "fullPath": "/Common/fqdn-foo", - "generation": 161, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~fqdn-foo?ver=13.0.0", - "address": "any6", - "connectionLimit": 0, - "description": "another node but with fqdn", - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600", - "tmName": "google.com" - }, - "logging": "disabled", - "monitor": "/Common/icmp and /Common/tcp_echo ", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "fqdn-up" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_node_3.json b/test/units/modules/network/f5/fixtures/load_ltm_node_3.json deleted file mode 100644 index c6e30cf32e..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_node_3.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "mytestserver", - "partition": "Common", - "fullPath": "/Common/mytestserver", - "generation": 2286, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~mytestserver?ver=13.0.0", - "address": "10.20.30.40", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "/Common/icmp ", - "rateLimit": "disabled", - "ratio": 1, - "session": "monitor-enabled", - "state": "down" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json b/test/units/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json deleted file mode 100644 index 53aa0c34ec..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_policy_draft_rule_http-uri_forward.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "kind": "tm:ltm:policy:rules:rulesstate", - "name": "foo", - "fullPath": "foo", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo?expandSubcollections=true&ver=13.0.0", - "ordinal": 0, - "actionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/actions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:actions:actionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/actions/0?ver=13.0.0", - "code": 0, - "expirySecs": 0, - "forward": true, - "length": 0, - "node": "1.1.1.1", - "offset": 0, - "port": 0, - "request": true, - "select": true, - "snat": "disable", - "status": 0, - "timeout": 0, - "vlan": "/Common/net1", - "vlanId": 0 - } - ] - }, - "conditionsReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/conditions?ver=13.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:policy:rules:conditions:conditionsstate", - "name": "0", - "fullPath": "0", - "generation": 739, - "selfLink": "https://localhost/mgmt/tm/ltm/policy/~Common~Drafts~Bondticker-DRN/rules/foo/conditions/0?ver=13.0.0", - "caseInsensitive": true, - "external": true, - "httpUri": true, - "index": 0, - "path": true, - "present": true, - "remote": true, - "request": true, - "startsWith": true, - "values": [ - "foo" - ] - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_pool.json b/test/units/modules/network/f5/fixtures/load_ltm_pool.json deleted file mode 100644 index cd5be5e1af..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_pool.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "kind": "tm:ltm:pool:poolstate", - "name": "test_pool", - "partition": "Common", - "fullPath": "/Common/test_pool", - "generation": 1452, - "selfLink": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool?ver=11.5.4", - "allowNat": "yes", - "allowSnat": "yes", - "description": "test", - "ignorePersistedWeight": "disabled", - "ipTosToClient": "pass-through", - "ipTosToServer": "pass-through", - "linkQosToClient": "pass-through", - "linkQosToServer": "pass-through", - "loadBalancingMode": "round-robin", - "minActiveMembers": 0, - "minUpMembers": 0, - "minUpMembersAction": "failover", - "minUpMembersChecking": "disabled", - "monitor": "min 1 of { /Common/http /Common/inband }", - "queueDepthLimit": 0, - "queueOnConnectionLimit": "disabled", - "queueTimeLimit": 0, - "reselectTries": 0, - "serviceDownAction": "reselect", - "slowRampTime": 10, - "membersReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool/members?ver=11.5.4", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json deleted file mode 100644 index 3e3fa2c06e..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_analytics_1.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "kind": "tm:ltm:profile:analytics:analyticsstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 339, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo?ver=13.1.1", - "appService": "none", - "capturedTrafficExternalLogging": "disabled", - "capturedTrafficInternalLogging": "disabled", - "collectGeo": "disabled", - "collectHttpTimingMetrics": "disabled", - "collectIp": "disabled", - "collectMaxTpsAndThroughput": "disabled", - "collectMethods": "enabled", - "collectOsAndBrowser": "enabled", - "collectPageLoadTime": "disabled", - "collectResponseCodes": "enabled", - "collectSubnets": "disabled", - "collectUrl": "disabled", - "collectUserAgent": "disabled", - "collectUserSessions": "disabled", - "collectedStatsExternalLogging": "disabled", - "collectedStatsInternalLogging": "enabled", - "countriesForStatCollection": [], - "defaultsFrom": "/Common/analytics", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~analytics?ver=13.1.1" - }, - "description": "none", - "externalLoggingPublisher": "none", - "ipsForStatCollection": [], - "notificationByEmail": "disabled", - "notificationBySnmp": "disabled", - "notificationBySyslog": "disabled", - "notificationEmailAddresses": [], - "publishIruleStatistics": "disabled", - "sampling": "enabled", - "sessionCookieSecurity": "ssl-only", - "sessionTimeoutMinutes": "5", - "smtpConfig": "none", - "subnetsForStatCollection": [], - "urlsForStatCollection": [], - "alertsReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo/alerts?ver=13.1.1", - "isSubcollection": true - }, - "trafficCaptureReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/analytics/~Common~foo/traffic-capture?ver=13.1.1", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_clientssl.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_clientssl.json deleted file mode 100644 index 923f6f72bb..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_clientssl.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "kind": "tm:ltm:profile:client-ssl:client-sslstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 351, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~foo?ver=13.0.0", - "alertTimeout": "indefinite", - "allowDynamicRecordSizing": "disabled", - "allowExpiredCrl": "disabled", - "allowNonSsl": "disabled", - "appService": "none", - "authenticate": "once", - "authenticateDepth": 9, - "bypassOnClientCertFail": "disabled", - "bypassOnHandshakeAlert": "disabled", - "caFile": "none", - "cacheSize": 262144, - "cacheTimeout": 3600, - "cert": "/Common/default.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.0.0" - }, - "certExtensionIncludes": [ - "basic-constraints", - "subject-alternative-name" - ], - "certLifespan": 30, - "certLookupByIpaddrPort": "disabled", - "chain": "none", - "cipherGroup": "none", - "ciphers": "DEFAULT", - "clientCertCa": "none", - "crlFile": "none", - "defaultsFrom": "/Common/clientssl", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~clientssl?ver=13.0.0" - }, - "description": "none", - "destinationIpBlacklist": "none", - "destinationIpWhitelist": "none", - "forwardProxyBypassDefaultAction": "intercept", - "genericAlert": "enabled", - "handshakeTimeout": "10", - "hostnameBlacklist": "none", - "hostnameWhitelist": "none", - "inheritCertkeychain": "true", - "key": "/Common/default.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.0.0" - }, - "maxActiveHandshakes": "indefinite", - "maxAggregateRenegotiationPerMinute": "indefinite", - "maxRenegotiationsPerMinute": 5, - "maximumRecordSize": 16384, - "modSslMethods": "disabled", - "mode": "enabled", - "notifyCertStatusToVirtualServer": "disabled", - "ocspStapling": "disabled", - "tmOptions": [ - "dont-insert-empty-fragments" - ], - "peerCertMode": "ignore", - "peerNoRenegotiateTimeout": "10", - "proxyCaCert": "none", - "proxyCaKey": "none", - "proxySsl": "disabled", - "proxySslPassthrough": "disabled", - "renegotiateMaxRecordDelay": "indefinite", - "renegotiatePeriod": "indefinite", - "renegotiateSize": "indefinite", - "renegotiation": "enabled", - "retainCertificate": "true", - "secureRenegotiation": "require", - "serverName": "none", - "sessionMirroring": "disabled", - "sessionTicket": "disabled", - "sessionTicketTimeout": 0, - "sniDefault": "false", - "sniRequire": "false", - "sourceIpBlacklist": "none", - "sourceIpWhitelist": "none", - "sslForwardProxy": "disabled", - "sslForwardProxyBypass": "disabled", - "sslSignHash": "any", - "strictResume": "disabled", - "uncleanShutdown": "enabled", - "certKeyChain": [ - { - "name": "default", - "appService": "none", - "cert": "/Common/default.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.0.0" - }, - "chain": "none", - "key": "/Common/default.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.0.0" - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_dns_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_dns_1.json deleted file mode 100644 index 41736147e8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_dns_1.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "kind": "tm:ltm:profile:dns:dnsstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 1211, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/dns/~Common~foo?ver=13.1.0.4", - "appService": "none", - "avrDnsstatSampleRate": 0, - "cache": "none", - "defaultsFrom": "/Common/dns", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/dns/~Common~dns?ver=13.1.0.4" - }, - "description": "none", - "dnsSecurity": "none", - "dns64": "disabled", - "dns64AdditionalSectionRewrite": "disabled", - "dns64Prefix": "any6", - "enableCache": "no", - "enableDnsExpress": "no", - "enableDnsFirewall": "yes", - "enableDnssec": "no", - "enableGtm": "no", - "enableHardwareQueryValidation": "no", - "enableHardwareResponseCache": "no", - "enableLogging": "no", - "enableRapidResponse": "no", - "logProfile": "none", - "processRd": "yes", - "processXfr": "yes", - "rapidResponseLastAction": "drop", - "unhandledQueryAction": "allow", - "useLocalBind": "no" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json deleted file mode 100644 index a9873f20a2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_http_compression_1.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "kind": "tm:ltm:profile:http-compression:http-compressionstate", - "name": "profile1", - "partition": "Common", - "fullPath": "/Common/profile1", - "generation": 132, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/http-compression/~Common~profile1?ver=13.1.0.4", - "allowHttp_10": "disabled", - "appService": "none", - "browserWorkarounds": "disabled", - "bufferSize": 4096, - "contentTypeExclude": [], - "contentTypeInclude": [ - "text/", - "application/(xml|x-javascript)" - ], - "cpuSaver": "enabled", - "cpuSaverHigh": 90, - "cpuSaverLow": 75, - "defaultsFrom": "/Common/httpcompression", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http-compression/~Common~httpcompression?ver=13.1.0.4" - }, - "description": "my profile", - "gzipLevel": 1, - "gzipMemoryLevel": 8192, - "gzipWindowSize": 16384, - "keepAcceptEncoding": "disabled", - "methodPrefer": "gzip", - "minSize": 1024, - "selective": "disabled", - "uriExclude": [], - "uriInclude": [ - ".*" - ], - "varyHeader": "enabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json deleted file mode 100644 index d2b05acfe4..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_oneconnect_1.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "kind": "tm:ltm:profile:one-connect:one-connectstate", - "name": "oneconnect", - "partition": "Common", - "fullPath": "/Common/oneconnect", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/one-connect/~Common~oneconnect?ver=13.1.0.4", - "appService": "none", - "defaultsFrom": "none", - "description": "none", - "idleTimeoutOverride": "disabled", - "limitType": "none", - "maxAge": 86400, - "maxReuse": 1000, - "maxSize": 10000, - "sharePools": "disabled", - "sourceMask": "any" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json deleted file mode 100644 index 771a26e919..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_cookie_1.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:persistence:cookie:cookiestate", - "name": "cookie", - "partition": "Common", - "fullPath": "/Common/cookie", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/persistence/cookie/~Common~cookie?ver=13.1.0.7", - "alwaysSend": "disabled", - "appService": "none", - "cookieEncryption": "disabled", - "cookieName": "none", - "defaultsFrom": "none", - "description": "none", - "encryptCookiePoolname": "disabled", - "expiration": "0", - "hashLength": 0, - "hashOffset": 0, - "httponly": "enabled", - "matchAcrossPools": "disabled", - "matchAcrossServices": "disabled", - "matchAcrossVirtuals": "disabled", - "method": "insert", - "mirror": "disabled", - "overrideConnectionLimit": "disabled", - "secure": "enabled", - "timeout": "180" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json deleted file mode 100644 index 2ee6df9b33..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_persistence_src_addr_1.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:ltm:persistence:source-addr:source-addrstate", - "name": "source_addr", - "partition": "Common", - "fullPath": "/Common/source_addr", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/persistence/source-addr/~Common~source_addr?ver=13.1.0.7", - "appService": "none", - "defaultsFrom": "none", - "description": "none", - "hashAlgorithm": "default", - "mapProxies": "enabled", - "mapProxyAddress": "none", - "mapProxyClass": "none", - "mask": "none", - "matchAcrossPools": "disabled", - "matchAcrossServices": "disabled", - "matchAcrossVirtuals": "disabled", - "mirror": "disabled", - "overrideConnectionLimit": "disabled", - "timeout": "180" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json deleted file mode 100644 index 94e6019fb1..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_serverssl_1.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "kind": "tm:ltm:profile:server-ssl:server-sslstate", - "name": "asda", - "partition": "Common", - "fullPath": "/Common/asda", - "generation": 160, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~asda?ver=13.1.0.8", - "alertTimeout": "indefinite", - "allowExpiredCrl": "disabled", - "appService": "none", - "authenticate": "once", - "authenticateDepth": 9, - "authenticateName": "none", - "bypassOnClientCertFail": "disabled", - "bypassOnHandshakeAlert": "disabled", - "c3dCaCert": "none", - "c3dCaKey": "none", - "c3dCertExtensionCustomOids": [], - "c3dCertExtensionIncludes": [ - "basic-constraints", - "extended-key-usage", - "key-usage", - "subject-alternative-name" - ], - "c3dCertLifespan": 24, - "caFile": "none", - "cacheSize": 262144, - "cacheTimeout": 3600, - "cert": "none", - "chain": "/Common/default.crt", - "chainReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.1.0.8" - }, - "cipherGroup": "none", - "ciphers": "DEFAULT", - "crlFile": "none", - "defaultsFrom": "/Common/serverssl", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~serverssl?ver=13.1.0.8" - }, - "description": "none", - "expireCertResponseControl": "drop", - "genericAlert": "enabled", - "handshakeTimeout": "10", - "key": "none", - "maxActiveHandshakes": "indefinite", - "modSslMethods": "disabled", - "mode": "enabled", - "ocsp": "none", - "tmOptions": [ - "dont-insert-empty-fragments" - ], - "peerCertMode": "ignore", - "proxySsl": "disabled", - "proxySslPassthrough": "disabled", - "renegotiatePeriod": "indefinite", - "renegotiateSize": "indefinite", - "renegotiation": "enabled", - "retainCertificate": "true", - "secureRenegotiation": "require-strict", - "serverName": "none", - "sessionMirroring": "disabled", - "sessionTicket": "disabled", - "sniDefault": "false", - "sniRequire": "false", - "sslC3d": "disabled", - "sslForwardProxy": "disabled", - "sslForwardProxyBypass": "disabled", - "sslSignHash": "any", - "strictResume": "disabled", - "uncleanShutdown": "enabled", - "untrustedCertResponseControl": "drop" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json deleted file mode 100644 index 03ada3cbde..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_tcp_1.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "kind": "tm:ltm:profile:tcp:tcpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 92, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~foo?ver=13.1.0.4", - "abc": "enabled", - "ackOnPush": "enabled", - "appService": "none", - "autoProxyBufferSize": "disabled", - "autoReceiveWindowSize": "disabled", - "autoSendBufferSize": "disabled", - "closeWaitTimeout": 5, - "cmetricsCache": "enabled", - "cmetricsCacheTimeout": 0, - "congestionControl": "high-speed", - "defaultsFrom": "/Common/tcp", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=13.1.0.4" - }, - "deferredAccept": "disabled", - "delayWindowControl": "disabled", - "delayedAcks": "enabled", - "description": "none", - "dsack": "disabled", - "earlyRetransmit": "enabled", - "ecn": "enabled", - "enhancedLossRecovery": "disabled", - "fastOpen": "disabled", - "fastOpenCookieExpiration": 21600, - "finWait_2Timeout": 300, - "finWaitTimeout": 5, - "hardwareSynCookie": "enabled", - "idleTimeout": 300, - "initCwnd": 3, - "initRwnd": 3, - "ipDfMode": "pmtu", - "ipTosToClient": "0", - "ipTtlMode": "proxy", - "ipTtlV4": 255, - "ipTtlV6": 64, - "keepAliveInterval": 1800, - "limitedTransmit": "enabled", - "linkQosToClient": "0", - "maxRetrans": 8, - "maxSegmentSize": 1460, - "md5Signature": "disabled", - "minimumRto": 1000, - "mptcp": "disabled", - "mptcpCsum": "disabled", - "mptcpCsumVerify": "disabled", - "mptcpDebug": "disabled", - "mptcpFallback": "reset", - "mptcpFastjoin": "disabled", - "mptcpIdleTimeout": 300, - "mptcpJoinMax": 5, - "mptcpMakeafterbreak": "disabled", - "mptcpNojoindssack": "disabled", - "mptcpRtomax": 5, - "mptcpRxmitmin": 1000, - "mptcpSubflowmax": 6, - "mptcpTimeout": 3600, - "nagle": "disabled", - "pktLossIgnoreBurst": 0, - "pktLossIgnoreRate": 0, - "proxyBufferHigh": 49152, - "proxyBufferLow": 32768, - "proxyMss": "enabled", - "proxyOptions": "disabled", - "pushFlag": "default", - "ratePace": "disabled", - "ratePaceMaxRate": 0, - "receiveWindowSize": 65535, - "resetOnTimeout": "enabled", - "rexmtThresh": 3, - "selectiveAcks": "enabled", - "selectiveNack": "disabled", - "sendBufferSize": 65535, - "slowStart": "enabled", - "synCookieEnable": "enabled", - "synCookieWhitelist": "disabled", - "synMaxRetrans": 3, - "synRtoBase": 3000, - "tailLossProbe": "disabled", - "tcpOptions": "none", - "timeWaitRecycle": "enabled", - "timeWaitTimeout": "2000", - "timestamps": "enabled", - "verifiedAccept": "disabled", - "zeroWindowTimeout": 20000 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_profile_udp_1.json b/test/units/modules/network/f5/fixtures/load_ltm_profile_udp_1.json deleted file mode 100644 index a07307a0dd..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_profile_udp_1.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "kind": "tm:ltm:profile:udp:udpstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 107, - "selfLink": "https://localhost/mgmt/tm/ltm/profile/udp/~Common~foo?ver=13.1.0.4", - "allowNoPayload": "disabled", - "appService": "none", - "bufferMaxBytes": 655350, - "bufferMaxPackets": 0, - "datagramLoadBalancing": "disabled", - "defaultsFrom": "/Common/udp", - "defaultsFromReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/udp/~Common~udp?ver=13.1.0.4" - }, - "description": "none", - "idleTimeout": "60", - "ipDfMode": "pmtu", - "ipTosToClient": "0", - "ipTtlMode": "proxy", - "ipTtlV4": 255, - "ipTtlV6": 64, - "linkQosToClient": "0", - "noChecksum": "disabled", - "proxyMss": "disabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_snat_translation_default.json b/test/units/modules/network/f5/fixtures/load_ltm_snat_translation_default.json deleted file mode 100644 index 836866a17b..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_snat_translation_default.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "address": "1.1.1.1", - "arp": "no", - "connectionLimit": 0, - "description": "My description", - "ip_idle_timeout":"50", - "kind": "tm:ltm:snat-translation:snat-translationstate", - "name": "my-snat-translation", - "partition": "Common", - "state":"present", - "enabled":"true", - "tcp_idle_timeout":"20", - "trafficGroup": "/Common/test", - "udp_idle_timeout":"100" -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_ltm_snatpool.json b/test/units/modules/network/f5/fixtures/load_ltm_snatpool.json deleted file mode 100644 index fcea1dd219..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_snatpool.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "kind": "tm:ltm:snatpool:snatpoolstate", - "name": "asdasd", - "partition": "Common", - "fullPath": "/Common/asdasd", - "generation": 40, - "selfLink": "https://localhost/mgmt/tm/ltm/snatpool/~Common~asdasd?ver=12.1.2", - "members": [ - "/Common/1.1.1.1", - "/Common/2.2.2.2" - ], - "membersReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/snat-translation/~Common~1.1.1.1?ver=12.1.2" - }, - { - "link": "https://localhost/mgmt/tm/ltm/snat-translation/~Common~2.2.2.2?ver=12.1.2" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_1.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_1.json deleted file mode 100644 index aaf48ab87b..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_1.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 65, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "any", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 2, - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": true - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_1_address.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_1_address.json deleted file mode 100644 index 297afc9187..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_1_address.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "10.10.10.10", - "partition": "Common", - "fullPath": "/Common/10.10.10.10", - "generation": 116, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~10.10.10.10?ver=12.1.2", - "address": "10.10.10.10", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "enabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=12.1.2" - }, - "unit": 1 -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_2.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_2.json deleted file mode 100644 index 712b19e3d9..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_2.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 152, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "any", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 19, - "vlans": [ - "/Common/net1" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=12.1.2" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": true - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "fastL4", - "partition": "Common", - "fullPath": "/Common/fastL4", - "generation": 148, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~fastL4?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/fastl4/~Common~fastL4?ver=12.1.2" - } - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_3.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_3.json deleted file mode 100644 index e1b0c7c270..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_3.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 340, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?expandSubcollections=true&ver=12.0.0", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "description": "Test Virtual Server", - "destination": "/Common/10.10.10.10:443", - "enabled": true, - "gtmScore": 0, - "ipProtocol": "tcp", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansDisabled": true, - "vsIndex": 38, - "rules": [ - "/Common/web_logging" - ], - "rulesReference": [ - { - "link": "https://localhost/mgmt/tm/ltm/rule/~Common~web_logging?ver=12.0.0" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:policies:policiesstate", - "name": "policy1", - "partition": "Common", - "fullPath": "/Common/policy1", - "generation": 340, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies/~Common~policy1?ver=12.0.0", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/policy/~Common~policy1?ver=12.0.0" - } - } - ] - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.0.0", - "isSubcollection": true, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "clientssl", - "partition": "Common", - "fullPath": "/Common/clientssl", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~clientssl?ver=12.0.0", - "context": "clientside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/client-ssl/~Common~clientssl?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~http?ver=12.0.0", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp?ver=12.0.0", - "context": "clientside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=12.0.0" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp-legacy", - "partition": "Common", - "fullPath": "/Common/tcp-legacy", - "generation": 338, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp-legacy?ver=12.0.0", - "context": "serverside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp-legacy?ver=12.0.0" - } - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json deleted file mode 100644 index 810e659ff9..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_collection_1.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addresscollectionstate", - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address?ver=13.1.0.4", - "items": [ - { - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "2.3.4.5", - "partition": "Common", - "fullPath": "/Common/2.3.4.5", - "generation": 1074, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~2.3.4.5?ver=13.1.0.4", - "address": "2.3.4.5", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "disabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=13.1.0.4" - }, - "unit": 1 - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_default.json b/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_default.json deleted file mode 100644 index a2b87012a1..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ltm_virtual_address_default.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:virtual-address:virtual-addressstate", - "name": "1.1.1.1", - "partition": "Common", - "fullPath": "/Common/1.1.1.1", - "generation": 116, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual-address/~Common~1.1.1.1?ver=12.1.2", - "address": "1.1.1.1", - "arp": "enabled", - "autoDelete": "true", - "connectionLimit": 0, - "enabled": "yes", - "floating": "enabled", - "icmpEcho": "enabled", - "inheritedTrafficGroup": "false", - "mask": "255.255.255.255", - "routeAdvertisement": "disabled", - "serverScope": "any", - "spanning": "disabled", - "trafficGroup": "/Common/traffic-group-1", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=12.1.2" - }, - "unit": 1 -} diff --git a/test/units/modules/network/f5/fixtures/load_machine_resolver.json b/test/units/modules/network/f5/fixtures/load_machine_resolver.json deleted file mode 100644 index 2422ca6db8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_machine_resolver.json +++ /dev/null @@ -1,187 +0,0 @@ - { - "uuid": "4dd9f559-c1b9-4e05-8d17-2345a6a3d459", - "deviceUri": "https://10.144.74.229:443", - "machineId": "4dd9f559-c1b9-4e05-8d17-2345a6a3d459", - "state": "ACTIVE", - "address": "10.144.74.229", - "httpsPort": 443, - "hostname": "ansible_test_lab12.lab.local", - "version": "12.1.3", - "product": "BIG-IP", - "edition": "Final", - "build": "0.0.378", - "restFrameworkVersion": "12.1.3-0.0.378", - "managementAddress": "10.144.74.229", - "mcpDeviceName": "/Common/ansible_test_lab12.lab.local", - "trustDomainGuid": "44135337-f809-480d-ab6ffa163edc9ff6", - "properties": { - "cm:gui:module": [ - "asmsecurity", - "adc", - "BigIPDevice", - "sharedsecurity" - ], - "modules": [ - "Web Application Security Group", - "Security" - ], - "cm-bigip-allBigIpDevices": { - "cm:gui:module": [ - "asmsecurity", - "adc", - "BigIPDevice", - "sharedsecurity" - ], - "shared:resolver:device-groups:discoverer": "13446925-efb3-47f4-b32c-ed705d29e878", - "modules": [ - "Web Application Security Group", - "Security" - ] - }, - "cm-asm-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-bigip-allDevices": { - "shared:resolver:device-groups:discoverer": "13446925-efb3-47f4-b32c-ed705d29e878", - "cm:gui:module": [], - "modules": [] - }, - "cm-adccore-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-security-shared-allSharedDevices": { - "discovered": true, - "imported": true, - "supportsAlpineDosDeviceConfig": true, - "supports_14_0_Enhs": false, - "supportsRest": true, - "supportsAlpineDosProfileEnhs": true, - "requiresDhcpProfileInDhcpVirtualServer": true, - "supportsAfmSubscribers": false, - "supportsAlpineEnhs": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsBadgerEnhs": true, - "supportsAlpineDosDeviceWhitelistIpProcotol": true, - "supportsSshProfile": true, - "supportsPortMisusePolicy": true, - "supportsAlpineLogProfileEnhs": true, - "supportsCascadeEnhs": true, - "supportUdpPortList": true, - "supports_13_1_Enhs": false, - "supportsIncrementalDiscovery": false, - "lastDiscoveredDateTime": "2019-02-12T13:53:06.541Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:06.541Z", - "importedDateTime": "2019-02-12T13:53:24.885Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "sharedsecurity" - ], - "modules": [ - "Security" - ] - }, - "cm-adccore-allbigipDevices": { - "discovered": true, - "imported": true, - "supportsRest": true, - "requiresDhcpProfileInDhcpVirtualServer": true, - "supportsAlpineEnhs": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsBadgerEnhs": true, - "restrictsPortTranslationStatelessVirtual": true, - "supportsClassification": true, - "supports_13_1_Enhs": false, - "supportsIncrementalDiscovery": false, - "supports_12_1_2_Enhs": true, - "lastDiscoveredDateTime": "2019-02-12T13:53:03.963Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:03.963Z", - "importedDateTime": "2019-02-12T13:53:18.975Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "adc" - ], - "modules": [] - }, - "cm-security-shared-allDevices": { - "cm:gui:module": [], - "modules": [] - }, - "cm-asm-allAsmDevices": { - "discovered": true, - "imported": true, - "supportsHostNameEnforcementMode": false, - "supportsRest": true, - "supportsServerTechnologies": false, - "supportsCpb": false, - "supportsUrlCascadeFeatures": true, - "supportsSessionTrackingAllLoginPagesUsernameSource": true, - "supportsLoginEnforcementCascadeFeatures": true, - "suppportsXmlValidationFiles": true, - "supportsExtractions": true, - "supportsWebSocketSecurity": true, - "supportsWhitelistIpBlockRequestAlways": false, - "supportsSessionTrackingSessionHijackingByDeviceId": true, - "supportsLoginPagesHeaderOmits": false, - "supportsBruteForceAttackPreventionsCascadeFeatures": true, - "supportsPlainTextProfile": true, - "supportsIncrementalDiscovery": false, - "supportsRedirectionProtection": true, - "supportsHeaderSignaturesOverride": false, - "supportsIpIntelligence": true, - "supports_13_0_Enhs": false, - "supportsFirewallRuleIdentifiers": false, - "supportsSessionTrackingDeviceIdThresholds": true, - "supportsLoginEnforcement": true, - "supportsCsrfProtection": true, - "supportsSessionTracking": true, - "supportsJsonProfiles": true, - "supportsBruteForceAttackPreventions": true, - "supportsWebScraping": true, - "supportsLoginPagesCascadeFeatures": true, - "supportsGwtProfiles": true, - "supportsXmlProfiles": true, - "supportsAsmDisallowedGeolocation": true, - "supportsCsrfUrls": false, - "supportsDataProtection": false, - "supportsLoginPages": true, - "supportsBruteForceAttackPreventionsBadgerFeatures": true, - "supportsUrlSignaturesOverride": false, - "signatureAutoUpdateState": true, - "signatureFileVersion": 1.450112674E12, - "signatureFilename": "Attack Signature Database packaged with version 12.1.3", - "lastDiscoveredDateTime": "2019-02-12T13:53:09.188Z", - "lastUserDiscoveredDateTime": "2019-02-12T13:53:09.188Z", - "importedDateTime": "2019-02-12T13:53:29.730Z", - "discoveryStatus": "FINISHED", - "importStatus": "FINISHED", - "cm:gui:module": [ - "asmsecurity" - ], - "modules": [ - "Web Application Security Group" - ] - } - }, - "isClustered": false, - "isVirtual": true, - "isLicenseExpired": false, - "slots": [ - { - "volume": "HD1.1", - "product": "BIG-IP", - "version": "12.1.3", - "build": "0.0.378", - "isActive": true - } - ], - "generation": 4, - "lastUpdateMicros": 1549979318078796, - "kind": "shared:resolver:device-groups:restdeviceresolverdevicestate", - "selfLink": "https://localhost/mgmt/cm/system/machineid-resolver/4dd9f559-c1b9-4e05-8d17-2345a6a3d459" - } diff --git a/test/units/modules/network/f5/fixtures/load_net_dns_resolver_1.json b/test/units/modules/network/f5/fixtures/load_net_dns_resolver_1.json deleted file mode 100644 index bdf3f75593..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_dns_resolver_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:net:dns-resolver:dns-resolverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 173, - "selfLink": "https://localhost/mgmt/tm/net/dns-resolver/~Common~foo?ver=13.1.0.8", - "answerDefaultZones": "no", - "cacheSize": 5767168, - "randomizeQueryNameCase": "yes", - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.8" - }, - "useIpv4": "no", - "useIpv6": "yes", - "useTcp": "yes", - "useUdp": "yes" -} diff --git a/test/units/modules/network/f5/fixtures/load_net_interfaces.json b/test/units/modules/network/f5/fixtures/load_net_interfaces.json deleted file mode 100644 index 2cc3032fc8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_interfaces.json +++ /dev/null @@ -1,424 +0,0 @@ -[ - { - "kind": "tm:net:interface:interfacestate", - "name": "1.1", - "fullPath": "1.1", - "generation": 7767, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.1?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 176, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:02", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.2", - "fullPath": "1.2", - "generation": 7770, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.2?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 192, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:03", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.3", - "fullPath": "1.3", - "generation": 7773, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.3?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 208, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:04", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "1.4", - "fullPath": "1.4", - "generation": 7776, - "selfLink": "https://localhost/mgmt/tm/net/interface/1.4?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 224, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:05", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.1", - "fullPath": "2.1", - "generation": 7859, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.1?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 240, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:06", - "mediaActive": "10000SR-FD", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "moduleDescription": "F5 compatible optics", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "serial": "ARP2LGU", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto", - "vendor": "F5 NETWORKS INC.", - "vendorOui": "009065", - "vendorPartnum": "OPT-0016", - "vendorRevision": "A0" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.2", - "fullPath": "2.2", - "generation": 7746, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.2?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 256, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:07", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.3", - "fullPath": "2.3", - "generation": 7749, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.3?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 272, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:08", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.4", - "fullPath": "2.4", - "generation": 7752, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.4?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 288, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:09", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.5", - "fullPath": "2.5", - "generation": 7755, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.5?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 304, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0a", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.6", - "fullPath": "2.6", - "generation": 7758, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.6?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 320, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0b", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.7", - "fullPath": "2.7", - "generation": 7761, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.7?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 336, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0c", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "2.8", - "fullPath": "2.8", - "generation": 7764, - "selfLink": "https://localhost/mgmt/tm/net/interface/2.8?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 352, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:0d", - "mediaActive": "none", - "mediaFixed": "auto", - "mediaMax": "10000T-FD", - "mediaSfp": "auto", - "mtu": 9198, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - }, - { - "kind": "tm:net:interface:interfacestate", - "name": "mgmt", - "fullPath": "mgmt", - "generation": 7651, - "selfLink": "https://localhost/mgmt/tm/net/interface/mgmt?ver=12.1.0", - "bundle": "not-supported", - "bundleSpeed": "not-supported", - "enabled": true, - "flowControl": "tx-rx", - "forceGigabitFiber": "disabled", - "forwardErrorCorrection": "not-supported", - "ifIndex": 96, - "lldpAdmin": "txonly", - "lldpTlvmap": 130943, - "macAddress": "00:23:e9:f1:e4:01", - "mediaActive": "1000T-FD", - "mediaFixed": "auto", - "mediaMax": "1000T-FD", - "mediaSfp": "auto", - "mtu": 1500, - "preferPort": "sfp", - "qinqEthertype": "0x8100", - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes" - }, - "stp": "enabled", - "stpAutoEdgePort": "enabled", - "stpEdgePort": "true", - "stpLinkType": "auto" - } - ] diff --git a/test/units/modules/network/f5/fixtures/load_net_node_with_fqdn.json b/test/units/modules/network/f5/fixtures/load_net_node_with_fqdn.json deleted file mode 100644 index 67c02568d5..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_node_with_fqdn.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "foo.bar.com", - "partition": "Common", - "fullPath": "/Common/foo.bar.com", - "generation": 157, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~foo.bar.com?ver=12.0.0", - "address": "any6", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "enabled", - "downInterval": 5, - "interval": "3600", - "tmName": "foo.bar.com" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "fqdn-up-no-addr" -} diff --git a/test/units/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json b/test/units/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json deleted file mode 100644 index 9e3be88929..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_node_with_ipv4_address.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:ltm:node:nodestate", - "name": "7.3.67.8", - "partition": "Common", - "fullPath": "/Common/7.3.67.8", - "generation": 162, - "selfLink": "https://localhost/mgmt/tm/ltm/node/~Common~7.3.67.8?ver=12.0.0", - "address": "7.3.67.8", - "connectionLimit": 0, - "dynamicRatio": 1, - "ephemeral": "false", - "fqdn": { - "addressFamily": "ipv4", - "autopopulate": "disabled", - "downInterval": 5, - "interval": "3600" - }, - "logging": "disabled", - "monitor": "default", - "rateLimit": "disabled", - "ratio": 1, - "session": "user-enabled", - "state": "unchecked" -} diff --git a/test/units/modules/network/f5/fixtures/load_net_route_description.json b/test/units/modules/network/f5/fixtures/load_net_route_description.json deleted file mode 100644 index a7c47bc8fe..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_route_description.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:net:route:routestate", - "name": "asdasd", - "partition": "Common", - "fullPath": "/Common/asdasd", - "generation": 113, - "selfLink": "https://localhost/mgmt/tm/net/route/~Common~asdasd?ver=12.1.0", - "description": "asdasd", - "mtu": 0, - "network": "2.2.2.2/32", - "pool": "/Common/adsasd", - "poolReference": { - "link": "https://localhost/mgmt/tm/ltm/pool/~Common~adsasd?ver=12.1.0" - } -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_net_route_domain_1.json b/test/units/modules/network/f5/fixtures/load_net_route_domain_1.json deleted file mode 100644 index 6ff8c5dfc8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_route_domain_1.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:net:route-domain:route-domainstate", - "name": "0", - "partition": "Common", - "fullPath": "/Common/0", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0", - "connectionLimit": 0, - "id": 0, - "strict": "enabled", - "throughputCapacity": 0, - "vlans": [ - "/Common/net1", - "/Common/internal", - "/Common/net2", - "/Common/socks-tunnel", - "/Common/http-tunnel" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~internal?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net2?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~socks-tunnel?ver=13.1.0" - }, - { - "link": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~http-tunnel?ver=13.1.0" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_net_service_policy_1.json b/test/units/modules/network/f5/fixtures/load_net_service_policy_1.json deleted file mode 100644 index a89ca59ffe..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_service_policy_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:net:service-policy:service-policystate", - "name": "baz", - "partition": "Common", - "fullPath": "/Common/baz", - "generation": 581, - "selfLink": "https://localhost/mgmt/tm/net/service-policy/~Common~baz?ver=13.1.0.4", - "description": "my description", - "portMisusePolicy": "/Common/bar", - "portMisusePolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/port-misuse-policy/~Common~bar?ver=13.1.0.4" - }, - "timerPolicy": "/Common/foo", - "timerPolicyReference": { - "link": "https://localhost/mgmt/tm/net/timer-policy/~Common~foo?ver=13.1.0.4" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_net_timer_policy_1.json b/test/units/modules/network/f5/fixtures/load_net_timer_policy_1.json deleted file mode 100644 index 4b6f550a58..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_timer_policy_1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:net:timer-policy:timer-policystate", - "name": "timer1", - "partition": "Common", - "fullPath": "/Common/timer1", - "generation": 148, - "selfLink": "https://localhost/mgmt/tm/net/timer-policy/~Common~timer1?ver=13.1.0.4", - "description": "my description" -} diff --git a/test/units/modules/network/f5/fixtures/load_net_tunnel_1.json b/test/units/modules/network/f5/fixtures/load_net_tunnel_1.json deleted file mode 100644 index dd0e484268..0000000000 --- a/test/units/modules/network/f5/fixtures/load_net_tunnel_1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "kind": "tm:net:tunnels:tunnel:tunnelstate", - "name": "tunnel1", - "partition": "Common", - "fullPath": "/Common/tunnel1", - "generation": 3713, - "selfLink": "https://localhost/mgmt/tm/net/tunnels/tunnel/~Common~tunnel1?ver=13.1.0.7", - "autoLasthop": "default", - "description": "my other tunnel", - "idleTimeout": 300, - "ifIndex": 736, - "key": 0, - "localAddress": "3.3.3.3", - "mode": "bidirectional", - "mtu": 1000, - "profile": "/Common/ipip", - "profileReference": { - "link": "https://localhost/mgmt/tm/net/tunnels/ipip/~Common~ipip?ver=13.1.0.7" - }, - "remoteAddress": "4.4.4.4", - "secondaryAddress": "any6", - "tos": "preserve", - "transparent": "disabled", - "usePmtu": "enabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_ntp.json b/test/units/modules/network/f5/fixtures/load_ntp.json deleted file mode 100644 index 3b55b4870e..0000000000 --- a/test/units/modules/network/f5/fixtures/load_ntp.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "kind": "tm:sys:ntp:ntpstate", - "selfLink": "https://localhost/mgmt/tm/sys/ntp?ver=12.1.0", - "servers": [ - "192.168.1.1", - "192.168.1.2" - ], - "timezone": "America/Los_Angeles", - "restrictReference": { - "link": "https://localhost/mgmt/tm/sys/ntp/restrict?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_regkey_license_key.json b/test/units/modules/network/f5/fixtures/load_regkey_license_key.json deleted file mode 100644 index 8a781d1dab..0000000000 --- a/test/units/modules/network/f5/fixtures/load_regkey_license_key.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "description": "foo bar baz", - "dossier": "5d54d976", - "encryptedPrivateKey": [ - 27, - -10, - 12, - 58, - 75 - ], - "generation": 2, - "internalPrivateKey": "sKpXEU7", - "kind": "cm:device:licensing:pool:regkey:licenses:item:offerings:regkeypoollicenseofferingstate", - "lastUpdateMicros": 1513107721123304, - "licenseState": { - "vendor": "F5 Networks, Inc.", - "licensedDateTime": "2017-12-12T00:00:00-08:00", - "licensedVersion": "5.3.0", - "evaluationStartDateTime": "2017-12-11T00:00:00-08:00", - "evaluationEndDateTime": "2018-01-12T00:00:00-08:00", - "licenseEndDateTime": "2018-01-12T00:00:00-08:00", - "licenseStartDateTime": "2017-12-11T00:00:00-08:00", - "registrationKey": "XXXX-XXXX-XXXX-XXXX-XXXX", - "dossier": "1a44262799bc", - "authorization": "03fc41d1e8666", - "usage": "F5 Internal Product Development", - "platformId": "Z100", - "authVers": "5b", - "serviceCheckDateTime": "2017-12-12T00:00:00-08:00", - "serviceStatus": "As of 2017-12-12 there is no active service contract. This may inhibit your ability to upgrade your software.", - "exclusivePlatform": [ - "Z100", - "Z100A", - "Z100AzureCloud", - "Z100GoogleCloud", - "Z100K", - "Z100x", - "Z100H" - ], - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks", - "LTM, 10 Gbps, VE|T487107-2453693|, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 AS)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "FIPS 140-2 Level 1, BIG-IP VE-1G to 10G", - "IP Intelligence, 1Yr, VE", - "IP Intelligence, 1Yr, VE-10G", - "IP Intelligence, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "Secure Web Gateway, 1Yr, VE", - "URL Filtering, 1Yr, VE" - ], - "moduleEvaluations": [ - { - "moduleName": "IP Intelligence, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - }, - { - "moduleName": "Secure Web Gateway, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - }, - { - "moduleName": "URL Filtering, 3Yr, VE|SUBSCRIPTION", - "endDate": "soon" - } - ], - "featureFlags": [ - { - "featureName": "gtm_rate_limit", - "featureValue": "12345" - } - ], - "generation": 0, - "lastUpdateMicros": 0 - }, - "licenseText": "#Auth vers : BIG-IQ Product License File#", - "message": "License XXXX-XXXX-XXXX-XXXX-XXXX ready", - "name": "License for XXXX-XXXX-XXXX-XXXX-XXXX", - "publicKey": [ - 48, - 0, - 1 - ], - "regKey": "XXXX-XXXX-XXXX-XXXX-XXXX", - "selfLink": "https://localhost/mgmt/cm/device/licensing/pool/regkey/licenses/452f8628-1e56-4b4d-946c-0e68f5780aa1/offerings/XXXX-XXXX-XXXX-XXXX-XXXX", - "sortName": "Registration Key Pool Item", - "status": "READY" -} diff --git a/test/units/modules/network/f5/fixtures/load_regkey_license_pool.json b/test/units/modules/network/f5/fixtures/load_regkey_license_pool.json deleted file mode 100644 index f711817f7f..0000000000 --- a/test/units/modules/network/f5/fixtures/load_regkey_license_pool.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "description": "this is a description", - "generation": 2, - "id": "452f8628-1e56-4b4d-946c-0e68f5780aa1", - "kind": "cm:device:licensing:pool:regkey:licenses:regkeypoollicensestate", - "lastUpdateMicros": 1513371645532221, - "name": "asd", - "selfLink": "https://localhost/mgmt/cm/device/licensing/pool/regkey/licenses/452f8628-1e56-4b4d-946c-0e68f5780aa1", - "sortName": "Registration Key Pool" -} diff --git a/test/units/modules/network/f5/fixtures/load_remote_user_settings.json b/test/units/modules/network/f5/fixtures/load_remote_user_settings.json deleted file mode 100644 index 296f462f97..0000000000 --- a/test/units/modules/network/f5/fixtures/load_remote_user_settings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:auth:remote-user:remote-userstate", - "selfLink": "https://localhost/mgmt/tm/auth/remote-user?ver=12.1.4", - "defaultPartition": "all", - "defaultPartitionReference": { - "link": "https://localhost/mgmt/tm/auth/partition/all?ver=12.1.4" - }, - "defaultRole": "no-access", - "remoteConsoleAccess": "disabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_security_address_list_1.json b/test/units/modules/network/f5/fixtures/load_security_address_list_1.json deleted file mode 100644 index 45aca1e3cd..0000000000 --- a/test/units/modules/network/f5/fixtures/load_security_address_list_1.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "kind": "tm:security:firewall:address-list:address-liststate", - "name": "bar", - "partition": "Common", - "fullPath": "/Common/bar", - "generation": 135, - "selfLink": "https://localhost/mgmt/tm/security/firewall/address-list/~Common~bar?ver=12.1.2", - "addressLists": [ - { - "name": "foo", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/firewall/address-list/~Common~foo?ver=12.1.2" - } - } - ], - "addresses": [ - { - "name": "1.1.1.1" - }, - { - "name": "2.2.2.2-3.3.3.3" - }, - { - "name": "5.5.5.5-6.6.6.6" - }, - { - "name": "2700:bc00:1f10:101::6" - } - ], - "fqdns": [ - { - "name": "google.com" - } - ], - "geo": [ - { - "name": "AF:Baghlan" - }, - { - "name": "AF:Helmand" - }, - { - "name": "BS" - }, - { - "name": "EU" - }, - { - "name": "GE:Marneulis Raioni" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json b/test/units/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json deleted file mode 100644 index 80f475eb47..0000000000 --- a/test/units/modules/network/f5/fixtures/load_security_firewall_global_rules_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:security:firewall:global-rules:global-rulesstate", - "selfLink": "https://localhost/mgmt/tm/security/firewall/global-rules?ver=13.1.0.7", - "enforcedPolicy": "/Common/foo", - "enforcedPolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo?ver=13.1.0.7" - }, - "servicePolicy": "/Common/bar", - "servicePolicyReference": { - "link": "https://localhost/mgmt/tm/net/service-policy/~Common~bar?ver=13.1.0.7" - }, - "stagedPolicy": "/Common/baz", - "stagedPolicyReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~baz?ver=13.1.0.7" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_security_firewall_policy_1.json b/test/units/modules/network/f5/fixtures/load_security_firewall_policy_1.json deleted file mode 100644 index 9c24605883..0000000000 --- a/test/units/modules/network/f5/fixtures/load_security_firewall_policy_1.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "kind": "tm:security:firewall:policy:policystate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo?expandSubcollections=true&ver=13.1.0.7", - "description": "my description", - "rulesReference": { - "link": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules?ver=13.1.0.7", - "isSubcollection": true, - "items": [ - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule1", - "fullPath": "rule1", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule1?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - }, - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule2", - "fullPath": "rule2", - "generation": 2075, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule2?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - }, - { - "kind": "tm:security:firewall:policy:rules:rulesstate", - "name": "rule3", - "fullPath": "rule3", - "generation": 2074, - "selfLink": "https://localhost/mgmt/tm/security/firewall/policy/~Common~foo/rules/rule3?ver=13.1.0.7", - "action": "accept", - "ipProtocol": "any", - "iruleSampleRate": 1, - "log": "no", - "status": "enabled" - } - ] - } -} diff --git a/test/units/modules/network/f5/fixtures/load_security_port_list_1.json b/test/units/modules/network/f5/fixtures/load_security_port_list_1.json deleted file mode 100644 index ec639dacf8..0000000000 --- a/test/units/modules/network/f5/fixtures/load_security_port_list_1.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "kind": "tm:security:firewall:port-list:port-liststate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 119, - "description": "this is a description", - "selfLink": "https://localhost/mgmt/tm/security/firewall/port-list/~Common~foo?ver=12.1.0", - "portLists": [ - { - "name": "_sys_self_allow_tcp_defaults", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/security/firewall/port-list/~Common~_sys_self_allow_tcp_defaults?ver=12.1.0" - } - } - ], - "ports": [ - { - "name": "1" - }, - { - "name": "2" - }, - { - "name": "3" - }, - { - "name": "4" - }, - { - "name": "10-20" - }, - { - "name": "30-40" - }, - { - "name": "50-60" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_shared_system_setup_1.json b/test/units/modules/network/f5/fixtures/load_shared_system_setup_1.json deleted file mode 100644 index 8f886e1453..0000000000 --- a/test/units/modules/network/f5/fixtures/load_shared_system_setup_1.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "isSystemSetup": true, - "isAdminPasswordChanged": false, - "isRootPasswordChanged": true, - "generation": 7, - "lastUpdateMicros": 1536357209120972, - "kind": "shared:system:setup:systemsetupworkerstate", - "selfLink": "https://localhost/mgmt/shared/system/setup" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json b/test/units/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json deleted file mode 100644 index 57f3c3755a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_application_template_w_new_checksum.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:sys:application:template:templatestate", - "name": "good_templ", - "partition": "Common", - "fullPath": "/Common/good_templ", - "generation": 410, - "selfLink": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ?ver=13.0.0", - "description": "My basic template", - "ignoreVerification": "false", - "requiresBigipVersionMin": "11.6.0", - "requiresModules": [ - "ltm" - ], - "tmplChecksum": "90c46acee5ca08e300da0bcdb9130745", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified", - "actionsReference": { - "link": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ/actions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json b/test/units/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json deleted file mode 100644 index da477515bf..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_application_template_w_old_checksum.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "kind": "tm:sys:application:template:templatestate", - "name": "good_templ", - "partition": "Common", - "fullPath": "/Common/good_templ", - "generation": 410, - "selfLink": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ?ver=13.0.0", - "description": "My basic foo bar", - "ignoreVerification": "false", - "requiresBigipVersionMin": "12.0.0", - "requiresModules": [ - "ltm" - ], - "tmplChecksum": "eee01710dbe330d380d1a4fa30eeabdb", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified", - "actionsReference": { - "link": "https://localhost/mgmt/tm/sys/application/template/~Common~good_templ/actions?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json b/test/units/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json deleted file mode 100644 index 59da203a5d..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_crypto_cert_validator_1.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "kind": "tm:sys:crypto:cert-validator:ocsp:ocspstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 151, - "selfLink": "https://localhost/mgmt/tm/sys/crypto/cert-validator/ocsp/~Common~asd?ver=13.1.0.8", - "cacheErrorTimeout": 3600, - "cacheTimeout": "indefinite", - "clockSkew": 300, - "concurrentConnectionsLimit": 500, - "dnsResolver": "/Common/foo", - "dnsResolverReference": { - "link": "https://localhost/mgmt/tm/net/dns-resolver/~Common~foo?ver=13.1.0.8" - }, - "routeDomain": "/Common/0", - "routeDomainReference": { - "link": "https://localhost/mgmt/tm/net/route-domain/~Common~0?ver=13.1.0.8" - }, - "signHash": "sha256", - "signerCert": "/Common/default.crt", - "signerCertReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~default.crt?ver=13.1.0.8" - }, - "signerKey": "/Common/default.key", - "signerKeyReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-key/~Common~default.key?ver=13.1.0.8" - }, - "signerKeyPassphrase": "secret", - "statusAge": 0, - "strictRespCertCheck": "enabled", - "timeout": 8 -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json b/test/units/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json deleted file mode 100644 index 70dcbc23f0..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_file_external-monitor_1.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "kind": "tm:sys:file:external-monitor:external-monitorstate", - "name": "arg_example", - "partition": "Common", - "fullPath": "/Common/arg_example", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/sys/file/external-monitor/~Common~arg_example?ver=13.1.0.8", - "checksum": "SHA1:3159:0c78e6641632e47d11802b29cfd119d2233cb80a", - "createTime": "2018-06-16T06:49:11Z", - "createdBy": "root", - "lastUpdateTime": "2018-06-16T06:49:11Z", - "mode": 33261, - "revision": 1, - "size": 3159, - "systemPath": "/config/monitors/arg_example", - "updatedBy": "root" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json b/test/units/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json deleted file mode 100644 index bb77ca33e5..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_file_ssl_cert_with_issuer_cert.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "kind": "tm:sys:file:ssl-cert:ssl-certstate", - "name": "ocsp.example.com.crt", - "partition": "Common", - "fullPath": "/Common/ocsp.example.com.crt", - "generation": 548, - "selfLink": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt?ver=13.0.0", - "certValidationOptions": [ - "ocsp" - ], - "certificateKeyCurveName": "none", - "certificateKeySize": 4096, - "checksum": "SHA1:2113:b84ae5ed7e236b35206b2ff61289df9547d5afa3", - "createTime": "2017-10-25T20:56:09Z", - "createdBy": "admin", - "expirationDate": 1545199767, - "expirationString": "Dec 19 06:09:27 2018 GMT", - "isBundle": "false", - "issuer": "CN=Alice Ltd Intermediate CA,OU=Alice Ltd Certificate Authority,O=Alice Ltd,ST=England,C=GB", - "issuerCert": "/Common/intermediate.crt", - "issuerCertReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~intermediate.crt?ver=13.0.0" - }, - "keyType": "rsa-public", - "lastUpdateTime": "2017-10-25T20:56:09Z", - "mode": 33188, - "revision": 1, - "serialNumber": "4096", - "size": 2113, - "sourcePath": "file:///var/config/rest/downloads/ocsp.example.com.crt", - "subject": "CN=ocsp.example.com,OU=Alice Ltd Certificate Authority,O=Alice Ltd,ST=England,C=GB", - "updatedBy": "admin", - "version": 3, - "bundleCertificatesReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt/bundle-certificates?ver=13.0.0", - "isSubcollection": true - }, - "certValidatorsReference": { - "link": "https://localhost/mgmt/tm/sys/file/ssl-cert/~Common~ocsp.example.com.crt/cert-validators?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_global_settings.json b/test/units/modules/network/f5/fixtures/load_sys_global_settings.json deleted file mode 100644 index 191d8178a4..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_global_settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:sys:global-settings:global-settingsstate", - "selfLink": "https://localhost/mgmt/tm/sys/global-settings?ver=13.0.0", - "awsApiMaxConcurrency": 1, - "consoleInactivityTimeout": 0, - "customAddr": "none", - "failsafeAction": "go-offline-restart-tm", - "fileBlacklistPathPrefix": "{/shared/3dns/} {/shared/bin/} {/shared/core/} {/shared/datasync/} {/shared/em/} {/shared/GeoIP/} {/shared/images/} {/shared/lib/} {/shared/lib64/} {/shared/log/} {/shared/lost+found/} {/shared/mgmt/} {/shared/nfb/} {/shared/ssh/} {/shared/statsd/} {/shared/tmstat/} {/shared/vadc/} {/config/aaa/} {/config/big3d/} {/config/bigip/} {/config/filestore/} {/config/gtm/} {/config/httpd/} {/config/ntp.conf} {/config/rndc.key} {/config/ssh/} {/config/ssl/}", - "fileBlacklistReadOnlyPathPrefix": "{/etc/shadow}", - "fileLocalPathPrefix": "{/shared/} {/tmp/}", - "fileWhitelistPathPrefix": "{/var/local/scf} {/tmp/} {/shared/} {/config/} {/usr/share/aws/}", - "guiSecurityBanner": "enabled", - "guiSecurityBannerText": "Welcome to the BIG-IP Configuration Utility.\n\nLog in with your username and password using the fields on the left.", - "guiSetup": "disabled", - "hostAddrMode": "management", - "hostname": "bigip1", - "lcdDisplay": "enabled", - "ledLocator": "disabled", - "mgmtDhcp": "enabled", - "netReboot": "disabled", - "passwordPrompt": "Password", - "quietBoot": "enabled", - "usernamePrompt": "Username" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_httpd.json b/test/units/modules/network/f5/fixtures/load_sys_httpd.json deleted file mode 100644 index 38d761681b..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_httpd.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:sys:httpd:httpdstate", - "selfLink": "https://localhost/mgmt/tm/sys/httpd?ver=12.1.2", - "allow": [ - "All" - ], - "authName": "BIG-IP", - "authPamDashboardTimeout": "off", - "authPamIdleTimeout": 1200, - "authPamValidateIp": "on", - "fastcgiTimeout": 300, - "fipsCipherVersion": 0, - "hostnameLookup": "off", - "logLevel": "warn", - "maxClients": 10, - "redirectHttpToHttps": "disabled", - "requestBodyMaxTimeout": 0, - "requestBodyMinRate": 500, - "requestBodyTimeout": 60, - "requestHeaderMaxTimeout": 40, - "requestHeaderMinRate": 500, - "requestHeaderTimeout": 20, - "sslCertfile": "/etc/httpd/conf/ssl.crt/server.crt", - "sslCertkeyfile": "/etc/httpd/conf/ssl.key/server.key", - "sslCiphersuite": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES128-SHA256:AES256-SHA256:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA", - "sslOcspDefaultResponder": "http://127.0.0.1", - "sslOcspEnable": "off", - "sslOcspOverrideResponder": "off", - "sslOcspResponderTimeout": 300, - "sslOcspResponseMaxAge": -1, - "sslOcspResponseTimeSkew": 300, - "sslPort": 443, - "sslProtocol": "all -SSLv2 -SSLv3", - "sslVerifyClient": "no", - "sslVerifyDepth": 10 -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_httpd_non_default.json b/test/units/modules/network/f5/fixtures/load_sys_httpd_non_default.json deleted file mode 100644 index 05051b9c08..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_httpd_non_default.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "kind": "tm:sys:httpd:httpdstate", - "selfLink": "https://localhost/mgmt/tm/sys/httpd?ver=12.1.2", - "allow": [ - "All" - ], - "authName": "BIG-IP", - "authPamDashboardTimeout": "off", - "authPamIdleTimeout": 1200, - "authPamValidateIp": "on", - "fastcgiTimeout": 300, - "fipsCipherVersion": 0, - "hostnameLookup": "off", - "logLevel": "warn", - "maxClients": 10, - "redirectHttpToHttps": "disabled", - "requestBodyMaxTimeout": 0, - "requestBodyMinRate": 500, - "requestBodyTimeout": 60, - "requestHeaderMaxTimeout": 40, - "requestHeaderMinRate": 500, - "requestHeaderTimeout": 20, - "sslCertfile": "/etc/httpd/conf/ssl.crt/server.crt", - "sslCertkeyfile": "/etc/httpd/conf/ssl.key/server.key", - "sslCiphersuite": "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384", - "sslOcspDefaultResponder": "http://127.0.0.1", - "sslOcspEnable": "off", - "sslOcspOverrideResponder": "off", - "sslOcspResponderTimeout": 300, - "sslOcspResponseMaxAge": -1, - "sslOcspResponseTimeSkew": 300, - "sslPort": 443, - "sslProtocol": "all -SSLv2", - "sslVerifyClient": "no", - "sslVerifyDepth": 10 -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_log_config_destination_1.json b/test/units/modules/network/f5/fixtures/load_sys_log_config_destination_1.json deleted file mode 100644 index 5288ed250c..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_log_config_destination_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:log-config:destination:remote-syslog:remote-syslogstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 1767, - "selfLink": "https://localhost/mgmt/tm/sys/log-config/destination/remote-syslog/~Common~foo?ver=13.1.0.4", - "defaultFacility": "local0", - "defaultSeverity": "info", - "format": "rfc5424", - "remoteHighSpeedLog": "/Common/pool1", - "remoteHighSpeedLogReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/remote-high-speed-log/~Common~pool1?ver=13.1.0.4" - } -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json b/test/units/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json deleted file mode 100644 index 54dd889114..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_log_config_publisher_1.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "kind": "tm:sys:log-config:publisher:publisherstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 5400, - "selfLink": "https://localhost/mgmt/tm/sys/log-config/publisher/~Common~foo?ver=13.1.0.4", - "description": "my description", - "destinations": [ - { - "name": "SECURITYLOGSERVERS-LOGGING", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/remote-high-speed-log/~Common~SECURITYLOGSERVERS-LOGGING?ver=13.1.0.4" - } - }, - { - "name": "local-db", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/local-database/~Common~local-db?ver=13.1.0.4" - } - }, - { - "name": "local-syslog", - "partition": "Common", - "nameReference": { - "link": "https://localhost/mgmt/tm/sys/log-config/destination/local-syslog/~Common~local-syslog?ver=13.1.0.4" - } - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_management_route_1.json b/test/units/modules/network/f5/fixtures/load_sys_management_route_1.json deleted file mode 100644 index da3f5fcd16..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_management_route_1.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:management-route:management-routestate", - "name": "default", - "partition": "Common", - "fullPath": "/Common/default", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/sys/management-route/~Common~default?ver=13.1.0.4", - "description": "configured-by-dhcp", - "gateway": "10.0.2.2", - "mtu": 0, - "network": "default" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_provision_default.json b/test/units/modules/network/f5/fixtures/load_sys_provision_default.json deleted file mode 100644 index 7be868a3ee..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_provision_default.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "level": "dedicated", - "memory": "medium", - "module": "urldb" -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_sys_smtp_server.json b/test/units/modules/network/f5/fixtures/load_sys_smtp_server.json deleted file mode 100644 index 9ed191eab7..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_smtp_server.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:sys:smtp-server:smtp-serverstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/sys/smtp-server/~Common~foo?ver=13.0.0", - "authenticationEnabled": true, - "encryptedConnection": "ssl", - "fromAddress": "no-reply@foo.bar", - "localHostName": "mail-host.foo.bar", - "passwordEncrypted": "$M$Ch$this-is-encrypted==", - "smtpServerHostName": "mail.foo.bar", - "smtpServerPort": 465, - "username": "admin" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_1.json b/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_1.json deleted file mode 100644 index f45c34651f..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "disabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_2.json b/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_2.json deleted file mode 100644 index 32c29325e7..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_2.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "rw", - "communityName": "foo", - "ipv6": "disabled", - "oidSubset": ".1", - "source": "1.1.1.1" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_3.json b/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_3.json deleted file mode 100644 index d9a9ef121f..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_3.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "enabled", - "oidSubset": ".1", - "source": "2001:0db8:85a3:0000:0000:8a2e:0370:7334" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_4.json b/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_4.json deleted file mode 100644 index 38bf487def..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_snmp_communities_4.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:sys:snmp:communities:communitiesstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/communities/~Common~foo?ver=13.0.0", - "access": "ro", - "communityName": "foo", - "ipv6": "enabled" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_snmp_users_1.json b/test/units/modules/network/f5/fixtures/load_sys_snmp_users_1.json deleted file mode 100644 index 4b0aac8f2a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_snmp_users_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:snmp:users:usersstate", - "name": "/Common/foo", - "fullPath": "/Common/foo", - "generation": 0, - "selfLink": "https://localhost/mgmt/tm/sys/snmp/users/~Common~foo?ver=13.0.0", - "access": "ro", - "authPasswordEncrypted": "secret", - "authProtocol": "sha", - "oidSubset": ".1", - "privacyPasswordEncrypted": "secret", - "privacyProtocol": "aes", - "securityLevel": "auth-privacy", - "username": "foo" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_software_image_1.json b/test/units/modules/network/f5/fixtures/load_sys_software_image_1.json deleted file mode 100644 index 32a9afe075..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_software_image_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:sys:software:image:imagestate", - "name": "foo.iso", - "fullPath": "foo.iso", - "generation": 113, - "selfLink": "https://localhost/mgmt/tm/sys/software/image/foo.iso?ver=13.1.0.4", - "build": "0.0.3", - "buildDate": "Sat Jun 16 00 03 03 PDT 2018", - "checksum": "8cdbd094195fab4b2b47ff4285577b70", - "fileSize": "1948 MB", - "lastModified": "Thu May 17 16:19:34 2018", - "product": "BIG-IP", - "verified": "yes", - "version": "13.1.0.8" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_software_update.json b/test/units/modules/network/f5/fixtures/load_sys_software_update.json deleted file mode 100644 index f1617ff2bb..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_software_update.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:sys:software:update:updatestate", - "selfLink": "https://localhost/mgmt/tm/sys/software/update?ver=13.0.0", - "autoCheck": "enabled", - "autoPhonehome": "enabled", - "checkStatus": "none", - "errors": 0, - "frequency": "weekly" -} diff --git a/test/units/modules/network/f5/fixtures/load_sys_syslog_1.json b/test/units/modules/network/f5/fixtures/load_sys_syslog_1.json deleted file mode 100644 index 3e4d257637..0000000000 --- a/test/units/modules/network/f5/fixtures/load_sys_syslog_1.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.1.0.7", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg" -} diff --git a/test/units/modules/network/f5/fixtures/load_tg_ha_order.json b/test/units/modules/network/f5/fixtures/load_tg_ha_order.json deleted file mode 100644 index a1ff91c851..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tg_ha_order.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "traffic-group-2", - "partition": "Common", - "fullPath": "/Common/traffic-group-2", - "generation": 227, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-2?ver=12.1.4", - "autoFailbackEnabled": "true", - "autoFailbackTime": 60, - "haLoadFactor": 1, - "isFloating": "true", - "mac": "none", - "unitId": 1, - "haOrder": [ - "/Common/v12-1.ansible.local" - ], - "haOrderReference": [ - { - "link": "https://localhost/mgmt/tm/cm/device/~Common~v12-1.ansible.local?ver=12.1.4" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_auth_partition.json b/test/units/modules/network/f5/fixtures/load_tm_auth_partition.json deleted file mode 100644 index 386c30f7e2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_auth_partition.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "kind": "tm:auth:partition:partitionstate", - "name": "foo", - "fullPath": "foo", - "generation": 212, - "selfLink": "https://localhost/mgmt/tm/auth/partition/foo?ver=13.0.0", - "defaultRouteDomain": 0, - "description": "my description" -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json b/test/units/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json deleted file mode 100644 index 7d5aac7b61..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_auth_password_policy_1.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:auth:password-policy:password-policystate", - "selfLink": "https://localhost/mgmt/tm/auth/password-policy?ver=13.1.0.7", - "expirationWarning": 7, - "maxDuration": 99999, - "maxLoginFailures": 0, - "minDuration": 0, - "minimumLength": 6, - "passwordMemory": 0, - "policyEnforcement": "disabled", - "requiredLowercase": 0, - "requiredNumeric": 0, - "requiredSpecial": 0, - "requiredUppercase": 0 -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json b/test/units/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json deleted file mode 100644 index 246226055c..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_auth_tacacs_1.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:auth:tacacs:tacacsstate", - "name": "system-auth", - "partition": "Common", - "fullPath": "/Common/system-auth", - "generation": 484, - "selfLink": "https://localhost/mgmt/tm/auth/tacacs/~Common~system-auth?ver=13.1.0.1", - "accounting": "send-to-first-server", - "authentication": "use-first-server", - "debug": "disabled", - "encryption": "enabled", - "protocol": "ftp", - "secret": "secret", - "servers": [ - "11.11.11.11" - ], - "service": "ppp", - "timeout": 10 -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cli_alias_1.json b/test/units/modules/network/f5/fixtures/load_tm_cli_alias_1.json deleted file mode 100644 index bb9b0e9016..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cli_alias_1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "kind": "tm:cli:alias:shared:sharedstate", - "name": "bash", - "partition": "Common", - "fullPath": "/Common/bash", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cli/alias/shared/~Common~bash?ver=13.1.0.7", - "tmCommand": "run /util bash", - "description": "Run the bash shell" -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cli_script_1.json b/test/units/modules/network/f5/fixtures/load_tm_cli_script_1.json deleted file mode 100644 index dd1beb55ef..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cli_script_1.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "kind": "tm:cli:script:scriptstate", - "name": "foo", - "partition": "Common", - "fullPath": "/Common/foo", - "generation": 62, - "selfLink": "https://localhost/mgmt/tm/cli/script/~Common~foo?ver=12.1.3", - "apiAnonymous": "proc script::run {} {}\n", - "ignoreVerification": "false", - "scriptChecksum": "2a7a57176f8d6ef585ea3cd0db787718", - "totalSigningStatus": "checksum", - "verificationStatus": "checksum-verified" -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cm_device.json b/test/units/modules/network/f5/fixtures/load_tm_cm_device.json deleted file mode 100644 index c99890d313..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cm_device.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "kind": "tm:cm:device:devicestate", - "name": "bigip1", - "partition": "Common", - "fullPath": "/Common/bigip1", - "generation": 65, - "selfLink": "https://localhost/mgmt/tm/cm/device/~Common~bigip1?ver=12.1.2", - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop", - "LTM, 10 Gbps, VE|T487107-2453693|IPV6 Gateway|Rate Shaping|Ram Cache|External Interface and Network HSM, VE|SSL, Forward Proxy, VE|DENY-VER-GBB|Application Acceleration Manager, Core|PEM, Quota Management, VE|BIG-IP, iAppsLX (Node.js)|Max Compression, VE|BIG-IP VE, Multicast Routing|Recycle, BIG-IP, VE|APM, Limited|LTM to Best Bundle Upgrade, 10Gbps|BIG-IP, iRulesLX (Node.js)|SSL, VE|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop|SDN Services, VE|Acceleration Manager, VE|AFM, VE|APM, Base, VE GBB (500 CCU)|ASM, VE|DNS-GTM, Base, 10Gbps|DNS Licensed Objects, Unlimited|GTM Licensed Objects, Unlimited|GTM Rate, 250K|DNS Rate Fallback, 250K|DNS Rate Limit, 250K QPS|GTM Rate Fallback, 250K|CGN, BIG-IP VE, AFM ONLY|PSM, VE|Routing Bundle, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "baseMac": "08:00:27:27:74:82", - "build": "0.0.249", - "cert": "/Common/dtdi.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/cm/cert/~Common~dtdi.crt?ver=12.1.2" - }, - "chassisId": "2d37dfa6-c0e8-4e4a-ae983c67356d", - "chassisType": "individual", - "configsyncIp": "10.2.2.2", - "edition": "Final", - "failoverState": "active", - "haCapacity": 0, - "hostname": "bigip1", - "key": "/Common/dtdi.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/cm/key/~Common~dtdi.key?ver=12.1.2" - }, - "managementIp": "10.0.2.15", - "marketingName": "BIG-IP Virtual Edition", - "mirrorIp": "10.2.2.2", - "mirrorSecondaryIp": "10.2.3.2", - "multicastInterface": "eth0", - "multicastIp": "224.0.0.245", - "multicastPort": 62960, - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 Access Sessions)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "IPI Subscription, 1Yr, VE", - "IPI Subscription, 1Yr, VE-10G", - "IPI Subscription, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "SWG Subscription, 1Yr, VE", - "URL Filtering Subscription, 1Yr, VE" - ], - "platformId": "Z100", - "product": "BIG-IP", - "selfDevice": "true", - "timeLimitedModules": [ - "IPI Subscription, 3Yr, VE|E430735-0717882|20170429|20170511|SUBSCRIPTION", - "SWG Subscription, 3Yr, VE|W797718-6984294|20170429|20170511|SUBSCRIPTION", - "URL Filtering Subscription, 3Yr, VE|G132953-9613041|20170429|20170511|SUBSCRIPTION" - ], - "timeZone": "America/Los_Angeles", - "version": "12.1.2", - "unicastAddress": [ - { - "effectiveIp": "management-ip", - "effectivePort": 1026, - "ip": "management-ip", - "port": 1026 - }, - { - "effectiveIp": "10.2.2.2", - "effectivePort": 1026, - "ip": "10.2.2.2", - "port": 1026 - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cm_device_default.json b/test/units/modules/network/f5/fixtures/load_tm_cm_device_default.json deleted file mode 100644 index 13d77f75db..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cm_device_default.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "kind": "tm:cm:device:devicestate", - "name": "bigip1", - "partition": "Common", - "fullPath": "/Common/bigip1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/device/~Common~bigip1?ver=12.1.2", - "activeModules": [ - "APM, Max, VE (2500 CCU, 10000 Access Sessions)|P961057-1761515|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop", - "LTM, 10 Gbps, VE|T487107-2453693|IPV6 Gateway|Rate Shaping|Ram Cache|External Interface and Network HSM, VE|SSL, Forward Proxy, VE|DENY-VER-GBB|Application Acceleration Manager, Core|PEM, Quota Management, VE|BIG-IP, iAppsLX (Node.js)|Max Compression, VE|BIG-IP VE, Multicast Routing|Recycle, BIG-IP, VE|APM, Limited|LTM to Best Bundle Upgrade, 10Gbps|BIG-IP, iRulesLX (Node.js)|SSL, VE|Anti-Virus Checks|Base Endpoint Security Checks|Firewall Checks|Machine Certificate Checks|Network Access|Protected Workspace|Secure Virtual Keyboard|APM, Web Application|App Tunnel|Remote Desktop|SDN Services, VE|Acceleration Manager, VE|AFM, VE|APM, Base, VE GBB (500 CCU)|ASM, VE|DNS-GTM, Base, 10Gbps|DNS Licensed Objects, Unlimited|GTM Licensed Objects, Unlimited|GTM Rate, 250K|DNS Rate Fallback, 250K|DNS Rate Limit, 250K QPS|GTM Rate Fallback, 250K|CGN, BIG-IP VE, AFM ONLY|PSM, VE|Routing Bundle, VE|DNSSEC", - "PEM, VE|X895364-1851682" - ], - "baseMac": "08:00:27:27:74:82", - "build": "0.0.249", - "cert": "/Common/dtdi.crt", - "certReference": { - "link": "https://localhost/mgmt/tm/cm/cert/~Common~dtdi.crt?ver=12.1.2" - }, - "chassisId": "42d93eba-35bb-4f01-4663fb03951a", - "chassisType": "individual", - "configsyncIp": "none", - "edition": "Final", - "failoverState": "active", - "haCapacity": 0, - "hostname": "bigip1", - "key": "/Common/dtdi.key", - "keyReference": { - "link": "https://localhost/mgmt/tm/cm/key/~Common~dtdi.key?ver=12.1.2" - }, - "managementIp": "10.0.2.15", - "marketingName": "BIG-IP Virtual Edition", - "mirrorIp": "any6", - "mirrorSecondaryIp": "any6", - "multicastIp": "any6", - "multicastPort": 0, - "optionalModules": [ - "APM, Base, VE (50 CCU / 200 Access Sessions)", - "App Mode (TMSH Only, No Root/Bash)", - "Concurrent Users", - "Concurrent Users and Access Sessions, VE", - "IPI Subscription, 1Yr, VE", - "IPI Subscription, 1Yr, VE-10G", - "IPI Subscription, 3Yr, VE-10G", - "LTM to Better Bundle Upgrade, 10Gbps", - "PEM URL Filtering, 1Yr, HIGH PERF", - "PEM URL Filtering, 3Yr, HIGH PERF", - "Routing Bundle", - "SWG Subscription, 1Yr, VE", - "URL Filtering Subscription, 1Yr, VE" - ], - "platformId": "Z100", - "product": "BIG-IP", - "selfDevice": "true", - "timeLimitedModules": [ - "IPI Subscription, 3Yr, VE|E430735-0717882|20170502|20170511|SUBSCRIPTION", - "SWG Subscription, 3Yr, VE|W797718-6984294|20170502|20170511|SUBSCRIPTION", - "URL Filtering Subscription, 3Yr, VE|G132953-9613041|20170502|20170511|SUBSCRIPTION" - ], - "timeZone": "America/Los_Angeles", - "version": "12.1.2" -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cm_device_group.json b/test/units/modules/network/f5/fixtures/load_tm_cm_device_group.json deleted file mode 100644 index 6660234155..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cm_device_group.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "kind": "tm:cm:device-group:device-groupstate", - "name": "device_trust_group", - "partition": "Common", - "fullPath": "/Common/device_trust_group", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/device-group/~Common~device_trust_group?ver=13.0.0", - "asmSync": "disabled", - "autoSync": "enabled", - "fullLoadOnSync": "false", - "incrementalConfigSyncSizeMax": 1024, - "networkFailover": "disabled", - "saveOnAutoSync": "false", - "type": "sync-only", - "devicesReference": { - "link": "https://localhost/mgmt/tm/cm/device-group/~Common~device_trust_group/devices?ver=13.0.0", - "isSubcollection": true - } -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json b/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json deleted file mode 100644 index dbbb190725..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_1.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "traffic-group-1", - "partition": "Common", - "fullPath": "/Common/traffic-group-1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-1?ver=13.0.0", - "autoFailbackEnabled": "false", - "autoFailbackTime": 60, - "failoverMethod": "ha-order", - "haLoadFactor": 1, - "isFloating": "true", - "mac": "none", - "monitor": {}, - "unitId": 1 -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json b/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json deleted file mode 100644 index 3b93cdae9a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_cm_traffic_group_2.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "kind": "tm:cm:traffic-group:traffic-groupstate", - "name": "asd", - "partition": "Common", - "fullPath": "/Common/asd", - "generation": 176, - "selfLink": "https://localhost/mgmt/tm/cm/traffic-group/~Common~asd?ver=13.0.0", - "autoFailbackEnabled": "false", - "autoFailbackTime": 60, - "failoverMethod": "ha-order", - "haLoadFactor": 1, - "isFloating": "true", - "mac": "00:00:00:00:00:02", - "monitor": {}, - "unitId": 2 -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_net_self.json b/test/units/modules/network/f5/fixtures/load_tm_net_self.json deleted file mode 100644 index 9bf4f23458..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_net_self.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "kind": "tm:net:self:selfstate", - "name": "net1", - "partition": "Common", - "fullPath": "/Common/net1", - "generation": 7, - "selfLink": "https://localhost/mgmt/tm/net/self/~Common~net1?ver=13.0.0", - "address": "10.10.10.10%1/24", - "addressSource": "from-user", - "floating": "disabled", - "inheritedTrafficGroup": "false", - "trafficGroup": "/Common/traffic-group-local-only", - "trafficGroupReference": { - "link": "https://localhost/mgmt/tm/cm/traffic-group/~Common~traffic-group-local-only?ver=13.0.0" - }, - "unit": 0, - "vlan": "/Common/net1", - "vlanReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=13.0.0" - }, - "allowService": [ - "tcp:80", - "udp:53", - "gre:0" - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_net_trunk_1.json b/test/units/modules/network/f5/fixtures/load_tm_net_trunk_1.json deleted file mode 100644 index af312d49f9..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_net_trunk_1.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "kind": "tm:net:trunk:trunkstate", - "name": "foo", - "fullPath": "foo", - "generation": 79, - "selfLink": "https://localhost/mgmt/tm/net/trunk/foo?ver=13.1.0.4", - "bandwidth": 10000, - "cfgMbrCount": 1, - "distributionHash": "dst-mac", - "id": 0, - "lacp": "disabled", - "lacpMode": "active", - "lacpTimeout": "long", - "linkSelectPolicy": "maximum-bandwidth", - "macAddress": "08:00:27:ea:18:52", - "media": "10000", - "qinqEthertype": "0x8100", - "stp": "enabled", - "type": "normal", - "workingMbrCount": 1, - "interfaces": [ - "1.3" - ], - "interfacesReference": [ - { - "link": "https://localhost/mgmt/tm/net/interface/1.3?ver=13.1.0.4" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_1.json b/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_1.json deleted file mode 100644 index 47d7628207..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_1.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.0.0", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg", - "remoteServers": [ - { - "name": "/Common/remotesyslog1", - "host": "10.10.10.10", - "localIp": "none", - "remotePort": 514 - }, - { - "name": "/Common/remotesyslog2", - "host": "20.20.20.20", - "localIp": "1.1.1.1", - "remotePort": 8000 - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_2.json b/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_2.json deleted file mode 100644 index d1eb8929d5..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tm_sys_syslog_2.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "kind": "tm:sys:syslog:syslogstate", - "selfLink": "https://localhost/mgmt/tm/sys/syslog?ver=13.0.0", - "authPrivFrom": "notice", - "authPrivTo": "emerg", - "clusteredHostSlot": "enabled", - "clusteredMessageSlot": "disabled", - "consoleLog": "enabled", - "cronFrom": "warning", - "cronTo": "emerg", - "daemonFrom": "notice", - "daemonTo": "emerg", - "isoDate": "disabled", - "kernFrom": "debug", - "kernTo": "emerg", - "local6From": "notice", - "local6To": "emerg", - "mailFrom": "notice", - "mailTo": "emerg", - "messagesFrom": "notice", - "messagesTo": "warning", - "userLogFrom": "notice", - "userLogTo": "emerg", - "remoteServers": [ - { - "name": "/Common/remotesyslog1", - "host": "10.10.10.10", - "localIp": "none", - "remotePort": 514 - }, - { - "name": "/Common/remotesyslog2", - "host": "10.10.10.10", - "localIp": "1.1.1.1", - "remotePort": 8000 - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_tmm_log.json b/test/units/modules/network/f5/fixtures/load_tmm_log.json deleted file mode 100644 index 5d634183b2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_tmm_log.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "kind": "tm:sys:daemon-log-settings:tmm:tmmstate", - "selfLink": "https://localhost/mgmt/tm/sys/daemon-log-settings/tmm?ver=12.1.3.6", - "arpLogLevel": "warning", - "httpCompressionLogLevel": "error", - "httpLogLevel": "error", - "ipLogLevel": "warning", - "iruleLogLevel": "informational", - "layer4LogLevel": "notice", - "netLogLevel": "warning", - "osLogLevel": "notice", - "pvaLogLevel": "informational", - "sslLogLevel": "warning" -} diff --git a/test/units/modules/network/f5/fixtures/load_vlan.json b/test/units/modules/network/f5/fixtures/load_vlan.json deleted file mode 100644 index 85d7fbb228..0000000000 --- a/test/units/modules/network/f5/fixtures/load_vlan.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "kind": "tm:net:vlan:vlanstate", - "name": "somevlan", - "partition": "Common", - "fullPath": "/Common/somevlan", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan?ver=12.1.0", - "autoLasthop": "default", - "cmpHash": "default", - "dagRoundRobin": "disabled", - "dagTunnel": "outer", - "failsafe": "disabled", - "failsafeAction": "failover-restart-tm", - "failsafeTimeout": 90, - "ifIndex": 480, - "learning": "enable-forward", - "mtu": 1500, - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "sourceChecking": "disabled", - "tag": 4094, - "interfacesReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan/interfaces?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_vlan_interfaces.json b/test/units/modules/network/f5/fixtures/load_vlan_interfaces.json deleted file mode 100644 index 9fa16f76b2..0000000000 --- a/test/units/modules/network/f5/fixtures/load_vlan_interfaces.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "kind": "tm:net:vlan:interfaces:interfacescollectionstate", - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~vlan1/interfaces?ver=13.0.0", - "items": [ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.2", - "fullPath": "1.2", - "generation": 105, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~vlan1/interfaces/1.2?ver=13.0.0", - "tagMode": "none", - "tagged": true - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json b/test/units/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json deleted file mode 100644 index 96b3150f78..0000000000 --- a/test/units/modules/network/f5/fixtures/load_vlan_tagged_ifcs.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.2", - "fullPath": "1.2", - "generation": 2, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~internal/interfaces/1.2?ver=12.1.0", - "tagMode": "none", - "tagged": true - } - - ]
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/load_vlan_untag_ifcs.json b/test/units/modules/network/f5/fixtures/load_vlan_untag_ifcs.json deleted file mode 100644 index ebc530e74a..0000000000 --- a/test/units/modules/network/f5/fixtures/load_vlan_untag_ifcs.json +++ /dev/null @@ -1,11 +0,0 @@ -[ - { - "kind": "tm:net:vlan:interfaces:interfacesstate", - "name": "1.1", - "fullPath": "1.1", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~internal/interfaces/1.1?ver=12.1.0", - "tagMode": "none", - "untagged": true - } - ]
\ No newline at end of file diff --git a/test/units/modules/network/f5/fixtures/pool_members_subcollection.json b/test/units/modules/network/f5/fixtures/pool_members_subcollection.json deleted file mode 100644 index 1041f8f62c..0000000000 --- a/test/units/modules/network/f5/fixtures/pool_members_subcollection.json +++ /dev/null @@ -1,21 +0,0 @@ -[ - { - "kind": "tm:ltm:pool:members:membersstate", - "name": "1.1.1.1:80", - "partition": "Common", - "fullPath": "/Common/1.1.1.1:80", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/ltm/pool/~Common~test_pool/members/~Common~1.1.1.1:80?ver=11.5.4", - "address": "1.1.1.1", - "connectionLimit": 0, - "dynamicRatio": 1, - "inheritProfile": "enabled", - "logging": "disabled", - "monitor": "default", - "priorityGroup": 0, - "rateLimit": "disabled", - "ratio": 1, - "session": "user-disabled", - "state": "up" - } - ] diff --git a/test/units/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json b/test/units/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json deleted file mode 100644 index cbb389364d..0000000000 --- a/test/units/modules/network/f5/fixtures/update_iapp_service_parameters_f5_http.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "name": "http_example", - "partition": "Common", - "template": "/Common/f5.http", - "lists": [ - { - "name": "irules__irules", - "encrypted": "no", - "value": [ - "/Common/lgyft" - ] - }, - { - "name": "net__client_vlan", - "encrypted": "no", - "value": [ - "/Common/net2" - ] - } - ], - "tables": [ - { - "columnNames": [ - "name" - ], - "name": "pool__hosts", - "rows": [ - { - "row": [ - "demo.example.com" - ] - } - ] - }, - { - "columnNames": [ - "addr", - "connection_limit" - ], - "name": "pool__members", - "rows": [ - { - "row": [ - "20.1.1.1", - "0" - ] - }, - { - "row": [ - "10.1.1.2", - "0" - ] - } - ] - } - ], - "variables": [ - { - "name": "afm__policy", - "value": "/#do_not_use#" - }, - { - "name": "afm__dos_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "afm__protocol_security_profile", - "value": "/#do_not_use#" - }, - { - "name": "asm__use_asm", - "value": "/#do_not_use#" - }, - { - "name": "client__http_compression", - "value": "/#do_not_use#" - }, - { - "name": "client__standard_caching_without_wa", - "value": "/#do_not_use#" - }, - { - "name": "client__tcp_wan_opt", - "value": "/#create_new#" - }, - { - "name": "monitor__monitor", - "value": "/#create_new#" - }, - { - "name": "monitor__frequency", - "value": "30" - }, - { - "name": "monitor__uri", - "value": "/my/path" - }, - { - "name": "monitor__response", - "value": "" - }, - { - "name": "net__client_mode", - "value": "wan" - }, - { - "name": "net__server_mode", - "value": "lan" - }, - { - "name": "net__vlan_mode", - "value": "all" - }, - { - "name": "pool__addr", - "value": "10.10.10.10" - }, - { - "name": "pool__http", - "value": "/#create_new#" - }, - { - "name": "pool__mask", - "value": "" - }, - { - "name": "pool__persist", - "value": "/#cookie#" - }, - { - "name": "pool__lb_method", - "value": "least-connections-member" - }, - { - "name": "pool__pool_to_use", - "value": "/#create_new#" - }, - { - "name": "pool__port_secure", - "value": "443" - }, - { - "name": "pool__redirect_port", - "value": "80" - }, - { - "name": "pool__redirect_to_https", - "value": "yes" - }, - { - "name": "pool__xff", - "value": "yes" - }, - { - "name": "server__oneconnect", - "value": "/#create_new#" - }, - { - "name": "server__tcp_lan_opt", - "value": "/#create_new#" - }, - { - "name": "ssl__cert", - "value": "/Common/default.crt" - }, - { - "name": "ssl__client_ssl_profile", - "value": "/#create_new#" - }, - { - "name": "ssl__key", - "value": "/Common/default.key" - }, - { - "name": "ssl__mode", - "value": "client_ssl" - }, - { - "name": "ssl__use_chain_cert", - "value": "/#do_not_use#" - }, - { - "name": "ssl_encryption_questions__advanced", - "value": "yes" - }, - { - "name": "stats__analytics", - "value": "/#do_not_use#" - }, - { - "name": "stats__request_logging", - "value": "/#do_not_use#" - } - ] -} diff --git a/test/units/modules/network/f5/fixtures/update_vlan_description.json b/test/units/modules/network/f5/fixtures/update_vlan_description.json deleted file mode 100644 index 99bf483343..0000000000 --- a/test/units/modules/network/f5/fixtures/update_vlan_description.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "kind": "tm:net:vlan:vlanstate", - "name": "somevlan", - "partition": "Common", - "fullPath": "/Common/somevlan", - "description": "changed_this", - "generation": 1, - "selfLink": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan?ver=12.1.0", - "autoLasthop": "default", - "cmpHash": "default", - "dagRoundRobin": "disabled", - "dagTunnel": "outer", - "failsafe": "disabled", - "failsafeAction": "failover-restart-tm", - "failsafeTimeout": 90, - "ifIndex": 480, - "learning": "enable-forward", - "mtu": 1500, - "sflow": { - "pollInterval": 0, - "pollIntervalGlobal": "yes", - "samplingRate": 0, - "samplingRateGlobal": "yes" - }, - "sourceChecking": "disabled", - "tag": 4094, - "interfacesReference": { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~somevlan/interfaces?ver=12.1.0", - "isSubcollection": true - } -}
\ No newline at end of file diff --git a/test/units/modules/network/f5/test_bigip_apm_acl.py b/test/units/modules/network/f5/test_bigip_apm_acl.py deleted file mode 100644 index 157438c258..0000000000 --- a/test/units/modules/network/f5/test_bigip_apm_acl.py +++ /dev/null @@ -1,243 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_apm_acl import ApiParameters - from library.modules.bigip_apm_acl import ModuleParameters - from library.modules.bigip_apm_acl import ModuleManager - from library.modules.bigip_apm_acl import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_apm_acl import ApiParameters - from ansible.modules.network.f5.bigip_apm_acl import ModuleParameters - from ansible.modules.network.f5.bigip_apm_acl import ModuleManager - from ansible.modules.network.f5.bigip_apm_acl import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - acl_order=0, - type='static', - path_match_case=True, - description='foobar', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ] - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.acl_order == 0 - assert p.type == 'static' - assert p.path_match_case == 'true' - assert p.description == 'foobar' - assert p.entries[0] == dict(action='allow', - dstEndPort=80, - dstStartPort=80, - dstSubnet='192.168.1.1/32', - srcEndPort=443, - srcStartPort=443, - srcSubnet='10.10.10.0/25', - protocol=6, - host='foobar.com', - paths='/shopfront', - scheme='https' - ) - - def test_api_parameters(self): - args = load_fixture('load_apm_acl.json') - - p = ApiParameters(params=args) - assert p.name == 'lastone' - assert p.acl_order == 2 - assert p.type == 'static' - assert p.path_match_case == 'false' - assert p.description == 'foobar' - assert p.entries[0] == dict(action='discard', - dstEndPort=0, - dstStartPort=0, - dstSubnet='0.0.0.0/0', - srcEndPort=0, - srcStartPort=0, - srcSubnet='0.0.0.0/0', - protocol=1, - scheme='any', - log='none' - ) - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_L4_L7_ACL(self, *args): - set_module_args(dict( - name='foo', - acl_order=0, - type='static', - path_match_case=True, - description='my description', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['acl_order'] == 0 - assert results['description'] == 'my description' - assert results['type'] == 'static' - assert results['path_match_case'] == 'yes' - assert results['entries'] == [ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - )] - - def test_update_L4_L7_ACL(self, *args): - set_module_args(dict( - name='lastone', - acl_order=0, - path_match_case='yes', - entries=[ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_apm_acl.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['acl_order'] == 0 - assert results['path_match_case'] == 'yes' - assert results['entries'] == [ - dict(action='allow', - dst_port='80', - dst_addr='192.168.1.1', - src_port='443', - src_addr='10.10.10.0', - src_mask='255.255.255.128', - protocol='tcp', - host_name='foobar.com', - paths='/shopfront', - scheme='https' - )] diff --git a/test/units/modules/network/f5/test_bigip_apm_network_access.py b/test/units/modules/network/f5/test_bigip_apm_network_access.py deleted file mode 100644 index eafd99cbb7..0000000000 --- a/test/units/modules/network/f5/test_bigip_apm_network_access.py +++ /dev/null @@ -1,209 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_apm_network_access import ApiParameters - from library.modules.bigip_apm_network_access import ModuleParameters - from library.modules.bigip_apm_network_access import ModuleManager - from library.modules.bigip_apm_network_access import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_apm_network_access import ApiParameters - from ansible.modules.network.f5.bigip_apm_network_access import ModuleParameters - from ansible.modules.network.f5.bigip_apm_network_access import ModuleManager - from ansible.modules.network.f5.bigip_apm_network_access import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - ip_version='ipv4', - split_tunnel=True, - description='foobar', - allow_local_subnet=True, - allow_local_dns=True, - snat_pool='foo_pool', - dtls=True, - dtls_port=4443, - ipv4_lease_pool='ipv4lease', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - dns_address_space=['foobar.com'], - excluded_dns_addresses=['bar-foo.org'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.ip_version == 'ipv4' - assert p.split_tunnel == 'true' - assert p.allow_local_subnet == 'true' - assert p.allow_local_dns == 'true' - assert p.snat_pool == '/Common/foo_pool' - assert p.description == 'foobar' - assert p.dtls == 'true' - assert p.dtls_port == 4443 - assert p.ipv4_lease_pool == '/Common/ipv4lease' - assert p.excluded_ipv4_adresses == [dict(subnet='10.10.10.1/32')] - assert p.ipv4_address_space == [dict(subnet='192.168.1.0/24')] - assert p.dns_address_space == ['foobar.com'] - assert p.excluded_dns_addresses == ['bar-foo.org'] - - def test_api_parameters(self): - args = load_fixture('load_apm_network_access.json') - - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.ip_version == 'ipv4-ipv6' - assert p.split_tunnel == 'true' - assert p.allow_local_subnet == 'true' - assert p.allow_local_dns == 'true' - assert p.snat_pool == 'automap' - assert p.dtls == 'false' - assert p.dtls_port == 4433 - assert p.ipv4_lease_pool == '/Common/ipv4lease' - assert p.excluded_ipv4_adresses == [ - dict(subnet='192.168.1.0/24'), - dict(subnet='192.168.2.1/32') - ] - assert p.ipv4_address_space == [ - dict(subnet='10.10.10.1/32'), - dict(subnet='10.11.11.0/24') - ] - assert p.dns_address_space == ['foo.com', 'bar.com'] - assert p.excluded_dns_addresses == ['baz.com', 'bazfoo.com'] - assert p.ipv6_address_space == [dict(subnet="2607:f0d0:1002:51::4/128")] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_ipv4_net_access(self, *args): - set_module_args(dict( - name='foo', - ip_version='ipv4', - split_tunnel=True, - description='foobar', - allow_local_subnet=True, - allow_local_dns=True, - snat_pool='foo_pool', - dtls=True, - dtls_port=4443, - ipv4_lease_pool='ipv4lease', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - dns_address_space=['foobar.com'], - excluded_dns_addresses=['bar-foo.org'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ip_version'] == 'ipv4' - assert results['split_tunnel'] == 'yes' - assert results['allow_local_subnet'] == 'yes' - assert results['allow_local_dns'] == 'yes' - assert results['snat_pool'] == '/Common/foo_pool' - assert results['description'] == 'foobar' - assert results['dtls'] == 'yes' - assert results['dtls_port'] == 4443 - assert results['ipv4_lease_pool'] == '/Common/ipv4lease' - assert results['excluded_ipv4_adresses'] == [dict(subnet='10.10.10.1')] - assert results['ipv4_address_space'] == [dict(subnet='192.168.1.0/24')] - assert results['dns_address_space'] == ['foobar.com'] - assert results['excluded_dns_addresses'] == ['bar-foo.org'] - - def test_update_ipv4_net_access(self, *args): - set_module_args(dict( - name='test', - excluded_ipv4_adresses=[dict(subnet='10.10.10.1')], - ipv4_address_space=[dict(subnet='192.168.1.0/24')], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_apm_network_access.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['excluded_ipv4_adresses'] == [dict(subnet='10.10.10.1')] - assert results['ipv4_address_space'] == [dict(subnet='192.168.1.0/24')] diff --git a/test/units/modules/network/f5/test_bigip_apm_policy_fetch.py b/test/units/modules/network/f5/test_bigip_apm_policy_fetch.py deleted file mode 100644 index 070b1e9b2b..0000000000 --- a/test/units/modules/network/f5/test_bigip_apm_policy_fetch.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_apm_policy_fetch import ModuleParameters - from library.modules.bigip_apm_policy_fetch import ModuleManager - from library.modules.bigip_apm_policy_fetch import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_apm_policy_fetch import ModuleParameters - from ansible.modules.network.f5.bigip_apm_policy_fetch import ModuleManager - from ansible.modules.network.f5.bigip_apm_policy_fetch import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - dest='/tmp/', - force='yes', - file='foo_export', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = ModuleParameters(params=args) - assert p.file == 'foo_export' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_apm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_apm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - - def test_create(self, *args): - set_module_args(dict( - name='fake_policy', - file='foo_export', - dest='/tmp/', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - mp = ModuleParameters(params=module.params) - mp._item_exists = Mock(return_value=True) - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.want = Mock(return_value=mp) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.execute = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_apm_policy_import.py b/test/units/modules/network/f5/test_bigip_apm_policy_import.py deleted file mode 100644 index 356a765cd8..0000000000 --- a/test/units/modules/network/f5/test_bigip_apm_policy_import.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_apm_policy_import import ModuleParameters - from library.modules.bigip_apm_policy_import import ModuleManager - from library.modules.bigip_apm_policy_import import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_apm_policy_import import ModuleParameters - from ansible.modules.network.f5.bigip_apm_policy_import import ModuleManager - from ansible.modules.network.f5.bigip_apm_policy_import import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='fake_policy', - type='access_policy', - source='/var/fake/fake.tar.gz' - ) - - p = ModuleParameters(params=args) - assert p.name == 'fake_policy' - assert p.source == '/var/fake/fake.tar.gz' - assert p.type == 'access_policy' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.tar.gz') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_apm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_apm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - - def test_import_from_file(self, *args): - set_module_args(dict( - name='fake_policy', - source=self.policy, - type='access_policy', - provider=dict( - server='localhost', - password='password', - user='admin' - ), - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.import_file_to_device = Mock(return_value=True) - mm.remove_temp_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['source'] == self.policy diff --git a/test/units/modules/network/f5/test_bigip_appsvcs_extension.py b/test/units/modules/network/f5/test_bigip_appsvcs_extension.py deleted file mode 100644 index 4f61a23f15..0000000000 --- a/test/units/modules/network/f5/test_bigip_appsvcs_extension.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_appsvcs_extension import ModuleParameters - from library.modules.bigip_appsvcs_extension import ModuleManager - from library.modules.bigip_appsvcs_extension import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_appsvcs_extension import ModuleParameters - from ansible.modules.network.f5.bigip_appsvcs_extension import ModuleManager - from ansible.modules.network.f5.bigip_appsvcs_extension import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - content='{ "foo": "bar" }', - force=True, - targets=['T1', 'T2'] - ) - - p = ModuleParameters(params=args) - assert 'foo' in p.content - assert p.force is True - assert p.targets == ['T1', 'T2'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - content='{ "foo": "bar" }', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.upsert_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_asm_dos_application.py b/test/units/modules/network/f5/test_bigip_asm_dos_application.py deleted file mode 100644 index bd9a99125d..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_dos_application.py +++ /dev/null @@ -1,279 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_dos_application import ApiParameters - from library.modules.bigip_asm_dos_application import ModuleParameters - from library.modules.bigip_asm_dos_application import ModuleManager - from library.modules.bigip_asm_dos_application import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_dos_application import ApiParameters - from ansible.modules.network.f5.bigip_asm_dos_application import ModuleParameters - from ansible.modules.network.f5.bigip_asm_dos_application import ModuleManager - from ansible.modules.network.f5.bigip_asm_dos_application import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - profile='dos_foo', - geolocations=dict( - blacklist=['Argentina', 'Montenegro'], - whitelist=['France', 'Belgium'] - ), - heavy_urls=dict( - auto_detect=True, - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')], - ), - mobile_detection=dict( - enabled=True, - allow_android_rooted_device=True, - allow_any_android_package=True, - allow_any_ios_package=True, - allow_jailbroken_devices=True, - allow_emulators=True, - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['cert1.crt', 'cert2.crt'] - ), - rtbh_duration=180, - rtbh_enable=True, - scrubbing_duration=360, - scrubbing_enable=True, - single_page_application=True, - trigger_irule=False, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.profile == 'dos_foo' - assert p.geo_whitelist == ['France', 'Belgium'] - assert p.geo_blacklist == ['Argentina', 'Montenegro'] - assert p.auto_detect == 'enabled' - assert p.latency_threshold == 3000 - assert p.hw_url_exclude == ['/exclude1.html', '/exclude2.html'] - assert dict(name='URL/include1.html', threshold='auto', url='/include1.html') in p.hw_url_include - assert dict(name='URL/include2.html', threshold='2000', url='/include2.html') in p.hw_url_include - assert p.allow_android_rooted_device == 'true' - assert p.enable_mobile_detection == 'enabled' - assert p.allow_any_android_package == 'true' - assert p.allow_any_ios_package == 'true' - assert p.allow_jailbroken_devices == 'true' - assert p.allow_emulators == 'true' - assert p.client_side_challenge_mode == 'cshui' - assert p.ios_allowed_package_names == ['foo', 'bar'] - assert p.android_publishers == ['/Common/cert1.crt', '/Common/cert2.crt'] - assert p.rtbh_duration == 180 - assert p.rtbh_enable == 'enabled' - assert p.scrubbing_duration == 360 - assert p.scrubbing_enable == 'enabled' - assert p.single_page_application == 'enabled' - assert p.trigger_irule == 'disabled' - - def test_api_parameters(self): - args = load_fixture('load_asm_dos.json') - - p = ApiParameters(params=args) - assert p.geo_whitelist == ['Aland Islands'] - assert p.geo_blacklist == ['Afghanistan'] - assert p.auto_detect == 'enabled' - assert p.latency_threshold == 1000 - assert p.hw_url_exclude == ['/exclude.html'] - assert dict(name='URL/test.htm', threshold='auto', url='/test.htm') in p.hw_url_include - assert dict(name='URL/testy.htm', threshold='auto', url='/testy.htm') in p.hw_url_include - assert p.allow_android_rooted_device == 'false' - assert p.enable_mobile_detection == 'disabled' - assert p.allow_any_android_package == 'false' - assert p.allow_any_ios_package == 'false' - assert p.allow_jailbroken_devices == 'true' - assert p.allow_emulators == 'true' - assert p.client_side_challenge_mode == 'pass' - assert p.ios_allowed_package_names == ['foobarapp'] - assert p.android_publishers == ['/Common/ca-bundle.crt'] - assert p.rtbh_duration == 300 - assert p.rtbh_enable == 'enabled' - assert p.scrubbing_duration == 60 - assert p.scrubbing_enable == 'enabled' - assert p.single_page_application == 'enabled' - assert p.trigger_irule == 'enabled' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - try: - self.p1 = patch('library.modules.bigip_asm_dos_application.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_dos_application.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_asm_dos_profile(self, *args): - set_module_args(dict( - profile='dos_foo', - geolocations=dict( - blacklist=['Argentina', 'Montenegro'], - whitelist=['France', 'Belgium'] - ), - heavy_urls=dict( - auto_detect=True, - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')] - ), - mobile_detection=dict( - enabled=True, - allow_android_rooted_device=True, - allow_any_android_package=True, - allow_any_ios_package=True, - allow_jailbroken_devices=True, - allow_emulators=True, - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['cert1.crt', 'cert2.crt'] - ), - rtbh_duration=180, - rtbh_enable=True, - scrubbing_duration=360, - scrubbing_enable=True, - single_page_application=True, - trigger_irule=False, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.version_less_than_13_1 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['geolocations'] == dict(blacklist=['Argentina', 'Montenegro'], whitelist=['France', 'Belgium']) - assert results['heavy_urls'] == dict(auto_detect='yes', latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='/include1.html', threshold='auto'), - dict(url='/include2.html', threshold='2000')] - ) - assert results['mobile_detection'] == dict(enabled='yes', allow_android_rooted_device='yes', - allow_any_android_package='yes', allow_any_ios_package='yes', - allow_jailbroken_devices='yes', allow_emulators='yes', - client_side_challenge_mode='cshui', - ios_allowed_package_names=['foo', 'bar'], - android_publishers=['/Common/cert1.crt', '/Common/cert2.crt'] - ) - assert results['rtbh_duration'] == 180 - assert results['rtbh_enable'] == 'yes' - assert results['scrubbing_duration'] == 360 - assert results['scrubbing_enable'] == 'yes' - assert results['single_page_application'] == 'yes' - assert results['trigger_irule'] == 'no' - - def test_update_asm_dos_profile(self, *args): - set_module_args(dict( - profile='test', - heavy_urls=dict( - latency_threshold=3000, - exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='include1.html', threshold='auto'), - dict(url='include2.html', threshold='2000')] - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_asm_dos.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.version_less_than_13_1 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['heavy_urls'] == dict(latency_threshold=3000, exclude=['/exclude1.html', '/exclude2.html'], - include=[dict(url='/include1.html', threshold='auto'), - dict(url='/include2.html', threshold='2000')] - ) diff --git a/test/units/modules/network/f5/test_bigip_asm_policy_fetch.py b/test/units/modules/network/f5/test_bigip_asm_policy_fetch.py deleted file mode 100644 index 2c40ffcd98..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_policy_fetch.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_policy_fetch import ModuleParameters - from library.modules.bigip_asm_policy_fetch import ModuleManager - from library.modules.bigip_asm_policy_fetch import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_policy_fetch import ModuleParameters - from ansible.modules.network.f5.bigip_asm_policy_fetch import ModuleManager - from ansible.modules.network.f5.bigip_asm_policy_fetch import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - inline='yes', - compact='no', - base64='yes', - dest='/tmp/foo.xml', - force='yes', - file='foo.xml' - ) - p = ModuleParameters(params=args) - assert p.inline is True - assert p.compact is False - assert p.base64 is True - assert p.file == 'foo.xml' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_asm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_fetch.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - - def test_create(self, *args): - set_module_args(dict( - name='fake_policy', - file='foobar.xml', - dest='/tmp/foobar.xml', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - mp = ModuleParameters(params=module.params) - mp._policy_exists = Mock(return_value=True) - mm = ModuleManager(module=module) - mm.want = Mock(return_value=mp) - mm.want.binary = False - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.execute = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_asm_policy_import.py b/test/units/modules/network/f5/test_bigip_asm_policy_import.py deleted file mode 100644 index 5de1dcf110..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_policy_import.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_policy_import import ModuleParameters - from library.modules.bigip_asm_policy_import import ModuleManager - from library.modules.bigip_asm_policy_import import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_policy_import import ModuleParameters - from ansible.modules.network.f5.bigip_asm_policy_import import ModuleManager - from ansible.modules.network.f5.bigip_asm_policy_import import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='fake_policy', - state='present', - source='/var/fake/fake.xml' - ) - - p = ModuleParameters(params=args) - assert p.name == 'fake_policy' - assert p.source == '/var/fake/fake.xml' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.xml') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_asm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_import.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - - def test_import_from_file(self, *args): - set_module_args(dict( - name='fake_policy', - source=self.policy, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.import_file_to_device = Mock(return_value=True) - mm.remove_temp_policy_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['source'] == self.policy diff --git a/test/units/modules/network/f5/test_bigip_asm_policy_manage.py b/test/units/modules/network/f5/test_bigip_asm_policy_manage.py deleted file mode 100644 index 6379b6600d..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_policy_manage.py +++ /dev/null @@ -1,519 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_policy_manage import V1Parameters - from library.modules.bigip_asm_policy_manage import ModuleManager - from library.modules.bigip_asm_policy_manage import V1Manager - from library.modules.bigip_asm_policy_manage import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_policy_manage import V1Parameters - from ansible.modules.network.f5.bigip_asm_policy_manage import ModuleManager - from ansible.modules.network.f5.bigip_asm_policy_manage import V1Manager - from ansible.modules.network.f5.bigip_asm_policy_manage import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_template(self): - args = dict( - name='fake_policy', - state='present', - template='LotusDomino 6.5 (http)' - ) - - p = V1Parameters(params=args) - assert p.name == 'fake_policy' - assert p.state == 'present' - assert p.template == 'POLICY_TEMPLATE_LOTUSDOMINO_6_5_HTTP' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.policy = os.path.join(fixture_path, 'fake_policy.xml') - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_asm_policy_manage.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_manage.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - - def test_activate_create_from_template(self, *args): - set_module_args(dict( - name='fake_policy', - template='OWA Exchange 2007 (https)', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1.create_from_template_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['template'] == 'OWA Exchange 2007 (https)' - assert results['active'] is True - - def test_activate_create_by_name(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.create_on_device = Mock(return_value=True) - v1.create_blank = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['active'] is True - - def test_activate_policy_exists_inactive(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.update_on_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['active'] is True - - def test_activate_policy_exists_active(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_active.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_deactivate_policy_exists_active(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_active.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.update_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['active'] is False - - def test_deactivate_policy_exists_inactive(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_create_from_template(self, *args): - set_module_args(dict( - name='fake_policy', - template='LotusDomino 6.5 (http)', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.create_from_template_on_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.read_current_from_device = Mock(return_value=current) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['template'] == 'LotusDomino 6.5 (http)' - assert results['active'] is False - - def test_create_by_name(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.import_to_device = Mock(return_value=True) - v1.wait_for_task = Mock(side_effect=[True, True]) - v1.create_on_device = Mock(return_value=True) - v1.create_blank = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_policy' - assert results['active'] is False - - def test_delete_policy(self, *args): - set_module_args(dict( - name='fake_policy', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(side_effect=[True, False]) - v1.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_activate_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - active='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = V1Parameters(params=load_fixture('load_asm_policy_inactive.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Apply policy task failed.' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=True) - v1.wait_for_task = Mock(return_value=False) - v1.update_on_device = Mock(return_value=True) - v1.read_current_from_device = Mock(return_value=current) - v1.apply_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg - - def test_create_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Failed to create ASM policy: fake_policy' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(return_value=False) - v1.create_on_device = Mock(return_value=False) - v1._file_is_missing = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg - - def test_delete_policy_raises(self, *args): - set_module_args(dict( - name='fake_policy', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - msg = 'Failed to delete ASM policy: fake_policy' - # Override methods to force specific logic in the module to happen - v1 = V1Manager(module=module) - v1.exists = Mock(side_effect=[True, True]) - v1.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=v1) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigip_asm_policy_server_technology.py b/test/units/modules/network/f5/test_bigip_asm_policy_server_technology.py deleted file mode 100644 index 60c0530821..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_policy_server_technology.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_policy_server_technology import ModuleParameters - from library.modules.bigip_asm_policy_server_technology import ModuleManager - from library.modules.bigip_asm_policy_server_technology import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_policy_server_technology import ModuleParameters - from ansible.modules.network.f5.bigip_asm_policy_server_technology import ModuleManager - from ansible.modules.network.f5.bigip_asm_policy_server_technology import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ASP', - state='present', - policy_name='fake_policy' - ) - - p = ModuleParameters(params=args) - assert p.name == 'ASP' - assert p.state == 'present' - assert p.policy_name == 'fake_policy' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_asm_policy_server_technology.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_server_technology.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_add_server_technology(self, *args): - set_module_args(dict( - policy_name='fake_policy', - state='present', - name='IIS', - provider=dict( - server='localhost', - password='password', - user='admin' - ), - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_13 = Mock(return_value=False) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'IIS' - assert results['policy_name'] == 'fake_policy' diff --git a/test/units/modules/network/f5/test_bigip_asm_policy_signature_set.py b/test/units/modules/network/f5/test_bigip_asm_policy_signature_set.py deleted file mode 100644 index 7c23a5c17f..0000000000 --- a/test/units/modules/network/f5/test_bigip_asm_policy_signature_set.py +++ /dev/null @@ -1,151 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_asm_policy_signature_set import ModuleParameters - from library.modules.bigip_asm_policy_signature_set import ModuleManager - from library.modules.bigip_asm_policy_signature_set import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_asm_policy_signature_set import ModuleParameters - from ansible.modules.network.f5.bigip_asm_policy_signature_set import ModuleManager - from ansible.modules.network.f5.bigip_asm_policy_signature_set import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='IIS and Windows Signatures', - state='present', - policy_name='fake_policy', - alarm='yes', - block='no', - learn='yes' - ) - try: - self.p1 = patch('library.modules.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'IIS and Windows Signatures' - assert p.state == 'present' - assert p.policy_name == 'fake_policy' - assert p.alarm is True - assert p.block is False - assert p.learn is True - - self.p1.stop() - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_asm_policy_signature_set.module_provisioned') - self.p2 = patch('library.modules.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m2.return_value = '13.1.0' - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_asm_policy_signature_set.module_provisioned') - self.p2 = patch('ansible.modules.network.f5.bigip_asm_policy_signature_set.tmos_version') - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m2.return_value = '13.1.0' - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_add_server_technology(self, *args): - set_module_args(dict( - policy_name='fake_policy', - state='present', - name='IIS and Windows Signatures', - alarm='yes', - block='no', - learn='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'IIS and Windows Signatures' - assert results['policy_name'] == 'fake_policy' - assert results['alarm'] == 'yes' - assert results['block'] == 'no' - assert results['learn'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_cli_alias.py b/test/units/modules/network/f5/test_bigip_cli_alias.py deleted file mode 100644 index 6c980cdb02..0000000000 --- a/test/units/modules/network/f5/test_bigip_cli_alias.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_cli_alias import ApiParameters - from library.modules.bigip_cli_alias import ModuleParameters - from library.modules.bigip_cli_alias import ModuleManager - from library.modules.bigip_cli_alias import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_cli_alias import ApiParameters - from ansible.modules.network.f5.bigip_cli_alias import ModuleParameters - from ansible.modules.network.f5.bigip_cli_alias import ModuleManager - from ansible.modules.network.f5.bigip_cli_alias import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - command='run /util bash', - description='another description', - scope='shared', - ) - - p = ModuleParameters(params=args) - assert p.command == 'run /util bash' - assert p.description == 'another description' - assert p.scope == 'shared' - - def test_api_parameters(self): - args = load_fixture('load_tm_cli_alias_1.json') - - p = ApiParameters(params=args) - assert p.command == 'run /util bash' - assert p.description == 'Run the bash shell' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_default_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - command='run /util bash', - description='another description', - scope='shared', - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_cli_script.py b/test/units/modules/network/f5/test_bigip_cli_script.py deleted file mode 100644 index 382b0fc61e..0000000000 --- a/test/units/modules/network/f5/test_bigip_cli_script.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_cli_script import ApiParameters - from library.modules.bigip_cli_script import ModuleParameters - from library.modules.bigip_cli_script import ModuleManager - from library.modules.bigip_cli_script import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_cli_script import ApiParameters - from ansible.modules.network.f5.bigip_cli_script import ModuleParameters - from ansible.modules.network.f5.bigip_cli_script import ModuleManager - from ansible.modules.network.f5.bigip_cli_script import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - content="my content", - description="my description" - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.content == 'my content' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_tm_cli_script_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.content == 'proc script::run {} {}' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - content='asdasds', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_command.py b/test/units/modules/network/f5/test_bigip_command.py deleted file mode 100644 index 79b763eebc..0000000000 --- a/test/units/modules/network/f5/test_bigip_command.py +++ /dev/null @@ -1,299 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_command import Parameters - from library.modules.bigip_command import ModuleManager - from library.modules.bigip_command import V1Manager - from library.modules.bigip_command import V2Manager - from library.modules.bigip_command import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_command import Parameters - from ansible.modules.network.f5.bigip_command import ModuleManager - from ansible.modules.network.f5.bigip_command import V1Manager - from ansible.modules.network.f5.bigip_command import V2Manager - from ansible.modules.network.f5.bigip_command import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - with open(path) as f: - data = f.read() - try: - data = json.loads(data) - except Exception: - pass - return data - - -class TestParameters(unittest.TestCase): - - def test_module_parameters(self): - args = dict( - commands=[ - "tmsh show sys version" - ], - ) - p = Parameters(params=args) - assert len(p.commands) == 1 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_run_single_command(self, *args): - set_module_args(dict( - commands=[ - "tmsh show sys version" - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is False - assert mm._run_commands.call_count == 0 - assert m1.execute_on_device.call_count == 2 - - def test_run_single_modification_command(self, *args): - set_module_args(dict( - commands=[ - "tmsh create ltm virtual foo" - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is True - assert mm._run_commands.call_count == 0 - assert m1.execute_on_device.call_count == 2 - - def test_cli_command(self, *args): - set_module_args(dict( - commands=[ - "show sys version" - ], - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V1Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2', 'resp3']) - - mm = ModuleManager(module=module) - mm._run_commands = Mock(return_value=[]) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is False - - # call count is two on CLI transport because we must first - # determine if the remote CLI is in tmsh mode or advanced shell - # (bash) mode. - # - # 1 call for the shell check - # 1 call for the command in the "commands" list above - # - # Can we change this in the future by making the terminal plugin - # find this out ahead of time? - assert m1.execute_on_device.call_count == 3 - - def test_command_with_commas(self, *args): - set_module_args(dict( - commands=""" - tmsh create /auth ldap system-auth {bind-dn uid=binduser, - cn=users,dc=domain,dc=com bind-pw $ENCRYPTEDPW check-roles-group - enabled search-base-dn cn=users,dc=domain,dc=com servers add { - ldap.server.com } } - """, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - m1 = V2Manager(module=module) - m1.execute_on_device = Mock(return_value=['resp1', 'resp2']) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - - assert results['changed'] is True - assert m1.execute_on_device.call_count == 2 - - def test_normalizing_command_show(self, *args): - args = dict( - commands=[ - "show sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'show sys version' - - def test_normalizing_command_delete(self, *args): - args = dict( - commands=[ - "delete sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'delete sys version' - - def test_normalizing_command_modify(self, *args): - args = dict( - commands=[ - "modify sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'modify sys version' - - def test_normalizing_command_list(self, *args): - args = dict( - commands=[ - "list sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'list sys version' - - def test_normalizing_command_tmsh_show(self, *args): - args = dict( - commands=[ - "tmsh show sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'show sys version' - - def test_normalizing_command_tmsh_delete(self, *args): - args = dict( - commands=[ - "tmsh delete sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'delete sys version' - - def test_normalizing_command_tmsh_modify(self, *args): - args = dict( - commands=[ - "tmsh modify sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'modify sys version' - - def test_normalizing_command_tmsh_list(self, *args): - args = dict( - commands=[ - "tmsh list sys version" - ], - ) - - result = V2Manager.normalize_commands(args['commands']) - - assert result[0] == 'list sys version' diff --git a/test/units/modules/network/f5/test_bigip_config.py b/test/units/modules/network/f5/test_bigip_config.py deleted file mode 100644 index 9c616c11ab..0000000000 --- a/test/units/modules/network/f5/test_bigip_config.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_config import Parameters - from library.modules.bigip_config import ModuleManager - from library.modules.bigip_config import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_config import Parameters - from ansible.modules.network.f5.bigip_config import ModuleManager - from ansible.modules.network.f5.bigip_config import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - save='yes', - reset='yes', - merge_content='asdasd', - verify='no', - ) - p = Parameters(params=args) - assert p.save == 'yes' - assert p.reset == 'yes' - assert p.merge_content == 'asdasd' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_run_single_command(self, *args): - set_module_args(dict( - save='yes', - reset='yes', - merge_content='asdasd', - verify='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exit_json = Mock(return_value=True) - mm.reset_device = Mock(return_value='reset output') - mm.upload_to_device = Mock(return_value=True) - mm.move_on_device = Mock(return_value=True) - mm.merge_on_device = Mock(return_value='merge output') - mm.remove_temporary_file = Mock(return_value=True) - mm.save_on_device = Mock(return_value='save output') - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_configsync_action.py b/test/units/modules/network/f5/test_bigip_configsync_action.py deleted file mode 100644 index 99a2401745..0000000000 --- a/test/units/modules/network/f5/test_bigip_configsync_action.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_configsync_action import Parameters - from library.modules.bigip_configsync_action import ModuleManager - from library.modules.bigip_configsync_action import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_configsync_action import Parameters - from ansible.modules.network.f5.bigip_configsync_action import ModuleManager - from ansible.modules.network.f5.bigip_configsync_action import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - sync_device_to_group=True, - sync_group_to_device=True, - overwrite_config=True, - device_group="foo" - ) - p = Parameters(params=args) - assert p.sync_device_to_group is True - assert p.sync_group_to_device is True - assert p.overwrite_config is True - assert p.device_group == 'foo' - - def test_module_parameters_yes_no(self): - args = dict( - sync_device_to_group='yes', - sync_group_to_device='no', - overwrite_config='yes', - device_group="foo" - ) - p = Parameters(params=args) - assert p.sync_device_to_group == 'yes' - assert p.sync_group_to_device == 'no' - assert p.overwrite_config == 'yes' - assert p.device_group == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_update_agent_status_traps(self, *args): - set_module_args(dict( - sync_device_to_group='yes', - device_group="foo", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm._device_group_exists = Mock(return_value=True) - mm._sync_to_group_required = Mock(return_value=False) - mm.execute_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=None) - - mm._get_status_from_resource = Mock() - mm._get_status_from_resource.side_effect = [ - 'Changes Pending', 'Awaiting Initial Sync', 'In Sync' - ] - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_data_group.py b/test/units/modules/network/f5/test_bigip_data_group.py deleted file mode 100644 index fda1a71b7f..0000000000 --- a/test/units/modules/network/f5/test_bigip_data_group.py +++ /dev/null @@ -1,485 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_data_group import ModuleParameters - from library.modules.bigip_data_group import ModuleManager - from library.modules.bigip_data_group import ExternalManager - from library.modules.bigip_data_group import InternalManager - from library.modules.bigip_data_group import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_data_group import ModuleParameters - from ansible.modules.network.f5.bigip_data_group import ModuleManager - from ansible.modules.network.f5.bigip_data_group import ExternalManager - from ansible.modules.network.f5.bigip_data_group import InternalManager - from ansible.modules.network.f5.bigip_data_group import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - type='address', - delete_data_group_file=False, - internal=False, - records=[ - dict( - key='10.10.10.10/32', - value='bar' - ) - ], - separator=':=', - state='present', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.type == 'ip' - assert p.delete_data_group_file is False - assert len(p.records) == 1 - assert 'data' in p.records[0] - assert 'name' in p.records[0] - assert p.records[0]['data'] == 'bar' - assert p.records[0]['name'] == '10.10.10.10/32' - assert p.separator == ':=' - assert p.state == 'present' - assert p.partition == 'Common' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_external_datagroup_type_string(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_external_incorrect_address_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - type='address', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'address' type, the value to the left of the separator must be an IP." == str(ex.value) - - def test_create_external_incorrect_integer_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - type='integer', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'integer' type, the value to the left of the separator must be a number." == str(ex.value) - - def test_remove_data_group_keep_file(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=False, - state='absent', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[True, False]) - mm1.remove_from_device = Mock(return_value=True) - mm1.external_file_exists = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_remove_data_group_remove_file(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=True, - internal=False, - state='absent', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = ExternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[True, False]) - mm1.remove_from_device = Mock(return_value=True) - mm1.external_file_exists = Mock(return_value=True) - mm1.remove_data_group_file_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_string(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_incorrect_integer_data(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='integer', - records_src="{0}/data-group-string.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - with pytest.raises(F5ModuleError) as ex: - mm0.exec_module() - - assert "When specifying an 'integer' type, the value to the left of the separator must be a number." == str(ex.value) - - def test_create_internal_datagroup_type_integer(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='integer', - records_src="{0}/data-group-integer.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_address(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='address', - records_src="{0}/data-group-address.txt".format(fixture_path), - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True - - def test_create_internal_datagroup_type_address_list(self, *args): - set_module_args(dict( - name='foo', - delete_data_group_file=False, - internal=True, - type='address', - records=[ - dict( - key='10.0.0.0/8', - value='Network1' - ), - dict( - key='172.16.0.0/12', - value='Network2' - ), - dict( - key='192.168.20.1/16', - value='Network3' - ), - dict( - key='192.168.20.1', - value='Host1' - ), - dict( - key='172.16.1.1', - value='Host2' - ) - ], - separator=':=', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - mm1 = InternalManager(module=module, params=module.params) - mm1.exists = Mock(side_effect=[False, True]) - mm1.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm0 = ModuleManager(module=module) - mm0.get_manager = Mock(return_value=mm1) - - results = mm0.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_auth.py b/test/units/modules/network/f5/test_bigip_device_auth.py deleted file mode 100644 index cddce38637..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_auth.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_auth import TacacsApiParameters - from library.modules.bigip_device_auth import TacacsModuleParameters - from library.modules.bigip_device_auth import TacacsManager - from library.modules.bigip_device_auth import ModuleManager - from library.modules.bigip_device_auth import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_auth import TacacsApiParameters - from ansible.modules.network.f5.bigip_device_auth import TacacsModuleParameters - from ansible.modules.network.f5.bigip_device_auth import TacacsManager - from ansible.modules.network.f5.bigip_device_auth import ModuleManager - from ansible.modules.network.f5.bigip_device_auth import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - type="tacacs", - authentication="use-all-servers", - protocol_name="ip", - secret="$XXXXXXXXXXXXXXXXXXXX==", - servers=['10.10.10.10', '10.10.10.11'], - service_name="ppp", - use_for_auth=True, - update_secret="on_create", - ) - p = TacacsModuleParameters(params=args) - assert p.type == 'tacacs' - assert p.authentication == 'use-all-servers' - - def test_api_parameters(self): - args = load_fixture('load_tm_auth_tacacs_1.json') - p = TacacsApiParameters(params=args) - assert p.authentication == 'use-first-server' - assert p.protocol_name == 'ftp' - assert p.secret == 'secret' - assert p.servers == ['11.11.11.11'] - assert p.service_name == 'ppp' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - type="tacacs", - authentication="use-all-servers", - protocol_name="ip", - secret="secret", - servers=['10.10.10.10', '10.10.10.11'], - service_name="ppp", - use_for_auth=True, - update_secret="on_create", - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m1 = TacacsManager(module=module) - m1.exists = Mock(return_value=False) - m1.create_on_device = Mock(return_value=True) - m1.update_auth_source_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_auth_ldap.py b/test/units/modules/network/f5/test_bigip_device_auth_ldap.py deleted file mode 100644 index 014a2076fd..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_auth_ldap.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_auth_ldap import ApiParameters - from library.modules.bigip_device_auth_ldap import ModuleManager - from library.modules.bigip_device_auth_ldap import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_auth_ldap import ApiParameters - from ansible.modules.network.f5.bigip_device_auth_ldap import ModuleManager - from ansible.modules.network.f5.bigip_device_auth_ldap import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - servers=['10.10.10.10', '10.10.10.11'], - port=389, - remote_directory_tree='foo', - scope='base', - bind_dn='bar', - bind_password='secret', - user_template='alice', - check_member_attr=False, - ssl='no', - ssl_ca_cert='default.crt', - ssl_client_key='default.key', - ssl_client_cert='default1.crt', - ssl_check_peer=True, - login_ldap_attr='bob', - fallback_to_local=True, - update_password='on_create', - ) - p = ApiParameters(params=args) - assert p.port == 389 - assert p.servers == ['10.10.10.10', '10.10.10.11'] - assert p.remote_directory_tree == 'foo' - assert p.scope == 'base' - assert p.bind_dn == 'bar' - assert p.bind_password == 'secret' - assert p.user_template == 'alice' - assert p.check_member_attr == 'no' - assert p.ssl == 'no' - assert p.ssl_ca_cert == '/Common/default.crt' - assert p.ssl_client_key == '/Common/default.key' - assert p.ssl_client_cert == '/Common/default1.crt' - assert p.ssl_check_peer == 'yes' - assert p.login_ldap_attr == 'bob' - assert p.fallback_to_local == 'yes' - assert p.update_password == 'on_create' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - servers=['10.10.10.10', '10.10.10.11'], - update_password='on_create', - state='present', - provider=dict( - password='admin', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.update_auth_source_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_certificate.py b/test/units/modules/network/f5/test_bigip_device_certificate.py deleted file mode 100644 index cb8d87dafc..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_certificate.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_certificate import ModuleParameters - from library.modules.bigip_device_certificate import ModuleManager - from library.modules.bigip_device_certificate import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_certificate import ModuleParameters - from ansible.modules.network.f5.bigip_device_certificate import ModuleManager - from ansible.modules.network.f5.bigip_device_certificate import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - key_size=2048, - cert_name='foo.crt', - key_name='foo.key', - days_valid=60, - issuer=dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ), - new_cert='yes' - ) - p = ModuleParameters(params=args) - assert p.key_size == 2048 - assert p.cert_name == 'foo.crt' - assert p.key_name == 'foo.key' - assert p.days_valid == 60 - assert 'CN=foo.bar.local' in p.issuer - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_expired_cert(self, *args): - set_module_args(dict( - days_valid=60, - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli', - server_port=22 - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - mm = ModuleManager(module=module) - mm.expired = Mock(return_value=True) - mm.update_certificate = Mock(return_value=True) - mm.restart_daemon = Mock(return_value=True) - mm.copy_files_to_trusted = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['days_valid'] == 60 - - def test_create_new_cert(self): - set_module_args(dict( - key_size=2048, - cert_name='foo.crt', - key_name='foo.key', - days_valid=60, - new_cert='yes', - issuer=dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ), - provider=dict( - server='localhost', - password='password', - user='admin', - transport='cli', - server_port=22 - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - mm = ModuleManager(module=module) - mm.expired = Mock(return_value=True) - mm.generate_cert_key = Mock(return_value=True) - mm.restart_daemon = Mock(return_value=True) - mm.configure_new_cert = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['days_valid'] == 60 - assert results['cert_name'] == 'foo.crt' - assert results['key_name'] == 'foo.key' - assert results['issuer'] == dict( - country='US', - state='WA', - locality='Seattle', - organization='F5', - division='IT', - common_name='foo.bar.local', - email='admin@foo.bar.local' - ) diff --git a/test/units/modules/network/f5/test_bigip_device_connectivity.py b/test/units/modules/network/f5/test_bigip_device_connectivity.py deleted file mode 100644 index 178f8615f0..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_connectivity.py +++ /dev/null @@ -1,388 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_connectivity import ApiParameters - from library.modules.bigip_device_connectivity import ModuleParameters - from library.modules.bigip_device_connectivity import ModuleManager - from library.modules.bigip_device_connectivity import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_connectivity import ApiParameters - from ansible.modules.network.f5.bigip_device_connectivity import ModuleParameters - from ansible.modules.network.f5.bigip_device_connectivity import ModuleManager - from ansible.modules.network.f5.bigip_device_connectivity import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - multicast_port='1010', - multicast_address='10.10.10.10', - multicast_interface='eth0', - failover_multicast=True, - unicast_failover=[ - dict( - address='20.20.20.20', - port='1234' - ) - ], - mirror_primary_address='1.2.3.4', - mirror_secondary_address='5.6.7.8', - config_sync_ip='4.3.2.1', - state='present', - ) - p = ModuleParameters(params=args) - assert p.multicast_port == 1010 - assert p.multicast_address == '10.10.10.10' - assert p.multicast_interface == 'eth0' - assert p.failover_multicast is True - assert p.mirror_primary_address == '1.2.3.4' - assert p.mirror_secondary_address == '5.6.7.8' - assert p.config_sync_ip == '4.3.2.1' - assert len(p.unicast_failover) == 1 - assert 'effectiveIp' in p.unicast_failover[0] - assert 'effectivePort' in p.unicast_failover[0] - assert 'port' in p.unicast_failover[0] - assert 'ip' in p.unicast_failover[0] - assert p.unicast_failover[0]['effectiveIp'] == '20.20.20.20' - assert p.unicast_failover[0]['ip'] == '20.20.20.20' - assert p.unicast_failover[0]['port'] == 1234 - assert p.unicast_failover[0]['effectivePort'] == 1234 - - def test_api_parameters(self): - params = load_fixture('load_tm_cm_device.json') - p = ApiParameters(params=params) - assert p.multicast_port == 62960 - assert p.multicast_address == '224.0.0.245' - assert p.multicast_interface == 'eth0' - assert p.mirror_primary_address == '10.2.2.2' - assert p.mirror_secondary_address == '10.2.3.2' - assert p.config_sync_ip == '10.2.2.2' - assert len(p.unicast_failover) == 2 - assert 'effectiveIp' in p.unicast_failover[0] - assert 'effectivePort' in p.unicast_failover[0] - assert 'port' in p.unicast_failover[0] - assert 'ip' in p.unicast_failover[0] - assert p.unicast_failover[0]['effectiveIp'] == 'management-ip' - assert p.unicast_failover[0]['ip'] == 'management-ip' - assert p.unicast_failover[0]['port'] == 1026 - assert p.unicast_failover[0]['effectivePort'] == 1026 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_settings(self, *args): - set_module_args(dict( - config_sync_ip="10.1.30.1", - mirror_primary_address="10.1.30.1", - unicast_failover=[ - dict( - address="10.1.30.1" - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['config_sync_ip'] == '10.1.30.1' - assert results['mirror_primary_address'] == '10.1.30.1' - assert len(results.keys()) == 4 - - def test_set_primary_mirror_address_none(self, *args): - set_module_args(dict( - mirror_primary_address="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['mirror_primary_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_secondary_mirror_address_none(self, *args): - set_module_args(dict( - mirror_secondary_address="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['mirror_secondary_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_multicast_address_none(self, *args): - set_module_args(dict( - multicast_address="none", - multicast_port=62960, - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['multicast_address'] == 'none' - assert len(results.keys()) == 2 - - def test_set_multicast_port_negative(self, *args): - set_module_args(dict( - multicast_port=-1, - multicast_address="224.0.0.245", - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert 'must be between' in str(ex.value) - - def test_set_multicast_address(self, *args): - set_module_args(dict( - multicast_address="10.1.1.1", - multicast_port=62960, - multicast_interface="eth0", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['multicast_address'] == '10.1.1.1' - assert len(results.keys()) == 2 - - def test_unset_unicast_failover(self, *args): - set_module_args(dict( - unicast_failover="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['unicast_failover'] == 'none' - assert len(results.keys()) == 2 - - def test_unset_config_sync_ip(self, *args): - set_module_args(dict( - config_sync_ip="none", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tm_cm_device.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['config_sync_ip'] == 'none' - assert len(results.keys()) == 2 diff --git a/test/units/modules/network/f5/test_bigip_device_dns.py b/test/units/modules/network/f5/test_bigip_device_dns.py deleted file mode 100644 index d0d1f182dd..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_dns.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_dns import Parameters - from library.modules.bigip_device_dns import ModuleManager - from library.modules.bigip_device_dns import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_dns import Parameters - from ansible.modules.network.f5.bigip_device_dns import ModuleManager - from ansible.modules.network.f5.bigip_device_dns import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - cache='disable', - ip_version=4, - name_servers=['10.10.10.10', '11.11.11.11'], - search=['14.14.14.14', '15.15.15.15'], - ) - p = Parameters(params=args) - assert p.cache == 'disable' - assert p.name_servers == ['10.10.10.10', '11.11.11.11'] - assert p.search == ['14.14.14.14', '15.15.15.15'] - - # BIG-IP considers "ipv4" to be an empty value - assert p.ip_version == 4 - - def test_ipv6_parameter(self): - args = dict( - ip_version=6 - ) - p = Parameters(params=args) - assert p.ip_version == 6 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_settings(self, *args): - set_module_args(dict( - cache='disable', - ip_version=4, - name_servers=['10.10.10.10', '11.11.11.11'], - search=['14.14.14.14', '15.15.15.15'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - dict( - cache='enable' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_group.py b/test/units/modules/network/f5/test_bigip_device_group.py deleted file mode 100644 index fbf4be059d..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_group.py +++ /dev/null @@ -1,186 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_group import ApiParameters - from library.modules.bigip_device_group import ModuleParameters - from library.modules.bigip_device_group import ModuleManager - from library.modules.bigip_device_group import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_group import ApiParameters - from ansible.modules.network.f5.bigip_device_group import ModuleParameters - from ansible.modules.network.f5.bigip_device_group import ModuleManager - from ansible.modules.network.f5.bigip_device_group import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - save_on_auto_sync=True, - full_sync=False, - description="my description", - type="sync-failover", - auto_sync=True - ) - - p = ModuleParameters(params=args) - assert p.save_on_auto_sync is True - assert p.full_sync is False - assert p.description == "my description" - assert p.type == "sync-failover" - assert p.auto_sync is True - - def test_api_parameters(self): - args = dict( - asmSync="disabled", - autoSync="enabled", - fullLoadOnSync="false", - incrementalConfigSyncSizeMax=1024, - networkFailover="disabled", - saveOnAutoSync="false", - type="sync-only" - ) - - p = ApiParameters(params=args) - assert p.auto_sync is True - assert p.full_sync is False - assert p.max_incremental_sync_size == 1024 - assert p.save_on_auto_sync is False - assert p.type == 'sync-only' - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_default_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_device_group(self, *args): - set_module_args( - dict( - full_sync=True, - name="foo-group", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = ApiParameters(params=load_fixture('load_tm_cm_device_group.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - - def test_delete_device_group(self, *args): - set_module_args( - dict( - name="foo-group", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - mm.remove_members_in_group_from_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_group_member.py b/test/units/modules/network/f5/test_bigip_device_group_member.py deleted file mode 100644 index 31e506b8c5..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_group_member.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_group_member import Parameters - from library.modules.bigip_device_group_member import ModuleManager - from library.modules.bigip_device_group_member import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_group_member import Parameters - from ansible.modules.network.f5.bigip_device_group_member import ModuleManager - from ansible.modules.network.f5.bigip_device_group_member import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='bigip1', - device_group='dg1' - ) - - p = Parameters(params=args) - assert p.name == 'bigip1' - assert p.device_group == 'dg1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args( - dict( - name="bigip1", - device_group="dg1", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_ha_group.py b/test/units/modules/network/f5/test_bigip_device_ha_group.py deleted file mode 100644 index 37b50d2d0a..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_ha_group.py +++ /dev/null @@ -1,230 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_ha_group import ModuleParameters - from library.modules.bigip_device_ha_group import ModuleManager - from library.modules.bigip_device_ha_group import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_ha_group import ModuleParameters - from ansible.modules.network.f5.bigip_device_ha_group import ModuleManager - from ansible.modules.network.f5.bigip_device_ha_group import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_v13(self): - args = dict( - name='foobar', - description='baz', - active_bonus=20, - enable='yes', - state='present', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=30, - minimum_threshold=2 - ) - ] - ) - - try: - self.p1 = patch('library.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'foobar' - assert p.state == 'present' - assert p.active_bonus == 20 - assert p.enabled is True - assert p.pools == [{'name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'minimumThreshold': 2}] - assert p.trunks == [{'name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 30, 'minimumThreshold': 2}] - - self.p1.stop() - - def test_module_parameters_v12(self): - args = dict( - name='foobar', - description='baz', - active_bonus=20, - enable='yes', - state='present', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=20, - minimum_threshold=1 - ) - ] - ) - - try: - self.p1 = patch('library.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.0' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.0' - - p = ModuleParameters(params=args) - - assert p.name == 'foobar' - assert p.state == 'present' - assert p.active_bonus == 20 - assert p.enabled is True - assert p.pools == [{'name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'threshold': 2}] - assert p.trunks == [{'name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 20, 'threshold': 1}] - - self.p1.stop() - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_device_ha_group.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.1.0' - - def tearDown(self): - self.p1.stop() - - def test_create_ha_group(self, *args): - set_module_args(dict( - name='fake_group', - state='present', - description='baz', - active_bonus=20, - enable='yes', - pools=[ - dict( - pool_name='fakepool', - attribute='percent-up-members', - weight=30, - minimum_threshold=2, - partition='Common' - ) - ], - trunks=[ - dict( - trunk_name='faketrunk', - attribute='percent-up-members', - weight=20, - minimum_threshold=1 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_group' - assert results['description'] == 'baz' - assert results['active_bonus'] == 20 - assert results['enable'] == 'yes' - assert results['pools'] == [{'pool_name': '/Common/fakepool', 'attribute': 'percent-up-members', - 'weight': 30, 'minimum_threshold': 2}] - assert results['trunks'] == [{'trunk_name': 'faketrunk', 'attribute': 'percent-up-members', - 'weight': 20, 'minimum_threshold': 1}] diff --git a/test/units/modules/network/f5/test_bigip_device_httpd.py b/test/units/modules/network/f5/test_bigip_device_httpd.py deleted file mode 100644 index e54d6ff2f9..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_httpd.py +++ /dev/null @@ -1,303 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_httpd import Parameters - from library.modules.bigip_device_httpd import ModuleManager - from library.modules.bigip_device_httpd import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_httpd import Parameters - from ansible.modules.network.f5.bigip_device_httpd import ModuleManager - from ansible.modules.network.f5.bigip_device_httpd import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - auth_name='BIG-IP', - auth_pam_idle_timeout=1200, - auth_pam_validate_ip='on' - ) - - p = Parameters(params=args) - assert p.auth_name == 'BIG-IP' - assert p.auth_pam_idle_timeout == 1200 - assert p.auth_pam_validate_ip == 'on' - - def test_api_parameters(self): - args = load_fixture('load_sys_httpd.json') - p = Parameters(params=args) - assert p.auth_name == 'BIG-IP' - assert p.auth_pam_idle_timeout == 1200 - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_update(self, *args): - set_module_args( - dict( - auth_name='foo', - auth_pam_idle_timeout='1000', - auth_pam_validate_ip='off', - auth_pam_dashboard_timeout='on', - fast_cgi_timeout=200, - hostname_lookup='on', - log_level='error', - max_clients='20', - redirect_http_to_https='yes', - ssl_port=8443, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_issue_00522(self, *args): - set_module_args( - dict( - ssl_cipher_suite='ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384' - - def test_update_issue_00522_as_list(self, *args): - set_module_args( - dict( - ssl_cipher_suite=[ - 'ECDHE-RSA-AES128-GCM-SHA256', - 'ECDHE-RSA-AES256-GCM-SHA384' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384' - - def test_update_issue_00522_default(self, *args): - set_module_args( - dict( - ssl_cipher_suite='default', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd_non_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_cipher_suite'] == 'default' - - def test_update_issue_00587(self, *args): - set_module_args( - dict( - ssl_protocols='all -SSLv2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'all -SSLv2' - - def test_update_issue_00587_as_list(self, *args): - set_module_args( - dict( - ssl_protocols=[ - 'all', - '-SSLv2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'all -SSLv2' - - def test_update_issue_00587_default(self, *args): - set_module_args( - dict( - ssl_protocols='default', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - current = Parameters(params=load_fixture('load_sys_httpd_non_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ssl_protocols'] == 'default' diff --git a/test/units/modules/network/f5/test_bigip_device_info.py b/test/units/modules/network/f5/test_bigip_device_info.py deleted file mode 100644 index 2291c02a2a..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_info.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import iteritems - -try: - from library.modules.bigip_device_info import Parameters - from library.modules.bigip_device_info import VirtualAddressesFactManager - from library.modules.bigip_device_info import ArgumentSpec - from library.modules.bigip_device_info import ModuleManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_info import Parameters - from ansible.modules.network.f5.bigip_device_info import VirtualAddressesFactManager - from ansible.modules.network.f5.bigip_device_info import ArgumentSpec - from ansible.modules.network.f5.bigip_device_info import ModuleManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class FakeVirtualAddress: - def __init__(self, *args, **kwargs): - attrs = kwargs.pop('params', {}) - for key, value in iteritems(attrs): - setattr(self, key, value) - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - gather_subset=['virtual-servers'], - ) - p = Parameters(params=args) - assert p.gather_subset == ['virtual-servers'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_device_info.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_device_info.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - - def tearDown(self): - self.p1.stop() - - def test_get_trunk_facts(self, *args): - set_module_args(dict( - gather_subset=['virtual-addresses'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture1 = load_fixture('load_ltm_virtual_address_collection_1.json') - collection = fixture1['items'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - tm = VirtualAddressesFactManager(module=module) - tm.read_collection_from_device = Mock(return_value=collection) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['queried'] is True - assert 'virtual_addresses' in results - assert len(results['virtual_addresses']) > 0 diff --git a/test/units/modules/network/f5/test_bigip_device_license.py b/test/units/modules/network/f5/test_bigip_device_license.py deleted file mode 100644 index e3846862b3..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_license.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_license import ModuleParameters - from library.modules.bigip_device_license import ModuleManager - from library.modules.bigip_device_license import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_license import ModuleParameters - from ansible.modules.network.f5.bigip_device_license import ModuleManager - from ansible.modules.network.f5.bigip_device_license import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True - ) - - p = ModuleParameters(params=args) - assert p.license_key == 'xxxx-yyyy-zzzz' - assert p.license_server == 'foo-license.f5.com' - assert p.accept_eula is True - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_create(self, *args): - set_module_args( - dict( - license_key='xxxx-yyyy-zzzz', - license_server='foo-license.f5.com', - accept_eula=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.read_dossier_from_device = Mock(return_value=True) - mm.generate_license_from_remote = Mock(return_value=True) - mm.upload_license_to_device = Mock(return_value=True) - mm.upload_eula_to_device = Mock(return_value=True) - mm.reload_license = Mock(return_value=True) - mm._is_mcpd_ready_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_ntp.py b/test/units/modules/network/f5/test_bigip_device_ntp.py deleted file mode 100644 index 209af006c0..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_ntp.py +++ /dev/null @@ -1,253 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_ntp import Parameters - from library.modules.bigip_device_ntp import ModuleManager - from library.modules.bigip_device_ntp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_ntp import Parameters - from ansible.modules.network.f5.bigip_device_ntp import ModuleManager - from ansible.modules.network.f5.bigip_device_ntp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - ntp = ['192.168.1.1', '192.168.1.2'] - args = dict( - ntp_servers=ntp, - timezone='Arctic/Longyearbyen' - ) - - p = Parameters(params=args) - assert p.ntp_servers == ntp - assert p.timezone == 'Arctic/Longyearbyen' - - def test_api_parameters(self): - ntp = ['192.168.1.1', '192.168.1.2'] - args = dict( - servers=ntp, - timezone='Arctic/Longyearbyen' - ) - - p = Parameters(params=args) - assert p.ntp_servers == ntp - assert p.timezone == 'Arctic/Longyearbyen' - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_ntp_servers(self, *args): - ntp = ['10.1.1.1', '10.1.1.2'] - set_module_args( - dict( - ntp_servers=ntp, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - - def test_update_timezone(self, *args): - set_module_args( - dict( - timezone='Arctic/Longyearbyen', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timezone'] == 'Arctic/Longyearbyen' - - def test_update_ntp_servers_and_timezone(self, *args): - ntp = ['10.1.1.1', '10.1.1.2'] - set_module_args( - dict( - ntp_servers=ntp, - timezone='Arctic/Longyearbyen', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - assert results['timezone'] == 'Arctic/Longyearbyen' - - def test_absent_ntp_servers(self, *args): - ntp = [] - set_module_args( - dict( - ntp_servers=ntp, - timezone='America/Los_Angeles', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.absent_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True - assert results['ntp_servers'] == ntp - assert not hasattr(results, 'timezone') - - def test_absent_timezone(self, *args): - set_module_args( - dict( - timezone='', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_ntp.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.absent_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_device_sshd.py b/test/units/modules/network/f5/test_bigip_device_sshd.py deleted file mode 100644 index 03ad4036ee..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_sshd.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_sshd import ApiParameters - from library.modules.bigip_device_sshd import ModuleParameters - from library.modules.bigip_device_sshd import ModuleManager - from library.modules.bigip_device_sshd import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_sshd import ApiParameters - from ansible.modules.network.f5.bigip_device_sshd import ModuleParameters - from ansible.modules.network.f5.bigip_device_sshd import ModuleManager - from ansible.modules.network.f5.bigip_device_sshd import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - allow=['all'], - banner='enabled', - banner_text='asdf', - inactivity_timeout='100', - log_level='debug', - login='enabled', - port=1010, - ) - p = ModuleParameters(params=args) - assert p.allow == ['all'] - assert p.banner == 'enabled' - assert p.banner_text == 'asdf' - assert p.inactivity_timeout == 100 - assert p.log_level == 'debug' - assert p.login == 'enabled' - assert p.port == 1010 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_settings(self, *args): - set_module_args(dict( - allow=['all'], - banner='enabled', - banner_text='asdf', - inactivity_timeout='100', - log_level='debug', - login='enabled', - port=1010, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allow=['172.27.1.1'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['allow'] == ['all'] diff --git a/test/units/modules/network/f5/test_bigip_device_syslog.py b/test/units/modules/network/f5/test_bigip_device_syslog.py deleted file mode 100644 index cde3babbb9..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_syslog.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_syslog import ApiParameters - from library.modules.bigip_device_syslog import ModuleParameters - from library.modules.bigip_device_syslog import ModuleManager - from library.modules.bigip_device_syslog import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_syslog import ApiParameters - from ansible.modules.network.f5.bigip_device_syslog import ModuleParameters - from ansible.modules.network.f5.bigip_device_syslog import ModuleManager - from ansible.modules.network.f5.bigip_device_syslog import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - kern_from='err', - kern_to='info', - ) - p = ModuleParameters(params=args) - assert p.kern_from == 'err' - assert p.kern_to == 'info' - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_sys_syslog_1.json')) - assert p.kern_from == 'debug' - assert p.kern_to == 'emerg' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update(self, *args): - set_module_args(dict( - kern_from='emerg', - kern_to='debug', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_sys_syslog_1.json')) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_device_traffic_group.py b/test/units/modules/network/f5/test_bigip_device_traffic_group.py deleted file mode 100644 index 3454e1d770..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_traffic_group.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_traffic_group import ApiParameters - from library.modules.bigip_device_traffic_group import ModuleParameters - from library.modules.bigip_device_traffic_group import ModuleManager - from library.modules.bigip_device_traffic_group import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_traffic_group import ApiParameters - from ansible.modules.network.f5.bigip_device_traffic_group import ModuleParameters - from ansible.modules.network.f5.bigip_device_traffic_group import ModuleManager - from ansible.modules.network.f5.bigip_device_traffic_group import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_1(self): - args = dict( - name='foo', - mac_address='' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.mac_address == 'none' - - def test_module_parameters_2(self): - args = dict( - mac_address='00:00:00:00:00:02' - ) - - p = ModuleParameters(params=args) - assert p.mac_address == '00:00:00:00:00:02' - - def test_module_parameters_3(self): - args = dict( - name='foo', - ha_order=['bigip1'], - ha_group='', - auto_failback='yes', - auto_failback_time=40 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.ha_order == ['/Common/bigip1'] - assert p.ha_group == 'none' - assert p.auto_failback == 'true' - assert p.auto_failback_time == 40 - - def test_api_parameters_1(self): - args = load_fixture('load_tm_cm_traffic_group_1.json') - - p = ApiParameters(params=args) - assert p.mac_address == 'none' - - def test_api_parameters_2(self): - args = load_fixture('load_tm_cm_traffic_group_2.json') - - p = ApiParameters(params=args) - assert p.mac_address == '00:00:00:00:00:02' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_modify_ha_order(self, *args): - set_module_args(dict( - name='traffic-group-2', - ha_order=['v12-2.ansible.local', 'v12-1.ansible.local'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - current = ApiParameters(params=load_fixture('load_tg_ha_order.json')) - - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ha_order'] == ['/Common/v12-2.ansible.local', '/Common/v12-1.ansible.local'] diff --git a/test/units/modules/network/f5/test_bigip_device_trust.py b/test/units/modules/network/f5/test_bigip_device_trust.py deleted file mode 100644 index 6c7f325b01..0000000000 --- a/test/units/modules/network/f5/test_bigip_device_trust.py +++ /dev/null @@ -1,183 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_device_trust import Parameters - from library.modules.bigip_device_trust import ModuleManager - from library.modules.bigip_device_trust import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_device_trust import Parameters - from ansible.modules.network.f5.bigip_device_trust import ModuleManager - from ansible.modules.network.f5.bigip_device_trust import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - - def test_module_parameters_with_peer_type(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - type='peer' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - assert p.type is True - - def test_module_parameters_with_subordinate_type(self): - args = dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - type='subordinate' - ) - - p = Parameters(params=args) - assert p.peer_server == '10.10.10.10' - assert p.peer_hostname == 'foo.bar.baz' - assert p.peer_user == 'admin' - assert p.peer_password == 'secret' - assert p.type is False - - def test_hyphenated_peer_hostname(self): - args = dict( - peer_hostname='hn---hyphen____underscore.hmatsuda.local', - ) - - p = Parameters(params=args) - assert p.peer_hostname == 'hn---hyphen____underscore.hmatsuda.local' - - def test_numbered_peer_hostname(self): - args = dict( - peer_hostname='BIG-IP_12x_ans2.example.local', - ) - - p = Parameters(params=args) - assert p.peer_hostname == 'BIG-IP_12x_ans2.example.local' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_device_trust(self, *args): - set_module_args(dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_device_trust_idempotent(self, *args): - set_module_args(dict( - peer_server='10.10.10.10', - peer_hostname='foo.bar.baz', - peer_user='admin', - peer_password='secret', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_dns_cache_resolver.py b/test/units/modules/network/f5/test_bigip_dns_cache_resolver.py deleted file mode 100644 index 924e2c6a92..0000000000 --- a/test/units/modules/network/f5/test_bigip_dns_cache_resolver.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_dns_cache_resolver import ApiParameters - from library.modules.bigip_dns_cache_resolver import ModuleParameters - from library.modules.bigip_dns_cache_resolver import ModuleManager - from library.modules.bigip_dns_cache_resolver import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_dns_cache_resolver import ApiParameters - from ansible.modules.network.f5.bigip_dns_cache_resolver import ModuleParameters - from ansible.modules.network.f5.bigip_dns_cache_resolver import ModuleManager - from ansible.modules.network.f5.bigip_dns_cache_resolver import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - answer_default_zones=True, - route_domain=10, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/10' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_cache_resolver_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/0' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - route_domain=20, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_dns_nameserver.py b/test/units/modules/network/f5/test_bigip_dns_nameserver.py deleted file mode 100644 index 5d7adeb2c2..0000000000 --- a/test/units/modules/network/f5/test_bigip_dns_nameserver.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_dns_nameserver import ApiParameters - from library.modules.bigip_dns_nameserver import ModuleParameters - from library.modules.bigip_dns_nameserver import ModuleManager - from library.modules.bigip_dns_nameserver import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_dns_nameserver import ApiParameters - from ansible.modules.network.f5.bigip_dns_nameserver import ModuleParameters - from ansible.modules.network.f5.bigip_dns_nameserver import ModuleManager - from ansible.modules.network.f5.bigip_dns_nameserver import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - address='10.10.10.10', - service_port=80, - route_domain=20, - tsig_key='key1', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.address == '10.10.10.10' - assert p.service_port == 80 - assert p.route_domain == '/Common/20' - assert p.tsig_key == '/Common/key1' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_nameserver_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.address == '127.0.0.1' - assert p.service_port == 53 - assert p.route_domain == '/Common/0' - assert p.tsig_key == '/Common/key1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - address='10.10.10.10', - service_port=80, - route_domain=20, - tsig_key='key1', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_dns_resolver.py b/test/units/modules/network/f5/test_bigip_dns_resolver.py deleted file mode 100644 index 568f6432e8..0000000000 --- a/test/units/modules/network/f5/test_bigip_dns_resolver.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_dns_resolver import ApiParameters - from library.modules.bigip_dns_resolver import ModuleParameters - from library.modules.bigip_dns_resolver import ModuleManager - from library.modules.bigip_dns_resolver import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_dns_resolver import ApiParameters - from ansible.modules.network.f5.bigip_dns_resolver import ModuleParameters - from ansible.modules.network.f5.bigip_dns_resolver import ModuleManager - from ansible.modules.network.f5.bigip_dns_resolver import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - route_domain=10, - cache_size=1234, - answer_default_zones=True, - randomize_query_case=False, - use_ipv4=True, - use_ipv6=False, - use_udp=True, - use_tcp=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == '/Common/10' - assert p.cache_size == 1234 - assert p.answer_default_zones == 'yes' - assert p.randomize_query_case == 'no' - assert p.use_ipv4 == 'yes' - assert p.use_ipv6 == 'no' - assert p.use_tcp == 'no' - assert p.use_udp == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_net_dns_resolver_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_dns_zone.py b/test/units/modules/network/f5/test_bigip_dns_zone.py deleted file mode 100644 index 38d6193ee7..0000000000 --- a/test/units/modules/network/f5/test_bigip_dns_zone.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_dns_zone import ApiParameters - from library.modules.bigip_dns_zone import ModuleParameters - from library.modules.bigip_dns_zone import ModuleManager - from library.modules.bigip_dns_zone import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_dns_zone import ApiParameters - from ansible.modules.network.f5.bigip_dns_zone import ModuleParameters - from ansible.modules.network.f5.bigip_dns_zone import ModuleManager - from ansible.modules.network.f5.bigip_dns_zone import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - dns_express=dict( - server='server1', - enabled=True, - notify_action='consume', - allow_notify_from=['1.1.1.1'], - verify_tsig=True, - response_policy=False - ), - nameservers=[ - 'foo', 'bar', 'baz' - ], - tsig_server_key='key1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert len(p.nameservers) == 3 - assert p.tsig_server_key == '/Common/key1' - assert p.express_server == '/Common/server1' - assert p.enabled == 'yes' - assert p.notify_action == 'consume' - assert len(p.allow_notify_from) == 1 - assert p.verify_tsig == 'yes' - assert p.response_policy == 'no' - - def test_api_parameters(self): - args = load_fixture('load_ltm_dns_zone_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_file_copy.py b/test/units/modules/network/f5/test_bigip_file_copy.py deleted file mode 100644 index c52886065e..0000000000 --- a/test/units/modules/network/f5/test_bigip_file_copy.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_file_copy import ApiParameters - from library.modules.bigip_file_copy import IFileManager - from library.modules.bigip_file_copy import ModuleParameters - from library.modules.bigip_file_copy import ModuleManager - from library.modules.bigip_file_copy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_file_copy import ApiParameters - from ansible.modules.network.f5.bigip_file_copy import IFileManager - from ansible.modules.network.f5.bigip_file_copy import ModuleParameters - from ansible.modules.network.f5.bigip_file_copy import ModuleManager - from ansible.modules.network.f5.bigip_file_copy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - source='file.txt', - force=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.source == 'file.txt' - assert p.force is True - - def test_api_parameters(self): - args = load_fixture('load_sys_file_external-monitor_1.json') - p = ApiParameters(params=args) - assert p.checksum == '0c78e6641632e47d11802b29cfd119d2233cb80a' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - source='file.txt', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - tm = IFileManager(module=module) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - tm.upload_to_device = Mock(return_value=True) - tm.remove_uploaded_file_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_firewall_address_list.py b/test/units/modules/network/f5/test_bigip_firewall_address_list.py deleted file mode 100644 index 17457a240b..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_address_list.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_address_list import ApiParameters - from library.modules.bigip_firewall_address_list import ModuleParameters - from library.modules.bigip_firewall_address_list import ModuleManager - from library.modules.bigip_firewall_address_list import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_address_list import ApiParameters - from ansible.modules.network.f5.bigip_firewall_address_list import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_address_list import ModuleManager - from ansible.modules.network.f5.bigip_firewall_address_list import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='this is a description', - addresses=['1.1.1.1', '2.2.2.2'], - address_ranges=['3.3.3.3-4.4.4.4', '5.5.5.5-6.6.6.6'], - address_lists=['/Common/foo', 'foo'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'this is a description' - assert len(p.addresses) == 2 - assert len(p.address_ranges) == 2 - assert len(p.address_lists) == 2 - - def test_api_parameters(self): - args = load_fixture('load_security_address_list_1.json') - - p = ApiParameters(params=args) - assert len(p.addresses) == 2 - assert len(p.address_ranges) == 2 - assert len(p.address_lists) == 1 - assert len(p.fqdns) == 1 - assert len(p.geo_locations) == 5 - assert sorted(p.addresses) == ['1.1.1.1', '2700:bc00:1f10:101::6'] - assert sorted(p.address_ranges) == ['2.2.2.2-3.3.3.3', '5.5.5.5-6.6.6.6'] - assert p.address_lists[0] == '/Common/foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - addresses=['1.1.1.1', '2.2.2.2'], - address_ranges=['3.3.3.3-4.4.4.4', '5.5.5.5-6.6.6.6'], - address_lists=['/Common/foo', 'foo'], - geo_locations=[ - dict(country='US', region='Los Angeles'), - dict(country='China'), - dict(country='EU') - ], - fqdns=['google.com', 'mit.edu'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'addresses' in results - assert 'address_lists' in results - assert 'address_ranges' in results - assert len(results['addresses']) == 2 - assert len(results['address_ranges']) == 2 - assert len(results['address_lists']) == 2 - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_dos_profile.py b/test/units/modules/network/f5/test_bigip_firewall_dos_profile.py deleted file mode 100644 index 8f0bdd6914..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_dos_profile.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_dos_profile import ModuleParameters - from library.modules.bigip_firewall_dos_profile import ModuleManager - from library.modules.bigip_firewall_dos_profile import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_dos_profile import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_dos_profile import ModuleManager - from ansible.modules.network.f5.bigip_firewall_dos_profile import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - threshold_sensitivity='low', - default_whitelist='whitelist1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.threshold_sensitivity == 'low' - assert p.default_whitelist == '/Common/whitelist1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - threshold_sensitivity='low', - default_whitelist='whitelist1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_dos_vector.py b/test/units/modules/network/f5/test_bigip_firewall_dos_vector.py deleted file mode 100644 index dbcad842d6..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_dos_vector.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_dos_vector import ModuleParameters - from library.modules.bigip_firewall_dos_vector import ModuleManager - from library.modules.bigip_firewall_dos_vector import ArgumentSpec - from library.modules.bigip_firewall_dos_vector import ProtocolDnsManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_dos_vector import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_dos_vector import ModuleManager - from ansible.modules.network.f5.bigip_firewall_dos_vector import ArgumentSpec - from ansible.modules.network.f5.bigip_firewall_dos_vector import ProtocolDnsManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - state='mitigate' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.state == 'mitigate' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_dns(self, *args): - set_module_args(dict( - name='aaaa', - state='mitigate', - profile='foo', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = ProtocolDnsManager(module=module) - m1.read_current_from_device = Mock(return_value=[]) - m1.update_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_firewall_global_rules.py b/test/units/modules/network/f5/test_bigip_firewall_global_rules.py deleted file mode 100644 index be3442a225..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_global_rules.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_global_rules import ApiParameters - from library.modules.bigip_firewall_global_rules import ModuleParameters - from library.modules.bigip_firewall_global_rules import ModuleManager - from library.modules.bigip_firewall_global_rules import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_global_rules import ApiParameters - from ansible.modules.network.f5.bigip_firewall_global_rules import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_global_rules import ModuleManager - from ansible.modules.network.f5.bigip_firewall_global_rules import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - enforced_policy='enforced1', - staged_policy='staged1', - service_policy='service1', - ) - p = ModuleParameters(params=args) - assert p.enforced_policy == '/Common/enforced1' - assert p.staged_policy == '/Common/staged1' - assert p.service_policy == '/Common/service1' - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_security_firewall_global_rules_1.json')) - assert p.enforced_policy == '/Common/foo' - assert p.service_policy == '/Common/bar' - assert p.staged_policy == '/Common/baz' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update(self, *args): - set_module_args(dict( - enforced_policy='enforced1', - staged_policy='staged1', - service_policy='service1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_security_firewall_global_rules_1.json')) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_firewall_log_profile.py b/test/units/modules/network/f5/test_bigip_firewall_log_profile.py deleted file mode 100644 index 2c4743140c..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_log_profile.py +++ /dev/null @@ -1,146 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_log_profile import ApiParameters - from library.modules.bigip_firewall_log_profile import ModuleParameters - from library.modules.bigip_firewall_log_profile import ModuleManager - from library.modules.bigip_firewall_log_profile import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_log_profile import ApiParameters - from ansible.modules.network.f5.bigip_firewall_log_profile import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_log_profile import ModuleManager - from ansible.modules.network.f5.bigip_firewall_log_profile import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - partition='Common', - ip_intelligence=dict( - log_publisher='foobar', - rate_limit='300000', - log_translation_fields='yes', - log_rtbh='yes', - log_shun='yes', - ), - port_misuse=dict( - log_publisher='/Part/bazbar', - rate_limit='indefinite', - ), - dos_protection=dict( - sip_publisher='sip-pub', - dns_publisher='/Temp/dns-pub', - network_publisher='net-pub' - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.ip_rate_limit == 300000 - assert p.ip_log_publisher == '/Common/foobar' - assert p.ip_log_translation_fields == 'enabled' - assert p.ip_log_shun is None - assert p.ip_log_rtbh == 'enabled' - assert p.port_log_publisher == '/Part/bazbar' - assert p.port_rate_limit == 4294967295 - assert p.dns_publisher == '/Temp/dns-pub' - assert p.sip_publisher == '/Common/sip-pub' - assert p.network_publisher == '/Common/net-pub' - - def test_api_parameters(self): - args = load_fixture('load_afm_log_global_network_profile.json') - - p = ApiParameters(params=args) - assert p.name == 'global-network' - assert p.description == 'Default logging profile for network events' - assert p.ip_log_shun == 'disabled' - assert p.ip_log_translation_fields == 'disabled' - assert p.ip_rate_limit == 4294967295 - assert p.port_rate_limit == 4294967295 - assert p.ip_log_publisher is None - assert p.port_log_publisher is None - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_log_profile_network.py b/test/units/modules/network/f5/test_bigip_firewall_log_profile_network.py deleted file mode 100644 index a17fc05fba..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_log_profile_network.py +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_log_profile_network import ApiParameters - from library.modules.bigip_firewall_log_profile_network import ModuleParameters - from library.modules.bigip_firewall_log_profile_network import ModuleManager - from library.modules.bigip_firewall_log_profile_network import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_log_profile_network import ApiParameters - from ansible.modules.network.f5.bigip_firewall_log_profile_network import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_log_profile_network import ModuleManager - from ansible.modules.network.f5.bigip_firewall_log_profile_network import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - profile_name='foo', - rate_limit=150000, - log_publisher='/Common/foobar', - log_tcp_errors=dict( - enabled='yes', - rate_limit=10000, - ), - log_tcp_events=dict( - enabled='yes', - rate_limit=30000, - ), - log_ip_errors=dict( - enabled='yes', - rate_limit=60000, - ), - log_matches_accept_rule=dict( - enabled='yes', - rate_limit=80000, - ), - log_matches_drop_rule=dict( - enabled='no', - rate_limit='indefinite', - ), - log_matches_reject_rule=dict( - enabled='no', - rate_limit='indefinite', - ), - log_format_delimiter='.', - log_storage_format='field-list', - log_message_fields=['vlan', 'translated_vlan', 'src_ip'] - ) - - p = ModuleParameters(params=args) - assert p.profile_name == 'foo' - assert p.rate_limit == 150000 - assert p.log_publisher == '/Common/foobar' - assert p.log_tcp_events == 'enabled' - assert p.rate_tcp_events == 30000 - assert p.log_ip_errors == 'enabled' - assert p.rate_ip_errors == 60000 - assert p.log_tcp_errors == 'enabled' - assert p.rate_tcp_errors == 10000 - assert p.log_acl_match_accept == 'enabled' - assert p.rate_acl_match_accept == 80000 - assert p.log_acl_match_drop == 'disabled' - assert p.rate_acl_match_drop == 4294967295 - assert p.log_acl_match_reject == 'disabled' - assert p.rate_acl_match_reject == 4294967295 - assert p.log_format_delimiter == '.' - assert p.log_storage_format == 'field-list' - - def test_api_parameters(self): - args = load_fixture('load_afm_global_network_log_network.json') - - p = ApiParameters(params=args) - assert p.rate_limit == 4294967295 - assert p.log_tcp_events == 'disabled' - assert p.rate_tcp_events == 4294967295 - assert p.log_ip_errors == 'disabled' - assert p.rate_ip_errors == 4294967295 - assert p.log_tcp_errors == 'disabled' - assert p.rate_tcp_errors == 4294967295 - assert p.log_acl_match_accept == 'disabled' - assert p.rate_acl_match_accept == 4294967295 - assert p.log_acl_match_drop == 'disabled' - assert p.rate_acl_match_drop == 4294967295 - assert p.log_acl_match_reject == 'disabled' - assert p.rate_acl_match_reject == 4294967295 - assert p.log_format_delimiter == ',' - assert p.log_storage_format == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - profile_name='foo', - rate_limit=150000, - log_publisher='/Common/foobar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['rate_limit'] == 150000 - assert results['log_publisher'] == '/Common/foobar' diff --git a/test/units/modules/network/f5/test_bigip_firewall_policy.py b/test/units/modules/network/f5/test_bigip_firewall_policy.py deleted file mode 100644 index a5742bc81f..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_policy.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_policy import ApiParameters - from library.modules.bigip_firewall_policy import ModuleParameters - from library.modules.bigip_firewall_policy import ModuleManager - from library.modules.bigip_firewall_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_policy import ApiParameters - from ansible.modules.network.f5.bigip_firewall_policy import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_policy import ModuleManager - from ansible.modules.network.f5.bigip_firewall_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - rules=['rule1', 'rule2', 'rule3'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - def test_api_parameters(self): - args = load_fixture('load_security_firewall_policy_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - rules=['rule1', 'rule2', 'rule3'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'rules' in results - assert len(results['rules']) == 3 - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_port_list.py b/test/units/modules/network/f5/test_bigip_firewall_port_list.py deleted file mode 100644 index 17547815c5..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_port_list.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_port_list import ApiParameters - from library.modules.bigip_firewall_port_list import ModuleParameters - from library.modules.bigip_firewall_port_list import ModuleManager - from library.modules.bigip_firewall_port_list import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_port_list import ApiParameters - from ansible.modules.network.f5.bigip_firewall_port_list import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_port_list import ModuleManager - from ansible.modules.network.f5.bigip_firewall_port_list import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='this is a description', - ports=[1, 2, 3, 4], - port_ranges=['10-20', '30-40', '50-60'], - port_lists=['/Common/foo', 'foo'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'this is a description' - assert len(p.ports) == 4 - assert len(p.port_ranges) == 3 - assert len(p.port_lists) == 2 - - def test_api_parameters(self): - args = load_fixture('load_security_port_list_1.json') - - p = ApiParameters(params=args) - assert len(p.ports) == 4 - assert len(p.port_ranges) == 3 - assert len(p.port_lists) == 1 - assert sorted(p.ports) == [1, 2, 3, 4] - assert sorted(p.port_ranges) == ['10-20', '30-40', '50-60'] - assert p.port_lists[0] == '/Common/_sys_self_allow_tcp_defaults' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_firewall_port_list.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_firewall_port_list.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - ports=[1, 2, 3, 4], - port_ranges=['10-20', '30-40', '50-60'], - port_lists=['/Common/foo', 'foo'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'ports' in results - assert 'port_lists' in results - assert 'port_ranges' in results - assert len(results['ports']) == 4 - assert len(results['port_ranges']) == 3 - assert len(results['port_lists']) == 2 - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_rule.py b/test/units/modules/network/f5/test_bigip_firewall_rule.py deleted file mode 100644 index 39d45ab178..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_rule.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_rule import ModuleParameters - from library.modules.bigip_firewall_rule import ModuleManager - from library.modules.bigip_firewall_rule import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_rule import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_rule import ModuleManager - from ansible.modules.network.f5.bigip_firewall_rule import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent_policy='policy1', - protocol='tcp', - source=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(vlan='vlan1'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - destination=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - irule='irule1', - action='accept', - logging=True, - ) - - p = ModuleParameters(params=args) - assert p.irule == '/Common/irule1' - assert p.action == 'accept' - assert p.logging is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent_policy='policy1', - protocol='tcp', - source=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(vlan='vlan1'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - destination=[ - dict(address='1.2.3.4'), - dict(address='::1'), - dict(address_list='foo-list1'), - dict(address_range='1.1.1.1-2.2.2.2.'), - dict(country='US'), - dict(port='22'), - dict(port_list='port-list1'), - dict(port_range='80-443'), - ], - irule='irule1', - action='accept', - logging='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_firewall_rule_list.py b/test/units/modules/network/f5/test_bigip_firewall_rule_list.py deleted file mode 100644 index 4c6b2d9a34..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_rule_list.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_rule_list import ModuleParameters - from library.modules.bigip_firewall_rule_list import ModuleManager - from library.modules.bigip_firewall_rule_list import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_rule_list import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_rule_list import ModuleManager - from ansible.modules.network.f5.bigip_firewall_rule_list import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - rules=['rule1', 'rule2', 'rule3'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.rules == ['rule1', 'rule2', 'rule3'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - rules=['rule1', 'rule2', 'rule3'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'rules' in results - assert len(results['rules']) == 3 - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_firewall_schedule.py b/test/units/modules/network/f5/test_bigip_firewall_schedule.py deleted file mode 100644 index 35ff7ab508..0000000000 --- a/test/units/modules/network/f5/test_bigip_firewall_schedule.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_firewall_schedule import ApiParameters - from library.modules.bigip_firewall_schedule import ModuleParameters - from library.modules.bigip_firewall_schedule import ModuleManager - from library.modules.bigip_firewall_schedule import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_firewall_schedule import ApiParameters - from ansible.modules.network.f5.bigip_firewall_schedule import ModuleParameters - from ansible.modules.network.f5.bigip_firewall_schedule import ModuleManager - from ansible.modules.network.f5.bigip_firewall_schedule import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - daily_hour_end='21:00', - daily_hour_start='11:00', - date_valid_end='2019-03-11:15:30:00', - date_valid_start='2019-03-01:15:30:00', - days_of_week='all', - ) - p = ModuleParameters(params=args) - - assert p.name == 'foo' - assert p.description == 'my description' - assert p.daily_hour_end == '21:00' - assert p.daily_hour_start == '11:00' - assert p.date_valid_end == '2019-03-11T15:30:00Z' - assert p.date_valid_start == '2019-03-01T15:30:00Z' - assert 'monday' in p.days_of_week - - def test_api_parameters(self): - args = load_fixture('load_afm_schedule.json') - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.description == 'some description' - assert p.daily_hour_end == '12:00' - assert p.daily_hour_start == '6:00' - assert p.date_valid_end == '2019-06-13T16:00:00Z' - assert p.date_valid_start == '2019-05-31T07:00:00Z' - assert 'sunday' in p.days_of_week - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigip_gtm_datacenter.py b/test/units/modules/network/f5/test_bigip_gtm_datacenter.py deleted file mode 100644 index 5352c5ec15..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_datacenter.py +++ /dev/null @@ -1,245 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_datacenter import ApiParameters - from library.modules.bigip_gtm_datacenter import ModuleParameters - from library.modules.bigip_gtm_datacenter import ModuleManager - from library.modules.bigip_gtm_datacenter import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_datacenter import ApiParameters - from ansible.modules.network.f5.bigip_gtm_datacenter import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_datacenter import ModuleManager - from ansible.modules.network.f5.bigip_gtm_datacenter import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - state='present', - contact='foo', - description='bar', - location='baz', - name='datacenter' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - - def test_api_parameters(self): - args = load_fixture('load_gtm_datacenter_default.json') - p = ApiParameters(params=args) - assert p.name == 'asd' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled is True - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled is True - assert p.disabled is None - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.enabled is None - assert p.disabled is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_datacenter.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_datacenter.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['state'] == 'present' - - def test_create_disabled_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='disabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['enabled'] is False - assert results['disabled'] is True - - def test_create_enabled_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='enabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['enabled'] is True - assert results['disabled'] is False - - def test_idempotent_disable_datacenter(self, *args): - set_module_args(dict( - name='foo', - state='disabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - current = ApiParameters(params=load_fixture('load_gtm_datacenter_disabled.json')) - - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_gtm_global.py b/test/units/modules/network/f5/test_bigip_gtm_global.py deleted file mode 100644 index e80347e364..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_global.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_global import ApiParameters - from library.modules.bigip_gtm_global import ModuleParameters - from library.modules.bigip_gtm_global import ModuleManager - from library.modules.bigip_gtm_global import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_global import ApiParameters - from ansible.modules.network.f5.bigip_gtm_global import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_global import ModuleManager - from ansible.modules.network.f5.bigip_gtm_global import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - synchronization=True, - synchronization_group_name='foo', - synchronize_zone_files=True - ) - - p = ModuleParameters(params=args) - assert p.synchronization is True - assert p.synchronization_group_name == 'foo' - assert p.synchronize_zone_files is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_global_settings_general_1.json') - - p = ApiParameters(params=args) - assert p.synchronization is False - assert p.synchronization_group_name == 'default' - assert p.synchronize_zone_files is False - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def update(self, *args): - set_module_args(dict( - synchronization="yes", - synchronization_group_name='foo', - synchronize_zone_files="yes", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_global_settings_general_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['synchronization'] == 'yes' - assert results['synchronization_group_name'] == 'foo' - assert results['synchronize_zone_files'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_bigip.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_bigip.py deleted file mode 100644 index 08b5e838c7..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_bigip.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_bigip import ApiParameters - from library.modules.bigip_gtm_monitor_bigip import ModuleParameters - from library.modules.bigip_gtm_monitor_bigip import ModuleManager - from library.modules.bigip_gtm_monitor_bigip import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_bigip import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_bigip import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_bigip import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_bigip import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - aggregate_dynamic_ratios='average-members', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.aggregate_dynamic_ratios == 'average-members' - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - ignoreDownResponse='disabled', - aggregateDynamicRatios='none', - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'bigip' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.aggregate_dynamic_ratios == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_bigip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_bigip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_external.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_external.py deleted file mode 100644 index bc647057f6..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_external.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_external import ModuleParameters - from library.modules.bigip_gtm_monitor_external import ModuleManager - from library.modules.bigip_gtm_monitor_external import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_external import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_external import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_external import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'external' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_external.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_external.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_firepass.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_firepass.py deleted file mode 100644 index b0cad64b5b..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_firepass.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_firepass import ApiParameters - from library.modules.bigip_gtm_monitor_firepass import ModuleParameters - from library.modules.bigip_gtm_monitor_firepass import ModuleManager - from library.modules.bigip_gtm_monitor_firepass import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_firepass import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_firepass import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_firepass import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_firepass import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - max_load_average='60', - concurrency_limit='70', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - probe_timeout='30' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.max_load_average == 60 - assert p.concurrency_limit == 70 - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.probe_timeout == 30 - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_firepass_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/firepass_gtm' - assert p.max_load_average == 12 - assert p.concurrency_limit == 95 - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 30 - assert p.timeout == 90 - assert p.ignore_down_response is True - assert p.probe_timeout == 5 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_firepass.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_firepass.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_http.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_http.py deleted file mode 100644 index 5e66fa31e3..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_http.py +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_http import ApiParameters - from library.modules.bigip_gtm_monitor_http import ModuleParameters - from library.modules.bigip_gtm_monitor_http import ModuleManager - from library.modules.bigip_gtm_monitor_http import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_http import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_http import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_http import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_http import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_http_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/http' - assert p.send == 'GET /' - assert p.receive == 'the receive string' - assert p.destination == '3.3.3.3:8080' - assert p.ip == '3.3.3.3' - assert p.port == 8080 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_http.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_http.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_https.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_https.py deleted file mode 100644 index 25d7afd48d..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_https.py +++ /dev/null @@ -1,170 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_https import ApiParameters - from library.modules.bigip_gtm_monitor_https import ModuleParameters - from library.modules.bigip_gtm_monitor_https import ModuleManager - from library.modules.bigip_gtm_monitor_https import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_https import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_https import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_https import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_https import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-http', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - client_cert='default', - client_key='default', - target_username='user1', - target_password='secret1', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-http' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.client_cert == '/Common/default.crt' - assert p.client_key == '/Common/default.key' - assert p.target_username == 'user1' - assert p.target_password == 'secret1' - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_http_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/http' - assert p.send == 'GET /' - assert p.receive == 'the receive string' - assert p.destination == '3.3.3.3:8080' - assert p.ip == '3.3.3.3' - assert p.port == 8080 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_https.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_https.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp.py deleted file mode 100644 index 89d6c43185..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp.py +++ /dev/null @@ -1,223 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_tcp import ApiParameters - from library.modules.bigip_gtm_monitor_tcp import ModuleParameters - from library.modules.bigip_gtm_monitor_tcp import ModuleManager - from library.modules.bigip_gtm_monitor_tcp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_tcp import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_tcp import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_tcp import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_tcp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='/Common/my-tcp', - send='the send string', - receive='the receive string', - ip='1.1.1.1', - port='80', - interval='10', - timeout='20', - ignore_down_response=True, - transparent=False, - probe_timeout='30', - reverse=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/my-tcp' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 10 - assert p.timeout == 20 - assert p.ignore_down_response is True - assert p.transparent is False - assert p.probe_timeout == 30 - assert p.reverse is True - - def test_api_parameters(self): - args = load_fixture('load_gtm_monitor_tcp_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/tcp' - assert p.send == 'the send string' - assert p.receive == 'the receive string' - assert p.destination == '1.1.1.1:80' - assert p.ip == '1.1.1.1' - assert p.port == 80 - assert p.interval == 30 - assert p.timeout == 120 - assert p.ignore_down_response is False - assert p.transparent is True - assert p.probe_timeout == 5 - assert p.reverse is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_tcp.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_tcp.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_change_ip(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_monitor_tcp_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ip'] == '10.10.10.10' - - def test_change_ignore_down_response(self, *args): - set_module_args(dict( - name='foo', - ignore_down_response=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_monitor_tcp_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['ignore_down_response'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py b/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py deleted file mode 100644 index b39b9f1b1e..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_monitor_tcp_half_open.py +++ /dev/null @@ -1,193 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_monitor_tcp_half_open import ApiParameters - from library.modules.bigip_gtm_monitor_tcp_half_open import ModuleParameters - from library.modules.bigip_gtm_monitor_tcp_half_open import ModuleManager - from library.modules.bigip_gtm_monitor_tcp_half_open import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_monitor_tcp_half_open import ApiParameters - from ansible.modules.network.f5.bigip_gtm_monitor_tcp_half_open import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_monitor_tcp_half_open import ModuleManager - from ansible.modules.network.f5.bigip_gtm_monitor_tcp_half_open import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - probe_interval=10, - probe_timeout=20, - probe_attempts=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - probe_interval='10', - probe_timeout='20', - probe_attempts='30', - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - probeInterval=10, - probeTimeout=20, - probeAttempts=30, - ignoreDownResponse='disabled' - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.probe_interval == 10 - assert p.probe_timeout == 20 - assert p.probe_attempts == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_monitor_tcp_half_open.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_monitor_tcp_half_open.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_pool.py b/test/units/modules/network/f5/test_bigip_gtm_pool.py deleted file mode 100644 index 4f01b0ee9f..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_pool.py +++ /dev/null @@ -1,385 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_pool import ApiParameters - from library.modules.bigip_gtm_pool import ModuleParameters - from library.modules.bigip_gtm_pool import ModuleManager - from library.modules.bigip_gtm_pool import ArgumentSpec - from library.modules.bigip_gtm_pool import UntypedManager - from library.modules.bigip_gtm_pool import TypedManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_pool import ApiParameters - from ansible.modules.network.f5.bigip_gtm_pool import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_pool import ModuleManager - from ansible.modules.network.f5.bigip_gtm_pool import ArgumentSpec - from ansible.modules.network.f5.bigip_gtm_pool import UntypedManager - from ansible.modules.network.f5.bigip_gtm_pool import TypedManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - preferred_lb_method='topology', - alternate_lb_method='ratio', - fallback_lb_method='fewest-hops', - fallback_ip='10.10.10.10', - type='a' - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.preferred_lb_method == 'topology' - assert p.alternate_lb_method == 'ratio' - assert p.fallback_lb_method == 'fewest-hops' - assert p.fallback_ip == '10.10.10.10' - assert p.type == 'a' - - def test_module_parameters_members(self): - args = dict( - partition='Common', - members=[ - dict( - server='foo', - virtual_server='bar' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.members) == 1 - assert p.members[0] == '/Common/foo:bar' - - def test_api_parameters(self): - args = dict( - name='foo', - loadBalancingMode='topology', - alternateMode='ratio', - fallbackMode='fewest-hops', - fallbackIp='10.10.10.10' - ) - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.preferred_lb_method == 'topology' - assert p.alternate_lb_method == 'ratio' - assert p.fallback_lb_method == 'fewest-hops' - assert p.fallback_ip == '10.10.10.10' - - def test_api_parameters_members(self): - args = load_fixture('load_gtm_pool_a_with_members_1.json') - p = ApiParameters(params=args) - assert len(p.members) == 3 - assert p.members[0] == '/Common/server1:vs1' - assert p.members[1] == '/Common/server1:vs2' - assert p.members[2] == '/Common/server1:vs3' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_pool.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_pool.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='round-robin', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - tm = UntypedManager(module=module) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'round-robin' - - def test_update_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='topology', - alternate_lb_method='drop-packet', - fallback_lb_method='cpu', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - current = ApiParameters(params=load_fixture('load_gtm_pool_untyped_default.json')) - - # Override methods in the specific type of manager - tm = UntypedManager(module=module) - tm.exists = Mock(side_effect=[True, True]) - tm.update_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=True) - tm.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'topology' - assert results['alternate_lb_method'] == 'drop-packet' - assert results['fallback_lb_method'] == 'cpu' - - def test_delete_pool(self, *args): - set_module_args(dict( - name='foo', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - tm = UntypedManager(module=module) - tm.exists = Mock(side_effect=[True, False]) - tm.version_is_less_than_12 = Mock(return_value=True) - tm.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - -class TestTypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_pool.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_pool.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='round-robin', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'round-robin' - - def test_update_pool(self, *args): - set_module_args(dict( - name='foo', - preferred_lb_method='topology', - alternate_lb_method='drop-packet', - fallback_lb_method='cpu', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - current = ApiParameters(params=load_fixture('load_gtm_pool_a_default.json')) - - # Override methods in the specific type of manager - tm = TypedManager(module=module) - tm.exists = Mock(side_effect=[True, True]) - tm.update_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=False) - tm.read_current_from_device = Mock(return_value=current) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['preferred_lb_method'] == 'topology' - assert results['alternate_lb_method'] == 'drop-packet' - assert results['fallback_lb_method'] == 'cpu' - - def test_delete_pool(self, *args): - set_module_args(dict( - name='foo', - type='a', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module) - tm.exists = Mock(side_effect=[True, False]) - tm.version_is_less_than_12 = Mock(return_value=False) - tm.remove_from_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_pool_member.py b/test/units/modules/network/f5/test_bigip_gtm_pool_member.py deleted file mode 100644 index d0cc9819b9..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_pool_member.py +++ /dev/null @@ -1,219 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_pool_member import ApiParameters - from library.modules.bigip_gtm_pool_member import ModuleParameters - from library.modules.bigip_gtm_pool_member import ModuleManager - from library.modules.bigip_gtm_pool_member import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_pool_member import ApiParameters - from ansible.modules.network.f5.bigip_gtm_pool_member import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_pool_member import ModuleManager - from ansible.modules.network.f5.bigip_gtm_pool_member import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - pool='pool1', - server_name='server1', - virtual_server='vs1', - type='a', - state='enabled', - limits=dict( - bits_enabled=True, - packets_enabled=True, - connections_enabled=True, - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - description='foo description', - ratio=10, - monitor='tcp', - member_order=2 - ) - - p = ModuleParameters(params=args) - assert p.pool == 'pool1' - assert p.server_name == 'server1' - assert p.virtual_server == 'vs1' - assert p.type == 'a' - assert p.state == 'enabled' - assert p.bits_enabled == 'enabled' - assert p.packets_enabled == 'enabled' - assert p.connections_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_limit == 200 - assert p.connections_limit == 300 - - def test_api_parameters(self): - args = load_fixture('load_gtm_pool_a_member_1.json') - - p = ApiParameters(params=args) - assert p.ratio == 1 - assert p.monitor == 'default' - assert p.member_order == 1 - assert p.packets_enabled == 'disabled' - assert p.packets_limit == 0 - assert p.bits_enabled == 'disabled' - assert p.bits_limit == 0 - assert p.connections_enabled == 'disabled' - assert p.connections_limit == 0 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_pool_member.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_pool_member.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_monitor(self, *args): - set_module_args(dict( - pool='pool1', - server_name='server1', - virtual_server='vs1', - type='a', - state='enabled', - limits=dict( - bits_enabled='yes', - packets_enabled='yes', - connections_enabled='yes', - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - description='foo description', - ratio=10, - monitor='tcp', - member_order=2, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - required_together=self.spec.required_together, - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_aggregate_pool_members(self, *args): - set_module_args(dict( - pool='fake_pool', - type='a', - aggregate=[ - dict( - server_name='my-name1', - virtual_server='some-vs2', - state='present', - partition='Common', - - ), - dict( - server_name='my-name1', - virtual_server='some-vs1', - state='present', - partition='Common' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - required_together=self.spec.required_together, - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_server.py b/test/units/modules/network/f5/test_bigip_gtm_server.py deleted file mode 100644 index d9dee9c03b..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_server.py +++ /dev/null @@ -1,341 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_server import ApiParameters - from library.modules.bigip_gtm_server import ModuleParameters - from library.modules.bigip_gtm_server import ModuleManager - from library.modules.bigip_gtm_server import V1Manager - from library.modules.bigip_gtm_server import V2Manager - from library.modules.bigip_gtm_server import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_server import ApiParameters - from ansible.modules.network.f5.bigip_gtm_server import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_server import ModuleManager - from ansible.modules.network.f5.bigip_gtm_server import V1Manager - from ansible.modules.network.f5.bigip_gtm_server import V2Manager - from ansible.modules.network.f5.bigip_gtm_server import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='GTM_Server', - datacenter='New York', - partition='Common', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'GTM_Server' - assert p.datacenter == '/Common/New York' - assert p.server_type == 'bigip' - assert p.link_discovery == 'disabled' - assert p.virtual_server_discovery == 'disabled' - - def test_api_parameters(self): - args = load_fixture('load_gtm_server_1.json') - - p = ApiParameters(params=args) - assert p.name == 'baz' - assert p.datacenter == '/Common/foo' - assert p.server_type == 'bigip' - assert p.link_discovery == 'disabled' - assert p.virtual_server_discovery == 'disabled' - - -class TestV1Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - try: - self.p2 = patch('library.modules.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - except Exception: - self.p2 = patch('ansible.modules.network.f5.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - name='GTM_Server', - datacenter='/Common/New York', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V1Manager(module=module, params=module.params) - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - m1.client = Mock() - m1.client.api.tmos_version = '12.0.0' - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.version_is_less_than = Mock(return_value=True) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['server_type'] == 'bigip' - - -class TestV2Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - try: - self.p2 = patch('library.modules.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - except Exception: - self.p2 = patch('ansible.modules.network.f5.bigip_gtm_server.tmos_version') - self.m2 = self.p2.start() - self.m2.return_value = '13.0.0' - - def tearDown(self): - self.p1.stop() - self.p2.stop() - - def test_create(self, *args): - set_module_args(dict( - name='GTM_Server', - datacenter='/Common/New York', - server_type='bigip', - link_discovery='disabled', - virtual_server_discovery='disabled', - devices=[ - dict( - name='server_1', - address='1.1.1.1' - ), - dict( - name='server_2', - address='2.2.2.1', - translation='192.168.2.1' - ), - dict( - name='server_2', - address='2.2.2.2' - ), - dict( - name='server_3', - addresses=[ - dict( - address='3.3.3.1' - ), - dict( - address='3.3.3.2' - ) - ] - ), - dict( - name='server_4', - addresses=[ - dict( - address='4.4.4.1', - translation='192.168.14.1' - ), - dict( - address='4.4.4.2' - ) - ] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - m1 = V2Manager(module=module) - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - m1.client = Mock() - m1.client.api.tmos_version = '13.1.0' - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.version_is_less_than = Mock(return_value=False) - mm.gtm_provisioned = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['server_type'] == 'bigip' diff --git a/test/units/modules/network/f5/test_bigip_gtm_topology_record.py b/test/units/modules/network/f5/test_bigip_gtm_topology_record.py deleted file mode 100644 index 68f5199ca9..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_topology_record.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_topology_record import ApiParameters - from library.modules.bigip_gtm_topology_record import ModuleParameters - from library.modules.bigip_gtm_topology_record import ModuleManager - from library.modules.bigip_gtm_topology_record import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_topology_record import ApiParameters - from ansible.modules.network.f5.bigip_gtm_topology_record import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_topology_record import ModuleManager - from ansible.modules.network.f5.bigip_gtm_topology_record import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - weight=10 - ) - - p = ModuleParameters(params=args) - assert p.name == 'ldns: not subnet 192.168.1.0/24 server: region /Common/Foobar' - assert p.weight == 10 - - def test_api_parameters(self): - args = dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - score=10 - ) - - p = ApiParameters(params=args) - assert p.weight == 10 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_topology_record(self, *args): - set_module_args(dict( - source=dict( - subnet='192.168.1.0/24', - negate=True - ), - destination=dict( - region='Foobar', - ), - weight=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_topology_region.py b/test/units/modules/network/f5/test_bigip_gtm_topology_region.py deleted file mode 100644 index 629604db84..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_topology_region.py +++ /dev/null @@ -1,144 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_topology_region import ApiParameters - from library.modules.bigip_gtm_topology_region import ModuleParameters - from library.modules.bigip_gtm_topology_region import ModuleManager - from library.modules.bigip_gtm_topology_region import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_topology_region import ApiParameters - from ansible.modules.network.f5.bigip_gtm_topology_region import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_topology_region import ModuleManager - from ansible.modules.network.f5.bigip_gtm_topology_region import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foobar', - region_members=[ - dict( - country='Poland', - negate=True - ), - dict( - datacenter='bazcenter' - ) - ], - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.region_members == ['not country PL', 'datacenter /Common/bazcenter'] - - def test_api_parameters(self): - args = dict( - name='foobar', - region_members=[ - dict( - name='not country PL' - ), - dict( - name='datacenter /Common/bazcenter' - ) - ], - partition='Common' - ) - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.region_members == ['not country PL', 'datacenter /Common/bazcenter'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_topology_region(self, *args): - set_module_args(dict( - name='foobar', - region_members=[ - dict( - country='Poland', - negate=True - ), - dict( - datacenter='bazcenter' - ) - ], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_virtual_server.py b/test/units/modules/network/f5/test_bigip_gtm_virtual_server.py deleted file mode 100644 index b911a1ad38..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_virtual_server.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_virtual_server import ApiParameters - from library.modules.bigip_gtm_virtual_server import ModuleParameters - from library.modules.bigip_gtm_virtual_server import ModuleManager - from library.modules.bigip_gtm_virtual_server import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_virtual_server import ApiParameters - from ansible.modules.network.f5.bigip_gtm_virtual_server import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_virtual_server import ModuleManager - from ansible.modules.network.f5.bigip_gtm_virtual_server import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - server_name='server1', - address='1.1.1.1', - port=22, - translation_address='2.2.2.2', - translation_port=443, - availability_requirements=dict( - type='at_least', - at_least=2, - ), - monitors=['http', 'tcp', 'gtp'], - virtual_server_dependencies=[ - dict( - server='server2', - virtual_server='vs2' - ) - ], - link='link1', - limits=dict( - bits_enabled=True, - packets_enabled=True, - connections_enabled=True, - bits_limit=100, - packets_limit=200, - connections_limit=300 - ), - state='present' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.server_name == 'server1' - assert p.address == '1.1.1.1' - assert p.port == 22 - assert p.translation_address == '2.2.2.2' - assert p.translation_port == 443 - assert p.availability_requirement_type == 'at_least' - assert p.at_least == 2 - assert p.monitors == 'min 2 of { /Common/http /Common/tcp /Common/gtp }' - assert len(p.virtual_server_dependencies) == 1 - assert p.link == '/Common/link1' - assert p.bits_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_enabled == 'enabled' - assert p.packets_limit == 200 - assert p.connections_enabled == 'enabled' - assert p.connections_limit == 300 - - def test_api_parameters(self): - args = load_fixture('load_gtm_server_virtual_2.json') - - p = ApiParameters(params=args) - assert p.name == 'vs2' - assert p.address == '6.6.6.6' - assert p.port == 8080 - assert p.translation_address == 'none' - assert p.translation_port == 0 - assert p.availability_requirement_type == 'all' - assert p.monitors == '/Common/gtp' - assert p.bits_enabled == 'enabled' - assert p.bits_limit == 100 - assert p.packets_enabled == 'enabled' - assert p.packets_limit == 200 - assert p.connections_enabled == 'enabled' - assert p.connections_limit == 300 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_gtm_virtual_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_virtual_server.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_datacenter(self, *args): - set_module_args(dict( - server_name='foo', - name='vs1', - address='1.1.1.1', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_gtm_wide_ip.py b/test/units/modules/network/f5/test_bigip_gtm_wide_ip.py deleted file mode 100644 index 020a46262d..0000000000 --- a/test/units/modules/network/f5/test_bigip_gtm_wide_ip.py +++ /dev/null @@ -1,351 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_gtm_wide_ip import ApiParameters - from library.modules.bigip_gtm_wide_ip import ModuleParameters - from library.modules.bigip_gtm_wide_ip import ModuleManager - from library.modules.bigip_gtm_wide_ip import ArgumentSpec - from library.modules.bigip_gtm_wide_ip import UntypedManager - from library.modules.bigip_gtm_wide_ip import TypedManager - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_gtm_wide_ip import ApiParameters - from ansible.modules.network.f5.bigip_gtm_wide_ip import ModuleParameters - from ansible.modules.network.f5.bigip_gtm_wide_ip import ModuleManager - from ansible.modules.network.f5.bigip_gtm_wide_ip import ArgumentSpec - from ansible.modules.network.f5.bigip_gtm_wide_ip import UntypedManager - from ansible.modules.network.f5.bigip_gtm_wide_ip import TypedManager - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo.baz.bar', - pool_lb_method='round-robin', - ) - p = ModuleParameters(params=args) - assert p.name == 'foo.baz.bar' - assert p.pool_lb_method == 'round-robin' - - def test_module_pools(self): - args = dict( - pools=[ - dict( - name='foo', - ratio='100' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.pools) == 1 - - def test_api_parameters(self): - args = dict( - name='foo.baz.bar', - poolLbMode='round-robin' - ) - p = ApiParameters(params=args) - assert p.name == 'foo.baz.bar' - assert p.pool_lb_method == 'round-robin' - - def test_api_pools(self): - args = load_fixture('load_gtm_wide_ip_with_pools.json') - p = ApiParameters(params=args) - assert len(p.pools) == 1 - assert 'name' in p.pools[0] - assert 'ratio' in p.pools[0] - assert p.pools[0]['name'] == '/Common/baz' - assert p.pools[0]['ratio'] == 10 - - def test_module_not_fqdn_name(self): - args = dict( - name='foo', - lb_method='round-robin' - ) - with pytest.raises(F5ModuleError) as excinfo: - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert 'The provided name must be a valid FQDN' in str(excinfo.value) - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - try: - self.p1 = patch('library.modules.bigip_gtm_wide_ip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_wide_ip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_wideip(self, *args): - set_module_args(dict( - name='foo.baz.bar', - lb_method='round-robin', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = UntypedManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'foo.baz.bar' - assert results['state'] == 'present' - assert results['lb_method'] == 'round-robin' - - -class TestTypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - try: - self.p1 = patch('library.modules.bigip_gtm_wide_ip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_gtm_wide_ip.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def tearDown(self): - self.p1.stop() - - def test_create_wideip(self, *args): - set_module_args(dict( - name='foo.baz.bar', - lb_method='round-robin', - type='a', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'foo.baz.bar' - assert results['state'] == 'present' - assert results['lb_method'] == 'round-robin' - - def test_create_wideip_with_pool(self, *args): - set_module_args(dict( - name='foo.baz.bar', - lb_method='round-robin', - type='a', - pools=[ - dict( - name='foo', - ratio=10 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'foo.baz.bar' - assert results['state'] == 'present' - assert results['lb_method'] == 'round-robin' - - def test_create_wideip_with_pool_idempotent(self, *args): - set_module_args(dict( - name='foo.bar.com', - lb_method='round-robin', - type='a', - pools=[ - dict( - name='baz', - ratio=10 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_wide_ip_with_pools.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module, params=module.params) - tm.exists = Mock(return_value=True) - tm.read_current_from_device = Mock(return_value=current) - tm.version_is_less_than_12 = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_wideip_with_pool(self, *args): - set_module_args(dict( - name='foo.bar.com', - lb_method='round-robin', - type='a', - pools=[ - dict( - name='baz', - ratio=10 - ), - dict( - name='alec', - ratio=100 - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_gtm_wide_ip_with_pools.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = TypedManager(module=module, params=module.params) - tm.exists = Mock(return_value=True) - tm.read_current_from_device = Mock(return_value=current) - tm.update_on_device = Mock(return_value=True) - tm.version_is_less_than_12 = Mock(return_value=False) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'pools' in results diff --git a/test/units/modules/network/f5/test_bigip_hostname.py b/test/units/modules/network/f5/test_bigip_hostname.py deleted file mode 100644 index c625e73884..0000000000 --- a/test/units/modules/network/f5/test_bigip_hostname.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_hostname import ApiParameters - from library.modules.bigip_hostname import ModuleParameters - from library.modules.bigip_hostname import ModuleManager - from library.modules.bigip_hostname import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_hostname import ApiParameters - from ansible.modules.network.f5.bigip_hostname import ModuleParameters - from ansible.modules.network.f5.bigip_hostname import ModuleManager - from ansible.modules.network.f5.bigip_hostname import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - hostname='foo.internal.com' - ) - p = ModuleParameters(params=args) - assert p.hostname == 'foo.internal.com' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_hostname(self, *args): - set_module_args(dict( - hostname='foo2.internal.com', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - hostname='foo.internal.com' - ) - ) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['hostname'] == 'foo2.internal.com' diff --git a/test/units/modules/network/f5/test_bigip_iapp_service.py b/test/units/modules/network/f5/test_bigip_iapp_service.py deleted file mode 100644 index 4b46c7a981..0000000000 --- a/test/units/modules/network/f5/test_bigip_iapp_service.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_iapp_service import Parameters - from library.modules.bigip_iapp_service import ApiParameters - from library.modules.bigip_iapp_service import ModuleParameters - from library.modules.bigip_iapp_service import ModuleManager - from library.modules.bigip_iapp_service import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_iapp_service import Parameters - from ansible.modules.network.f5.bigip_iapp_service import ApiParameters - from ansible.modules.network.f5.bigip_iapp_service import ModuleParameters - from ansible.modules.network.f5.bigip_iapp_service import ModuleManager - from ansible.modules.network.f5.bigip_iapp_service import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - - def test_module_parameters_keys(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - # Assert the top-level keys - assert p.name == 'http_example' - assert p.partition == 'Common' - assert p.template == '/Common/f5.http' - assert p.device_group is None - assert p.inheritedTrafficGroup == 'true' - assert p.inheritedDevicegroup == 'true' - assert p.traffic_group == '/Common/traffic-group-local-only' - - def test_module_parameters_lists(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'lists' in p._values - - assert p.lists[0]['name'] == 'irules__irules' - assert p.lists[0]['encrypted'] == 'no' - assert len(p.lists[0]['value']) == 1 - assert p.lists[0]['value'][0] == '/Common/lgyft' - - assert p.lists[1]['name'] == 'net__client_vlan' - assert p.lists[1]['encrypted'] == 'no' - assert len(p.lists[1]['value']) == 1 - assert p.lists[1]['value'][0] == '/Common/net2' - - def test_module_parameters_tables(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'tables' in p._values - - assert 'columnNames' in p.tables[0] - assert len(p.tables[0]['columnNames']) == 1 - assert p.tables[0]['columnNames'][0] == 'name' - - assert 'name' in p.tables[0] - assert p.tables[0]['name'] == 'pool__hosts' - - assert 'rows' in p.tables[0] - assert len(p.tables[0]['rows']) == 1 - assert 'row' in p.tables[0]['rows'][0] - assert len(p.tables[0]['rows'][0]['row']) == 1 - assert p.tables[0]['rows'][0]['row'][0] == 'demo.example.com' - - assert len(p.tables[1]['rows']) == 2 - assert 'row' in p.tables[0]['rows'][0] - assert len(p.tables[1]['rows'][0]['row']) == 2 - assert p.tables[1]['rows'][0]['row'][0] == '10.1.1.1' - assert p.tables[1]['rows'][0]['row'][1] == '0' - assert p.tables[1]['rows'][1]['row'][0] == '10.1.1.2' - assert p.tables[1]['rows'][1]['row'][1] == '0' - - def test_module_parameters_variables(self): - args = load_fixture('create_iapp_service_parameters_f5_http.json') - p = ModuleParameters(params=args) - - assert 'variables' in p._values - assert len(p.variables) == 34 - - # Assert one configuration value - assert 'name' in p.variables[0] - assert 'value' in p.variables[0] - assert p.variables[0]['name'] == 'afm__dos_security_profile' - assert p.variables[0]['value'] == '/#do_not_use#' - - # Assert a second configuration value - assert 'name' in p.variables[1] - assert 'value' in p.variables[1] - assert p.variables[1]['name'] == 'afm__policy' - assert p.variables[1]['value'] == '/#do_not_use#' - - def test_module_strict_updates_from_top_level(self): - # Assumes the user did not provide any parameters - - args = dict( - strict_updates=True - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strict_updates=False - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_module_strict_updates_override_from_top_level(self): - args = dict( - strict_updates=True, - parameters=dict( - strictUpdates='disabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strict_updates=False, - parameters=dict( - strictUpdates='enabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_module_strict_updates_only_parameters(self): - args = dict( - parameters=dict( - strictUpdates='disabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'disabled' - - args = dict( - parameters=dict( - strictUpdates='enabled' - ) - ) - p = ModuleParameters(params=args) - assert p.strict_updates == 'enabled' - - def test_api_strict_updates_from_top_level(self): - args = dict( - strictUpdates='enabled' - ) - p = ApiParameters(params=args) - assert p.strict_updates == 'enabled' - - args = dict( - strictUpdates='disabled' - ) - p = ApiParameters(params=args) - assert p.strict_updates == 'disabled' - - def test_api_parameters_variables(self): - args = dict( - variables=[ - dict( - name="client__http_compression", - encrypted="no", - value="/#create_new#" - ) - ] - ) - p = ApiParameters(params=args) - assert p.variables[0]['name'] == 'client__http_compression' - - def test_api_parameters_tables(self): - args = dict( - tables=[ - { - "name": "pool__members", - "columnNames": [ - "addr", - "port", - "connection_limit" - ], - "rows": [ - { - "row": [ - "12.12.12.12", - "80", - "0" - ] - }, - { - "row": [ - "13.13.13.13", - "443", - 10 - ] - } - ] - } - ] - ) - p = ApiParameters(params=args) - assert p.tables[0]['name'] == 'pool__members' - assert p.tables[0]['columnNames'] == ['addr', 'port', 'connection_limit'] - assert len(p.tables[0]['rows']) == 2 - assert 'row' in p.tables[0]['rows'][0] - assert 'row' in p.tables[0]['rows'][1] - assert p.tables[0]['rows'][0]['row'] == ['12.12.12.12', '80', '0'] - assert p.tables[0]['rows'][1]['row'] == ['13.13.13.13', '443', '10'] - - def test_api_parameters_device_group(self): - args = dict( - deviceGroup='none' - ) - p = ApiParameters(params=args) - assert p.device_group is None - - def test_api_parameters_inherited_traffic_group(self): - args = dict( - inheritedTrafficGroup='true' - ) - p = ApiParameters(params=args) - assert p.inheritedTrafficGroup == 'true' - - def test_api_parameters_inherited_devicegroup(self): - args = dict( - inheritedDevicegroup='true' - ) - p = ApiParameters(params=args) - assert p.inheritedDevicegroup == 'true' - - def test_api_parameters_traffic_group(self): - args = dict( - trafficGroup='/Common/traffic-group-local-only' - ) - p = ApiParameters(params=args) - assert p.traffic_group == '/Common/traffic-group-local-only' - - def test_module_template_same_partition(self): - args = dict( - template='foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/bar/foo' - - def test_module_template_same_partition_full_path(self): - args = dict( - template='/bar/foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/bar/foo' - - def test_module_template_different_partition_full_path(self): - args = dict( - template='/Common/foo', - partition='bar' - ) - p = ModuleParameters(params=args) - assert p.template == '/Common/foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_service(self, *args): - parameters = load_fixture('create_iapp_service_parameters_f5_http.json') - set_module_args(dict( - name='foo', - template='f5.http', - parameters=parameters, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.template_exists = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_update_agent_status_traps(self, *args): - parameters = load_fixture('update_iapp_service_parameters_f5_http.json') - set_module_args(dict( - name='foo', - template='f5.http', - parameters=parameters, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - parameters = load_fixture('create_iapp_service_parameters_f5_http.json') - current = Parameters(parameters) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_iapp_template.py b/test/units/modules/network/f5/test_bigip_iapp_template.py deleted file mode 100644 index cf86e41224..0000000000 --- a/test/units/modules/network/f5/test_bigip_iapp_template.py +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_iapp_template import Parameters - from library.modules.bigip_iapp_template import ModuleManager - from library.modules.bigip_iapp_template import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_iapp_template import Parameters - from ansible.modules.network.f5.bigip_iapp_template import ArgumentSpec - from ansible.modules.network.f5.bigip_iapp_template import ModuleManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp - ) - p = Parameters(params=args) - assert p.name == 'foo.iapp' - - def test_module_parameters_custom_name(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp, - name='foobar' - ) - p = Parameters(params=args) - assert p.name == 'foobar' - assert 'sys application template /Common/foobar' in p.content - - def test_module_parameters_custom_partition(self): - iapp = load_fixture('create_iapp_template.iapp') - args = dict( - content=iapp, - partition='foobar' - ) - p = Parameters(params=args) - assert p.name == 'foo.iapp' - assert 'sys application template /foobar/foo.iapp' in p.content - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_iapp_template(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_iapp_template(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current1 = Parameters(params=load_fixture('load_sys_application_template_w_new_checksum.json')) - current2 = Parameters(params=load_fixture('load_sys_application_template_w_old_checksum.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.create_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current1) - mm.template_in_use = Mock(return_value=False) - mm._get_temporary_template = Mock(return_value=current2) - mm._remove_iapp_checksum = Mock(return_value=None) - mm._generate_template_checksum_on_device = Mock(return_value=None) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_iapp_template(self, *args): - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_iapp_template_idempotent(self, *args): - set_module_args(dict( - content=load_fixture('basic-iapp.tmpl'), - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, False]) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_ike_peer.py b/test/units/modules/network/f5/test_bigip_ike_peer.py deleted file mode 100644 index 4edc5e6298..0000000000 --- a/test/units/modules/network/f5/test_bigip_ike_peer.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ike_peer import ApiParameters - from library.modules.bigip_ike_peer import ModuleParameters - from library.modules.bigip_ike_peer import ModuleManager - from library.modules.bigip_ike_peer import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ike_peer import ApiParameters - from ansible.modules.network.f5.bigip_ike_peer import ModuleParameters - from ansible.modules.network.f5.bigip_ike_peer import ModuleManager - from ansible.modules.network.f5.bigip_ike_peer import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ike1', - ) - p = ModuleParameters(params=args) - assert p.name == 'ike1' - - def test_api_parameters(self): - args = dict( - name='ike1', - ) - p = ApiParameters(params=args) - assert p.name == 'ike1' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='ike1', - version=['v1'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if, - required_together=self.spec.required_together - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_imish_config.py b/test/units/modules/network/f5/test_bigip_imish_config.py deleted file mode 100644 index 92197fb037..0000000000 --- a/test/units/modules/network/f5/test_bigip_imish_config.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_imish_config import ModuleManager - from library.modules.bigip_imish_config import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_imish_config import ModuleManager - from ansible.modules.network.f5.bigip_imish_config import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - lines=[ - 'bgp graceful-restart restart-time 120', - 'redistribute kernel route-map rhi', - 'neighbor 10.10.10.11 remote-as 65000', - 'neighbor 10.10.10.11 fall-over bfd', - 'neighbor 10.10.10.11 remote-as 65000', - 'neighbor 10.10.10.11 fall-over bfd' - ], - parents='router bgp 64664', - before='bfd slow-timer 2000', - match='exact', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = load_fixture('load_imish_output_1.json') - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_if=self.spec.required_if, - add_file_common_args=self.spec.add_file_common_args - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.read_current_from_device = Mock(return_value=current['commandResult']) - mm.upload_file_to_device = Mock(return_value=True) - mm.load_config_on_device = Mock(return_value=True) - mm.remove_uploaded_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_ipsec_policy.py b/test/units/modules/network/f5/test_bigip_ipsec_policy.py deleted file mode 100644 index 4fc769f082..0000000000 --- a/test/units/modules/network/f5/test_bigip_ipsec_policy.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ipsec_policy import ApiParameters - from library.modules.bigip_ipsec_policy import ModuleParameters - from library.modules.bigip_ipsec_policy import ModuleManager - from library.modules.bigip_ipsec_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ipsec_policy import ApiParameters - from ansible.modules.network.f5.bigip_ipsec_policy import ModuleParameters - from ansible.modules.network.f5.bigip_ipsec_policy import ModuleManager - from ansible.modules.network.f5.bigip_ipsec_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='ipsec1', - ) - p = ModuleParameters(params=args) - assert p.name == 'ipsec1' - - def test_api_parameters(self): - args = dict( - name='ipsec1', - ) - p = ApiParameters(params=args) - assert p.name == 'ipsec1' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='ipsec1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_irule.py b/test/units/modules/network/f5/test_bigip_irule.py deleted file mode 100644 index 3e80c3f8ac..0000000000 --- a/test/units/modules/network/f5/test_bigip_irule.py +++ /dev/null @@ -1,266 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import PY3 - -try: - from library.modules.bigip_irule import Parameters - from library.modules.bigip_irule import ModuleManager - from library.modules.bigip_irule import ArgumentSpec - from library.modules.bigip_irule import GtmManager - from library.modules.bigip_irule import LtmManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - from test.units.compat.mock import mock_open - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_irule import Parameters - from ansible.modules.network.f5.bigip_irule import ModuleManager - from ansible.modules.network.f5.bigip_irule import ArgumentSpec - from ansible.modules.network.f5.bigip_irule import GtmManager - from ansible.modules.network.f5.bigip_irule import LtmManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - from units.compat.mock import mock_open - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class BigIpObj(object): - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class TestParameters(unittest.TestCase): - def test_module_parameters_ltm(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - content=content, - module='ltm', - name='foo', - state='present' - ) - p = Parameters(params=args) - assert p.content == content - - def test_module_parameters_gtm(self): - content = load_fixture('create_gtm_irule.tcl') - args = dict( - content=content, - module='gtm', - name='foo', - state='present' - ) - p = Parameters(params=args) - assert p.content == content - - def test_api_parameters_ltm(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - apiAnonymous=content - ) - p = Parameters(params=args) - assert p.content == content - - def test_return_api_params(self): - content = load_fixture('create_ltm_irule.tcl') - args = dict( - content=content, - module='ltm', - name='foo', - state='present' - ) - p = Parameters(params=args) - params = p.api_params() - - assert 'apiAnonymous' in params - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.ltm_irules = [] - self.gtm_irules = [] - - members = load_fixture('load_ltm_irules.json') - for item in members: - self.ltm_irules.append(BigIpObj(**item)) - - members = load_fixture('load_gtm_irules.json') - for item in members: - self.gtm_irules.append(BigIpObj(**item)) - - def test_create_ltm_irule(self, *args): - set_module_args(dict( - name='foo', - module='ltm', - content='this is my content', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - tm = LtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - - def test_create_gtm_irule(self, *args): - set_module_args(dict( - name='foo', - module='gtm', - content='this is my content', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - # Override methods in the specific type of manager - tm = GtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - - def test_create_gtm_irule_src(self, *args): - set_module_args(dict( - name='foo', - module='gtm', - src='{0}/create_ltm_irule.tcl'.format(fixture_path), - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - - if PY3: - builtins_name = 'builtins' - else: - builtins_name = '__builtin__' - - with patch(builtins_name + '.open', mock_open(read_data='this is my content'), create=True): - # Override methods in the specific type of manager - tm = GtmManager(module=module, params=module.params) - tm.exists = Mock(side_effect=[False, True]) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['content'] == 'this is my content' - assert results['module'] == 'gtm' - assert results['src'] == '{0}/create_ltm_irule.tcl'.format(fixture_path) - assert len(results.keys()) == 4 - - def test_module_mutual_exclusion(self, *args): - set_module_args(dict( - content='foo', - module='ltm', - name='foo', - state='present', - src='/path/to/irules/foo.tcl', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - with patch('ansible.module_utils.basic.AnsibleModule.fail_json', unsafe=True) as mo: - AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - ) - mo.assert_called_once() diff --git a/test/units/modules/network/f5/test_bigip_log_destination.py b/test/units/modules/network/f5/test_bigip_log_destination.py deleted file mode 100644 index 5a02fde620..0000000000 --- a/test/units/modules/network/f5/test_bigip_log_destination.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_log_destination import V1ApiParameters - from library.modules.bigip_log_destination import V1ModuleParameters - from library.modules.bigip_log_destination import ModuleManager - from library.modules.bigip_log_destination import V1Manager - from library.modules.bigip_log_destination import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_log_destination import V1ApiParameters - from ansible.modules.network.f5.bigip_log_destination import V1ModuleParameters - from ansible.modules.network.f5.bigip_log_destination import ModuleManager - from ansible.modules.network.f5.bigip_log_destination import V1Manager - from ansible.modules.network.f5.bigip_log_destination import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestV1Parameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - syslog_settings=dict( - forward_to='pool1', - syslog_format='rfc5424' - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = V1ModuleParameters(params=args) - assert p.name == 'foo' - assert p.forward_to == '/Common/pool1' - assert p.syslog_format == 'rfc5424' - - def test_api_parameters(self): - args = load_fixture('load_sys_log_config_destination_1.json') - p = V1ApiParameters(params=args) - assert p.name == 'foo' - assert p.syslog_format == 'rfc5424' - assert p.forward_to == '/Common/pool1' - - -class TestV1Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_policy(self, *args): - set_module_args(dict( - name="foo", - type='remote-syslog', - syslog_settings=dict( - forward_to='pool1', - ), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods in the specific type of manager - tm = V1Manager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_log_publisher.py b/test/units/modules/network/f5/test_bigip_log_publisher.py deleted file mode 100644 index c45e31b79d..0000000000 --- a/test/units/modules/network/f5/test_bigip_log_publisher.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_log_publisher import ApiParameters - from library.modules.bigip_log_publisher import ModuleParameters - from library.modules.bigip_log_publisher import ModuleManager - from library.modules.bigip_log_publisher import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_log_publisher import ApiParameters - from ansible.modules.network.f5.bigip_log_publisher import ModuleParameters - from ansible.modules.network.f5.bigip_log_publisher import ModuleManager - from ansible.modules.network.f5.bigip_log_publisher import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my desc', - destinations=[ - 'dest1', - 'dest2' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my desc' - assert p.destinations == ['/Common/dest1', '/Common/dest2'] - - def test_api_parameters(self): - args = load_fixture('load_sys_log_config_publisher_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.destinations == [ - '/Common/SECURITYLOGSERVERS-LOGGING', - '/Common/local-db', - '/Common/local-syslog', - ] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_policy(self, *args): - set_module_args(dict( - name="foo", - description='foo description', - destinations=[ - 'dest1', - 'dest2' - ], - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foo description' - assert results['destinations'] == ['/Common/dest1', '/Common/dest2'] diff --git a/test/units/modules/network/f5/test_bigip_lx_package.py b/test/units/modules/network/f5/test_bigip_lx_package.py deleted file mode 100644 index d98c8014bb..0000000000 --- a/test/units/modules/network/f5/test_bigip_lx_package.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_lx_package import Parameters - from library.modules.bigip_lx_package import ModuleManager - from library.modules.bigip_lx_package import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_lx_package import Parameters - from ansible.modules.network.f5.bigip_lx_package import ArgumentSpec - from ansible.modules.network.f5.bigip_lx_package import ModuleManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - package='MyApp-0.1.0-0001.noarch.rpm', - state='present' - ) - p = Parameters(params=args) - assert p.package == 'MyApp-0.1.0-0001.noarch.rpm' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_lx_package.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.3' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_lx_package.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '12.1.3' - - def tearDown(self): - self.patcher1.stop() - - def test_create_iapp_template(self, *args): - package_name = os.path.join(fixture_path, 'MyApp-0.1.0-0001.noarch.rpm') - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - package=package_name, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.upload_to_device = Mock(return_value=True) - mm.enable_iapplx_on_device = Mock(return_value=True) - mm.remove_package_file_from_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_management_route.py b/test/units/modules/network/f5/test_bigip_management_route.py deleted file mode 100644 index a3d6501710..0000000000 --- a/test/units/modules/network/f5/test_bigip_management_route.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_management_route import ApiParameters - from library.modules.bigip_management_route import ModuleParameters - from library.modules.bigip_management_route import ModuleManager - from library.modules.bigip_management_route import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_management_route import ApiParameters - from ansible.modules.network.f5.bigip_management_route import ModuleParameters - from ansible.modules.network.f5.bigip_management_route import ModuleManager - from ansible.modules.network.f5.bigip_management_route import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - gateway='1.1.1.1', - network='default', - description='my description' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.gateway == '1.1.1.1' - assert p.network == 'default' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_sys_management_route_1.json') - - p = ApiParameters(params=args) - assert p.name == 'default' - assert p.gateway == '10.0.2.2' - assert p.network == 'default' - assert p.description == 'configured-by-dhcp' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - gateway='1.1.1.1', - network='default', - description='my description', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['gateway'] == '1.1.1.1' - assert results['network'] == 'default' - assert results['description'] == 'my description' diff --git a/test/units/modules/network/f5/test_bigip_message_routing_peer.py b/test/units/modules/network/f5/test_bigip_message_routing_peer.py deleted file mode 100644 index 9c67fdbb9a..0000000000 --- a/test/units/modules/network/f5/test_bigip_message_routing_peer.py +++ /dev/null @@ -1,194 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_message_routing_peer import ApiParameters - from library.modules.bigip_message_routing_peer import ModuleParameters - from library.modules.bigip_message_routing_peer import ModuleManager - from library.modules.bigip_message_routing_peer import GenericModuleManager - from library.modules.bigip_message_routing_peer import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_message_routing_peer import ApiParameters - from ansible.modules.network.f5.bigip_message_routing_peer import ModuleParameters - from ansible.modules.network.f5.bigip_message_routing_peer import ModuleManager - from ansible.modules.network.f5.bigip_message_routing_peer import GenericModuleManager - from ansible.modules.network.f5.bigip_message_routing_peer import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - auto_init='yes', - auto_init_interval=1234, - connection_mode='per-peer', - number_of_connections=20, - pool='/Common/example', - ratio=10, - transport_config='/Common/virtual' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.auto_init == 'enabled' - assert p.auto_init_interval == 1234 - assert p.connection_mode == 'per-peer' - assert p.number_of_connections == 20 - assert p.pool == '/Common/example' - assert p.ratio == 10 - assert p.transport_config == '/Common/virtual' - - def test_api_parameters(self): - args = load_fixture('load_generic_peer.json') - - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.partition == 'Common' - assert p.description == 'foobar' - assert p.auto_init == 'disabled' - assert p.auto_init_interval == 5000 - assert p.connection_mode == 'per-peer' - assert p.number_of_connections == 1 - assert p.pool == '/Common/example' - assert p.ratio == 1 - assert p.transport_config == '/Common/test_tranport' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_generic_peer(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - auto_init='yes', - auto_init_interval=1234, - connection_mode='per-peer', - number_of_connections=20, - pool='/Common/example', - ratio=10, - transport_config='/Common/virtual', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_init'] == 'yes' - assert results['description'] == 'my description' - assert results['auto_init_interval'] == 1234 - assert results['connection_mode'] == 'per-peer' - assert results['number_of_connections'] == 20 - assert results['pool'] == '/Common/example' - assert results['ratio'] == 10 - assert results['transport_config'] == '/Common/virtual' - - def test_update_generic_peer(self, *args): - set_module_args(dict( - name='test', - auto_init_interval=3000, - ratio=120, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_peer.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_init_interval'] == 3000 - assert results['ratio'] == 120 diff --git a/test/units/modules/network/f5/test_bigip_message_routing_protocol.py b/test/units/modules/network/f5/test_bigip_message_routing_protocol.py deleted file mode 100644 index 0a59d5e9de..0000000000 --- a/test/units/modules/network/f5/test_bigip_message_routing_protocol.py +++ /dev/null @@ -1,179 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_message_routing_protocol import ApiParameters - from library.modules.bigip_message_routing_protocol import ModuleParameters - from library.modules.bigip_message_routing_protocol import ModuleManager - from library.modules.bigip_message_routing_protocol import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_message_routing_protocol import ApiParameters - from ansible.modules.network.f5.bigip_message_routing_protocol import ModuleParameters - from ansible.modules.network.f5.bigip_message_routing_protocol import ModuleManager - from ansible.modules.network.f5.bigip_message_routing_protocol import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - parent='barfoo', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - msg_terminator='%%%%', - no_response=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.parent == '/foobar/barfoo' - assert p.disable_parser == 'yes' - assert p.max_egress_buffer == 10000 - assert p.max_msg_size == 2000 - assert p.msg_terminator == '%%%%' - assert p.no_response == 'no' - - def test_api_parameters(self): - args = load_fixture('load_generic_parser.json') - - p = ApiParameters(params=args) - assert p.name == 'foobar' - assert p.partition == 'Common' - assert p.parent == '/Common/genericmsg' - assert p.disable_parser == 'no' - assert p.max_egress_buffer == 32768 - assert p.max_msg_size == 32768 - assert p.no_response == 'no' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_generic_protocol(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - parent='barfoo', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - msg_terminator='%%%%', - no_response=False, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.version_less_than_14 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['parent'] == '/foobar/barfoo' - assert results['disable_parser'] == 'yes' - assert results['max_egress_buffer'] == 10000 - assert results['max_msg_size'] == 2000 - assert results['msg_terminator'] == '%%%%' - assert results['no_response'] == 'no' - - def test_update_generic_protocol(self, *args): - set_module_args(dict( - name='foobar', - disable_parser=True, - max_egress_buffer=10000, - max_msg_size=2000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_parser.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.version_less_than_14 = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['disable_parser'] == 'yes' - assert results['max_egress_buffer'] == 10000 - assert results['max_msg_size'] == 2000 diff --git a/test/units/modules/network/f5/test_bigip_message_routing_route.py b/test/units/modules/network/f5/test_bigip_message_routing_route.py deleted file mode 100644 index db68ae1edf..0000000000 --- a/test/units/modules/network/f5/test_bigip_message_routing_route.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_message_routing_route import ApiParameters - from library.modules.bigip_message_routing_route import ModuleParameters - from library.modules.bigip_message_routing_route import ModuleManager - from library.modules.bigip_message_routing_route import GenericModuleManager - from library.modules.bigip_message_routing_route import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_message_routing_route import ApiParameters - from ansible.modules.network.f5.bigip_message_routing_route import ModuleParameters - from ansible.modules.network.f5.bigip_message_routing_route import ModuleManager - from ansible.modules.network.f5.bigip_message_routing_route import GenericModuleManager - from ansible.modules.network.f5.bigip_message_routing_route import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - dst_address='some_destination', - src_address='some_address', - peer_selection_mode='ratio', - peers=['/Common/example'] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.dst_address == 'some_destination' - assert p.src_address == 'some_address' - assert p.peer_selection_mode == 'ratio' - assert p.peers == ['/Common/example'] - - def test_api_parameters(self): - args = load_fixture('load_generic_route.json') - - p = ApiParameters(params=args) - assert p.name == 'some' - assert p.partition == 'Common' - assert p.dst_address == 'annoying_user' - assert p.src_address == '99.99.99.99' - assert p.peer_selection_mode == 'sequential' - assert p.peers == ['/Common/testy'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_generic_route(self, *args): - set_module_args(dict( - name='some', - partition='foobar', - description='my description', - dst_address='some_destination', - src_address='some_address', - peer_selection_mode='ratio', - peers=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['dst_address'] == 'some_destination' - assert results['src_address'] == 'some_address' - assert results['peer_selection_mode'] == 'ratio' - assert results['peers'] == ['/Common/example'] - - def test_update_generic_peer(self, *args): - set_module_args(dict( - name='some', - dst_address="blackhole", - peer_selection_mode='ratio', - peers=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_route.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['dst_address'] == 'blackhole' - assert results['peer_selection_mode'] == 'ratio' - assert results['peers'] == ['/Common/example'] diff --git a/test/units/modules/network/f5/test_bigip_message_routing_router.py b/test/units/modules/network/f5/test_bigip_message_routing_router.py deleted file mode 100644 index 6bd5525a26..0000000000 --- a/test/units/modules/network/f5/test_bigip_message_routing_router.py +++ /dev/null @@ -1,206 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_message_routing_router import ApiParameters - from library.modules.bigip_message_routing_router import ModuleParameters - from library.modules.bigip_message_routing_router import GenericModuleManager - from library.modules.bigip_message_routing_router import ModuleManager - from library.modules.bigip_message_routing_router import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_message_routing_router import ApiParameters - from ansible.modules.network.f5.bigip_message_routing_router import ModuleParameters - from ansible.modules.network.f5.bigip_message_routing_router import ModuleManager - from ansible.modules.network.f5.bigip_message_routing_router import GenericModuleManager - from ansible.modules.network.f5.bigip_message_routing_router import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - ignore_client_port='no', - inherited_traffic_group='yes', - use_local_connection='no', - max_pending_bytes=20000, - max_pending_messages=300, - max_retries=32, - mirror='yes', - mirrored_msg_sweeper_interval=3000, - routes=['test1', 'test2'], - traffic_group='footraffic', - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.ignore_client_port == 'no' - assert p.inherited_traffic_group == 'true' - assert p.use_local_connection == 'no' - assert p.max_pending_bytes == 20000 - assert p.max_pending_messages == 300 - assert p.max_retries == 32 - assert p.mirror == 'enabled' - assert p.mirrored_msg_sweeper_interval == 3000 - assert p.routes == ['/foobar/test1', '/foobar/test2'] - assert p.traffic_group == '/Common/footraffic' - - def test_api_parameters(self): - args = load_fixture('load_generic_router.json') - - p = ApiParameters(params=args) - assert p.name == 'messagerouter' - assert p.partition == 'Common' - assert p.ignore_client_port == 'no' - assert p.inherited_traffic_group == 'true' - assert p.use_local_connection == 'yes' - assert p.max_pending_bytes == 23768 - assert p.max_pending_messages == 64 - assert p.max_retries == 1 - assert p.mirror == 'disabled' - assert p.mirrored_msg_sweeper_interval == 1000 - assert p.traffic_group == '/Common/traffic-group-1' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_generic_router(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - ignore_client_port='no', - inherited_traffic_group='yes', - use_local_connection='no', - max_pending_bytes=20000, - max_pending_messages=300, - max_retries=32, - mirror='yes', - mirrored_msg_sweeper_interval=3000, - routes=['test1', 'test2'], - traffic_group='footraffic', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['ignore_client_port'] == 'no' - assert results['inherited_traffic_group'] == 'yes' - assert results['use_local_connection'] == 'no' - assert results['max_pending_bytes'] == 20000 - assert results['max_pending_messages'] == 300 - assert results['max_retries'] == 32 - assert results['mirror'] == 'yes' - assert results['mirrored_msg_sweeper_interval'] == 3000 - assert results['traffic_group'] == '/Common/footraffic' - assert results['routes'] == ['/foobar/test1', '/foobar/test2'] - - def test_update_generic_router(self, *args): - set_module_args(dict( - name='messagerouter', - use_local_connection='no', - mirror='yes', - routes=['/Common/example'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_router.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['use_local_connection'] == 'no' - assert results['mirror'] == 'yes' - assert results['routes'] == ['/Common/example'] diff --git a/test/units/modules/network/f5/test_bigip_message_routing_transport_config.py b/test/units/modules/network/f5/test_bigip_message_routing_transport_config.py deleted file mode 100644 index d532005d7e..0000000000 --- a/test/units/modules/network/f5/test_bigip_message_routing_transport_config.py +++ /dev/null @@ -1,183 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_message_routing_transport_config import ApiParameters - from library.modules.bigip_message_routing_transport_config import ModuleParameters - from library.modules.bigip_message_routing_transport_config import ModuleManager - from library.modules.bigip_message_routing_transport_config import GenericModuleManager - from library.modules.bigip_message_routing_transport_config import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_message_routing_transport_config import ApiParameters - from ansible.modules.network.f5.bigip_message_routing_transport_config import ModuleParameters - from ansible.modules.network.f5.bigip_message_routing_transport_config import ModuleManager - from ansible.modules.network.f5.bigip_message_routing_transport_config import GenericModuleManager - from ansible.modules.network.f5.bigip_message_routing_transport_config import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - partition='foobar', - description='my description', - profiles=['genericmsg', 'foo_udp'], - src_addr_translation=dict( - type='snat', - pool='some_pool1' - ), - src_port=1023, - rules=['rule1', 'rule2'], - ) - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.partition == 'foobar' - assert p.description == 'my description' - assert p.profiles == ['/foobar/genericmsg', '/foobar/foo_udp'] - assert p.snat_type == 'snat' - assert p.snat_pool == '/foobar/some_pool1' - assert p.src_port == 1023 - assert p.rules == ['/foobar/rule1', '/foobar/rule2'] - - def test_api_parameters(self): - args = load_fixture('load_generic_transport_config.json') - - p = ApiParameters(params=args) - assert p.name == 'gen1' - assert p.partition == 'Common' - assert p.profiles == ['/Common/diametersession', '/Common/tcp'] - assert p.snat_type == 'snat' - assert p.src_port == 0 - assert p.snat_pool == '/Common/test_snat' - assert p.rules == ['/Common/test'] - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_generic_transport(self, *args): - set_module_args(dict( - name='foo', - partition='foobar', - description='my description', - profiles=['genericmsg', 'foo_udp'], - src_addr_translation=dict( - type='snat', - pool='some_pool1' - ), - src_port=1023, - rules=['rule1', 'rule2'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=False) - gm.create_on_device = Mock(return_value=True) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - assert results['src_addr_translation'] == dict(type='snat', pool='/foobar/some_pool1') - assert results['src_port'] == 1023 - assert results['rules'] == ['/foobar/rule1', '/foobar/rule2'] - assert results['profiles'] == ['/foobar/genericmsg', '/foobar/foo_udp'] - - def test_update_generic_transport(self, *args): - set_module_args(dict( - name='gen1', - src_port=1024, - rules=['/Common/barfoo'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_generic_transport_config.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - ) - - # Override methods in the specific type of manager - gm = GenericModuleManager(module=module) - gm.exists = Mock(return_value=True) - gm.update_on_device = Mock(return_value=True) - gm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=gm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['src_port'] == 1024 - assert results['rules'] == ['/Common/barfoo'] diff --git a/test/units/modules/network/f5/test_bigip_monitor_dns.py b/test/units/modules/network/f5/test_bigip_monitor_dns.py deleted file mode 100644 index ad473e5540..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_dns.py +++ /dev/null @@ -1,157 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_dns import ApiParameters - from library.modules.bigip_monitor_dns import ModuleParameters - from library.modules.bigip_monitor_dns import ModuleManager - from library.modules.bigip_monitor_dns import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_dns import ApiParameters - from ansible.modules.network.f5.bigip_monitor_dns import ModuleParameters - from ansible.modules.network.f5.bigip_monitor_dns import ModuleManager - from ansible.modules.network.f5.bigip_monitor_dns import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/dns', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ModuleParameters(params=args) - assert p.parent == '/Common/dns' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - defaultsFrom='/Common/dns', - interval=10, - timeUntilUp=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/dns' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/dns', - query_name='foo', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_with_description(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/dns', - query_name='foo', - interval=20, - timeout=30, - time_until_up=60, - description='Important Description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_monitor_external.py b/test/units/modules/network/f5/test_bigip_monitor_external.py deleted file mode 100644 index 3f29036321..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_external.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_external import ModuleParameters - from library.modules.bigip_monitor_external import ModuleManager - from library.modules.bigip_monitor_external import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_external import ModuleParameters - from ansible.modules.network.f5.bigip_monitor_external import ModuleManager - from ansible.modules.network.f5.bigip_monitor_external import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'external' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' diff --git a/test/units/modules/network/f5/test_bigip_monitor_gateway_icmp.py b/test/units/modules/network/f5/test_bigip_monitor_gateway_icmp.py deleted file mode 100644 index f327bfc80f..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_gateway_icmp.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_gateway_icmp import ApiParameters - from library.modules.bigip_monitor_gateway_icmp import ModuleParameters - from library.modules.bigip_monitor_gateway_icmp import ModuleManager - from library.modules.bigip_monitor_gateway_icmp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_gateway_icmp import ApiParameters - from ansible.modules.network.f5.bigip_monitor_gateway_icmp import ModuleParameters - from ansible.modules.network.f5.bigip_monitor_gateway_icmp import ModuleManager - from ansible.modules.network.f5.bigip_monitor_gateway_icmp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/gateway-icmp', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ModuleParameters(params=args) - assert p.parent == '/Common/gateway-icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - def test_api_parameters(self): - args = dict( - defaultsFrom='/Common/gateway-icmp', - interval=10, - timeUntilUp=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/gateway-icmp' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/gateway-icmp', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_with_description(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/gateway-icmp', - interval=20, - timeout=30, - time_until_up=60, - description='Important Description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_monitor_http.py b/test/units/modules/network/f5/test_bigip_monitor_http.py deleted file mode 100644 index 0c9a66005c..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_http.py +++ /dev/null @@ -1,452 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_http import Parameters - from library.modules.bigip_monitor_http import ModuleManager - from library.modules.bigip_monitor_http import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_http import Parameters - from ansible.modules.network.f5.bigip_monitor_http import ModuleManager - from ansible.modules.network.f5.bigip_monitor_http import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'http' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='http', - send='GET /\\r\\n', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_http.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_monitor_https.py b/test/units/modules/network/f5/test_bigip_monitor_https.py deleted file mode 100644 index 214bec50f5..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_https.py +++ /dev/null @@ -1,452 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_https import Parameters - from library.modules.bigip_monitor_https import ModuleManager - from library.modules.bigip_monitor_https import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_https import Parameters - from ansible.modules.network.f5.bigip_monitor_https import ModuleManager - from ansible.modules.network.f5.bigip_monitor_https import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'https' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='https', - send='GET /\\r\\n', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_https.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_monitor_ldap.py b/test/units/modules/network/f5/test_bigip_monitor_ldap.py deleted file mode 100644 index a81fd34d96..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_ldap.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_ldap import ApiParameters - from library.modules.bigip_monitor_ldap import ModuleManager - from library.modules.bigip_monitor_ldap import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_ldap import ApiParameters - from ansible.modules.network.f5.bigip_monitor_ldap import ModuleManager - from ansible.modules.network.f5.bigip_monitor_ldap import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - parent='/Common/ldap', - interval=10, - time_until_up=0, - timeout=30, - ) - - p = ApiParameters(params=args) - assert p.parent == '/Common/ldap' - assert p.interval == 10 - assert p.time_until_up == 0 - assert p.timeout == 30 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - parent='/Common/ldap', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_monitor_snmp_dca.py b/test/units/modules/network/f5/test_bigip_monitor_snmp_dca.py deleted file mode 100644 index 8c45bddbb7..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_snmp_dca.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_snmp_dca import Parameters - from library.modules.bigip_monitor_snmp_dca import ModuleManager - from library.modules.bigip_monitor_snmp_dca import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_snmp_dca import Parameters - from ansible.modules.network.f5.bigip_monitor_snmp_dca import ModuleManager - from ansible.modules.network.f5.bigip_monitor_snmp_dca import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - agent_type='UCD', - community='public', - cpu_coefficient='1.5', - cpu_threshold='80', - parent='/Common/snmp_dca', - disk_coefficient='2.0', - disk_threshold='90', - interval=10, - memory_coefficient='1.0', - memory_threshold='70', - time_until_up=0, - timeout=30, - version='v1' - ) - - p = Parameters(params=args) - assert p.agent_type == 'UCD' - assert p.community == 'public' - assert p.cpu_coefficient == 1.5 - assert p.cpu_threshold == 80 - assert p.parent == '/Common/snmp_dca' - assert p.disk_coefficient == 2.0 - assert p.disk_threshold == 90 - assert p.interval == 10 - assert p.memory_coefficient == 1.0 - assert p.memory_threshold == 70 - assert p.time_until_up == 0 - assert p.timeout == 30 - assert p.version == 'v1' - - def test_api_parameters(self): - args = dict( - agentType='UCD', - community='public', - cpuCoefficient='1.5', - cpuThreshold='80', - defaultsFrom='/Common/snmp_dca', - diskCoefficient='2.0', - diskThreshold='90', - interval=10, - memoryCoefficient='1.0', - memoryThreshold='70', - timeUntilUp=0, - timeout=30, - apiRawValues={ - "userDefined asdasd": "{ foo }", - "userDefined bar": "tim rupp", - "user-defined baz-": "nia", - "userDefined userDefined": "23234" - }, - version='v1' - ) - - p = Parameters(params=args) - assert p.agent_type == 'UCD' - assert p.community == 'public' - assert p.cpu_coefficient == 1.5 - assert p.cpu_threshold == 80 - assert p.parent == '/Common/snmp_dca' - assert p.disk_coefficient == 2.0 - assert p.disk_threshold == 90 - assert p.interval == 10 - assert p.memory_coefficient == 1.0 - assert p.memory_threshold == 70 - assert p.time_until_up == 0 - assert p.timeout == 30 - assert p.version == 'v1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - agent_type='UCD', - community='public', - cpu_coefficient='1.5', - cpu_threshold='80', - parent='/Common/snmp_dca', - disk_coefficient='2.0', - disk_threshold='90', - memory_coefficient='1.0', - memory_threshold='70', - version='v1', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp.py b/test/units/modules/network/f5/test_bigip_monitor_tcp.py deleted file mode 100644 index de64d3ef42..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp.py +++ /dev/null @@ -1,454 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_tcp import Parameters - from library.modules.bigip_monitor_tcp import ModuleManager - from library.modules.bigip_monitor_tcp import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_tcp import Parameters - from ansible.modules.network.f5.bigip_monitor_tcp import ModuleManager - from ansible.modules.network.f5.bigip_monitor_tcp import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - type='TTYPE_TCP', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - type='TTYPE_TCP', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - parent='tcp', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='foo', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='foo', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='foo', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py b/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py deleted file mode 100644 index a33a1c495b..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp_echo.py +++ /dev/null @@ -1,331 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_tcp_echo import Parameters - from library.modules.bigip_monitor_tcp_echo import ModuleManager - from library.modules.bigip_monitor_tcp_echo import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_tcp_echo import Parameters - from ansible.modules.network.f5.bigip_monitor_tcp_echo import ModuleManager - from ansible.modules.network.f5.bigip_monitor_tcp_echo import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.type == 'tcp_echo' - assert p.destination == '10.10.10.10' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManagerEcho(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_echo.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py b/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py deleted file mode 100644 index b009ddbca5..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_tcp_half_open.py +++ /dev/null @@ -1,338 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_tcp_half_open import Parameters - from library.modules.bigip_monitor_tcp_half_open import ModuleManager - from library.modules.bigip_monitor_tcp_half_open import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_tcp_half_open import Parameters - from ansible.modules.network.f5.bigip_monitor_tcp_half_open import ModuleManager - from ansible.modules.network.f5.bigip_monitor_tcp_half_open import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - ip='10.10.10.10', - port=80, - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.ip == '10.10.10.10' - assert p.port == 80 - assert p.type == 'tcp_half_open' - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='foo', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=30, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='foo', - interval=10, - timeout=5, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_timeout(self, *args): - set_module_args(dict( - name='foo', - timeout=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='foo', - time_until_up=300, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_tcp_half_open.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_monitor_udp.py b/test/units/modules/network/f5/test_bigip_monitor_udp.py deleted file mode 100644 index 71eb245f37..0000000000 --- a/test/units/modules/network/f5/test_bigip_monitor_udp.py +++ /dev/null @@ -1,452 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_monitor_udp import Parameters - from library.modules.bigip_monitor_udp import ModuleManager - from library.modules.bigip_monitor_udp import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_monitor_udp import Parameters - from ansible.modules.network.f5.bigip_monitor_udp import ModuleManager - from ansible.modules.network.f5.bigip_monitor_udp import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_module_parameters_ints_as_strings(self): - args = dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port='80', - interval='20', - timeout='30', - time_until_up='60', - partition='Common' - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - def test_api_parameters(self): - args = dict( - name='foo', - defaultsFrom='/Common/parent', - send='this is a send string', - recv='this is a receive string', - destination='10.10.10.10:80', - interval=20, - timeout=30, - timeUntilUp=60 - ) - - p = Parameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/parent' - assert p.send == 'this is a send string' - assert p.receive == 'this is a receive string' - assert p.ip == '10.10.10.10' - assert p.type == 'udp' - assert p.port == 80 - assert p.destination == '10.10.10.10:80' - assert p.interval == 20 - assert p.timeout == 30 - assert p.time_until_up == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - parent='parent', - send='this is a send string', - receive='this is a receive string', - ip='10.10.10.10', - port=80, - interval=20, - timeout=30, - time_until_up=60, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['parent'] == '/Common/parent' - - def test_create_monitor_idempotent(self, *args): - set_module_args(dict( - name='asdf', - parent='udp', - send='default send string', - receive='hello world', - ip='1.1.1.1', - port=389, - interval=5, - timeout=16, - time_until_up=0, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_port(self, *args): - set_module_args(dict( - name='asdf', - port=800, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['port'] == 800 - - def test_update_interval(self, *args): - set_module_args(dict( - name='foo', - interval=10, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['interval'] == 10 - - def test_update_interval_larger_than_existing_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=30, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_interval_larger_than_new_timeout(self, *args): - set_module_args(dict( - name='asdf', - interval=10, - timeout=5, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "must be less than" in str(ex.value) - - def test_update_send(self, *args): - set_module_args(dict( - name='asdf', - send='this is another send string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['send'] == 'this is another send string' - - def test_update_receive(self, *args): - set_module_args(dict( - name='asdf', - receive='this is another receive string', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['receive'] == 'this is another receive string' - - def test_update_timeout(self, *args): - set_module_args(dict( - name='asdf', - timeout=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['timeout'] == 300 - - def test_update_time_until_up(self, *args): - set_module_args(dict( - name='asdf', - time_until_up=300, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = Parameters(params=load_fixture('load_ltm_monitor_udp.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['time_until_up'] == 300 diff --git a/test/units/modules/network/f5/test_bigip_node.py b/test/units/modules/network/f5/test_bigip_node.py deleted file mode 100644 index 4592471e8f..0000000000 --- a/test/units/modules/network/f5/test_bigip_node.py +++ /dev/null @@ -1,250 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_node import Parameters - from library.modules.bigip_node import ApiParameters - from library.modules.bigip_node import ModuleManager - from library.modules.bigip_node import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_node import Parameters - from ansible.modules.network.f5.bigip_node import ApiParameters - from ansible.modules.network.f5.bigip_node import ModuleManager - from ansible.modules.network.f5.bigip_node import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - host='10.20.30.40', - name='10.20.30.40' - ) - - p = Parameters(params=args) - assert p.host == '10.20.30.40' - assert p.name == '10.20.30.40' - - def test_api_parameters(self): - args = load_fixture('load_ltm_node_1.json') - - p = Parameters(params=args) - assert p.address == '1.2.3.4' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_node(self, *args): - set_module_args(dict( - host='10.20.30.40', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_node_idempotent(self, *args): - set_module_args(dict( - host='10.20.30.40', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_3.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_create_node_fqdn(self, *args): - set_module_args(dict( - fqdn='foo.bar', - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_node_fqdn_up_interval(self, *args): - set_module_args(dict( - fqdn='foo.bar', - fqdn_up_interval=100, - name='mytestserver', - monitors=[ - '/Common/icmp' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_node_fqdn_up_interval_idempotent(self, *args): - set_module_args(dict( - fqdn='google.com', - fqdn_up_interval=3600, - name='fqdn-foo', - monitors=[ - 'icmp', - 'tcp_echo' - ], - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_node_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is not True diff --git a/test/units/modules/network/f5/test_bigip_partition.py b/test/units/modules/network/f5/test_bigip_partition.py deleted file mode 100644 index b12f87ae1e..0000000000 --- a/test/units/modules/network/f5/test_bigip_partition.py +++ /dev/null @@ -1,214 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_partition import ApiParameters - from library.modules.bigip_partition import ModuleParameters - from library.modules.bigip_partition import ModuleManager - from library.modules.bigip_partition import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_partition import ApiParameters - from ansible.modules.network.f5.bigip_partition import ModuleParameters - from ansible.modules.network.f5.bigip_partition import ModuleManager - from ansible.modules.network.f5.bigip_partition import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - route_domain=0 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.route_domain == 0 - - def test_module_parameters_string_domain(self): - args = dict( - name='foo', - route_domain='0' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.route_domain == 0 - - def test_api_parameters(self): - args = dict( - name='foo', - description='my description', - defaultRouteDomain=1 - ) - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.route_domain == 1 - - -class TestManagerEcho(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_partition(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.update_folder_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_partition_idempotent(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - current.update({'folder_description': 'my description'}) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_description(self, *args): - set_module_args(dict( - name='foo', - description='another description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.update_folder_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'another description' - - def test_update_route_domain(self, *args): - set_module_args(dict( - name='foo', - route_domain=1, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_partition.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['route_domain'] == 1 diff --git a/test/units/modules/network/f5/test_bigip_password_policy.py b/test/units/modules/network/f5/test_bigip_password_policy.py deleted file mode 100644 index bf7ff8b935..0000000000 --- a/test/units/modules/network/f5/test_bigip_password_policy.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_password_policy import ApiParameters - from library.modules.bigip_password_policy import ModuleParameters - from library.modules.bigip_password_policy import ModuleManager - from library.modules.bigip_password_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_password_policy import ApiParameters - from ansible.modules.network.f5.bigip_password_policy import ModuleParameters - from ansible.modules.network.f5.bigip_password_policy import ModuleManager - from ansible.modules.network.f5.bigip_password_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - expiration_warning=7, - max_duration=99999, - max_login_failures=0, - min_duration=0, - min_length=6, - password_memory=0, - policy_enforcement=False, - required_lowercase=0, - required_numeric=0, - required_special=0, - required_uppercase=0, - ) - - p = ModuleParameters(params=args) - assert p.expiration_warning == 7 - assert p.max_duration == 99999 - assert p.max_login_failures == 0 - assert p.min_duration == 0 - assert p.password_memory == 0 - assert p.policy_enforcement == 'no' - assert p.required_lowercase == 0 - assert p.required_numeric == 0 - assert p.required_special == 0 - assert p.required_uppercase == 0 - - def test_api_parameters(self): - args = load_fixture('load_tm_auth_password_policy_1.json') - - p = ApiParameters(params=args) - assert p.expiration_warning == 7 - assert p.max_duration == 99999 - assert p.max_login_failures == 0 - assert p.min_duration == 0 - assert p.password_memory == 0 - assert p.policy_enforcement == 'no' - assert p.required_lowercase == 0 - assert p.required_numeric == 0 - assert p.required_special == 0 - assert p.required_uppercase == 0 - - -@patch('ansible.module_utils.f5_utils.AnsibleF5Client._get_mgmt_root', - return_value=True) -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_partition(self, *args): - set_module_args(dict( - expiration_warning=7, - max_duration=9999, - max_login_failures=0, - min_duration=0, - min_length=6, - password_memory=0, - policy_enforcement='no', - required_lowercase=0, - required_numeric=0, - required_special=0, - required_uppercase=0, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_auth_password_policy_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_policy.py b/test/units/modules/network/f5/test_bigip_policy.py deleted file mode 100644 index e59b2facf9..0000000000 --- a/test/units/modules/network/f5/test_bigip_policy.py +++ /dev/null @@ -1,158 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_policy import Parameters - from library.modules.bigip_policy import ModuleManager - from library.modules.bigip_policy import SimpleManager - from library.modules.bigip_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_policy import Parameters - from ansible.modules.network.f5.bigip_policy import ModuleManager - from ansible.modules.network.f5.bigip_policy import SimpleManager - from ansible.modules.network.f5.bigip_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_none_strategy(self): - args = dict( - name='foo', - description='asdf asdf asdf', - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy is None - - def test_module_parameters_with_strategy_no_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='foo', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/foo' - - def test_module_parameters_with_strategy_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Common/foo', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/foo' - - def test_module_parameters_with_strategy_different_partition(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Foo/bar', - partition='Common' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Foo/bar' - - def test_api_parameters(self): - args = dict( - name='foo', - description='asdf asdf asdf', - strategy='/Common/asdf' - ) - p = Parameters(params=args) - assert p.name == 'foo' - assert p.description == 'asdf asdf asdf' - assert p.strategy == '/Common/asdf' - - -class TestSimpleTrafficPolicyManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_policy(self, *args): - set_module_args(dict( - name="Policy-Foo", - state='present', - strategy='best', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = SimpleManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.create_on_device = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.version_is_less_than_12 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_policy_rule.py b/test/units/modules/network/f5/test_bigip_policy_rule.py deleted file mode 100644 index 70ef8dc235..0000000000 --- a/test/units/modules/network/f5/test_bigip_policy_rule.py +++ /dev/null @@ -1,198 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_policy_rule import ModuleParameters - from library.modules.bigip_policy_rule import ApiParameters - from library.modules.bigip_policy_rule import ModuleManager - from library.modules.bigip_policy_rule import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_policy_rule import ModuleParameters - from ansible.modules.network.f5.bigip_policy_rule import ApiParameters - from ansible.modules.network.f5.bigip_policy_rule import ModuleManager - from ansible.modules.network.f5.bigip_policy_rule import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_policy(self): - args = dict( - policy='Policy - Foo' - ) - p = ModuleParameters(params=args) - assert p.policy == 'Policy - Foo' - - def test_module_parameters_actions(self): - args = dict( - actions=[ - dict( - type='forward', - pool='pool-svrs' - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.actions) == 1 - - def test_module_parameters_conditions(self): - args = dict( - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ] - ) - p = ModuleParameters(params=args) - assert len(p.conditions) == 1 - - def test_module_parameters_name(self): - args = dict( - name='rule1' - ) - p = ModuleParameters(params=args) - assert p.name == 'rule1' - - def test_api_parameters(self): - args = load_fixture('load_ltm_policy_draft_rule_http-uri_forward.json') - p = ApiParameters(params=args) - assert len(p.actions) == 1 - assert len(p.conditions) == 1 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_policy_rule_no_existence(self, *args): - set_module_args(dict( - name="rule1", - state='present', - policy='policy1', - actions=[ - dict( - type='forward', - pool='baz' - ) - ], - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.publish_on_device = Mock(return_value=True) - mm.draft_exists = Mock(return_value=False) - mm._create_existing_policy_draft_on_device = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_policy_rule_idempotent_check(self, *args): - set_module_args(dict( - name="rule1", - state='present', - policy='policy1', - actions=[ - dict( - type='forward', - pool='baz' - ) - ], - conditions=[ - dict( - type='http_uri', - path_begins_with_any=['/ABC'] - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_policy_draft_rule_http-uri_forward.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.draft_exists = Mock(return_value=False) - mm.update_on_device = Mock(return_value=True) - mm._create_existing_policy_draft_on_device = Mock(return_value=True) - mm.publish_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_pool.py b/test/units/modules/network/f5/test_bigip_pool.py deleted file mode 100644 index de74f24cd5..0000000000 --- a/test/units/modules/network/f5/test_bigip_pool.py +++ /dev/null @@ -1,546 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_pool import ApiParameters - from library.modules.bigip_pool import ModuleParameters - from library.modules.bigip_pool import ModuleManager - from library.modules.bigip_pool import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_pool import ApiParameters - from ansible.modules.network.f5.bigip_pool import ModuleParameters - from ansible.modules.network.f5.bigip_pool import ModuleManager - from ansible.modules.network.f5.bigip_pool import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - monitor_type='m_of_n', - monitors=['/Common/Fake', '/Common/Fake2'], - quorum=1, - slow_ramp_time=200, - reselect_tries=5, - service_down_action='drop' - ) - - p = ModuleParameters(params=args) - assert p.monitor_type == 'm_of_n' - assert p.quorum == 1 - assert p.monitors == 'min 1 of { /Common/Fake /Common/Fake2 }' - assert p.slow_ramp_time == 200 - assert p.reselect_tries == 5 - assert p.service_down_action == 'drop' - - def test_api_parameters(self): - args = dict( - monitor="/Common/Fake and /Common/Fake2 ", - slowRampTime=200, - reselectTries=5, - serviceDownAction='drop' - ) - - p = ApiParameters(params=args) - assert p.monitors == '/Common/Fake and /Common/Fake2' - assert p.slow_ramp_time == 200 - assert p.reselect_tries == 5 - assert p.service_down_action == 'drop' - - def test_unknown_module_lb_method(self): - args = dict( - lb_method='obscure_hyphenated_fake_method', - ) - with pytest.raises(F5ModuleError): - p = ModuleParameters(params=args) - assert p.lb_method == 'foo' - - def test_unknown_api_lb_method(self): - args = dict( - loadBalancingMode='obscure_hypenated_fake_method' - ) - with pytest.raises(F5ModuleError): - p = ApiParameters(params=args) - assert p.lb_method == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_pool(self, *args): - set_module_args(dict( - pool='fake_pool', - description='fakepool', - service_down_action='drop', - lb_method='round-robin', - partition='Common', - slow_ramp_time=10, - reselect_tries=1, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['description'] == 'fakepool' - assert results['service_down_action'] == 'drop' - assert results['lb_method'] == 'round-robin' - assert results['slow_ramp_time'] == 10 - assert results['reselect_tries'] == 1 - - def test_create_pool_monitor_type_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitors_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitor_type='and_list', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - msg = "The 'monitors' parameter cannot be empty when " \ - "'monitor_type' parameter is specified" - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - - assert str(err.value) == msg - - def test_create_pool_quorum_missing(self, *args): - set_module_args(dict( - pool='fake_pool', - lb_method='round-robin', - partition='Common', - monitor_type='m_of_n', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - msg = "Quorum value must be specified with monitor_type 'm_of_n'." - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - - assert str(err.value) == msg - - def test_create_pool_monitor_and_list(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Common', - monitor_type='and_list', - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Common', - monitor_type='m_of_n', - quorum=1, - monitors=['/Common/tcp', '/Common/http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_update_monitors(self, *args): - set_module_args(dict( - name='test_pool', - partition='Common', - monitor_type='and_list', - monitors=['/Common/http', '/Common/tcp'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_ltm_pool.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_and_list_no_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - monitor_type='and_list', - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n_no_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - monitor_type='m_of_n', - quorum=1, - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Common/http', '/Common/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_create_pool_monitor_and_list_custom_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Testing', - monitor_type='and_list', - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Testing/http', '/Testing/tcp'] - assert results['monitor_type'] == 'and_list' - - def test_create_pool_monitor_m_of_n_custom_partition(self, *args): - set_module_args(dict( - pool='fake_pool', - partition='Testing', - monitor_type='m_of_n', - quorum=1, - monitors=['tcp', 'http'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert results['monitors'] == ['/Testing/http', '/Testing/tcp'] - assert results['monitor_type'] == 'm_of_n' - - def test_create_pool_with_metadata(self, *args): - set_module_args(dict( - pool='fake_pool', - metadata=dict(ansible='2.4'), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'fake_pool' - assert 'metadata' in results - assert 'ansible' in results['metadata'] - assert results['metadata']['ansible'] == '2.4' - - def test_create_aggregate_pools(self, *args): - set_module_args(dict( - aggregate=[ - dict( - pool='fake_pool', - description='fakepool', - service_down_action='drop', - lb_method='round-robin', - partition='Common', - slow_ramp_time=10, - reselect_tries=1, - ), - dict( - pool='fake_pool2', - description='fakepool2', - service_down_action='drop', - lb_method='predictive-node', - partition='Common', - slow_ramp_time=110, - reselect_tries=2, - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_pool_member.py b/test/units/modules/network/f5/test_bigip_pool_member.py deleted file mode 100644 index acc4984e0d..0000000000 --- a/test/units/modules/network/f5/test_bigip_pool_member.py +++ /dev/null @@ -1,256 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_pool_member import ModuleParameters - from library.modules.bigip_pool_member import ApiParameters - from library.modules.bigip_pool_member import NodeApiParameters - from library.modules.bigip_pool_member import ModuleManager - from library.modules.bigip_pool_member import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_pool_member import ModuleParameters - from ansible.modules.network.f5.bigip_pool_member import ApiParameters - from ansible.modules.network.f5.bigip_pool_member import NodeApiParameters - from ansible.modules.network.f5.bigip_pool_member import ModuleManager - from ansible.modules.network.f5.bigip_pool_member import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - pool='my-pool', - address='1.2.3.4', - fqdn='fqdn.foo.bar', - name='my-name', - port=2345, - connection_limit=100, - description='this is a description', - rate_limit=70, - ratio=20, - preserve_node=False, - priority_group=10, - state='present', - partition='Common', - fqdn_auto_populate=False, - reuse_nodes=False, - ) - - p = ModuleParameters(params=args) - assert p.name == 'my-name' - - def test_api_parameters(self): - args = load_fixture('load_net_node_with_fqdn.json') - p = ApiParameters(params=args) - assert p.state == 'present' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_reuse_node_with_name(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - fqdn='foo.bar.com', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_fqdn.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is True - assert results['fqdn'] == 'foo.bar.com' - assert results['state'] == 'present' - - def test_create_reuse_node_with_ipv4_address(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - address='7.3.67.8', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_ipv4_address.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is False - assert results['address'] == '7.3.67.8' - assert results['state'] == 'present' - - def test_create_reuse_node_with_fqdn_auto_populate(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - pool='my-pool', - fqdn='foo.bar.com', - port=2345, - state='present', - partition='Common', - reuse_nodes=True, - fqdn_auto_populate=False, - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - current_node = NodeApiParameters(params=load_fixture('load_net_node_with_fqdn.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - mm.read_current_node_from_device = Mock(return_value=current_node) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['fqdn_auto_populate'] is True - assert results['fqdn'] == 'foo.bar.com' - assert results['state'] == 'present' - - def test_create_aggregate_pool_members(self, *args): - set_module_args(dict( - pool='fake_pool', - aggregate=[ - dict( - name='my-name', - host="1.1.1.1", - port=1234, - state='present', - partition='Common', - reuse_nodes=True, - fqdn_auto_populate=False, - ), - dict( - name='my-name2', - fqdn='google.com', - port=2423, - state='present', - partition='Common', - fqdn_auto_populate=True, - reuse_nodes=True, - ) - ], - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of, - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_analytics.py b/test/units/modules/network/f5/test_bigip_profile_analytics.py deleted file mode 100644 index 0e81c75e64..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_analytics.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_analytics import ApiParameters - from library.modules.bigip_profile_analytics import ModuleParameters - from library.modules.bigip_profile_analytics import ModuleManager - from library.modules.bigip_profile_analytics import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_analytics import ApiParameters - from ansible.modules.network.f5.bigip_profile_analytics import ModuleParameters - from ansible.modules.network.f5.bigip_profile_analytics import ModuleManager - from ansible.modules.network.f5.bigip_profile_analytics import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='foo', - collect_geo=True, - collect_ip=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'foo' - assert p.collect_geo == 'yes' - assert p.collect_ip == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_analytics_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.collect_geo == 'no' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - description='foo', - collect_geo=True, - collect_ip=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_client_ssl.py b/test/units/modules/network/f5/test_bigip_profile_client_ssl.py deleted file mode 100644 index 18c1f27002..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_client_ssl.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_client_ssl import ModuleParameters - from library.modules.bigip_profile_client_ssl import ApiParameters - from library.modules.bigip_profile_client_ssl import ModuleManager - from library.modules.bigip_profile_client_ssl import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_client_ssl import ModuleParameters - from ansible.modules.network.f5.bigip_profile_client_ssl import ApiParameters - from ansible.modules.network.f5.bigip_profile_client_ssl import ModuleManager - from ansible.modules.network.f5.bigip_profile_client_ssl import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - ciphers='!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA', - cert_key_chain=[ - dict( - cert='bigip_ssl_cert1', - key='bigip_ssl_key1', - chain='bigip_ssl_cert1' - ) - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.ciphers == '!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_clientssl.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.ciphers == 'DEFAULT' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - ciphers='!SSLv3:!SSLv2:ECDHE+AES-GCM+SHA256:ECDHE-RSA-AES128-CBC-SHA', - cert_key_chain=[ - dict( - cert='bigip_ssl_cert1', - key='bigip_ssl_key1', - chain='bigip_ssl_cert1' - ) - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_dns.py b/test/units/modules/network/f5/test_bigip_profile_dns.py deleted file mode 100644 index 4932002fa4..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_dns.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_dns import ApiParameters - from library.modules.bigip_profile_dns import ModuleParameters - from library.modules.bigip_profile_dns import ModuleManager - from library.modules.bigip_profile_dns import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_dns import ApiParameters - from ansible.modules.network.f5.bigip_profile_dns import ModuleParameters - from ansible.modules.network.f5.bigip_profile_dns import ModuleManager - from ansible.modules.network.f5.bigip_profile_dns import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - enable_dns_express=True, - enable_zone_transfer=True, - enable_dnssec=True, - enable_gtm=True, - process_recursion_desired=True, - use_local_bind=True, - enable_dns_firewall=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.enable_dns_express is True - assert p.enable_zone_transfer is True - assert p.enable_dnssec is True - assert p.enable_gtm is True - assert p.process_recursion_desired is True - assert p.use_local_bind is True - assert p.enable_dns_firewall is True - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_dns_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/dns' - assert p.enable_dns_express is False - assert p.enable_zone_transfer is True - assert p.enable_dnssec is False - assert p.enable_gtm is False - assert p.process_recursion_desired is True - assert p.use_local_bind is False - assert p.enable_dns_firewall is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - enable_dns_express=True, - enable_zone_transfer=True, - enable_dnssec=True, - enable_gtm=True, - process_recursion_desired=True, - use_local_bind=True, - enable_dns_firewall=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['enable_dns_express'] == 'yes' - assert results['enable_zone_transfer'] == 'yes' - assert results['enable_dnssec'] == 'yes' - assert results['enable_gtm'] == 'yes' - assert results['process_recursion_desired'] == 'yes' - assert results['use_local_bind'] == 'yes' - assert results['enable_dns_firewall'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_profile_fastl4.py b/test/units/modules/network/f5/test_bigip_profile_fastl4.py deleted file mode 100644 index 8425053d91..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_fastl4.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_fastl4 import ApiParameters - from library.modules.bigip_profile_fastl4 import ModuleParameters - from library.modules.bigip_profile_fastl4 import ModuleManager - from library.modules.bigip_profile_fastl4 import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_fastl4 import ApiParameters - from ansible.modules.network.f5.bigip_profile_fastl4 import ModuleParameters - from ansible.modules.network.f5.bigip_profile_fastl4 import ModuleManager - from ansible.modules.network.f5.bigip_profile_fastl4 import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout=100, - client_timeout=101, - description='description one', - explicit_flow_migration=False, - ip_df_mode='pmtu', - ip_tos_to_client=102, - ip_tos_to_server=103, - ip_ttl_v4=104, - ip_ttl_v6=105, - ip_ttl_mode='proxy', - keep_alive_interval=106, - late_binding=True, - link_qos_to_client=7, - link_qos_to_server=6, - loose_close=False, - loose_initialization=True, - mss_override=4, - reassemble_fragments=True, - receive_window_size=109, - reset_on_timeout=False, - rtt_from_client=True, - rtt_from_server=False, - server_sack=True, - server_timestamp=False, - syn_cookie_mss=110, - tcp_close_timeout=111, - tcp_generate_isn=True, - tcp_handshake_timeout=112, - tcp_strip_sack=False, - tcp_time_wait_timeout=113, - tcp_timestamp_mode='rewrite', - tcp_wscale_mode='strip', - timeout_recovery='fallback', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'description one' - assert p.idle_timeout == 100 - assert p.client_timeout == 101 - assert p.explicit_flow_migration == 'no' - assert p.ip_df_mode == 'pmtu' - assert p.ip_tos_to_client == 102 - assert p.ip_tos_to_server == 103 - assert p.ip_ttl_v4 == 104 - assert p.ip_ttl_v6 == 105 - assert p.ip_ttl_mode == 'proxy' - assert p.keep_alive_interval == 106 - assert p.late_binding == 'yes' - assert p.link_qos_to_client == 7 - assert p.link_qos_to_server == 6 - assert p.loose_close == 'no' - assert p.loose_initialization == 'yes' - assert p.mss_override == 4 - assert p.reassemble_fragments == 'yes' - assert p.receive_window_size == 109 - assert p.reset_on_timeout == 'no' - assert p.rtt_from_client == 'yes' - assert p.rtt_from_server == 'no' - assert p.server_sack == 'yes' - assert p.server_timestamp == 'no' - assert p.syn_cookie_mss == 110 - assert p.tcp_close_timeout == 111 - assert p.tcp_generate_isn == 'yes' - assert p.tcp_handshake_timeout == 112 - assert p.tcp_strip_sack == 'no' - assert p.tcp_time_wait_timeout == 113 - assert p.tcp_timestamp_mode == 'rewrite' - assert p.tcp_wscale_mode == 'strip' - assert p.timeout_recovery == 'fallback' - - def test_api_parameters(self): - args = load_fixture('load_ltm_fastl4_profile_1.json') - p = ApiParameters(params=args) - assert p.name == 'fastL4' - assert p.description is None - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_http.py b/test/units/modules/network/f5/test_bigip_profile_http.py deleted file mode 100644 index a913172dc2..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_http.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_http import ApiParameters - from library.modules.bigip_profile_http import ModuleParameters - from library.modules.bigip_profile_http import ModuleManager - from library.modules.bigip_profile_http import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_http import ApiParameters - from ansible.modules.network.f5.bigip_profile_http import ModuleParameters - from ansible.modules.network.f5.bigip_profile_http import ModuleManager - from ansible.modules.network.f5.bigip_profile_http import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='This is a Test', - proxy_type='transparent', - insert_xforwarded_for=True, - redirect_rewrite='all', - encrypt_cookies=['FooCookie'], - encrypt_cookie_secret='12345' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'This is a Test' - assert p.proxy_type == 'transparent' - assert p.insert_xforwarded_for == 'enabled' - assert p.redirect_rewrite == 'all' - assert p.encrypt_cookies == ['FooCookie'] - assert p.encrypt_cookie_secret == '12345' - - def test_api_parameters(self): - args = load_fixture('load_ltm_http_profile_1.json') - p = ApiParameters(params=args) - assert p.name == 'http' - assert p.insert_xforwarded_for == 'disabled' - assert p.description == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - insert_xforwarded_for='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['insert_xforwarded_for'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_profile_http2.py b/test/units/modules/network/f5/test_bigip_profile_http2.py deleted file mode 100644 index 6ae6ea6332..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_http2.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_http2 import ApiParameters - from library.modules.bigip_profile_http2 import ModuleParameters - from library.modules.bigip_profile_http2 import ModuleManager - from library.modules.bigip_profile_http2 import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_http2 import ApiParameters - from ansible.modules.network.f5.bigip_profile_http2 import ModuleParameters - from ansible.modules.network.f5.bigip_profile_http2 import ModuleManager - from ansible.modules.network.f5.bigip_profile_http2 import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='This is a Test', - streams=20, - enforce_tls_requirements=True, - frame_size=1024, - activation_modes=['always'], - insert_header=True, - insert_header_name='FOO' - - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'This is a Test' - assert p.streams == 20 - assert p.enforce_tls_requirements == 'enabled' - assert p.frame_size == 1024 - assert p.activation_modes == ['always'] - assert p.insert_header == 'enabled' - assert p.insert_header_name == 'FOO' - - def test_api_parameters(self): - args = load_fixture('load_ltm_http2_profile.json') - p = ApiParameters(params=args) - assert p.name == 'test' - assert p.streams == 10 - assert p.enforce_tls_requirements == 'enabled' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - enforce_tls_requirements='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['enforce_tls_requirements'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_profile_http_compression.py b/test/units/modules/network/f5/test_bigip_profile_http_compression.py deleted file mode 100644 index f3d2da3ed7..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_http_compression.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_http_compression import ApiParameters - from library.modules.bigip_profile_http_compression import ModuleParameters - from library.modules.bigip_profile_http_compression import ModuleManager - from library.modules.bigip_profile_http_compression import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_http_compression import ApiParameters - from ansible.modules.network.f5.bigip_profile_http_compression import ModuleParameters - from ansible.modules.network.f5.bigip_profile_http_compression import ModuleManager - from ansible.modules.network.f5.bigip_profile_http_compression import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - description='description1', - buffer_size=1024, - gzip_memory_level=64, - gzip_level=2, - gzip_window_size=128 - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.description == 'description1' - assert p.buffer_size == 1024 - assert p.gzip_memory_level == 64 - assert p.gzip_level == 2 - assert p.gzip_window_size == 128 - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_ltm_profile_http_compression_1.json')) - assert p.description == 'my profile' - assert p.buffer_size == 4096 - assert p.gzip_memory_level == 8 - assert p.gzip_level == 1 - assert p.gzip_window_size == 16 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - description='description1', - buffer_size=1024, - gzip_memory_level=64, - gzip_level=2, - gzip_window_size=128, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_oneconnect.py b/test/units/modules/network/f5/test_bigip_profile_oneconnect.py deleted file mode 100644 index 5057459350..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_oneconnect.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_oneconnect import ApiParameters - from library.modules.bigip_profile_oneconnect import ModuleParameters - from library.modules.bigip_profile_oneconnect import ModuleManager - from library.modules.bigip_profile_oneconnect import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_oneconnect import ApiParameters - from ansible.modules.network.f5.bigip_profile_oneconnect import ModuleParameters - from ansible.modules.network.f5.bigip_profile_oneconnect import ModuleManager - from ansible.modules.network.f5.bigip_profile_oneconnect import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - maximum_size=100, - maximum_age=200, - maximum_reuse=300, - idle_timeout_override=20, - limit_type='strict' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.maximum_size == 100 - assert p.maximum_age == 200 - assert p.maximum_reuse == 300 - assert p.idle_timeout_override == 20 - assert p.limit_type == 'strict' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_oneconnect_1.json') - p = ApiParameters(params=args) - assert p.name == 'oneconnect' - assert p.maximum_reuse == 1000 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - maximum_reuse=1000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['maximum_reuse'] == 1000 diff --git a/test/units/modules/network/f5/test_bigip_profile_persistence_cookie.py b/test/units/modules/network/f5/test_bigip_profile_persistence_cookie.py deleted file mode 100644 index 2bdecf1ff6..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_persistence_cookie.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_persistence_cookie import ApiParameters - from library.modules.bigip_profile_persistence_cookie import ModuleParameters - from library.modules.bigip_profile_persistence_cookie import ModuleManager - from library.modules.bigip_profile_persistence_cookie import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_persistence_cookie import ApiParameters - from ansible.modules.network.f5.bigip_profile_persistence_cookie import ModuleParameters - from ansible.modules.network.f5.bigip_profile_persistence_cookie import ModuleManager - from ansible.modules.network.f5.bigip_profile_persistence_cookie import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - match_across_services=False, - match_across_virtuals=True, - match_across_pools=False, - override_connection_limit=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'yes' - assert p.match_across_pools == 'no' - assert p.override_connection_limit == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_persistence_cookie_1.json') - p = ApiParameters(params=args) - assert p.name == 'cookie' - assert p.match_across_pools == 'no' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'no' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - match_across_virtuals='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['match_across_virtuals'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_profile_persistence_src_addr.py b/test/units/modules/network/f5/test_bigip_profile_persistence_src_addr.py deleted file mode 100644 index c8a2683f74..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_persistence_src_addr.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_persistence_src_addr import ApiParameters - from library.modules.bigip_profile_persistence_src_addr import ModuleParameters - from library.modules.bigip_profile_persistence_src_addr import ModuleManager - from library.modules.bigip_profile_persistence_src_addr import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_persistence_src_addr import ApiParameters - from ansible.modules.network.f5.bigip_profile_persistence_src_addr import ModuleParameters - from ansible.modules.network.f5.bigip_profile_persistence_src_addr import ModuleManager - from ansible.modules.network.f5.bigip_profile_persistence_src_addr import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - match_across_services=False, - match_across_virtuals=True, - match_across_pools=False, - hash_algorithm='carp', - entry_timeout=100, - override_connection_limit=True - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'yes' - assert p.match_across_pools == 'no' - assert p.hash_algorithm == 'carp' - assert p.entry_timeout == 100 - assert p.override_connection_limit == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_persistence_src_addr_1.json') - p = ApiParameters(params=args) - assert p.name == 'source_addr' - assert p.match_across_pools == 'no' - assert p.match_across_services == 'no' - assert p.match_across_virtuals == 'no' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - match_across_virtuals='yes', - parent='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['match_across_virtuals'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_profile_server_ssl.py b/test/units/modules/network/f5/test_bigip_profile_server_ssl.py deleted file mode 100644 index 9a51634473..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_server_ssl.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_server_ssl import ApiParameters - from library.modules.bigip_profile_server_ssl import ModuleParameters - from library.modules.bigip_profile_server_ssl import ModuleManager - from library.modules.bigip_profile_server_ssl import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_server_ssl import ApiParameters - from ansible.modules.network.f5.bigip_profile_server_ssl import ModuleParameters - from ansible.modules.network.f5.bigip_profile_server_ssl import ModuleManager - from ansible.modules.network.f5.bigip_profile_server_ssl import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - server_name='foo.bar.com', - secure_renegotiation='require', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.server_name == 'foo.bar.com' - assert p.secure_renegotiation == 'require' - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_serverssl_1.json') - p = ApiParameters(params=args) - assert p.name == 'asda' - assert p.server_name is None - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - server_name='foo.bar.com', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_profile_tcp.py b/test/units/modules/network/f5/test_bigip_profile_tcp.py deleted file mode 100644 index a99fdb3312..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_tcp.py +++ /dev/null @@ -1,116 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_tcp import ApiParameters - from library.modules.bigip_profile_tcp import ModuleParameters - from library.modules.bigip_profile_tcp import ModuleManager - from library.modules.bigip_profile_tcp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_tcp import ApiParameters - from ansible.modules.network.f5.bigip_profile_tcp import ModuleParameters - from ansible.modules.network.f5.bigip_profile_tcp import ModuleManager - from ansible.modules.network.f5.bigip_profile_tcp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout='500' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.idle_timeout == 500 - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_tcp_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.idle_timeout == 300 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - idle_timeout=500, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['idle_timeout'] == 500 diff --git a/test/units/modules/network/f5/test_bigip_profile_udp.py b/test/units/modules/network/f5/test_bigip_profile_udp.py deleted file mode 100644 index 0cdb30f3dc..0000000000 --- a/test/units/modules/network/f5/test_bigip_profile_udp.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_profile_udp import ApiParameters - from library.modules.bigip_profile_udp import ModuleParameters - from library.modules.bigip_profile_udp import ModuleManager - from library.modules.bigip_profile_udp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_profile_udp import ApiParameters - from ansible.modules.network.f5.bigip_profile_udp import ModuleParameters - from ansible.modules.network.f5.bigip_profile_udp import ModuleManager - from ansible.modules.network.f5.bigip_profile_udp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - parent='bar', - idle_timeout='500', - datagram_load_balancing=False - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.parent == '/Common/bar' - assert p.idle_timeout == 500 - assert p.datagram_load_balancing is False - - def test_api_parameters(self): - args = load_fixture('load_ltm_profile_udp_1.json') - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.idle_timeout == 60 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - parent='bar', - idle_timeout=500, - datagram_load_balancing=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['idle_timeout'] == 500 diff --git a/test/units/modules/network/f5/test_bigip_provision.py b/test/units/modules/network/f5/test_bigip_provision.py deleted file mode 100644 index 39bf287483..0000000000 --- a/test/units/modules/network/f5/test_bigip_provision.py +++ /dev/null @@ -1,318 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_provision import ModuleParameters - from library.modules.bigip_provision import ModuleManager - from library.modules.bigip_provision import ArgumentSpec - from library.modules.bigip_provision import ApiParameters - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_provision import ModuleParameters - from ansible.modules.network.f5.bigip_provision import ModuleManager - from ansible.modules.network.f5.bigip_provision import ArgumentSpec - from ansible.modules.network.f5.bigip_provision import ApiParameters - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - module='gtm', - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - assert p.level == 'nominal' - - def test_api_parameters(self): - args = load_fixture('load_sys_provision_default.json') - p = ApiParameters(params=args) - assert p.level == 'dedicated' - assert p.memory == 'medium' - assert p.module == 'urldb' - - def test_module_parameters_level_minimum(self): - args = dict( - level='minimum', - ) - p = ModuleParameters(params=args) - assert p.level == 'minimum' - - def test_module_parameters_level_nominal(self): - args = dict( - level='nominal', - ) - p = ModuleParameters(params=args) - assert p.level == 'nominal' - - def test_module_parameters_level_dedicated(self): - args = dict( - level='dedicated', - ) - p = ModuleParameters(params=args) - assert p.level == 'dedicated' - - def test_module_parameters_memory_small(self): - args = dict( - module='mgmt', - memory='small', - ) - p = ModuleParameters(params=args) - assert p.memory == 0 - - def test_module_parameters_memory_medium(self): - args = dict( - module='mgmt', - memory='medium', - ) - p = ModuleParameters(params=args) - assert p.memory == 200 - - def test_module_parameters_memory_large(self): - args = dict( - module='mgmt', - memory='large', - ) - p = ModuleParameters(params=args) - assert p.memory == 500 - - def test_module_parameters_memory_700(self): - args = dict( - module='mgmt', - memory=700, - ) - p = ModuleParameters(params=args) - assert p.memory == 700 - - def test_module_parameters_mod_afm(self): - args = dict( - module='afm', - ) - p = ModuleParameters(params=args) - assert p.module == 'afm' - - def test_module_parameters_mod_am(self): - args = dict( - module='am', - ) - p = ModuleParameters(params=args) - assert p.module == 'am' - - def test_module_parameters_mod_sam(self): - args = dict( - module='sam', - ) - p = ModuleParameters(params=args) - assert p.module == 'sam' - - def test_module_parameters_mod_asm(self): - args = dict( - module='asm', - ) - p = ModuleParameters(params=args) - assert p.module == 'asm' - - def test_module_parameters_mod_avr(self): - args = dict( - module='avr', - ) - p = ModuleParameters(params=args) - assert p.module == 'avr' - - def test_module_parameters_mod_fps(self): - args = dict( - module='fps', - ) - p = ModuleParameters(params=args) - assert p.module == 'fps' - - def test_module_parameters_mod_gtm(self): - args = dict( - module='gtm', - ) - p = ModuleParameters(params=args) - assert p.module == 'gtm' - - def test_module_parameters_mod_lc(self): - args = dict( - module='lc', - ) - p = ModuleParameters(params=args) - assert p.module == 'lc' - - def test_module_parameters_mod_pem(self): - args = dict( - module='pem', - ) - p = ModuleParameters(params=args) - assert p.module == 'pem' - - def test_module_parameters_mod_swg(self): - args = dict( - module='swg', - ) - p = ModuleParameters(params=args) - assert p.module == 'swg' - - def test_module_parameters_mod_ilx(self): - args = dict( - module='ilx', - ) - p = ModuleParameters(params=args) - assert p.module == 'ilx' - - def test_module_parameters_mod_apm(self): - args = dict( - module='apm', - ) - p = ModuleParameters(params=args) - assert p.module == 'apm' - - def test_module_parameters_mod_mgmt(self): - args = dict( - module='mgmt', - ) - p = ModuleParameters(params=args) - assert p.module == 'mgmt' - - def test_module_parameters_mod_sslo(self): - args = dict( - module='sslo', - ) - p = ModuleParameters(params=args) - assert p.module == 'sslo' - - def test_module_parameters_mod_urldb(self): - args = dict( - module='urldb', - ) - p = ModuleParameters(params=args) - assert p.module == 'urldb' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_provision_one_module_default_level(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module='gtm', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ModuleParameters( - dict( - module='gtm', - level='none' - ) - ) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.reboot_device = Mock(return_value=True) - mm.save_on_device = Mock(return_value=True) - - # this forced sleeping can cause these tests to take 15 - # or more seconds to run. This is deliberate. - mm._is_mprov_running_on_device = Mock(side_effect=[True, False, False, False, False]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['level'] == 'nominal' - - def test_provision_all_modules(self, *args): - modules = [ - 'afm', 'am', 'sam', 'asm', 'avr', 'fps', - 'gtm', 'lc', 'ltm', 'pem', 'swg', 'ilx', - 'apm', 'mgmt', 'sslo', 'urldb', - ] - - for module in modules: - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - module=module, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - with patch('ansible.module_utils.basic.AnsibleModule.fail_json') as mo: - AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - mo.assert_not_called() diff --git a/test/units/modules/network/f5/test_bigip_qkview.py b/test/units/modules/network/f5/test_bigip_qkview.py deleted file mode 100644 index 20d744087d..0000000000 --- a/test/units/modules/network/f5/test_bigip_qkview.py +++ /dev/null @@ -1,178 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_qkview import Parameters - from library.modules.bigip_qkview import ModuleManager - from library.modules.bigip_qkview import MadmLocationManager - from library.modules.bigip_qkview import BulkLocationManager - from library.modules.bigip_qkview import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_qkview import Parameters - from ansible.modules.network.f5.bigip_qkview import ModuleManager - from ansible.modules.network.f5.bigip_qkview import MadmLocationManager - from ansible.modules.network.f5.bigip_qkview import BulkLocationManager - from ansible.modules.network.f5.bigip_qkview import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - filename='foo.qkview', - asm_request_log=False, - max_file_size=1024, - complete_information=True, - exclude_core=True, - force=False, - exclude=['audit', 'secure'], - dest='/tmp/foo.qkview' - ) - p = Parameters(params=args) - assert p.filename == 'foo.qkview' - assert p.asm_request_log is None - assert p.max_file_size == '-s 1024' - assert p.complete_information == '-c' - assert p.exclude_core == '-C' - assert p.force is False - assert len(p.exclude_core) == 2 - assert 'audit' in p.exclude - assert 'secure' in p.exclude - assert p.dest == '/tmp/foo.qkview' - - def test_module_asm_parameter(self): - args = dict( - asm_request_log=True, - ) - p = Parameters(params=args) - assert p.asm_request_log == '-o asm-request-log' - - -class TestMadmLocationManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_qkview_default_options(self, *args): - set_module_args(dict( - dest='/tmp/foo.qkview', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = MadmLocationManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.execute_on_device = Mock(return_value=True) - tm._move_qkview_to_download = Mock(return_value=True) - tm._download_file = Mock(return_value=True) - tm._delete_qkview = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_less_than_14 = Mock(return_value=True) - mm.get_manager = Mock(return_value=tm) - - with patch('os.path.exists') as mo: - mo.return_value = True - results = mm.exec_module() - - assert results['changed'] is False - - -class TestBulkLocationManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_qkview_default_options(self, *args): - set_module_args(dict( - dest='/tmp/foo.qkview', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - tm = BulkLocationManager(module=module, params=module.params) - tm.exists = Mock(return_value=False) - tm.execute_on_device = Mock(return_value=True) - tm._move_qkview_to_download = Mock(return_value=True) - tm._download_file = Mock(return_value=True) - tm._delete_qkview = Mock(return_value=True) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_less_than_14 = Mock(return_value=False) - mm.get_manager = Mock(return_value=tm) - - with patch('os.path.exists') as mo: - mo.return_value = True - results = mm.exec_module() - - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_remote_role.py b/test/units/modules/network/f5/test_bigip_remote_role.py deleted file mode 100644 index 0967e9bcf2..0000000000 --- a/test/units/modules/network/f5/test_bigip_remote_role.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_remote_role import ApiParameters - from library.modules.bigip_remote_role import ModuleParameters - from library.modules.bigip_remote_role import ModuleManager - from library.modules.bigip_remote_role import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_remote_role import ApiParameters - from ansible.modules.network.f5.bigip_remote_role import ModuleParameters - from ansible.modules.network.f5.bigip_remote_role import ModuleManager - from ansible.modules.network.f5.bigip_remote_role import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - terminal_access='none', - ) - - p = ModuleParameters(params=args) - assert p.terminal_access == 'disable' - - def test_api_parameters(self): - args = load_fixture('load_auth_remote_role_role_info_1.json') - - p = ApiParameters(params=args) - assert p.terminal_access == 'disable' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - name='foo', - line_order=1000, - attribute_string='bar', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_remote_syslog.py b/test/units/modules/network/f5/test_bigip_remote_syslog.py deleted file mode 100644 index 9cf81bde45..0000000000 --- a/test/units/modules/network/f5/test_bigip_remote_syslog.py +++ /dev/null @@ -1,230 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_remote_syslog import ModuleParameters - from library.modules.bigip_remote_syslog import ModuleManager - from library.modules.bigip_remote_syslog import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_remote_syslog import ModuleParameters - from ansible.modules.network.f5.bigip_remote_syslog import ModuleManager - from ansible.modules.network.f5.bigip_remote_syslog import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - remote_host='10.10.10.10', - remote_port=514, - local_ip='1.1.1.1' - ) - - p = ModuleParameters(params=args) - assert p.remote_host == '10.10.10.10' - assert p.remote_port == 514 - assert p.local_ip == '1.1.1.1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - remote_host='1.1.1.1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_remote_syslog_idempotent(self, *args): - set_module_args(dict( - name='remotesyslog1', - remote_host='10.10.10.10', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_remote_port(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - remote_port=800, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['remote_port'] == 800 - - def test_update_local_ip(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - local_ip='2.2.2.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_1.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['local_ip'] == '2.2.2.2' - - def test_update_no_name_dupe_host(self, *args): - set_module_args(dict( - remote_host='10.10.10.10', - local_ip='2.2.2.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture = load_fixture('load_tm_sys_syslog_2.json') - current = fixture['remoteServers'] - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - - assert "Multiple occurrences of hostname" in str(ex.value) diff --git a/test/units/modules/network/f5/test_bigip_remote_user.py b/test/units/modules/network/f5/test_bigip_remote_user.py deleted file mode 100644 index 89ccbfe36e..0000000000 --- a/test/units/modules/network/f5/test_bigip_remote_user.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_remote_user import ApiParameters - from library.modules.bigip_remote_user import ModuleParameters - from library.modules.bigip_remote_user import ModuleManager - from library.modules.bigip_remote_user import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_remote_user import ApiParameters - from ansible.modules.network.f5.bigip_remote_user import ModuleParameters - from ansible.modules.network.f5.bigip_remote_user import ModuleManager - from ansible.modules.network.f5.bigip_remote_user import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - default_partition='Common', - default_role='admin', - console_access='yes', - description='this is a role' - - ) - - p = ModuleParameters(params=args) - assert p.default_partition == 'Common' - assert p.default_role == 'admin' - assert p.console_access == 'tmsh' - assert p.description == 'this is a role' - - def test_api_parameters(self): - args = load_fixture('load_remote_user_settings.json') - p = ApiParameters(params=args) - assert p.default_partition == 'all' - assert p.default_role == 'no-access' - assert p.console_access == 'disabled' - assert p.description is None - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_remote_syslog(self, *args): - set_module_args(dict( - default_partition='Foobar', - default_role='auditor', - console_access='yes', - description='this is a role', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_remote_user_settings.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a role' - assert results['default_partition'] == 'Foobar' - assert results['default_role'] == 'auditor' - assert results['console_access'] == 'yes' diff --git a/test/units/modules/network/f5/test_bigip_routedomain.py b/test/units/modules/network/f5/test_bigip_routedomain.py deleted file mode 100644 index 7805152bae..0000000000 --- a/test/units/modules/network/f5/test_bigip_routedomain.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_routedomain import ApiParameters - from library.modules.bigip_routedomain import ModuleParameters - from library.modules.bigip_routedomain import ModuleManager - from library.modules.bigip_routedomain import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_routedomain import ApiParameters - from ansible.modules.network.f5.bigip_routedomain import ModuleParameters - from ansible.modules.network.f5.bigip_routedomain import ModuleManager - from ansible.modules.network.f5.bigip_routedomain import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - id='1234', - description='my description', - strict=True, - parent='parent1', - vlans=['vlan1', 'vlan2'], - routing_protocol=['BFD', 'BGP'], - bwc_policy='bwc1', - connection_limit=200, - flow_eviction_policy='evict1', - service_policy='service1' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.id == 1234 - assert p.description == 'my description' - assert p.strict is True - assert p.connection_limit == 200 - - def test_api_parameters(self): - args = load_fixture('load_net_route_domain_1.json') - - p = ApiParameters(params=args) - assert len(p.vlans) == 5 - assert p.id == 0 - assert p.strict is True - assert p.connection_limit == 0 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - id=1234, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['id'] == 1234 diff --git a/test/units/modules/network/f5/test_bigip_selfip.py b/test/units/modules/network/f5/test_bigip_selfip.py deleted file mode 100644 index 0e5c3a946a..0000000000 --- a/test/units/modules/network/f5/test_bigip_selfip.py +++ /dev/null @@ -1,207 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_selfip import ApiParameters - from library.modules.bigip_selfip import ModuleParameters - from library.modules.bigip_selfip import ModuleManager - from library.modules.bigip_selfip import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_selfip import ApiParameters - from ansible.modules.network.f5.bigip_selfip import ModuleParameters - from ansible.modules.network.f5.bigip_selfip import ModuleManager - from ansible.modules.network.f5.bigip_selfip import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1' - ) - p = ModuleParameters(params=args) - assert p.address == '10.10.10.10%1/24' - assert p.allow_service == ['gre:0', 'tcp:80', 'udp:53'] - assert p.name == 'net1' - assert p.netmask == 24 - assert p.route_domain == 1 - assert p.traffic_group == '/Common/traffic-group-local-only' - assert p.vlan == '/Common/net1' - - def test_module_invalid_service(self): - args = dict( - allow_service=[ - 'tcp:80', - 'udp:53', - 'grp' - ] - ) - p = ModuleParameters(params=args) - with pytest.raises(F5ModuleError) as ex: - assert p.allow_service == ['grp', 'tcp:80', 'udp:53'] - assert 'The provided protocol' in str(ex.value) - - def test_api_parameters(self): - args = dict( - address='10.10.10.10%1/24', - allowService=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - state='present', - trafficGroup='/Common/traffic-group-local-only', - vlan='net1' - ) - p = ApiParameters(params=args) - assert p.address == '10.10.10.10%1/24' - assert p.allow_service == ['gre', 'tcp:80', 'udp:53'] - assert p.name == 'net1' - assert p.netmask == 24 - assert p.traffic_group == '/Common/traffic-group-local-only' - assert p.vlan == '/Common/net1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_selfip(self, *args): - set_module_args(dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_create_selfip_idempotent(self, *args): - set_module_args(dict( - address='10.10.10.10', - allow_service=[ - 'tcp:80', - 'udp:53', - 'gre' - ], - name='net1', - netmask='255.255.255.0', - partition='Common', - route_domain='1', - state='present', - traffic_group='traffic-group-local-only', - vlan='net1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_tm_net_self.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False diff --git a/test/units/modules/network/f5/test_bigip_service_policy.py b/test/units/modules/network/f5/test_bigip_service_policy.py deleted file mode 100644 index 6c206cd2ec..0000000000 --- a/test/units/modules/network/f5/test_bigip_service_policy.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_service_policy import ApiParameters - from library.modules.bigip_service_policy import ModuleParameters - from library.modules.bigip_service_policy import ModuleManager - from library.modules.bigip_service_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_service_policy import ApiParameters - from ansible.modules.network.f5.bigip_service_policy import ModuleParameters - from ansible.modules.network.f5.bigip_service_policy import ModuleManager - from ansible.modules.network.f5.bigip_service_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - timer_policy='timer1', - port_misuse_policy='misuse1', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - assert p.timer_policy == '/Common/timer1' - assert p.port_misuse_policy == '/Common/misuse1' - - def test_api_parameters(self): - args = load_fixture('load_net_service_policy_1.json') - p = ApiParameters(params=args) - assert p.name == 'baz' - assert p.description == 'my description' - assert p.timer_policy == '/Common/foo' - assert p.port_misuse_policy == '/Common/bar' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - try: - self.p1 = patch('library.modules.bigip_service_policy.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_service_policy.module_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = True - - def test_create_selfip(self, *args): - set_module_args(dict( - name='foo', - description='my description', - timer_policy='timer1', - port_misuse_policy='misuse1', - partition='Common', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.module_provisioned = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_smtp.py b/test/units/modules/network/f5/test_bigip_smtp.py deleted file mode 100644 index 8203a092c7..0000000000 --- a/test/units/modules/network/f5/test_bigip_smtp.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_smtp import ApiParameters - from library.modules.bigip_smtp import ModuleParameters - from library.modules.bigip_smtp import ModuleManager - from library.modules.bigip_smtp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_smtp import ApiParameters - from ansible.modules.network.f5.bigip_smtp import ModuleParameters - from ansible.modules.network.f5.bigip_smtp import ModuleManager - from ansible.modules.network.f5.bigip_smtp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - smtp_server='1.1.1.1', - smtp_server_port='25', - smtp_server_username='admin', - smtp_server_password='password', - local_host_name='smtp.mydomain.com', - encryption='tls', - update_password='always', - from_address='no-reply@mydomain.com', - authentication=True, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.smtp_server == '1.1.1.1' - assert p.smtp_server_port == 25 - assert p.smtp_server_username == 'admin' - assert p.smtp_server_password == 'password' - assert p.local_host_name == 'smtp.mydomain.com' - assert p.encryption == 'tls' - assert p.update_password == 'always' - assert p.from_address == 'no-reply@mydomain.com' - assert p.authentication_disabled is None - assert p.authentication_enabled is True - - def test_api_parameters(self): - p = ApiParameters(params=load_fixture('load_sys_smtp_server.json')) - assert p.name == 'foo' - assert p.smtp_server == 'mail.foo.bar' - assert p.smtp_server_port == 465 - assert p.smtp_server_username == 'admin' - assert p.smtp_server_password == '$M$Ch$this-is-encrypted==' - assert p.local_host_name == 'mail-host.foo.bar' - assert p.encryption == 'ssl' - assert p.from_address == 'no-reply@foo.bar' - assert p.authentication_disabled is None - assert p.authentication_enabled is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_monitor(self, *args): - set_module_args(dict( - name='foo', - smtp_server='1.1.1.1', - smtp_server_port='25', - smtp_server_username='admin', - smtp_server_password='password', - local_host_name='smtp.mydomain.com', - encryption='tls', - update_password='always', - from_address='no-reply@mydomain.com', - authentication=True, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['encryption'] == 'tls' - assert results['smtp_server'] == '1.1.1.1' - assert results['smtp_server_port'] == 25 - assert results['local_host_name'] == 'smtp.mydomain.com' - assert results['authentication'] is True - assert results['from_address'] == 'no-reply@mydomain.com' - assert 'smtp_server_username' not in results - assert 'smtp_server_password' not in results diff --git a/test/units/modules/network/f5/test_bigip_snat_pool.py b/test/units/modules/network/f5/test_bigip_snat_pool.py deleted file mode 100644 index 83ab106a48..0000000000 --- a/test/units/modules/network/f5/test_bigip_snat_pool.py +++ /dev/null @@ -1,187 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_snat_pool import ModuleParameters - from library.modules.bigip_snat_pool import ApiParameters - from library.modules.bigip_snat_pool import ModuleManager - from library.modules.bigip_snat_pool import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_snat_pool import ModuleParameters - from ansible.modules.network.f5.bigip_snat_pool import ApiParameters - from ansible.modules.network.f5.bigip_snat_pool import ModuleManager - from ansible.modules.network.f5.bigip_snat_pool import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='my-snat-pool', - state='present', - members=['10.10.10.10', '20.20.20.20'], - description='A SNAT pool description', - partition='Common' - ) - p = ModuleParameters(params=args) - assert p.name == 'my-snat-pool' - assert p.state == 'present' - assert p.description == 'A SNAT pool description' - assert len(p.members) == 2 - assert '/Common/10.10.10.10' in p.members - assert '/Common/20.20.20.20' in p.members - - def test_api_parameters(self): - args = dict( - members=['/Common/10.10.10.10', '/foo/20.20.20.20'] - ) - p = ApiParameters(params=args) - assert len(p.members) == 2 - assert '/Common/10.10.10.10' in p.members - assert '/foo/20.20.20.20' in p.members - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_snat_pool(self, *args): - set_module_args(dict( - name='my-snat-pool', - state='present', - members=['10.10.10.10', '20.20.20.20'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['members']) == 2 - assert '/Common/10.10.10.10' in results['members'] - assert '/Common/20.20.20.20' in results['members'] - - def test_create_snat_pool_idempotent(self, *args): - set_module_args(dict( - name='asdasd', - state='present', - members=['1.1.1.1', '2.2.2.2'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_snatpool.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, True]) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_update_snat_pool(self, *args): - set_module_args(dict( - name='asdasd', - state='present', - members=['30.30.30.30'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_ltm_snatpool.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['members']) == 1 - assert '/Common/30.30.30.30' in results['members'] diff --git a/test/units/modules/network/f5/test_bigip_snat_translation.py b/test/units/modules/network/f5/test_bigip_snat_translation.py deleted file mode 100644 index 6571711dfa..0000000000 --- a/test/units/modules/network/f5/test_bigip_snat_translation.py +++ /dev/null @@ -1,337 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_snat_translation import ApiParameters - from library.modules.bigip_snat_translation import ModuleParameters - from library.modules.bigip_snat_translation import ModuleManager - from library.modules.bigip_snat_translation import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_snat_translation import ApiParameters - from ansible.modules.network.f5.bigip_snat_translation import ModuleParameters - from ansible.modules.network.f5.bigip_snat_translation import ModuleManager - from ansible.modules.network.f5.bigip_snat_translation import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='None', - ip_idle_timeout='50', - partition='Common', - state='present', - traffic_group='test', - tcp_idle_timeout='20', - udp_idle_timeout='100', - ) - - p = ModuleParameters(params=args) - assert p.name == 'my-snat-translation' - assert p.address == '1.1.1.1' - assert p.arp == 'enabled' - assert p.connection_limit == 300 - assert p.description == 'None' - assert p.ip_idle_timeout == '50' - assert p.partition == 'Common' - assert p.state == 'present' - assert p.traffic_group == '/Common/test' - assert p.tcp_idle_timeout == '20' - assert p.udp_idle_timeout == '100' - - def test_api_parameters(self): - args = load_fixture('load_ltm_snat_translation_default.json') - p = ApiParameters(params=args) - assert p.address == '1.1.1.1' - assert p.arp == 'no' - assert p.connection_limit == 0 - assert p.description == 'My description' - assert p.ip_idle_timeout == '50' - assert p.partition == 'Common' - assert p.traffic_group == '/Common/test' - assert p.tcp_idle_timeout == '20' - assert p.udp_idle_timeout == '100' - - def test_module_parameters_arp_yes(self): - args = dict( - arp='yes' - ) - p = ModuleParameters(params=args) - assert p.arp == 'enabled' - - def test_module_parameters_arp_no(self): - args = dict( - arp='no' - ) - p = ModuleParameters(params=args) - assert p.arp == 'disabled' - - def test_module_parameters_connection_limit_none(self): - args = dict( - connection_limit=0 - ) - p = ModuleParameters(params=args) - assert p.connection_limit == 0 - - def test_module_parameters_connection_limit_int(self): - args = dict( - connection_limit=500 - ) - p = ModuleParameters(params=args) - assert p.connection_limit == 500 - - def test_module_parameters_description_none(self): - args = dict( - description='none' - ) - p = ModuleParameters(params=args) - assert p.description == '' - - def test_module_parameters_description_empty(self): - args = dict( - description='' - ) - p = ModuleParameters(params=args) - assert p.description == '' - - def test_module_parameters_description_string_value(self): - args = dict( - description='My Snat Translation' - ) - p = ModuleParameters(params=args) - assert p.description == 'My Snat Translation' - - def test_module_parameters_ip_idle_timeout_indefinite(self): - args = dict( - ip_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.ip_idle_timeout == 'indefinite' - - def test_module_parameters_ip_idle_timeout_string_value(self): - args = dict( - ip_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.ip_idle_timeout == '65000' - - def test_module_no_partition_prefix_parameters(self): - args = dict( - partition='Common', - address='10.10.10.10', - traffic_group='traffic-group-1' - ) - p = ModuleParameters(params=args) - assert p.partition == 'Common' - assert p.address == '10.10.10.10' - assert p.traffic_group == '/Common/traffic-group-1' - - def test_module_partition_prefix_parameters(self): - args = dict( - partition='Common', - address='10.10.10.10', - traffic_group='/Common/traffic-group-1' - ) - p = ModuleParameters(params=args) - assert p.partition == 'Common' - assert p.address == '10.10.10.10' - assert p.traffic_group == '/Common/traffic-group-1' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled is True - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled is True - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.disabled is True - - def test_module_parameters_tcp_idle_timeout_indefinite(self): - args = dict( - tcp_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.tcp_idle_timeout == 'indefinite' - - def test_module_parameters_tcp_idle_timeout_string_value(self): - args = dict( - tcp_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.tcp_idle_timeout == '65000' - - def test_module_parameters_udp_idle_timeout_indefinite(self): - args = dict( - udp_idle_timeout='indefinite' - ) - p = ModuleParameters(params=args) - assert p.udp_idle_timeout == 'indefinite' - - def test_module_parameters_udp_idle_timeout_string_value(self): - args = dict( - udp_idle_timeout='65000' - ) - p = ModuleParameters(params=args) - assert p.udp_idle_timeout == '65000' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_snat_translation(self, *args): - set_module_args(dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='My description', - ip_idle_timeout='50', - state='present', - tcp_idle_timeout='20', - udp_idle_timeout='100', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['address'] == '1.1.1.1' - assert results['arp'] == 'yes' - assert results['connection_limit'] == 300 - assert results['description'] == 'My description' - assert results['ip_idle_timeout'] == '50' - assert results['tcp_idle_timeout'] == '20' - assert results['udp_idle_timeout'] == '100' - - def test_update_snat_translation(self, *args): - set_module_args(dict( - name='my-snat-translation', - address='1.1.1.1', - arp='yes', - connection_limit=300, - description='', - ip_idle_timeout='500', - state='disabled', - tcp_idle_timeout='indefinite', - traffic_group='traffic-group-1', - udp_idle_timeout='indefinite', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - current = ApiParameters(params=load_fixture('load_ltm_snat_translation_default.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['arp'] == 'yes' - assert results['connection_limit'] == 300 - assert results['description'] == '' - assert results['ip_idle_timeout'] == '500' - assert results['tcp_idle_timeout'] == 'indefinite' - assert results['udp_idle_timeout'] == 'indefinite' diff --git a/test/units/modules/network/f5/test_bigip_snmp.py b/test/units/modules/network/f5/test_bigip_snmp.py deleted file mode 100644 index 52ca2898e7..0000000000 --- a/test/units/modules/network/f5/test_bigip_snmp.py +++ /dev/null @@ -1,266 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_snmp import ApiParameters - from library.modules.bigip_snmp import ModuleParameters - from library.modules.bigip_snmp import ModuleManager - from library.modules.bigip_snmp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_snmp import ApiParameters - from ansible.modules.network.f5.bigip_snmp import ModuleParameters - from ansible.modules.network.f5.bigip_snmp import ModuleManager - from ansible.modules.network.f5.bigip_snmp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - agent_status_traps='enabled', - agent_authentication_traps='enabled', - contact='Alice@foo.org', - device_warning_traps='enabled', - location='Lunar orbit', - ) - p = ModuleParameters(params=args) - assert p.agent_status_traps == 'enabled' - assert p.agent_authentication_traps == 'enabled' - assert p.device_warning_traps == 'enabled' - assert p.location == 'Lunar orbit' - assert p.contact == 'Alice@foo.org' - - def test_module_parameters_disabled(self): - args = dict( - agent_status_traps='disabled', - agent_authentication_traps='disabled', - device_warning_traps='disabled', - ) - p = ModuleParameters(params=args) - assert p.agent_status_traps == 'disabled' - assert p.agent_authentication_traps == 'disabled' - assert p.device_warning_traps == 'disabled' - - def test_api_parameters(self): - args = dict( - agentTrap='enabled', - authTrap='enabled', - bigipTraps='enabled', - sysLocation='Lunar orbit', - sysContact='Alice@foo.org', - ) - p = ApiParameters(params=args) - assert p.agent_status_traps == 'enabled' - assert p.agent_authentication_traps == 'enabled' - assert p.device_warning_traps == 'enabled' - assert p.location == 'Lunar orbit' - assert p.contact == 'Alice@foo.org' - - def test_api_parameters_disabled(self): - args = dict( - agentTrap='disabled', - authTrap='disabled', - bigipTraps='disabled', - ) - p = ApiParameters(params=args) - assert p.agent_status_traps == 'disabled' - assert p.agent_authentication_traps == 'disabled' - assert p.device_warning_traps == 'disabled' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update_agent_status_traps(self, *args): - set_module_args(dict( - agent_status_traps='enabled', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - agent_status_traps='disabled' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['agent_status_traps'] == 'enabled' - - def test_update_allowed_addresses(self, *args): - set_module_args(dict( - allowed_addresses=[ - '127.0.0.0/8', - '10.10.10.10', - 'foo', - 'baz.foo.com' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['127.0.0.0/8'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 4 - assert results['allowed_addresses'] == [ - '10.10.10.10', '127.0.0.0/8', 'baz.foo.com', 'foo' - ] - - def test_update_allowed_addresses_default(self, *args): - set_module_args(dict( - allowed_addresses=[ - 'default' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['10.0.0.0'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 1 - assert results['allowed_addresses'] == ['127.0.0.0/8'] - - def test_update_allowed_addresses_empty(self, *args): - set_module_args(dict( - allowed_addresses=[''], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - params=dict( - allowed_addresses=['10.0.0.0'] - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['allowed_addresses']) == 1 - assert results['allowed_addresses'] == ['127.0.0.0/8'] diff --git a/test/units/modules/network/f5/test_bigip_snmp_community.py b/test/units/modules/network/f5/test_bigip_snmp_community.py deleted file mode 100644 index da18b893fb..0000000000 --- a/test/units/modules/network/f5/test_bigip_snmp_community.py +++ /dev/null @@ -1,305 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_snmp_community import ApiParameters - from library.modules.bigip_snmp_community import ModuleParameters - from library.modules.bigip_snmp_community import ModuleManager - from library.modules.bigip_snmp_community import V1Manager - from library.modules.bigip_snmp_community import V2Manager - from library.modules.bigip_snmp_community import ArgumentSpec - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_snmp_community import ApiParameters - from ansible.modules.network.f5.bigip_snmp_community import ModuleParameters - from ansible.modules.network.f5.bigip_snmp_community import ModuleManager - from ansible.modules.network.f5.bigip_snmp_community import V1Manager - from ansible.modules.network.f5.bigip_snmp_community import V2Manager - from ansible.modules.network.f5.bigip_snmp_community import ArgumentSpec - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - version='v2c', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - snmp_username='admin', - snmp_auth_protocol='sha', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - update_password='always', - state='present' - ) - - p = ModuleParameters(params=args) - assert p.version == 'v2c' - assert p.community == 'foo' - assert p.source == '1.1.1.1' - assert p.port == 8080 - assert p.oid == '.1' - assert p.access == 'ro' - assert p.ip_version == 4 - assert p.snmp_username == 'admin' - assert p.snmp_auth_protocol == 'sha' - assert p.snmp_auth_password == 'secretsecret' - assert p.snmp_privacy_protocol == 'des' - assert p.snmp_privacy_password == 'secretsecret' - assert p.update_password == 'always' - assert p.state == 'present' - - def test_api_parameters_community_1(self): - args = load_fixture('load_sys_snmp_communities_1.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 4 - - def test_api_parameters_community_2(self): - args = load_fixture('load_sys_snmp_communities_2.json') - - p = ApiParameters(params=args) - assert p.access == 'rw' - assert p.community == 'foo' - assert p.ip_version == 4 - assert p.oid == '.1' - assert p.source == '1.1.1.1' - - def test_api_parameters_community_3(self): - args = load_fixture('load_sys_snmp_communities_3.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 6 - assert p.oid == '.1' - assert p.source == '2001:0db8:85a3:0000:0000:8a2e:0370:7334' - - def test_api_parameters_community_4(self): - args = load_fixture('load_sys_snmp_communities_4.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.community == 'foo' - assert p.ip_version == 6 - - def test_api_parameters_users_1(self): - args = load_fixture('load_sys_snmp_users_1.json') - - p = ApiParameters(params=args) - assert p.access == 'ro' - assert p.snmp_auth_protocol == 'sha' - assert p.oid == '.1' - assert p.snmp_privacy_protocol == 'aes' - assert p.snmp_username == 'foo' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_v2c_community_1(self, *args): - set_module_args(dict( - version='v2c', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V1Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v1_community_1(self, *args): - set_module_args(dict( - name='foo', - version='v1', - community='foo', - source='1.1.1.1', - port='8080', - oid='.1', - access='ro', - ip_version=4, - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V1Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v3_community_1(self, *args): - set_module_args(dict( - version='v3', - oid='.1', - access='ro', - snmp_username='admin', - snmp_auth_protocol='md5', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V2Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - results = m0.exec_module() - - assert results['changed'] is True - - def test_create_v3_community_2(self, *args): - set_module_args(dict( - version='v3', - access='ro', - snmp_username='admin', - snmp_auth_protocol='md5', - snmp_auth_password='secretsecret', - snmp_privacy_protocol='des', - snmp_privacy_password='secretsecret', - state='present', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - m1 = V2Manager(module=module) - - # Override methods to force specific logic in the module to happen - m1.exists = Mock(side_effect=[False, True]) - m1.create_on_device = Mock(return_value=True) - - m0 = ModuleManager(module=module) - m0.get_manager = Mock(return_value=m1) - - with pytest.raises(F5ModuleError) as ex: - m0.exec_module() - - assert 'oid must be specified when creating a new v3 community.' == str(ex.value) diff --git a/test/units/modules/network/f5/test_bigip_snmp_trap.py b/test/units/modules/network/f5/test_bigip_snmp_trap.py deleted file mode 100644 index 6d1fd951c8..0000000000 --- a/test/units/modules/network/f5/test_bigip_snmp_trap.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_snmp_trap import V2Parameters - from library.modules.bigip_snmp_trap import V1Parameters - from library.modules.bigip_snmp_trap import ModuleManager - from library.modules.bigip_snmp_trap import V2Manager - from library.modules.bigip_snmp_trap import V1Manager - from library.modules.bigip_snmp_trap import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - from test.units.compat.mock import DEFAULT - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_snmp_trap import V2Parameters - from ansible.modules.network.f5.bigip_snmp_trap import V1Parameters - from ansible.modules.network.f5.bigip_snmp_trap import ModuleManager - from ansible.modules.network.f5.bigip_snmp_trap import V2Manager - from ansible.modules.network.f5.bigip_snmp_trap import V1Manager - from ansible.modules.network.f5.bigip_snmp_trap import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - from units.compat.mock import DEFAULT - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_networked_parameters(self): - args = dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - ) - p = V2Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network == 'other' - - def test_module_non_networked_parameters(self): - args = dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - ) - p = V1Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network is None - - def test_api_parameters(self): - args = dict( - name='foo', - community='public', - host='10.10.10.10', - network='other', - version=1, - port=1000 - ) - p = V2Parameters(params=args) - assert p.name == 'foo' - assert p.snmp_version == '1' - assert p.community == 'public' - assert p.destination == '10.10.10.10' - assert p.port == 1000 - assert p.network == 'other' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_trap(self, *args): - set_module_args(dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - network='other', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m0 = ModuleManager(module=module) - m0.is_version_without_network = Mock(return_value=False) - m0.is_version_with_default_network = Mock(return_value=True) - - patches = dict( - create_on_device=DEFAULT, - exists=DEFAULT - ) - with patch.multiple(V2Manager, **patches) as mo: - mo['create_on_device'].side_effect = Mock(return_value=True) - mo['exists'].side_effect = Mock(return_value=False) - results = m0.exec_module() - - assert results['changed'] is True - assert results['port'] == 1000 - assert results['snmp_version'] == '1' - - def test_create_trap_non_network(self, *args): - set_module_args(dict( - name='foo', - snmp_version='1', - community='public', - destination='10.10.10.10', - port=1000, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - m0 = ModuleManager(module=module) - m0.is_version_without_network = Mock(return_value=True) - - patches = dict( - create_on_device=DEFAULT, - exists=DEFAULT - ) - with patch.multiple(V1Manager, **patches) as mo: - mo['create_on_device'].side_effect = Mock(return_value=True) - mo['exists'].side_effect = Mock(return_value=False) - results = m0.exec_module() - - assert results['changed'] is True - assert results['port'] == 1000 - assert results['snmp_version'] == '1' diff --git a/test/units/modules/network/f5/test_bigip_software_image.py b/test/units/modules/network/f5/test_bigip_software_image.py deleted file mode 100644 index 4fa46a7593..0000000000 --- a/test/units/modules/network/f5/test_bigip_software_image.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_software_image import ApiParameters - from library.modules.bigip_software_image import ModuleParameters - from library.modules.bigip_software_image import ModuleManager - from library.modules.bigip_software_image import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_software_image import ApiParameters - from ansible.modules.network.f5.bigip_software_image import ModuleParameters - from ansible.modules.network.f5.bigip_software_image import ModuleManager - from ansible.modules.network.f5.bigip_software_image import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - filename='/path/to/BIGIP-13.0.0.0.0.1645.iso', - image='/path/to/BIGIP-13.0.0.0.0.1645.iso', - ) - - p = ModuleParameters(params=args) - assert p.filename == 'BIGIP-13.0.0.0.0.1645.iso' - assert p.image == '/path/to/BIGIP-13.0.0.0.0.1645.iso' - - def test_api_parameters(self): - args = dict( - file_size='1000 MB', - build='0.0.3', - checksum='8cdbd094195fab4b2b47ff4285577b70', - image_type='release', - version='13.1.0.8' - ) - - p = ApiParameters(params=args) - assert p.file_size == 1000 - assert p.build == '0.0.3' - assert p.checksum == '8cdbd094195fab4b2b47ff4285577b70' - assert p.image_type == 'release' - assert p.version == '13.1.0.8' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - image='/path/to/BIGIP-13.0.0.0.0.1645.iso', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters(params=load_fixture('load_sys_software_image_1.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.read_current_from_device = Mock(return_value=current) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['file_size'] == 1948 diff --git a/test/units/modules/network/f5/test_bigip_software_install.py b/test/units/modules/network/f5/test_bigip_software_install.py deleted file mode 100644 index 9f85eae6f3..0000000000 --- a/test/units/modules/network/f5/test_bigip_software_install.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_software_install import ApiParameters - from library.modules.bigip_software_install import ModuleParameters - from library.modules.bigip_software_install import ModuleManager - from library.modules.bigip_software_install import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_software_install import ApiParameters - from ansible.modules.network.f5.bigip_software_install import ModuleParameters - from ansible.modules.network.f5.bigip_software_install import ModuleManager - from ansible.modules.network.f5.bigip_software_install import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - volume='HD1.2', - image='BIGIP-13.0.0.0.0.1645.iso', - ) - - p = ModuleParameters(params=args) - assert p.volume == 'HD1.2' - assert p.image == 'BIGIP-13.0.0.0.0.1645.iso' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - image='BIGIP-13.0.0.0.0.1645.iso', - volume='HD1.2', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - current = ApiParameters() - current.read_image_from_device = Mock( - side_effect=[ - ['BIGIP-13.0.0.0.0.1645.iso'], - ['BIGIP-12.1.3.4-0.0.2.iso'], - ] - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.have = current - - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.volume_exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.wait_for_device_reboot = Mock(return_value=True) - mm.wait_for_software_install_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_software_update.py b/test/units/modules/network/f5/test_bigip_software_update.py deleted file mode 100644 index f178744f28..0000000000 --- a/test/units/modules/network/f5/test_bigip_software_update.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_software_update import ApiParameters - from library.modules.bigip_software_update import ModuleParameters - from library.modules.bigip_software_update import ModuleManager - from library.modules.bigip_software_update import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_software_update import ApiParameters - from ansible.modules.network.f5.bigip_software_update import ModuleParameters - from ansible.modules.network.f5.bigip_software_update import ModuleManager - from ansible.modules.network.f5.bigip_software_update import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - auto_check=True, - frequency="daily" - ) - p = ModuleParameters(params=args) - assert p.auto_check == 'enabled' - assert p.frequency == 'daily' - - def test_api_parameters(self): - args = dict( - autoCheck="enabled", - frequency="daily" - ) - p = ApiParameters(params=args) - assert p.auto_check == 'enabled' - assert p.frequency == 'daily' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - auto_check='no', - auto_phone_home='no', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_sys_software_update.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['auto_check'] is False diff --git a/test/units/modules/network/f5/test_bigip_ssl_certificate.py b/test/units/modules/network/f5/test_bigip_ssl_certificate.py deleted file mode 100644 index bb5562d736..0000000000 --- a/test/units/modules/network/f5/test_bigip_ssl_certificate.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ssl_certificate import ArgumentSpec - from library.modules.bigip_ssl_certificate import ApiParameters - from library.modules.bigip_ssl_certificate import ModuleParameters - from library.modules.bigip_ssl_certificate import ModuleManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ssl_certificate import ArgumentSpec - from ansible.modules.network.f5.bigip_ssl_certificate import ApiParameters - from ansible.modules.network.f5.bigip_ssl_certificate import ModuleParameters - from ansible.modules.network.f5.bigip_ssl_certificate import ModuleManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_cert(self): - cert_content = load_fixture('create_insecure_cert1.crt') - args = dict( - content=cert_content, - name="cert1", - partition="Common", - state="present", - ) - p = ModuleParameters(params=args) - assert p.name == 'cert1' - assert p.filename == 'cert1.crt' - assert 'Signature Algorithm' in p.content - assert '-----BEGIN CERTIFICATE-----' in p.content - assert '-----END CERTIFICATE-----' in p.content - assert p.checksum == '1e55aa57ee166a380e756b5aa4a835c5849490fe' - assert p.state == 'present' - - def test_module_issuer_cert_key(self): - args = dict( - issuer_cert='foo', - partition="Common", - ) - p = ModuleParameters(params=args) - assert p.issuer_cert == '/Common/foo.crt' - - def test_api_issuer_cert_key(self): - args = load_fixture('load_sys_file_ssl_cert_with_issuer_cert.json') - p = ApiParameters(params=args) - assert p.issuer_cert == '/Common/intermediate.crt' - - -class TestCertificateManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_import_certificate_and_key_no_key_passphrase(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('cert1.crt'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_import_certificate_chain(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('chain1.crt'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_ssl_key.py b/test/units/modules/network/f5/test_bigip_ssl_key.py deleted file mode 100644 index 0af4c9e2c2..0000000000 --- a/test/units/modules/network/f5/test_bigip_ssl_key.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ssl_key import ArgumentSpec - from library.modules.bigip_ssl_key import ModuleParameters - from library.modules.bigip_ssl_key import ModuleManager - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ssl_key import ArgumentSpec - from ansible.modules.network.f5.bigip_ssl_key import ModuleParameters - from ansible.modules.network.f5.bigip_ssl_key import ModuleManager - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_key(self): - key_content = load_fixture('create_insecure_key1.key') - args = dict( - content=key_content, - name="cert1", - partition="Common", - state="present", - password='password', - server='localhost', - user='admin' - ) - p = ModuleParameters(params=args) - assert p.name == 'cert1' - assert p.key_filename == 'cert1.key' - assert '-----BEGIN RSA PRIVATE KEY-----' in p.content - assert '-----END RSA PRIVATE KEY-----' in p.content - assert p.key_checksum == '91bdddcf0077e2bb2a0258aae2ae3117be392e83' - assert p.state == 'present' - - -class TestModuleManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_import_key_no_key_passphrase(self, *args): - set_module_args(dict( - name='foo', - content=load_fixture('cert1.key'), - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - cm = ModuleManager(module=module) - cm.exists = Mock(side_effect=[False, True]) - cm.create_on_device = Mock(return_value=True) - - results = cm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_ssl_ocsp.py b/test/units/modules/network/f5/test_bigip_ssl_ocsp.py deleted file mode 100644 index f7c7c4d52e..0000000000 --- a/test/units/modules/network/f5/test_bigip_ssl_ocsp.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ssl_ocsp import ApiParameters - from library.modules.bigip_ssl_ocsp import ModuleParameters - from library.modules.bigip_ssl_ocsp import ModuleManager - from library.modules.bigip_ssl_ocsp import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ssl_ocsp import ApiParameters - from ansible.modules.network.f5.bigip_ssl_ocsp import ModuleParameters - from ansible.modules.network.f5.bigip_ssl_ocsp import ModuleManager - from ansible.modules.network.f5.bigip_ssl_ocsp import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - clock_skew=100, - connections_limit=101, - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.clock_skew == 100 - assert p.connections_limit == 101 - - def test_api_parameters(self): - args = load_fixture('load_sys_crypto_cert_validator_1.json') - p = ApiParameters(params=args) - assert p.name == 'asd' - assert p.clock_skew == 300 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_ssl_ocsp.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.0.0' - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_ssl_ocsp.tmos_version') - self.m1 = self.p1.start() - self.m1.return_value = '13.0.0' - - def tearDown(self): - self.p1.stop() - - def test_create(self, *args): - # Configure the arguments that would be sent to the Ansible module - set_module_args(dict( - name='foo', - clock_skew=100, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_together=self.spec.required_together - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_static_route.py b/test/units/modules/network/f5/test_bigip_static_route.py deleted file mode 100644 index 189bfa1756..0000000000 --- a/test/units/modules/network/f5/test_bigip_static_route.py +++ /dev/null @@ -1,377 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_static_route import ApiParameters - from library.modules.bigip_static_route import ModuleParameters - from library.modules.bigip_static_route import ModuleManager - from library.modules.bigip_static_route import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_static_route import ApiParameters - from ansible.modules.network.f5.bigip_static_route import ModuleParameters - from ansible.modules.network.f5.bigip_static_route import ModuleManager - from ansible.modules.network.f5.bigip_static_route import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - vlan="foo", - gateway_address="10.10.10.10" - ) - p = ModuleParameters(params=args) - assert p.vlan == '/Common/foo' - assert p.gateway_address == '10.10.10.10' - - def test_api_parameters(self): - args = dict( - tmInterface="foo", - gw="10.10.10.10" - ) - p = ApiParameters(params=args) - assert p.vlan == 'foo' - assert p.gateway_address == '10.10.10.10' - - def test_reject_parameter_types(self): - # boolean true - args = dict(reject=True) - p = ModuleParameters(params=args) - assert p.reject is True - - # boolean false - args = dict(reject=False) - p = ModuleParameters(params=args) - assert p.reject is None - - # string - args = dict(reject="yes") - p = ModuleParameters(params=args) - assert p.reject is True - - # integer - args = dict(reject=1) - p = ModuleParameters(params=args) - assert p.reject is True - - # none - args = dict(reject=None) - p = ModuleParameters(params=args) - assert p.reject is None - - def test_destination_parameter_types(self): - # cidr address - args = dict( - destination="10.10.10.10", - netmask='32' - ) - p = ModuleParameters(params=args) - assert p.destination == '10.10.10.10/32' - - # netmask - args = dict( - destination="10.10.10.10", - netmask="255.255.255.255" - ) - p = ModuleParameters(params=args) - assert p.destination == '10.10.10.10/32' - - def test_vlan_with_partition(self): - args = dict( - vlan="/Common/foo", - gateway_address="10.10.10.10" - ) - p = ModuleParameters(params=args) - assert p.vlan == '/Common/foo' - assert p.gateway_address == '10.10.10.10' - - def test_api_route_domain(self): - args = dict( - destination="1.1.1.1/32%2" - ) - p = ApiParameters(params=args) - assert p.route_domain == 2 - - args = dict( - destination="2700:bc00:1f10:101::6/64%2" - ) - p = ApiParameters(params=args) - assert p.route_domain == 2 - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_blackhole(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - reject='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_create_route_to_pool(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - pool="test-pool", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['pool'] == 'test-pool' - - def test_create_route_to_vlan(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - vlan="test-vlan", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['vlan'] == '/Common/test-vlan' - - def test_update_description(self, *args): - set_module_args(dict( - name='test-route', - state='present', - description='foo description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - current = ApiParameters(params=load_fixture('load_net_route_description.json')) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'foo description' - - def test_update_description_idempotent(self, *args): - set_module_args(dict( - name='test-route', - state='present', - description='asdasd', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - current = ApiParameters(params=load_fixture('load_net_route_description.json')) - mm.exists = Mock(return_value=True) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - # There is no assert for the description, because it should - # not have changed - assert results['changed'] is False - - def test_delete(self, *args): - set_module_args(dict( - name='test-route', - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert 'description' not in results - - def test_invalid_unknown_params(self, *args): - set_module_args(dict( - name='test-route', - state='present', - foo="bar", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - with patch('ansible.module_utils.f5_utils.AnsibleModule.fail_json') as mo: - mo.return_value = True - AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - assert mo.call_count == 1 - - def test_create_with_route_domain(self, *args): - set_module_args(dict( - name='test-route', - state='present', - destination='10.10.10.10', - netmask='255.255.255.255', - route_domain=1, - reject='yes', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - mutually_exclusive=self.spec.mutually_exclusive, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - assert results['route_domain'] == 1 - assert results['destination'] == '10.10.10.10%1/32' diff --git a/test/units/modules/network/f5/test_bigip_sys_daemon_log_tmm.py b/test/units/modules/network/f5/test_bigip_sys_daemon_log_tmm.py deleted file mode 100644 index 2c7e5330b1..0000000000 --- a/test/units/modules/network/f5/test_bigip_sys_daemon_log_tmm.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_sys_daemon_log_tmm import ApiParameters - from library.modules.bigip_sys_daemon_log_tmm import ModuleParameters - from library.modules.bigip_sys_daemon_log_tmm import ModuleManager - from library.modules.bigip_sys_daemon_log_tmm import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_sys_daemon_log_tmm import ApiParameters - from ansible.modules.network.f5.bigip_sys_daemon_log_tmm import ModuleParameters - from ansible.modules.network.f5.bigip_sys_daemon_log_tmm import ModuleManager - from ansible.modules.network.f5.bigip_sys_daemon_log_tmm import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - arp_log_level='warning', - http_compression_log_level='error', - http_log_level='error', - ip_log_level='warning', - irule_log_level='informational', - layer4_log_level='notice', - net_log_level='warning', - os_log_level='notice', - pva_log_level='debug', - ssl_log_level='warning', - ) - p = ModuleParameters(params=args) - assert p.arp_log_level == 'warning' - assert p.http_compression_log_level == 'error' - assert p.http_log_level == 'error' - assert p.ip_log_level == 'warning' - assert p.irule_log_level == 'informational' - assert p.layer4_log_level == 'notice' - assert p.net_log_level == 'warning' - assert p.os_log_level == 'notice' - assert p.pva_log_level == 'debug' - assert p.ssl_log_level == 'warning' - - def test_api_parameters(self): - args = load_fixture('load_tmm_log.json') - p = ApiParameters(params=args) - assert p.arp_log_level == 'warning' - assert p.http_compression_log_level == 'error' - assert p.http_log_level == 'error' - assert p.ip_log_level == 'warning' - assert p.irule_log_level == 'informational' - assert p.layer4_log_level == 'notice' - assert p.net_log_level == 'warning' - assert p.os_log_level == 'notice' - assert p.pva_log_level == 'informational' - assert p.ssl_log_level == 'warning' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update(self, *args): - set_module_args(dict( - arp_log_level='debug', - layer4_log_level='debug', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_tmm_log.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_sys_db.py b/test/units/modules/network/f5/test_bigip_sys_db.py deleted file mode 100644 index 94d12fa000..0000000000 --- a/test/units/modules/network/f5/test_bigip_sys_db.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_sys_db import Parameters - from library.modules.bigip_sys_db import ModuleManager - from library.modules.bigip_sys_db import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_sys_db import Parameters - from ansible.modules.network.f5.bigip_sys_db import ModuleManager - from ansible.modules.network.f5.bigip_sys_db import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - key='foo', - value='bar', - ) - p = Parameters(params=args) - assert p.key == 'foo' - assert p.value == 'bar' - - def test_api_parameters(self): - args = dict( - key='foo', - value='bar', - defaultValue='baz', - - ) - p = Parameters(params=args) - assert p.key == 'foo' - assert p.value == 'bar' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_blackhole(self, *args): - set_module_args(dict( - key='provision.cpu.afm', - value='1', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - dict( - kind="tm:sys:db:dbstate", - name="provision.cpu.afm", - fullPath="provision.cpu.afm", - generation=1, - selfLink="https://localhost/mgmt/tm/sys/db/provision.cpu.afm?ver=11.6.1", - defaultValue="0", - scfConfig="false", - value="0", - valueRange="integer min:0 max:100" - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_sys_global.py b/test/units/modules/network/f5/test_bigip_sys_global.py deleted file mode 100644 index 78920c191d..0000000000 --- a/test/units/modules/network/f5/test_bigip_sys_global.py +++ /dev/null @@ -1,133 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_sys_global import ApiParameters - from library.modules.bigip_sys_global import ModuleParameters - from library.modules.bigip_sys_global import ModuleManager - from library.modules.bigip_sys_global import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_sys_global import ApiParameters - from ansible.modules.network.f5.bigip_sys_global import ModuleParameters - from ansible.modules.network.f5.bigip_sys_global import ModuleManager - from ansible.modules.network.f5.bigip_sys_global import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - banner_text='this is a banner', - console_timeout=100, - gui_setup='yes', - lcd_display='yes', - mgmt_dhcp='yes', - net_reboot='yes', - quiet_boot='yes', - security_banner='yes', - ) - p = ModuleParameters(params=args) - assert p.banner_text == 'this is a banner' - assert p.console_timeout == 100 - assert p.gui_setup == 'yes' - assert p.lcd_display == 'yes' - assert p.mgmt_dhcp == 'yes' - assert p.net_reboot == 'yes' - assert p.quiet_boot == 'yes' - assert p.security_banner == 'yes' - - def test_api_parameters(self): - args = load_fixture('load_sys_global_settings.json') - p = ApiParameters(params=args) - assert 'Welcome to the BIG-IP Configuration Utility' in p.banner_text - assert p.console_timeout == 0 - assert p.gui_setup == 'no' - assert p.lcd_display == 'yes' - assert p.mgmt_dhcp == 'yes' - assert p.net_reboot == 'no' - assert p.quiet_boot == 'yes' - assert p.security_banner == 'yes' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_update(self, *args): - set_module_args(dict( - banner_text='this is a banner', - console_timeout=100, - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_sys_global_settings.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(return_value=False) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_timer_policy.py b/test/units/modules/network/f5/test_bigip_timer_policy.py deleted file mode 100644 index 58526385ef..0000000000 --- a/test/units/modules/network/f5/test_bigip_timer_policy.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_timer_policy import ApiParameters - from library.modules.bigip_timer_policy import ModuleParameters - from library.modules.bigip_timer_policy import ModuleManager - from library.modules.bigip_timer_policy import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_timer_policy import ApiParameters - from ansible.modules.network.f5.bigip_timer_policy import ModuleParameters - from ansible.modules.network.f5.bigip_timer_policy import ModuleManager - from ansible.modules.network.f5.bigip_timer_policy import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.description == 'my description' - - def test_api_parameters(self): - args = load_fixture('load_net_timer_policy_1.json') - - p = ApiParameters(params=args) - assert p.name == 'timer1' - assert p.description == 'my description' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' diff --git a/test/units/modules/network/f5/test_bigip_traffic_selector.py b/test/units/modules/network/f5/test_bigip_traffic_selector.py deleted file mode 100644 index 63ac7b3a88..0000000000 --- a/test/units/modules/network/f5/test_bigip_traffic_selector.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_traffic_selector import ApiParameters - from library.modules.bigip_traffic_selector import ModuleParameters - from library.modules.bigip_traffic_selector import ModuleManager - from library.modules.bigip_traffic_selector import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_traffic_selector import ApiParameters - from ansible.modules.network.f5.bigip_traffic_selector import ModuleParameters - from ansible.modules.network.f5.bigip_traffic_selector import ModuleManager - from ansible.modules.network.f5.bigip_traffic_selector import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='selector1', - ) - p = ModuleParameters(params=args) - assert p.name == 'selector1' - - def test_api_parameters(self): - args = dict( - name='selector1', - ) - p = ApiParameters(params=args) - assert p.name == 'selector1' - - -class TestUntypedManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='selector1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_trunk.py b/test/units/modules/network/f5/test_bigip_trunk.py deleted file mode 100644 index e3f285283e..0000000000 --- a/test/units/modules/network/f5/test_bigip_trunk.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_trunk import ApiParameters - from library.modules.bigip_trunk import ModuleParameters - from library.modules.bigip_trunk import ModuleManager - from library.modules.bigip_trunk import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_trunk import ApiParameters - from ansible.modules.network.f5.bigip_trunk import ModuleParameters - from ansible.modules.network.f5.bigip_trunk import ModuleManager - from ansible.modules.network.f5.bigip_trunk import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - interfaces=[ - '1.3', '1.1' - ], - link_selection_policy='auto', - frame_distribution_hash='destination-mac', - lacp_enabled=True, - lacp_mode='active', - lacp_timeout='long' - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.interfaces == ['1.1', '1.3'] - assert p.link_selection_policy == 'auto' - assert p.frame_distribution_hash == 'dst-mac' - assert p.lacp_enabled is True - assert p.lacp_mode == 'active' - assert p.lacp_timeout == 'long' - - def test_api_parameters(self): - args = load_fixture('load_tm_net_trunk_1.json') - - p = ApiParameters(params=args) - assert p.name == 'foo' - assert p.frame_distribution_hash == 'dst-mac' - assert p.lacp_enabled is False - assert p.lacp_mode == 'active' - assert p.lacp_timeout == 'long' - assert p.interfaces == ['1.3'] - assert p.link_selection_policy == 'maximum-bandwidth' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - interfaces=[ - '1.3', '1.1' - ], - link_selection_policy='auto', - frame_distribution_hash='destination-mac', - lacp_enabled=True, - lacp_mode='active', - lacp_timeout='long', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['link_selection_policy'] == 'auto' - assert results['frame_distribution_hash'] == 'destination-mac' - assert results['lacp_enabled'] is True - assert results['lacp_mode'] == 'active' - assert results['lacp_timeout'] == 'long' diff --git a/test/units/modules/network/f5/test_bigip_tunnel.py b/test/units/modules/network/f5/test_bigip_tunnel.py deleted file mode 100644 index cee0391259..0000000000 --- a/test/units/modules/network/f5/test_bigip_tunnel.py +++ /dev/null @@ -1,112 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_tunnel import ApiParameters - from library.modules.bigip_tunnel import ModuleParameters - from library.modules.bigip_tunnel import ModuleManager - from library.modules.bigip_tunnel import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_tunnel import ApiParameters - from ansible.modules.network.f5.bigip_tunnel import ModuleParameters - from ansible.modules.network.f5.bigip_tunnel import ModuleManager - from ansible.modules.network.f5.bigip_tunnel import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - profile='ipip', - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.profile == '/Common/ipip' - - def test_api_parameters(self): - args = load_fixture('load_net_tunnel_1.json') - - p = ApiParameters(params=args) - assert p.name == 'tunnel1' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - profile='ipip', - local_address='2.2.2.2.', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_ucs.py b/test/units/modules/network/f5/test_bigip_ucs.py deleted file mode 100644 index 9f7e716b99..0000000000 --- a/test/units/modules/network/f5/test_bigip_ucs.py +++ /dev/null @@ -1,411 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ucs import ModuleParameters - from library.modules.bigip_ucs import ModuleManager - from library.modules.bigip_ucs import ArgumentSpec - from library.modules.bigip_ucs import V1Manager - from library.modules.bigip_ucs import V2Manager - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ucs import ModuleParameters - from ansible.modules.network.f5.bigip_ucs import ModuleManager - from ansible.modules.network.f5.bigip_ucs import ArgumentSpec - from ansible.modules.network.f5.bigip_ucs import V1Manager - from ansible.modules.network.f5.bigip_ucs import V2Manager - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - ucs="/root/bigip.localhost.localdomain.ucs", - force=True, - include_chassis_level_config=True, - no_license=True, - no_platform_check=True, - passphrase="foobar", - reset_trust=True, - state='installed' - ) - - p = ModuleParameters(params=args) - assert p.ucs == '/root/bigip.localhost.localdomain.ucs' - assert p.force is True - assert p.include_chassis_level_config is True - assert p.no_license is True - assert p.no_platform_check is True - assert p.passphrase == "foobar" - assert p.reset_trust is True - assert p.install_command == \ - "tmsh load sys ucs /var/local/ucs/bigip.localhost.localdomain.ucs " \ - "include-chassis-level-config no-license no-platform-check " \ - "passphrase foobar reset-trust" - - def test_module_parameters_false_ucs_booleans(self): - args = dict( - ucs="/root/bigip.localhost.localdomain.ucs", - include_chassis_level_config=False, - no_license=False, - no_platform_check=False, - reset_trust=False - ) - - p = ModuleParameters(params=args) - assert p.ucs == '/root/bigip.localhost.localdomain.ucs' - assert p.include_chassis_level_config is False - assert p.no_license is False - assert p.no_platform_check is False - assert p.reset_trust is False - assert p.install_command == "tmsh load sys ucs /var/local/ucs/bigip.localhost.localdomain.ucs" - - -class TestV1Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_ucs_default_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_explicit_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_installed(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='installed', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(return_value=True) - vm.install_on_device = Mock(return_value=True) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_exists(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, False]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_fails(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=True) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, True]) - - with pytest.raises(F5ModuleError) as ex: - vm.exec_module() - assert 'Failed to delete' in str(ex.value) - - -class TestV2Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_ucs_default_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_explicit_present(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[False, True]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_installed(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='installed', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V2Manager(module=module) - vm.create_on_device = Mock(return_value=True) - vm.exists = Mock(return_value=True) - vm.install_on_device = Mock(return_value=True) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_exists(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, False]) - - results = vm.exec_module() - - assert results['changed'] is True - - def test_ucs_absent_fails(self, *args): - set_module_args(dict( - ucs="/root/bigip.localhost.localdomain.ucs", - state='absent', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.is_version_v1 = Mock(return_value=False) - - vm = V1Manager(module=module) - vm.remove_from_device = Mock(return_value=True) - vm.exists = Mock(side_effect=[True, True]) - - with pytest.raises(F5ModuleError) as ex: - vm.exec_module() - assert 'Failed to delete' in str(ex.value) diff --git a/test/units/modules/network/f5/test_bigip_ucs_fetch.py b/test/units/modules/network/f5/test_bigip_ucs_fetch.py deleted file mode 100644 index 1582b7705d..0000000000 --- a/test/units/modules/network/f5/test_bigip_ucs_fetch.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_ucs_fetch import Parameters - from library.modules.bigip_ucs_fetch import ModuleManager - from library.modules.bigip_ucs_fetch import V1Manager - from library.modules.bigip_ucs_fetch import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_ucs_fetch import Parameters - from ansible.modules.network.f5.bigip_ucs_fetch import ModuleManager - from ansible.modules.network.f5.bigip_ucs_fetch import V1Manager - from ansible.modules.network.f5.bigip_ucs_fetch import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - backup='yes', - create_on_missing='yes', - encryption_password='my-password', - dest='/tmp/foo.ucs', - force='yes', - fail_on_missing='no', - src='remote.ucs', - ) - p = Parameters(params=args) - assert p.backup == 'yes' - - -class TestV1Manager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - backup='yes', - create_on_missing='yes', - dest='/tmp/foo.ucs', - force='yes', - fail_on_missing='no', - src='remote.ucs', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - add_file_common_args=self.spec.add_file_common_args - ) - - # Override methods to force specific logic in the module to happen - m1 = V1Manager(module=module) - m1.exists = Mock(return_value=False) - m1.create_on_device = Mock(return_value=True) - m1._get_backup_file = Mock(return_value='/tmp/foo.backup') - m1.download_from_device = Mock(return_value=True) - m1._set_checksum = Mock(return_value=12345) - m1._set_md5sum = Mock(return_value=54321) - - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=m1) - mm.is_version_v1 = Mock(return_value=True) - - p1 = patch('os.path.exists', return_value=True) - p1.start() - p2 = patch('os.path.isdir', return_value=False) - p2.start() - - results = mm.exec_module() - - p1.stop() - p2.stop() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_user.py b/test/units/modules/network/f5/test_bigip_user.py deleted file mode 100644 index 3065b6c136..0000000000 --- a/test/units/modules/network/f5/test_bigip_user.py +++ /dev/null @@ -1,892 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_user import Parameters - from library.modules.bigip_user import ModuleManager - from library.modules.bigip_user import ArgumentSpec - from library.modules.bigip_user import UnpartitionedManager - from library.modules.bigip_user import PartitionedManager - - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_user import Parameters - from ansible.modules.network.f5.bigip_user import ModuleManager - from ansible.modules.network.f5.bigip_user import ArgumentSpec - from ansible.modules.network.f5.bigip_user import UnpartitionedManager - from ansible.modules.network.f5.bigip_user import PartitionedManager - - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - access = [{'name': 'Common', 'role': 'guest'}] - args = dict( - username_credential='someuser', - password_credential='testpass', - full_name='Fake Person', - partition_access=access, - update_password='always' - ) - - p = Parameters(params=args) - assert p.username_credential == 'someuser' - assert p.password_credential == 'testpass' - assert p.full_name == 'Fake Person' - assert p.partition_access == access - assert p.update_password == 'always' - - def test_api_parameters(self): - access = [{'name': 'Common', 'role': 'guest'}] - args = dict( - name='someuser', - description='Fake Person', - partitionAccess=access, - shell='none' - ) - - p = Parameters(params=args) - assert p.name == 'someuser' - assert p.full_name == 'Fake Person' - assert p.partition_access == access - assert p.shell == 'none' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_user(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_no_password(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - partition_access=access, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_partition_access_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - msg = "The 'partition_access' option " \ - "is required when creating a resource." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_create_user_shell_bash(self, *args): - access = [{'name': 'all', 'role': 'admin'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_shell_not_permitted_raises(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.create_on_device = Mock(return_value=True) - pm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_update_user_password_no_pass(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_auth_user_no_pass.json')) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_password_with_pass(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters(params=load_fixture('load_auth_user_with_pass.json')) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_shell_to_none(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - params=dict( - user='admin', - shell='tmsh' - ) - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'none' - - def test_update_user_shell_to_none_shell_attribute_missing(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - user='admin', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - pm = PartitionedManager(module=module, params=module.params) - pm.exists = Mock(return_value=True) - pm.update_on_device = Mock(return_value=True) - pm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=False) - mm.get_manager = Mock(return_value=pm) - - results = mm.exec_module() - - assert results['changed'] is False - assert not hasattr(results, 'shell') - - def test_update_user_shell_to_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'all', 'role': 'admin'}] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'bash' - - def test_update_user_shell_to_bash_mutliple_roles(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [ - {'name': 'Common', 'role': 'operator'}, - {'name': 'all', 'role': 'guest'} - ] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - -class TestLegacyManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_user(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_no_password(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - partition_access=access, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_partition_access_raises(self, *args): - set_module_args(dict( - username_credential='someuser', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "The 'partition_access' option " \ - "is required when creating a resource." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_create_user_shell_bash(self, *args): - access = [{'name': 'all', 'role': 'admin'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['partition_access'] == access - - def test_create_user_shell_not_permitted_raises(self, *args): - access = [{'name': 'Common', 'role': 'guest'}] - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - partition_access=access, - update_password='on_create', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.create_on_device = Mock(return_value=True) - upm.exists = Mock(return_value=False) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg - - def test_update_user_password(self, *args): - set_module_args(dict( - username_credential='someuser', - password_credential='testpass', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - - def test_update_user_shell_to_none(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - current = Parameters( - params=dict( - user='admin', - shell='tmsh' - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'none' - - def test_update_user_shell_to_none_shell_attribute_missing(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='none', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'Common', 'role': 'guest'}] - current = Parameters( - params=dict( - user='admin', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is False - assert not hasattr(results, 'shell') - - def test_update_user_shell_to_bash(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [{'name': 'all', 'role': 'admin'}] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['shell'] == 'bash' - - def test_update_user_shell_to_bash_mutliple_roles(self, *args): - set_module_args(dict( - username_credential='someuser', - shell='bash', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Configure the parameters that would be returned by querying the - # remote device - access = [ - {'name': 'Common', 'role': 'operator'}, - {'name': 'all', 'role': 'guest'} - ] - current = Parameters( - params=dict( - user='admin', - shell='tmsh', - partition_access=access - ) - ) - - # Override methods to force specific logic in the module to happen - upm = UnpartitionedManager(module=module, params=module.params) - upm.exists = Mock(return_value=True) - upm.update_on_device = Mock(return_value=True) - upm.read_current_from_device = Mock(return_value=current) - - mm = ModuleManager(module=module) - mm.is_version_less_than_13 = Mock(return_value=True) - mm.get_manager = Mock(return_value=upm) - - msg = "Shell access is only available to 'admin' or " \ - "'resource-admin' roles." - - with pytest.raises(F5ModuleError) as ex: - mm.exec_module() - assert str(ex.value) == msg diff --git a/test/units/modules/network/f5/test_bigip_vcmp_guest.py b/test/units/modules/network/f5/test_bigip_vcmp_guest.py deleted file mode 100644 index 72230b05c2..0000000000 --- a/test/units/modules/network/f5/test_bigip_vcmp_guest.py +++ /dev/null @@ -1,262 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_vcmp_guest import ModuleParameters - from library.modules.bigip_vcmp_guest import ApiParameters - from library.modules.bigip_vcmp_guest import ModuleManager - from library.modules.bigip_vcmp_guest import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_vcmp_guest import ModuleParameters - from ansible.modules.network.f5.bigip_vcmp_guest import ApiParameters - from ansible.modules.network.f5.bigip_vcmp_guest import ModuleManager - from ansible.modules.network.f5.bigip_vcmp_guest import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - initial_image='BIGIP-12.1.0.1.0.1447-HF1.iso', - mgmt_network='bridged', - mgmt_address='1.2.3.4/24', - vlans=[ - 'vlan1', - 'vlan2' - ] - ) - - p = ModuleParameters(params=args) - assert p.initial_image == 'BIGIP-12.1.0.1.0.1447-HF1.iso' - assert p.mgmt_network == 'bridged' - - def test_module_parameters_mgmt_bridged_without_subnet(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/32' - - def test_module_parameters_mgmt_address_cidr(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4/24' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/24' - - def test_module_parameters_mgmt_address_subnet(self): - args = dict( - mgmt_network='bridged', - mgmt_address='1.2.3.4/255.255.255.0' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_network == 'bridged' - assert p.mgmt_address == '1.2.3.4/24' - - def test_module_parameters_mgmt_route(self): - args = dict( - mgmt_route='1.2.3.4' - ) - - p = ModuleParameters(params=args) - assert p.mgmt_route == '1.2.3.4' - - def test_module_parameters_vcmp_software_image_facts(self): - # vCMP images may include a forward slash in their names. This is probably - # related to the slots on the system, but it is not a valid value to specify - # that slot when providing an initial image - args = dict( - initial_image='BIGIP-12.1.0.1.0.1447-HF1.iso/1', - ) - - p = ModuleParameters(params=args) - assert p.initial_image == 'BIGIP-12.1.0.1.0.1447-HF1.iso/1' - - def test_api_parameters(self): - args = dict( - initialImage="BIGIP-tmos-tier2-13.1.0.0.0.931.iso", - managementGw="2.2.2.2", - managementIp="1.1.1.1/24", - managementNetwork="bridged", - state="deployed", - vlans=[ - "/Common/vlan1", - "/Common/vlan2" - ] - ) - - p = ApiParameters(params=args) - assert p.initial_image == 'BIGIP-tmos-tier2-13.1.0.0.0.931.iso' - assert p.mgmt_route == '2.2.2.2' - assert p.mgmt_address == '1.1.1.1/24' - assert '/Common/vlan1' in p.vlans - assert '/Common/vlan2' in p.vlans - - def test_api_parameters_with_hotfix(self): - args = dict( - initialImage="BIGIP-14.1.0.3-0.0.6.iso", - initialHotfix="Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso", - managementGw="2.2.2.2", - managementIp="1.1.1.1/24", - managementNetwork="bridged", - state="deployed", - vlans=[ - "/Common/vlan1", - "/Common/vlan2" - ] - ) - - p = ApiParameters(params=args) - assert p.initial_image == 'BIGIP-14.1.0.3-0.0.6.iso' - assert p.initial_hotfix == 'Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso' - assert p.mgmt_route == '2.2.2.2' - assert p.mgmt_address == '1.1.1.1/24' - assert '/Common/vlan1' in p.vlans - assert '/Common/vlan2' in p.vlans - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigip_vcmp_guest.ModuleParameters.initial_image_exists') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('library.modules.bigip_vcmp_guest.ModuleParameters.initial_hotfix_exists') - self.m2 = self.p2.start() - self.m2.return_value = True - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_vcmp_guest.ModuleParameters.initial_image_exists') - self.m1 = self.p1.start() - self.m1.return_value = True - self.p2 = patch('ansible.modules.network.f5.bigip_vcmp_guest.ModuleParameters.initial_hotfix_exists') - self.m2 = self.p2.start() - self.m2.return_value = True - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - - def test_create_vcmpguest(self, *args): - set_module_args(dict( - name="guest1", - mgmt_network="bridged", - mgmt_address="10.10.10.10/24", - initial_image="BIGIP-13.1.0.0.0.931.iso", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - mm.is_deployed = Mock(side_effect=[False, True, True, True, True]) - mm.deploy_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'guest1' - - def test_create_vcmpguest_with_hotfix(self, *args): - set_module_args(dict( - name="guest2", - mgmt_network="bridged", - mgmt_address="10.10.10.10/24", - initial_image="BIGIP-14.1.0.3-0.0.6.iso", - initial_hotfix="Hotfix-BIGIP-14.1.0.3.0.5.6-ENG.iso", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - mm.is_deployed = Mock(side_effect=[False, True, True, True, True]) - mm.deploy_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['name'] == 'guest2' diff --git a/test/units/modules/network/f5/test_bigip_virtual_address.py b/test/units/modules/network/f5/test_bigip_virtual_address.py deleted file mode 100644 index 0af9e06018..0000000000 --- a/test/units/modules/network/f5/test_bigip_virtual_address.py +++ /dev/null @@ -1,235 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_virtual_address import ApiParameters - from library.modules.bigip_virtual_address import ModuleParameters - from library.modules.bigip_virtual_address import ModuleManager - from library.modules.bigip_virtual_address import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_virtual_address import ApiParameters - from ansible.modules.network.f5.bigip_virtual_address import ModuleParameters - from ansible.modules.network.f5.bigip_virtual_address import ModuleManager - from ansible.modules.network.f5.bigip_virtual_address import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - state='present', - address='1.1.1.1', - netmask='2.2.2.2', - connection_limit='10', - arp_state='enabled', - auto_delete='enabled', - icmp_echo='enabled', - availability_calculation='always', - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.address == '1.1.1.1' - assert p.netmask == '2.2.2.2' - assert p.connection_limit == 10 - assert p.arp is True - assert p.auto_delete is True - assert p.icmp_echo == 'enabled' - assert p.availability_calculation == 'none' - - def test_api_parameters(self): - args = load_fixture('load_ltm_virtual_address_default.json') - p = ApiParameters(params=args) - assert p.name == '1.1.1.1' - assert p.address == '1.1.1.1' - assert p.arp is True - assert p.auto_delete is True - assert p.connection_limit == 0 - assert p.state == 'enabled' - assert p.icmp_echo == 'enabled' - assert p.netmask == '255.255.255.255' - assert p.route_advertisement_type == 'disabled' - assert p.availability_calculation == 'any' - - def test_module_parameters_advertise_route_all(self): - args = dict( - availability_calculation='when_all_available' - ) - p = ModuleParameters(params=args) - assert p.availability_calculation == 'all' - - def test_module_parameters_advertise_route_any(self): - args = dict( - availability_calculation='when_any_available' - ) - p = ModuleParameters(params=args) - assert p.availability_calculation == 'any' - - def test_module_parameters_icmp_echo_disabled(self): - args = dict( - icmp_echo='disabled' - ) - p = ModuleParameters(params=args) - assert p.icmp_echo == 'disabled' - - def test_module_parameters_icmp_echo_selective(self): - args = dict( - icmp_echo='selective' - ) - p = ModuleParameters(params=args) - assert p.icmp_echo == 'selective' - - def test_module_parameters_auto_delete_disabled(self): - args = dict( - auto_delete='disabled' - ) - p = ModuleParameters(params=args) - assert p.auto_delete is False - - def test_module_parameters_arp_state_disabled(self): - args = dict( - arp_state='disabled' - ) - p = ModuleParameters(params=args) - assert p.arp_state == 'disabled' - - def test_module_parameters_state_present(self): - args = dict( - state='present' - ) - p = ModuleParameters(params=args) - assert p.state == 'present' - assert p.enabled == 'yes' - - def test_module_parameters_state_absent(self): - args = dict( - state='absent' - ) - p = ModuleParameters(params=args) - assert p.state == 'absent' - - def test_module_parameters_state_enabled(self): - args = dict( - state='enabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'enabled' - assert p.enabled == 'yes' - - def test_module_parameters_state_disabled(self): - args = dict( - state='disabled' - ) - p = ModuleParameters(params=args) - assert p.state == 'disabled' - assert p.enabled == 'no' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_virtual_address(self, *args): - set_module_args(dict( - state='present', - address='1.1.1.1', - netmask='2.2.2.2', - connection_limit='10', - arp_state='enabled', - auto_delete='enabled', - icmp_echo='enabled', - advertise_route='always', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True - - def test_delete_virtual_address(self, *args): - set_module_args(dict( - state='absent', - address='1.1.1.1', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive, - required_one_of=self.spec.required_one_of - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[True, False]) - mm.remove_from_device = Mock(return_value=True) - - results = mm.exec_module() - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigip_virtual_server.py b/test/units/modules/network/f5/test_bigip_virtual_server.py deleted file mode 100644 index 07a63389f9..0000000000 --- a/test/units/modules/network/f5/test_bigip_virtual_server.py +++ /dev/null @@ -1,995 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_virtual_server import ModuleParameters - from library.modules.bigip_virtual_server import ApiParameters - from library.modules.bigip_virtual_server import ModuleManager - from library.modules.bigip_virtual_server import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_virtual_server import ApiParameters - from ansible.modules.network.f5.bigip_virtual_server import ModuleParameters - from ansible.modules.network.f5.bigip_virtual_server import ModuleManager - from ansible.modules.network.f5.bigip_virtual_server import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_destination_mutex_1(self): - args = dict( - destination='1.1.1.1' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - - def test_destination_mutex_2(self): - args = dict( - destination='1.1.1.1%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_3(self): - args = dict( - destination='1.1.1.1:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - - def test_destination_mutex_4(self): - args = dict( - destination='1.1.1.1%2:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_api_destination_mutex_5(self): - args = dict( - destination='/Common/1.1.1.1' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - - def test_api_destination_mutex_6(self): - args = dict( - destination='/Common/1.1.1.1%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.route_domain == 2 - - def test_api_destination_mutex_7(self): - args = dict( - destination='/Common/1.1.1.1:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - - def test_api_destination_mutex_8(self): - args = dict( - destination='/Common/1.1.1.1%2:80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '1.1.1.1' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_9(self): - args = dict( - destination='2700:bc00:1f10:101::6' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - - def test_destination_mutex_10(self): - args = dict( - destination='2700:bc00:1f10:101::6%2' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.route_domain == 2 - - def test_destination_mutex_11(self): - args = dict( - destination='2700:bc00:1f10:101::6.80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.port == 80 - - def test_destination_mutex_12(self): - args = dict( - destination='2700:bc00:1f10:101::6%2.80' - ) - p = ApiParameters(params=args) - assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' - assert p.destination_tuple.port == 80 - assert p.destination_tuple.route_domain == 2 - - def test_module_no_partition_prefix_parameters(self): - args = dict( - state='present', - partition='Common', - name='my-virtual-server', - destination='10.10.10.10', - port=443, - pool='my-pool', - snat='Automap', - description='Test Virtual Server', - profiles=[ - dict( - name='fix', - context='all' - ) - ], - enabled_vlans=['vlan2'] - ) - p = ModuleParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.pool == '/Common/my-pool' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert len(p.profiles) == 1 - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert '/Common/vlan2' in p.enabled_vlans - - def test_module_partition_prefix_parameters(self): - args = dict( - state='present', - partition='Common', - name='my-virtual-server', - destination='10.10.10.10', - port=443, - pool='/Common/my-pool', - snat='Automap', - description='Test Virtual Server', - profiles=[ - dict( - name='fix', - context='all' - ) - ], - enabled_vlans=['/Common/vlan2'] - ) - p = ModuleParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.pool == '/Common/my-pool' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert len(p.profiles) == 1 - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert '/Common/vlan2' in p.enabled_vlans - - def test_api_parameters_variables(self): - args = { - "kind": "tm:ltm:virtual:virtualstate", - "name": "my-virtual-server", - "partition": "Common", - "fullPath": "/Common/my-virtual-server", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server?expandSubcollections=true&ver=12.1.2", - "addressStatus": "yes", - "autoLasthop": "default", - "cmpEnabled": "yes", - "connectionLimit": 0, - "description": "Test Virtual Server", - "destination": "/Common/10.10.10.10:443", - "enabled": True, - "gtmScore": 0, - "ipProtocol": "tcp", - "mask": "255.255.255.255", - "mirror": "disabled", - "mobileAppTunnel": "disabled", - "nat64": "disabled", - "rateLimit": "disabled", - "rateLimitDstMask": 0, - "rateLimitMode": "object", - "rateLimitSrcMask": 0, - "serviceDownImmediateAction": "none", - "source": "0.0.0.0/0", - "sourceAddressTranslation": { - "type": "automap" - }, - "sourcePort": "preserve", - "synCookieStatus": "not-activated", - "translateAddress": "enabled", - "translatePort": "enabled", - "vlansEnabled": True, - "vsIndex": 3, - "vlans": [ - "/Common/net1" - ], - "vlansReference": [ - { - "link": "https://localhost/mgmt/tm/net/vlan/~Common~net1?ver=12.1.2" - } - ], - "policiesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/policies?ver=12.1.2", - "isSubcollection": True - }, - "profilesReference": { - "link": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles?ver=12.1.2", - "isSubcollection": True, - "items": [ - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "http", - "partition": "Common", - "fullPath": "/Common/http", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~http?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/http/~Common~http?ver=12.1.2" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "serverssl", - "partition": "Common", - "fullPath": "/Common/serverssl", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~serverssl?ver=12.1.2", - "context": "serverside", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/server-ssl/~Common~serverssl?ver=12.1.2" - } - }, - { - "kind": "tm:ltm:virtual:profiles:profilesstate", - "name": "tcp", - "partition": "Common", - "fullPath": "/Common/tcp", - "generation": 54, - "selfLink": "https://localhost/mgmt/tm/ltm/virtual/~Common~my-virtual-server/profiles/~Common~tcp?ver=12.1.2", - "context": "all", - "nameReference": { - "link": "https://localhost/mgmt/tm/ltm/profile/tcp/~Common~tcp?ver=12.1.2" - } - } - ] - } - } - p = ApiParameters(params=args) - assert p.name == 'my-virtual-server' - assert p.partition == 'Common' - assert p.port == 443 - assert p.destination == '/Common/10.10.10.10:443' - assert p.snat == {'type': 'automap'} - assert p.description == 'Test Virtual Server' - assert 'context' in p.profiles[0] - assert 'name' in p.profiles[0] - assert 'fullPath' in p.profiles[0] - assert p.profiles[0]['context'] == 'all' - assert p.profiles[0]['name'] == 'http' - assert p.profiles[0]['fullPath'] == '/Common/http' - assert '/Common/net1' in p.vlans - - def test_module_address_translation_enabled(self): - args = dict( - address_translation=True - ) - p = ModuleParameters(params=args) - assert p.address_translation == 'enabled' - - def test_module_address_translation_disabled(self): - args = dict( - address_translation=False - ) - p = ModuleParameters(params=args) - assert p.address_translation == 'disabled' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - try: - self.p1 = patch('library.modules.bigip_virtual_server.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - self.p2 = patch( - 'library.modules.bigip_virtual_server.Parameters._read_current_clientssl_profiles_from_device' - ) - self.p3 = patch( - 'library.modules.bigip_virtual_server.Parameters._read_current_serverssl_profiles_from_device' - ) - self.p4 = patch( - 'library.modules.bigip_virtual_server.VirtualServerValidator.check_create' - ) - - self.p5 = patch( - 'library.modules.bigip_virtual_server.VirtualServerValidator.check_update' - ) - - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - self.m5 = self.p5.start() - self.m2.return_value = ['asda', 'clientssl', 'cs_foobar.star.local'] - self.m3.return_value = ['baz', 'serverssl', 'ss_foobar.star.local'] - self.m4.return_value = Mock(return_value=True) - self.m5.return_value = Mock(return_value=True) - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigip_virtual_server.modules_provisioned') - self.m1 = self.p1.start() - self.m1.return_value = ['ltm', 'gtm', 'asm'] - self.p2 = patch( - 'ansible.modules.network.f5.bigip_virtual_server.Parameters._read_current_clientssl_profiles_from_device' - ) - self.p3 = patch( - 'ansible.modules.network.f5.bigip_virtual_server.Parameters._read_current_serverssl_profiles_from_device' - ) - self.p4 = patch( - 'ansible.modules.network.f5.bigip_virtual_server.VirtualServerValidator.check_create' - ) - self.p5 = patch( - 'ansible.modules.network.f5.bigip_virtual_server.VirtualServerValidator.check_update' - ) - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - self.m5 = self.p5.start() - self.m2.return_value = ['asda', 'clientssl', 'cs_foobar.star.local'] - self.m3.return_value = ['baz', 'serverssl', 'ss_foobar.star.local'] - self.m4.return_value = Mock(return_value=True) - self.m5.return_value = Mock(return_value=True) - - def tearDown(self): - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - self.p5.stop() - - def test_create_virtual_server(self, *args): - set_module_args(dict( - all_profiles=[ - dict( - name='http' - ), - dict( - name='clientssl' - ) - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - - def test_delete_virtual_server(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_enable_vs_that_is_already_enabled(self, *args): - set_module_args(dict( - all_profiles=[ - 'http', 'clientssl' - ], - description="Test Virtual Server", - destination="10.10.10.10", - name="my-snat-pool", - partition="Common", - port="443", - snat="Automap", - state="absent", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters( - dict( - agent_status_traps='disabled' - ) - ) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.update_on_device = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_port(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - port="10443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_1.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - - def test_modify_port_idempotent(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_1.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_vlans_idempotent(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - disabled_vlans=[ - "net1" - ], - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_2.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is False - - def test_modify_profiles(self, *args): - set_module_args(dict( - name="my-virtual-server", - partition="Common", - profiles=[ - 'http', 'clientssl' - ], - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_2.json')) - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert len(results['profiles']) == 2 - assert 'name' in results['profiles'][0] - assert 'context' in results['profiles'][0] - assert results['profiles'][0]['name'] == 'http' - assert results['profiles'][0]['context'] == 'all' - assert 'name' in results['profiles'][1] - assert 'context' in results['profiles'][1] - assert results['profiles'][1]['name'] == 'clientssl' - assert results['profiles'][1]['context'] == 'clientside' - - def test_update_virtual_server(self, *args): - set_module_args(dict( - profiles=[ - dict( - name='http' - ), - dict( - name='clientssl' - ) - ], - description="foo virtual", - destination="1.1.1.1", - name="my-virtual-server", - partition="Common", - port="8443", - snat="snat-pool1", - state="disabled", - source='1.2.3.4/32', - irules=[ - 'irule1', - 'irule2' - ], - policies=[ - 'policy1', - 'policy2' - ], - enabled_vlans=[ - 'vlan1', - 'vlan2' - ], - pool='my-pool', - default_persistence_profile='source_addr', - fallback_persistence_profile='dest_addr', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - # Configure the parameters that would be returned by querying the - # remote device - current = ApiParameters(params=load_fixture('load_ltm_virtual_3.json')) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - mm.update_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['source'] == '1.2.3.4/32' - assert results['description'] == 'foo virtual' - assert results['snat'] == '/Common/snat-pool1' - assert results['destination'] == '1.1.1.1' - assert results['port'] == 8443 - assert results['default_persistence_profile'] == '/Common/source_addr' - assert results['fallback_persistence_profile'] == '/Common/dest_addr' - - # policies - assert len(results['policies']) == 2 - assert '/Common/policy1' in results['policies'] - assert '/Common/policy2' in results['policies'] - - # irules - assert len(results['irules']) == 2 - assert '/Common/irule1' in results['irules'] - assert '/Common/irule2' in results['irules'] - - # vlans - assert len(results['enabled_vlans']) == 2 - assert '/Common/vlan1' in results['enabled_vlans'] - assert '/Common/vlan2' in results['enabled_vlans'] - - # profiles - assert len(results['profiles']) == 2 - assert 'name' in results['profiles'][0] - assert 'context' in results['profiles'][0] - assert results['profiles'][0]['name'] == 'http' - assert results['profiles'][0]['context'] == 'all' - assert 'name' in results['profiles'][1] - assert 'context' in results['profiles'][1] - assert results['profiles'][1]['name'] == 'clientssl' - assert results['profiles'][1]['context'] == 'clientside' - - def test_create_virtual_server_with_address_translation_bool_true(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation=True, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is True - - def test_create_virtual_server_with_address_translation_string_yes(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation='yes', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is True - - def test_create_virtual_server_with_address_translation_bool_false(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation=False, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is False - - def test_create_virtual_server_with_address_translation_string_no(self, *args): - set_module_args(dict( - destination="10.10.10.10", - address_translation='no', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['address_translation'] is False - - def test_create_virtual_server_with_port_translation_bool_true(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation=True, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is True - - def test_create_virtual_server_with_port_translation_string_yes(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation='yes', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is True - - def test_create_virtual_server_with_port_translation_bool_false(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation=False, - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is False - - def test_create_virtual_server_with_port_translation_string_no(self, *args): - set_module_args(dict( - destination="10.10.10.10", - port_translation='no', - name="my-snat-pool", - partition="Common", - port="443", - state="present", - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - results = mm.exec_module() - - assert results['changed'] is True - assert results['port_translation'] is False diff --git a/test/units/modules/network/f5/test_bigip_vlan.py b/test/units/modules/network/f5/test_bigip_vlan.py deleted file mode 100644 index 89e421e2f7..0000000000 --- a/test/units/modules/network/f5/test_bigip_vlan.py +++ /dev/null @@ -1,344 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_vlan import ApiParameters - from library.modules.bigip_vlan import ModuleParameters - from library.modules.bigip_vlan import ModuleManager - from library.modules.bigip_vlan import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_vlan import ApiParameters - from ansible.modules.network.f5.bigip_vlan import ModuleParameters - from ansible.modules.network.f5.bigip_vlan import ModuleManager - from ansible.modules.network.f5.bigip_vlan import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class BigIpObj(object): - def __init__(self, **kwargs): - self.__dict__.update(kwargs) - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='somevlan', - tag=213, - description='fakevlan', - untagged_interfaces=['1.1'], - ) - p = ModuleParameters(params=args) - - assert p.name == 'somevlan' - assert p.tag == 213 - assert p.description == 'fakevlan' - assert p.untagged_interfaces == ['1.1'] - - def test_api_parameters(self): - args = dict( - name='somevlan', - description='fakevlan', - tag=213 - ) - - p = ApiParameters(params=args) - - assert p.name == 'somevlan' - assert p.tag == 213 - assert p.description == 'fakevlan' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create_vlan(self, *args): - set_module_args(dict( - name='somevlan', - description='fakevlan', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'fakevlan' - - def test_create_vlan_tagged_interface(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1'], - tag=213, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['2.1'] - assert results['tag'] == 213 - - def test_create_vlan_untagged_interface(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['2.1'] - - def test_create_vlan_tagged_interfaces(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1', '1.1'], - tag=213, - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['1.1', '2.1'] - assert results['tag'] == 213 - - def test_create_vlan_untagged_interfaces(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1', '1.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=False) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['1.1', '2.1'] - - def test_update_vlan_untag_interface(self, *args): - set_module_args(dict( - name='somevlan', - untagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_vlan.json')) - interfaces = load_fixture('load_vlan_interfaces.json') - current.update({'interfaces': interfaces}) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['untagged_interfaces'] == ['2.1'] - - def test_update_vlan_tag_interface(self, *args): - set_module_args(dict( - name='somevlan', - tagged_interface=['2.1'], - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('load_vlan.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['tagged_interfaces'] == ['2.1'] - - def test_update_vlan_description(self, *args): - set_module_args(dict( - name='somevlan', - description='changed_that', - partition='Common', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - current = ApiParameters(params=load_fixture('update_vlan_description.json')) - - mm.update_on_device = Mock(return_value=True) - mm.exists = Mock(return_value=True) - mm.read_current_from_device = Mock(return_value=current) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'changed_that' diff --git a/test/units/modules/network/f5/test_bigip_wait.py b/test/units/modules/network/f5/test_bigip_wait.py deleted file mode 100644 index ca09778f0b..0000000000 --- a/test/units/modules/network/f5/test_bigip_wait.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigip_wait import Parameters - from library.modules.bigip_wait import ModuleManager - from library.modules.bigip_wait import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigip_wait import Parameters - from ansible.modules.network.f5.bigip_wait import ModuleManager - from ansible.modules.network.f5.bigip_wait import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - delay=3, - timeout=500, - sleep=10, - msg='We timed out during waiting for BIG-IP :-(' - ) - - p = Parameters(params=args) - assert p.delay == 3 - assert p.timeout == 500 - assert p.sleep == 10 - assert p.msg == 'We timed out during waiting for BIG-IP :-(' - - def test_module_string_parameters(self): - args = dict( - delay='3', - timeout='500', - sleep='10', - msg='We timed out during waiting for BIG-IP :-(' - ) - - p = Parameters(params=args) - assert p.delay == 3 - assert p.timeout == 500 - assert p.sleep == 10 - assert p.msg == 'We timed out during waiting for BIG-IP :-(' - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_wait_already_available(self, *args): - set_module_args(dict( - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm._connect_to_device = Mock(return_value=True) - mm._device_is_rebooting = Mock(return_value=False) - mm._is_mprov_running_on_device = Mock(return_value=False) - mm._get_client_connection = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is False - assert results['elapsed'] == 0 diff --git a/test/units/modules/network/f5/test_bigiq_application_fasthttp.py b/test/units/modules/network/f5/test_bigiq_application_fasthttp.py deleted file mode 100644 index 6700449450..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_fasthttp.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_fasthttp import ModuleParameters - from library.modules.bigiq_application_fasthttp import ModuleManager - from library.modules.bigiq_application_fasthttp import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_fasthttp import ModuleParameters - from ansible.modules.network.f5.bigiq_application_fasthttp import ModuleManager - from ansible.modules.network.f5.bigiq_application_fasthttp import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_fasthttp.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_fasthttp.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_fasthttp.ModuleParameters.ssg_reference') - self.p4 = patch('library.modules.bigiq_application_fasthttp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_fasthttp.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_fasthttp.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_fasthttp.ModuleParameters.ssg_reference') - self.p4 = patch('ansible.modules.network.f5.bigiq_application_fasthttp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_application_fastl4_tcp.py b/test/units/modules/network/f5/test_bigiq_application_fastl4_tcp.py deleted file mode 100644 index cd057565d6..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_fastl4_tcp.py +++ /dev/null @@ -1,235 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_fastl4_tcp import ModuleParameters - from library.modules.bigiq_application_fastl4_tcp import ModuleManager - from library.modules.bigiq_application_fastl4_tcp import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_fastl4_tcp import ModuleParameters - from ansible.modules.network.f5.bigiq_application_fastl4_tcp import ModuleManager - from ansible.modules.network.f5.bigiq_application_fastl4_tcp import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_fastl4_tcp.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_fastl4_tcp.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_fastl4_tcp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_fastl4_tcp.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_fastl4_tcp.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_fastl4_tcp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_application_fastl4_udp.py b/test/units/modules/network/f5/test_bigiq_application_fastl4_udp.py deleted file mode 100644 index 934876b36d..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_fastl4_udp.py +++ /dev/null @@ -1,235 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_fastl4_udp import ModuleParameters - from library.modules.bigiq_application_fastl4_udp import ModuleManager - from library.modules.bigiq_application_fastl4_udp import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_fastl4_udp import ModuleParameters - from ansible.modules.network.f5.bigiq_application_fastl4_udp import ModuleManager - from ansible.modules.network.f5.bigiq_application_fastl4_udp import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_fastl4_udp.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_fastl4_udp.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_fastl4_udp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_fastl4_udp.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_fastl4_udp.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_fastl4_udp.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_application_http.py b/test/units/modules/network/f5/test_bigiq_application_http.py deleted file mode 100644 index 5bb25af2cb..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_http.py +++ /dev/null @@ -1,242 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_http import ModuleParameters - from library.modules.bigiq_application_http import ModuleManager - from library.modules.bigiq_application_http import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_http import ModuleParameters - from ansible.modules.network.f5.bigiq_application_http import ModuleManager - from ansible.modules.network.f5.bigiq_application_http import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_http.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_http.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_http.ModuleParameters.ssg_reference') - self.p4 = patch('library.modules.bigiq_application_http.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_http.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_http.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_http.ModuleParameters.ssg_reference') - self.p4 = patch('ansible.modules.network.f5.bigiq_application_http.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_application_https_offload.py b/test/units/modules/network/f5/test_bigiq_application_https_offload.py deleted file mode 100644 index ebac1d8206..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_https_offload.py +++ /dev/null @@ -1,260 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_https_offload import ModuleParameters - from library.modules.bigiq_application_https_offload import ModuleManager - from library.modules.bigiq_application_https_offload import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_https_offload import ModuleParameters - from ansible.modules.network.f5.bigiq_application_https_offload import ModuleManager - from ansible.modules.network.f5.bigiq_application_https_offload import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ) - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - assert 'address' in p.redirect_virtual - assert 'netmask' in p.redirect_virtual - assert 'port' in p.redirect_virtual - assert p.redirect_virtual['address'] == '3.3.3.3' - assert p.redirect_virtual['netmask'] == '255.255.255.255' - assert p.redirect_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_https_offload.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_https_offload.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_https_offload.ModuleParameters.ssg_reference') - self.p4 = patch('library.modules.bigiq_application_https_offload.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_https_offload.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_https_offload.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_https_offload.ModuleParameters.ssg_reference') - self.p4 = patch('ansible.modules.network.f5.bigiq_application_https_offload.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_application_https_waf.py b/test/units/modules/network/f5/test_bigiq_application_https_waf.py deleted file mode 100644 index 0a6abfdab6..0000000000 --- a/test/units/modules/network/f5/test_bigiq_application_https_waf.py +++ /dev/null @@ -1,268 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_application_https_waf import ModuleParameters - from library.modules.bigiq_application_https_waf import ModuleManager - from library.modules.bigiq_application_https_waf import ArgumentSpec - from library.module_utils.network.f5.common import F5ModuleError - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_application_https_waf import ModuleParameters - from ansible.modules.network.f5.bigiq_application_https_waf import ModuleManager - from ansible.modules.network.f5.bigiq_application_https_waf import ArgumentSpec - from ansible.module_utils.network.f5.common import F5ModuleError - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - domain_names=[ - 'foo.baz.com', - 'bar.baz.com' - ] - ) - - p = ModuleParameters(params=args) - assert p.name == 'foo' - assert p.config_set_name == 'foo' - assert p.sub_path == 'foo' - assert p.http_profile == 'profile_http' - assert p.service_environment == 'bar' - assert len(p.servers) == 2 - assert 'address' in p.servers[0] - assert 'port' in p.servers[0] - assert 'address' in p.servers[1] - assert 'port' in p.servers[1] - assert p.servers[0]['address'] == '1.2.3.4' - assert p.servers[0]['port'] == 8080 - assert p.servers[1]['address'] == '5.6.7.8' - assert p.servers[1]['port'] == 8000 - assert 'address' in p.inbound_virtual - assert 'netmask' in p.inbound_virtual - assert 'port' in p.inbound_virtual - assert p.inbound_virtual['address'] == '2.2.2.2' - assert p.inbound_virtual['netmask'] == '255.255.255.255' - assert p.inbound_virtual['port'] == 80 - assert 'address' in p.redirect_virtual - assert 'netmask' in p.redirect_virtual - assert 'port' in p.redirect_virtual - assert p.redirect_virtual['address'] == '3.3.3.3' - assert p.redirect_virtual['netmask'] == '255.255.255.255' - assert p.redirect_virtual['port'] == 80 - - -class TestManager(unittest.TestCase): - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - try: - self.p1 = patch('library.modules.bigiq_application_https_waf.bigiq_version') - self.p2 = patch('library.modules.bigiq_application_https_waf.ModuleParameters.template_reference') - self.p3 = patch('library.modules.bigiq_application_https_waf.ModuleParameters.ssg_reference') - self.p4 = patch('library.modules.bigiq_application_https_waf.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - except Exception: - self.p1 = patch('ansible.modules.network.f5.bigiq_application_https_waf.bigiq_version') - self.p2 = patch('ansible.modules.network.f5.bigiq_application_https_waf.ModuleParameters.template_reference') - self.p3 = patch('ansible.modules.network.f5.bigiq_application_https_waf.ModuleParameters.ssg_reference') - self.p4 = patch('ansible.modules.network.f5.bigiq_application_https_waf.ModuleParameters.default_device_reference') - - self.m1 = self.p1.start() - self.m2 = self.p2.start() - self.m3 = self.p3.start() - self.m4 = self.p4.start() - - self.m1.return_value = '6.1.0' - self.m2.return_value = Mock(return_value='https://localhost/mgmt/foobar1') - self.m3.return_value = Mock(return_value='https://localhost/mgmt/foobar2') - self.m4.return_value = Mock(return_value='https://localhost/mgmt/foobar3') - - def tearDown(self): - self.patcher1.stop() - self.p1.stop() - self.p2.stop() - self.p3.stop() - self.p4.stop() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - redirect_virtual=dict( - address='3.3.3.3', - netmask='255.255.255.255', - port=80 - ), - domain_names=[ - 'foo.baz.com', - 'bar.baz.com' - ], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.check_bigiq_version = Mock(return_value=True) - mm.has_no_service_environment = Mock(return_value=False) - mm.wait_for_apply_template_task = Mock(return_value=True) - - mm.create_on_device = Mock(return_value=True) - mm.exists = Mock(side_effect=[False, True]) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'my description' - - def test_bigiq_version_raises(self): - set_module_args(dict( - name='foo', - description='my description', - service_environment='bar', - servers=[ - dict( - address='1.2.3.4', - port=8080 - ), - dict( - address='5.6.7.8', - port=8000 - ) - ], - inbound_virtual=dict( - address='2.2.2.2', - netmask='255.255.255.255', - port=80 - ), - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - mutually_exclusive=self.spec.mutually_exclusive - ) - - msg = 'Module supports only BIGIQ version 6.0.x or lower.' - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - - with pytest.raises(F5ModuleError) as err: - mm.exec_module() - assert str(err.value) == msg diff --git a/test/units/modules/network/f5/test_bigiq_device_discovery.py b/test/units/modules/network/f5/test_bigiq_device_discovery.py deleted file mode 100644 index efcd3769b4..0000000000 --- a/test/units/modules/network/f5/test_bigiq_device_discovery.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2019, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_device_discovery import ApiParameters - from library.modules.bigiq_device_discovery import ModuleParameters - from library.modules.bigiq_device_discovery import ModuleManager - from library.modules.bigiq_device_discovery import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_device_discovery import ApiParameters - from ansible.modules.network.f5.bigiq_device_discovery import ModuleParameters - from ansible.modules.network.f5.bigiq_device_discovery import ModuleManager - from ansible.modules.network.f5.bigiq_device_discovery import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - device_address='192.168.1.1', - device_username='admin', - device_password='admin', - device_port=10443, - ha_name='bazfoo', - use_bigiq_sync='yes', - modules=['asm', 'ltm', 'security_shared'] - ) - - p = ModuleParameters(params=args) - assert p.device_address == '192.168.1.1' - assert p.device_username == 'admin' - assert p.device_password == 'admin' - assert p.device_port == 10443 - assert p.ha_name == 'bazfoo' - assert p.use_bigiq_sync is True - assert p.modules == ['asm', 'adc_core', 'security_shared'] - - def test_api_parameters(self): - args = load_fixture('load_machine_resolver.json') - - p = ApiParameters(params=args) - assert sorted(p.modules) == sorted(['asm', 'adc_core', 'security_shared']) - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_create(self, *args): - set_module_args(dict( - device_address='192.168.1.1', - device_username='admin', - device_password='admin', - modules=['asm', 'ltm', 'security_shared'], - provider=dict( - password='password', - server='localhost', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.set_trust_with_device = Mock(return_value=True) - mm.discover_on_device = Mock(return_value=True) - mm.import_modules_on_device = Mock(return_value=True) - mm.check_bigiq_version = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigiq_device_info.py b/test/units/modules/network/f5/test_bigiq_device_info.py deleted file mode 100644 index 14273dfb38..0000000000 --- a/test/units/modules/network/f5/test_bigiq_device_info.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2018, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_device_info import Parameters - from library.modules.bigiq_device_info import SystemInfoFactManager - from library.modules.bigiq_device_info import ModuleManager - from library.modules.bigiq_device_info import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_device_info import Parameters - from ansible.modules.network.f5.bigiq_device_info import SystemInfoFactManager - from ansible.modules.network.f5.bigiq_device_info import ModuleManager - from ansible.modules.network.f5.bigiq_device_info import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - gather_subset=['system-info'], - ) - p = Parameters(params=args) - assert p.gather_subset == ['system-info'] - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_get_facts(self, *args): - set_module_args(dict( - gather_subset=['system-info'], - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - fixture1 = load_fixture('load_shared_system_setup_1.json') - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - tm = SystemInfoFactManager(module=module) - tm.read_collection_from_device = Mock(return_value=fixture1) - - # Override methods to force specific logic in the module to happen - mm = ModuleManager(module=module) - mm.get_manager = Mock(return_value=tm) - - results = mm.exec_module() - - assert results['changed'] is True - assert 'system_info' in results diff --git a/test/units/modules/network/f5/test_bigiq_regkey_license.py b/test/units/modules/network/f5/test_bigiq_regkey_license.py deleted file mode 100644 index f83af44de1..0000000000 --- a/test/units/modules/network/f5/test_bigiq_regkey_license.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_regkey_license import ModuleParameters - from library.modules.bigiq_regkey_license import ApiParameters - from library.modules.bigiq_regkey_license import ModuleManager - from library.modules.bigiq_regkey_license import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_regkey_license import ModuleParameters - from ansible.modules.network.f5.bigiq_regkey_license import ApiParameters - from ansible.modules.network.f5.bigiq_regkey_license import ModuleManager - from ansible.modules.network.f5.bigiq_regkey_license import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - regkey_pool='foo', - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - description='this is a description' - ) - - p = ModuleParameters(params=args) - assert p.regkey_pool == 'foo' - assert p.license_key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.accept_eula is True - assert p.description == 'this is a description' - - def test_api_parameters(self): - args = load_fixture('load_regkey_license_key.json') - - p = ApiParameters(params=args) - assert p.description == 'foo bar baz' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_create(self, *args): - set_module_args(dict( - regkey_pool='foo', - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - description='this is a description', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True - assert results['description'] == 'this is a description' diff --git a/test/units/modules/network/f5/test_bigiq_regkey_license_assignment.py b/test/units/modules/network/f5/test_bigiq_regkey_license_assignment.py deleted file mode 100644 index 387757a1e0..0000000000 --- a/test/units/modules/network/f5/test_bigiq_regkey_license_assignment.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_regkey_license_assignment import ModuleParameters - from library.modules.bigiq_regkey_license_assignment import ModuleManager - from library.modules.bigiq_regkey_license_assignment import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_regkey_license_assignment import ModuleParameters - from ansible.modules.network.f5.bigiq_regkey_license_assignment import ModuleManager - from ansible.modules.network.f5.bigiq_regkey_license_assignment import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_unmanaged(self): - args = dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=False, - device_username='admin', - device_password='secret', - device_port='8443' - ) - - p = ModuleParameters(params=args) - assert p.pool == 'foo-pool' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is False - assert p.device_username == 'admin' - assert p.device_password == 'secret' - assert p.device_port == 8443 - - def test_module_parameters_managed(self): - args = dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=True, - ) - - p = ModuleParameters(params=args) - assert p.pool == 'foo-pool' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_create(self, *args): - set_module_args(dict( - pool='foo-pool', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - device_username='admin', - device_password='secret', - managed='no', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_device_to_be_licensed = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigiq_regkey_pool.py b/test/units/modules/network/f5/test_bigiq_regkey_pool.py deleted file mode 100644 index 0d368e22f3..0000000000 --- a/test/units/modules/network/f5/test_bigiq_regkey_pool.py +++ /dev/null @@ -1,109 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2017 F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_regkey_pool import ModuleParameters - from library.modules.bigiq_regkey_pool import ApiParameters - from library.modules.bigiq_regkey_pool import ModuleManager - from library.modules.bigiq_regkey_pool import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_regkey_pool import ModuleParameters - from ansible.modules.network.f5.bigiq_regkey_pool import ApiParameters - from ansible.modules.network.f5.bigiq_regkey_pool import ModuleManager - from ansible.modules.network.f5.bigiq_regkey_pool import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - description='this is a description' - ) - - p = ModuleParameters(params=args) - assert p.description == 'this is a description' - - def test_api_parameters(self): - args = load_fixture('load_regkey_license_pool.json') - - p = ApiParameters(params=args) - assert p.description == 'this is a description' - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - name='foo', - description='bar baz', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode - ) - - # Override methods in the specific type of manager - mm = ModuleManager(module=module) - mm.exists = Mock(return_value=False) - mm.create_on_device = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigiq_utility_license.py b/test/units/modules/network/f5/test_bigiq_utility_license.py deleted file mode 100644 index 7aea7f081a..0000000000 --- a/test/units/modules/network/f5/test_bigiq_utility_license.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_utility_license import ModuleParameters - from library.modules.bigiq_utility_license import ModuleManager - from library.modules.bigiq_utility_license import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - from test.units.compat.mock import patch - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_utility_license import ModuleParameters - from ansible.modules.network.f5.bigiq_utility_license import ModuleManager - from ansible.modules.network.f5.bigiq_utility_license import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - from units.compat.mock import patch - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters(self): - args = dict( - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - ) - - p = ModuleParameters(params=args) - assert p.license_key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.accept_eula is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - self.patcher1 = patch('time.sleep') - self.patcher1.start() - - def tearDown(self): - self.patcher1.stop() - - def test_create(self, *args): - set_module_args(dict( - license_key='XXXX-XXXX-XXXX-XXXX-XXXX', - accept_eula=True, - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_initial_license_activation = Mock(return_value=True) - mm.wait_for_utility_license_activation = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True diff --git a/test/units/modules/network/f5/test_bigiq_utility_license_assignment.py b/test/units/modules/network/f5/test_bigiq_utility_license_assignment.py deleted file mode 100644 index 406c277115..0000000000 --- a/test/units/modules/network/f5/test_bigiq_utility_license_assignment.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright: (c) 2017, F5 Networks Inc. -# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import json -import pytest -import sys - -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip("F5 Ansible modules require Python >= 2.7") - -from ansible.module_utils.basic import AnsibleModule - -try: - from library.modules.bigiq_utility_license_assignment import ModuleParameters - from library.modules.bigiq_utility_license_assignment import ModuleManager - from library.modules.bigiq_utility_license_assignment import ArgumentSpec - - # In Ansible 2.8, Ansible changed import paths. - from test.units.compat import unittest - from test.units.compat.mock import Mock - - from test.units.modules.utils import set_module_args -except ImportError: - from ansible.modules.network.f5.bigiq_utility_license_assignment import ModuleParameters - from ansible.modules.network.f5.bigiq_utility_license_assignment import ModuleManager - from ansible.modules.network.f5.bigiq_utility_license_assignment import ArgumentSpec - - # Ansible 2.8 imports - from units.compat import unittest - from units.compat.mock import Mock - - from units.modules.utils import set_module_args - - -fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') -fixture_data = {} - - -def load_fixture(name): - path = os.path.join(fixture_path, name) - - if path in fixture_data: - return fixture_data[path] - - with open(path) as f: - data = f.read() - - try: - data = json.loads(data) - except Exception: - pass - - fixture_data[path] = data - return data - - -class TestParameters(unittest.TestCase): - def test_module_parameters_unmanaged(self): - args = dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=False, - device_username='admin', - device_password='secret', - device_port='8443' - ) - - p = ModuleParameters(params=args) - assert p.offering == 'asdf' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is False - assert p.device_username == 'admin' - assert p.device_password == 'secret' - assert p.device_port == 8443 - - def test_module_parameters_managed(self): - args = dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - managed=True, - ) - - p = ModuleParameters(params=args) - assert p.offering == 'asdf' - assert p.key == 'XXXX-XXXX-XXXX-XXXX-XXXX' - assert p.device == '1.1.1.1' - assert p.managed is True - - -class TestManager(unittest.TestCase): - - def setUp(self): - self.spec = ArgumentSpec() - - def test_create(self, *args): - set_module_args(dict( - offering='asdf', - key='XXXX-XXXX-XXXX-XXXX-XXXX', - device='1.1.1.1', - device_username='admin', - device_password='secret', - managed='no', - state='present', - provider=dict( - server='localhost', - password='password', - user='admin' - ) - )) - - module = AnsibleModule( - argument_spec=self.spec.argument_spec, - supports_check_mode=self.spec.supports_check_mode, - required_if=self.spec.required_if - ) - mm = ModuleManager(module=module) - - # Override methods to force specific logic in the module to happen - mm.exists = Mock(side_effect=[False, True]) - mm.create_on_device = Mock(return_value=True) - mm.wait_for_device_to_be_licensed = Mock(return_value=True) - - results = mm.exec_module() - - assert results['changed'] is True |