1# Copyright 2019 Fortinet, Inc. 2# 3# This program is free software: you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation, either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with Ansible. If not, see <https://www.gnu.org/licenses/>. 15 16# Make coding more python3-ish 17from __future__ import (absolute_import, division, print_function) 18__metaclass__ = type 19 20import os 21import json 22import pytest 23from mock import ANY 24from ansible.module_utils.network.fortios.fortios import FortiOSHandler 25 26try: 27 from ansible.modules.network.fortios import fortios_wireless_controller_hotspot20_h2qp_conn_capability 28except ImportError: 29 pytest.skip("Could not load required modules for testing", allow_module_level=True) 30 31 32@pytest.fixture(autouse=True) 33def connection_mock(mocker): 34 connection_class_mock = mocker.patch('ansible.modules.network.fortios.fortios_wireless_controller_hotspot20_h2qp_conn_capability.Connection') 35 return connection_class_mock 36 37 38fos_instance = FortiOSHandler(connection_mock) 39 40 41def test_wireless_controller_hotspot20_h2qp_conn_capability_creation(mocker): 42 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 43 44 set_method_result = {'status': 'success', 'http_method': 'POST', 'http_status': 200} 45 set_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.set', return_value=set_method_result) 46 47 input_data = { 48 'username': 'admin', 49 'state': 'present', 50 'wireless_controller_hotspot20_h2qp_conn_capability': { 51 'esp_port': 'closed', 52 'ftp_port': 'closed', 53 'http_port': 'closed', 54 'icmp_port': 'closed', 55 'ikev2_port': 'closed', 56 'ikev2_xx_port': 'closed', 57 'name': 'default_name_9', 58 'pptp_vpn_port': 'closed', 59 'ssh_port': 'closed', 60 'tls_port': 'closed', 61 'voip_tcp_port': 'closed', 62 'voip_udp_port': 'closed' 63 }, 64 'vdom': 'root'} 65 66 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 67 68 expected_data = { 69 'esp-port': 'closed', 70 'ftp-port': 'closed', 71 'http-port': 'closed', 72 'icmp-port': 'closed', 73 'ikev2-port': 'closed', 74 'ikev2-xx-port': 'closed', 75 'name': 'default_name_9', 76 'pptp-vpn-port': 'closed', 77 'ssh-port': 'closed', 78 'tls-port': 'closed', 79 'voip-tcp-port': 'closed', 80 'voip-udp-port': 'closed' 81 } 82 83 set_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', data=expected_data, vdom='root') 84 schema_method_mock.assert_not_called() 85 assert not is_error 86 assert changed 87 assert response['status'] == 'success' 88 assert response['http_status'] == 200 89 90 91def test_wireless_controller_hotspot20_h2qp_conn_capability_creation_fails(mocker): 92 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 93 94 set_method_result = {'status': 'error', 'http_method': 'POST', 'http_status': 500} 95 set_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.set', return_value=set_method_result) 96 97 input_data = { 98 'username': 'admin', 99 'state': 'present', 100 'wireless_controller_hotspot20_h2qp_conn_capability': { 101 'esp_port': 'closed', 102 'ftp_port': 'closed', 103 'http_port': 'closed', 104 'icmp_port': 'closed', 105 'ikev2_port': 'closed', 106 'ikev2_xx_port': 'closed', 107 'name': 'default_name_9', 108 'pptp_vpn_port': 'closed', 109 'ssh_port': 'closed', 110 'tls_port': 'closed', 111 'voip_tcp_port': 'closed', 112 'voip_udp_port': 'closed' 113 }, 114 'vdom': 'root'} 115 116 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 117 118 expected_data = { 119 'esp-port': 'closed', 120 'ftp-port': 'closed', 121 'http-port': 'closed', 122 'icmp-port': 'closed', 123 'ikev2-port': 'closed', 124 'ikev2-xx-port': 'closed', 125 'name': 'default_name_9', 126 'pptp-vpn-port': 'closed', 127 'ssh-port': 'closed', 128 'tls-port': 'closed', 129 'voip-tcp-port': 'closed', 130 'voip-udp-port': 'closed' 131 } 132 133 set_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', data=expected_data, vdom='root') 134 schema_method_mock.assert_not_called() 135 assert is_error 136 assert not changed 137 assert response['status'] == 'error' 138 assert response['http_status'] == 500 139 140 141def test_wireless_controller_hotspot20_h2qp_conn_capability_removal(mocker): 142 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 143 144 delete_method_result = {'status': 'success', 'http_method': 'POST', 'http_status': 200} 145 delete_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.delete', return_value=delete_method_result) 146 147 input_data = { 148 'username': 'admin', 149 'state': 'absent', 150 'wireless_controller_hotspot20_h2qp_conn_capability': { 151 'esp_port': 'closed', 152 'ftp_port': 'closed', 153 'http_port': 'closed', 154 'icmp_port': 'closed', 155 'ikev2_port': 'closed', 156 'ikev2_xx_port': 'closed', 157 'name': 'default_name_9', 158 'pptp_vpn_port': 'closed', 159 'ssh_port': 'closed', 160 'tls_port': 'closed', 161 'voip_tcp_port': 'closed', 162 'voip_udp_port': 'closed' 163 }, 164 'vdom': 'root'} 165 166 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 167 168 delete_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', mkey=ANY, vdom='root') 169 schema_method_mock.assert_not_called() 170 assert not is_error 171 assert changed 172 assert response['status'] == 'success' 173 assert response['http_status'] == 200 174 175 176def test_wireless_controller_hotspot20_h2qp_conn_capability_deletion_fails(mocker): 177 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 178 179 delete_method_result = {'status': 'error', 'http_method': 'POST', 'http_status': 500} 180 delete_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.delete', return_value=delete_method_result) 181 182 input_data = { 183 'username': 'admin', 184 'state': 'absent', 185 'wireless_controller_hotspot20_h2qp_conn_capability': { 186 'esp_port': 'closed', 187 'ftp_port': 'closed', 188 'http_port': 'closed', 189 'icmp_port': 'closed', 190 'ikev2_port': 'closed', 191 'ikev2_xx_port': 'closed', 192 'name': 'default_name_9', 193 'pptp_vpn_port': 'closed', 194 'ssh_port': 'closed', 195 'tls_port': 'closed', 196 'voip_tcp_port': 'closed', 197 'voip_udp_port': 'closed' 198 }, 199 'vdom': 'root'} 200 201 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 202 203 delete_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', mkey=ANY, vdom='root') 204 schema_method_mock.assert_not_called() 205 assert is_error 206 assert not changed 207 assert response['status'] == 'error' 208 assert response['http_status'] == 500 209 210 211def test_wireless_controller_hotspot20_h2qp_conn_capability_idempotent(mocker): 212 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 213 214 set_method_result = {'status': 'error', 'http_method': 'DELETE', 'http_status': 404} 215 set_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.set', return_value=set_method_result) 216 217 input_data = { 218 'username': 'admin', 219 'state': 'present', 220 'wireless_controller_hotspot20_h2qp_conn_capability': { 221 'esp_port': 'closed', 222 'ftp_port': 'closed', 223 'http_port': 'closed', 224 'icmp_port': 'closed', 225 'ikev2_port': 'closed', 226 'ikev2_xx_port': 'closed', 227 'name': 'default_name_9', 228 'pptp_vpn_port': 'closed', 229 'ssh_port': 'closed', 230 'tls_port': 'closed', 231 'voip_tcp_port': 'closed', 232 'voip_udp_port': 'closed' 233 }, 234 'vdom': 'root'} 235 236 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 237 238 expected_data = { 239 'esp-port': 'closed', 240 'ftp-port': 'closed', 241 'http-port': 'closed', 242 'icmp-port': 'closed', 243 'ikev2-port': 'closed', 244 'ikev2-xx-port': 'closed', 245 'name': 'default_name_9', 246 'pptp-vpn-port': 'closed', 247 'ssh-port': 'closed', 248 'tls-port': 'closed', 249 'voip-tcp-port': 'closed', 250 'voip-udp-port': 'closed' 251 } 252 253 set_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', data=expected_data, vdom='root') 254 schema_method_mock.assert_not_called() 255 assert not is_error 256 assert not changed 257 assert response['status'] == 'error' 258 assert response['http_status'] == 404 259 260 261def test_wireless_controller_hotspot20_h2qp_conn_capability_filter_foreign_attributes(mocker): 262 schema_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.schema') 263 264 set_method_result = {'status': 'success', 'http_method': 'POST', 'http_status': 200} 265 set_method_mock = mocker.patch('ansible.module_utils.network.fortios.fortios.FortiOSHandler.set', return_value=set_method_result) 266 267 input_data = { 268 'username': 'admin', 269 'state': 'present', 270 'wireless_controller_hotspot20_h2qp_conn_capability': { 271 'random_attribute_not_valid': 'tag', 272 'esp_port': 'closed', 273 'ftp_port': 'closed', 274 'http_port': 'closed', 275 'icmp_port': 'closed', 276 'ikev2_port': 'closed', 277 'ikev2_xx_port': 'closed', 278 'name': 'default_name_9', 279 'pptp_vpn_port': 'closed', 280 'ssh_port': 'closed', 281 'tls_port': 'closed', 282 'voip_tcp_port': 'closed', 283 'voip_udp_port': 'closed' 284 }, 285 'vdom': 'root'} 286 287 is_error, changed, response = fortios_wireless_controller_hotspot20_h2qp_conn_capability.fortios_wireless_controller_hotspot20(input_data, fos_instance) 288 289 expected_data = { 290 'esp-port': 'closed', 291 'ftp-port': 'closed', 292 'http-port': 'closed', 293 'icmp-port': 'closed', 294 'ikev2-port': 'closed', 295 'ikev2-xx-port': 'closed', 296 'name': 'default_name_9', 297 'pptp-vpn-port': 'closed', 298 'ssh-port': 'closed', 299 'tls-port': 'closed', 300 'voip-tcp-port': 'closed', 301 'voip-udp-port': 'closed' 302 } 303 304 set_method_mock.assert_called_with('wireless-controller.hotspot20', 'h2qp-conn-capability', data=expected_data, vdom='root') 305 schema_method_mock.assert_not_called() 306 assert not is_error 307 assert changed 308 assert response['status'] == 'success' 309 assert response['http_status'] == 200 310