diff options
Diffstat (limited to 'test/units/modules')
3 files changed, 994 insertions, 0 deletions
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 new file mode 100644 index 0000000000..001daa757a --- /dev/null +++ b/test/units/modules/network/f5/fixtures/load_asm_policy_active.json @@ -0,0 +1,197 @@ +{ + "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 new file mode 100644 index 0000000000..5198888142 --- /dev/null +++ b/test/units/modules/network/f5/fixtures/load_asm_policy_inactive.json @@ -0,0 +1,197 @@ +{ + "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/test_bigip_asm_policy.py b/test/units/modules/network/f5/test_bigip_asm_policy.py new file mode 100644 index 0000000000..226eabde04 --- /dev/null +++ b/test/units/modules/network/f5/test_bigip_asm_policy.py @@ -0,0 +1,600 @@ +# -*- 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 + +from nose.plugins.skip import SkipTest +if sys.version_info < (2, 7): + raise SkipTest("F5 Ansible modules require Python >= 2.7") + +from ansible.compat.tests import unittest +from ansible.compat.tests.mock import patch, Mock, PropertyMock +from ansible.module_utils import basic +from ansible.module_utils._text import to_bytes +from ansible.module_utils.f5_utils import AnsibleF5Client +from ansible.module_utils.f5_utils import F5ModuleError + +try: + from library.bigip_asm_policy import V1Parameters + from library.bigip_asm_policy import V2Parameters + from library.bigip_asm_policy import ModuleManager + from library.bigip_asm_policy import V1Manager + from library.bigip_asm_policy import V2Manager + from library.bigip_asm_policy import ArgumentSpec + from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError +except ImportError: + try: + from ansible.modules.network.f5.bigip_asm_policy import V1Parameters + from ansible.modules.network.f5.bigip_asm_policy import V2Parameters + from ansible.modules.network.f5.bigip_asm_policy import ModuleManager + from ansible.modules.network.f5.bigip_asm_policy import V1Manager + from ansible.modules.network.f5.bigip_asm_policy import V2Manager + from ansible.modules.network.f5.bigip_asm_policy import ArgumentSpec + from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError + except ImportError: + raise SkipTest("F5 Ansible modules require the f5-sdk Python library") + +fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') +fixture_data = {} + + +def set_module_args(args): + args = json.dumps({'ANSIBLE_MODULE_ARGS': args}) + basic._ANSIBLE_ARGS = to_bytes(args) + + +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( + name='fake_policy', + state='present', + file='/var/fake/fake.xml' + ) + + p = V1Parameters(args) + assert p.name == 'fake_policy' + assert p.state == 'present' + assert p.file == '/var/fake/fake.xml' + + def test_module_parameters_template(self): + args = dict( + name='fake_policy', + state='present', + template='LotusDomino 6.5 (http)' + ) + + p = V1Parameters(args) + assert p.name == 'fake_policy' + assert p.state == 'present' + assert p.template == 'POLICY_TEMPLATE_LOTUSDOMINO_6_5_HTTP' + + +@patch('ansible.module_utils.f5_utils.AnsibleF5Client._get_mgmt_root', + return_value=True) +class TestManager(unittest.TestCase): + def setUp(self): + self.spec = ArgumentSpec() + self.policy = os.path.join(fixture_path, 'fake_policy.xml') + + def test_activate_import_from_file(self, *args): + set_module_args(dict( + name='fake_policy', + file=self.policy, + state='present', + active='yes', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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['file'] == self.policy + assert results['active'] is True + + def test_activate_import_from_template(self, *args): + set_module_args(dict( + name='fake_policy', + template='OWA Exchange 2007 (https)', + state='present', + active='yes', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + v1 = V1Manager(client) + 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(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_active.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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', + server='localhost', + password='password', + user='admin', + active='no' + )) + + current = V1Parameters(load_fixture('load_asm_policy_active.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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', + server='localhost', + password='password', + user='admin', + active='no' + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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_import_from_file(self, *args): + set_module_args(dict( + name='fake_policy', + file=self.policy, + state='present', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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['file'] == self.policy + assert results['active'] is False + + def test_import_from_template(self, *args): + set_module_args(dict( + name='fake_policy', + template='LotusDomino 6.5 (http)', + state='present', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + v1 = V1Manager(client) + 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) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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_policy_import_raises(self, *args): + set_module_args(dict( + name='fake_policy', + file=self.policy, + state='present', + server='localhost', + password='password', + user='admin', + )) + + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + msg = 'Import policy task failed.' + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + v1.exists = Mock(return_value=False) + v1.import_to_device = Mock(return_value=True) + v1.wait_for_task = Mock(return_value=False) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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_activate_policy_raises(self, *args): + set_module_args(dict( + name='fake_policy', + state='present', + active='yes', + server='localhost', + password='password', + user='admin', + )) + + current = V1Parameters(load_fixture('load_asm_policy_inactive.json')) + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + msg = 'Apply policy task failed.' + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + + msg = 'Failed to create ASM policy: fake_policy' + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + v1.exists = Mock(return_value=False) + v1.create_on_device = Mock(return_value=False) + + # Override methods to force specific logic in the module to happen + mm = ModuleManager(client) + 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', + server='localhost', + password='password', + user='admin', + )) + + client = AnsibleF5Client( + argument_spec=self.spec.argument_spec, + supports_check_mode=self.spec.supports_check_mode, + f5_product_name=self.spec.f5_product_name + ) + msg = 'Failed to delete ASM policy: fake_policy' + # Override methods to force specific logic in the module to happen + v1 = V1Manager(client) + 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(client) + 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 |