mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
7.7 KiB
Python
182 lines
7.7 KiB
Python
# (c) 2018, NetApp Inc.
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
import json
|
|
|
|
from ansible.modules.storage.netapp.netapp_e_asup import Asup
|
|
from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase, set_module_args
|
|
|
|
__metaclass__ = type
|
|
from units.compat import mock
|
|
|
|
|
|
class AsupTest(ModuleTestCase):
|
|
REQUIRED_PARAMS = {
|
|
'api_username': 'rw',
|
|
'api_password': 'password',
|
|
'api_url': 'http://localhost',
|
|
'ssid': '1',
|
|
}
|
|
REQ_FUNC = 'ansible.modules.storage.netapp.netapp_e_asup.request'
|
|
|
|
def _set_args(self, args=None):
|
|
module_args = self.REQUIRED_PARAMS.copy()
|
|
if args is not None:
|
|
module_args.update(args)
|
|
set_module_args(module_args)
|
|
|
|
def test_get_config_asup_capable_false(self):
|
|
"""Ensure we fail correctly if ASUP is not available on this platform"""
|
|
self._set_args()
|
|
|
|
expected = dict(asupCapable=False, onDemandCapable=True)
|
|
asup = Asup()
|
|
# Expecting an update
|
|
with self.assertRaisesRegexp(AnsibleFailJson, r"not supported"):
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)):
|
|
asup.get_configuration()
|
|
|
|
def test_get_config_on_demand_capable_false(self):
|
|
"""Ensure we fail correctly if ASUP is not available on this platform"""
|
|
self._set_args()
|
|
|
|
expected = dict(asupCapable=True, onDemandCapable=False)
|
|
asup = Asup()
|
|
# Expecting an update
|
|
with self.assertRaisesRegexp(AnsibleFailJson, r"not supported"):
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)):
|
|
asup.get_configuration()
|
|
|
|
def test_get_config(self):
|
|
"""Validate retrieving the ASUP configuration"""
|
|
self._set_args()
|
|
|
|
expected = dict(asupCapable=True, onDemandCapable=True)
|
|
asup = Asup()
|
|
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)):
|
|
config = asup.get_configuration()
|
|
self.assertEquals(config, expected)
|
|
|
|
def test_update_configuration(self):
|
|
"""Validate retrieving the ASUP configuration"""
|
|
self._set_args(dict(asup='enabled'))
|
|
|
|
expected = dict()
|
|
initial = dict(asupCapable=True,
|
|
asupEnabled=True,
|
|
onDemandEnabled=False,
|
|
remoteDiagsEnabled=False,
|
|
schedule=dict(daysOfWeek=[], dailyMinTime=0, weeklyMinTime=0, dailyMaxTime=24, weeklyMaxTime=24))
|
|
asup = Asup()
|
|
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)) as req:
|
|
with mock.patch.object(asup, 'get_configuration', return_value=initial):
|
|
updated = asup.update_configuration()
|
|
self.assertTrue(req.called)
|
|
self.assertTrue(updated)
|
|
|
|
def test_update_configuration_asup_disable(self):
|
|
"""Validate retrieving the ASUP configuration"""
|
|
self._set_args(dict(asup='disabled'))
|
|
|
|
expected = dict()
|
|
initial = dict(asupCapable=True,
|
|
asupEnabled=True,
|
|
onDemandEnabled=False,
|
|
remoteDiagsEnabled=False,
|
|
schedule=dict(daysOfWeek=[], dailyMinTime=0, weeklyMinTime=0, dailyMaxTime=24, weeklyMaxTime=24))
|
|
asup = Asup()
|
|
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)) as req:
|
|
with mock.patch.object(asup, 'get_configuration', return_value=initial):
|
|
updated = asup.update_configuration()
|
|
self.assertTrue(updated)
|
|
|
|
self.assertTrue(req.called)
|
|
|
|
# Ensure it was called with the right arguments
|
|
called_with = req.call_args
|
|
body = json.loads(called_with[1]['data'])
|
|
self.assertFalse(body['asupEnabled'])
|
|
|
|
def test_update_configuration_enable(self):
|
|
"""Validate retrieving the ASUP configuration"""
|
|
self._set_args(dict(asup='enabled'))
|
|
|
|
expected = dict()
|
|
initial = dict(asupCapable=False,
|
|
asupEnabled=False,
|
|
onDemandEnabled=False,
|
|
remoteDiagsEnabled=False,
|
|
schedule=dict(daysOfWeek=[], dailyMinTime=0, weeklyMinTime=0, dailyMaxTime=24, weeklyMaxTime=24))
|
|
asup = Asup()
|
|
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, expected)) as req:
|
|
with mock.patch.object(asup, 'get_configuration', return_value=initial):
|
|
updated = asup.update_configuration()
|
|
self.assertTrue(updated)
|
|
|
|
self.assertTrue(req.called)
|
|
|
|
# Ensure it was called with the right arguments
|
|
called_with = req.call_args
|
|
body = json.loads(called_with[1]['data'])
|
|
self.assertTrue(body['asupEnabled'])
|
|
self.assertTrue(body['onDemandEnabled'])
|
|
self.assertTrue(body['remoteDiagsEnabled'])
|
|
|
|
def test_update_configuration_request_exception(self):
|
|
"""Validate exception handling when request throws an exception."""
|
|
config_response = dict(asupEnabled=True,
|
|
onDemandEnabled=True,
|
|
remoteDiagsEnabled=True,
|
|
schedule=dict(daysOfWeek=[],
|
|
dailyMinTime=0,
|
|
weeklyMinTime=0,
|
|
dailyMaxTime=24,
|
|
weeklyMaxTime=24))
|
|
|
|
self._set_args(dict(state="enabled"))
|
|
asup = Asup()
|
|
with self.assertRaises(Exception):
|
|
with mock.patch.object(asup, 'get_configuration', return_value=config_response):
|
|
with mock.patch(self.REQ_FUNC, side_effect=Exception):
|
|
asup.update_configuration()
|
|
|
|
def test_init_schedule(self):
|
|
"""Validate schedule correct schedule initialization"""
|
|
self._set_args(dict(state="enabled", active=True, days=["sunday", "monday", "tuesday"], start=20, end=24))
|
|
asup = Asup()
|
|
|
|
self.assertTrue(asup.asup)
|
|
self.assertEquals(asup.days, ["sunday", "monday", "tuesday"]),
|
|
self.assertEquals(asup.start, 1200)
|
|
self.assertEquals(asup.end, 1439)
|
|
|
|
def test_init_schedule_invalid(self):
|
|
"""Validate updating ASUP with invalid schedule fails test."""
|
|
self._set_args(dict(state="enabled", active=True, start=22, end=20))
|
|
with self.assertRaisesRegexp(AnsibleFailJson, r"start time is invalid"):
|
|
Asup()
|
|
|
|
def test_init_schedule_days_invalid(self):
|
|
"""Validate updating ASUP with invalid schedule fails test."""
|
|
self._set_args(dict(state="enabled", active=True, days=["someday", "thataday", "nonday"]))
|
|
with self.assertRaises(AnsibleFailJson):
|
|
Asup()
|
|
|
|
def test_update(self):
|
|
"""Validate updating ASUP with valid schedule passes"""
|
|
initial = dict(asupCapable=True,
|
|
onDemandCapable=True,
|
|
asupEnabled=True,
|
|
onDemandEnabled=False,
|
|
remoteDiagsEnabled=False,
|
|
schedule=dict(daysOfWeek=[], dailyMinTime=0, weeklyMinTime=0, dailyMaxTime=24, weeklyMaxTime=24))
|
|
self._set_args(dict(state="enabled", active=True, days=["sunday", "monday", "tuesday"], start=10, end=20))
|
|
asup = Asup()
|
|
with self.assertRaisesRegexp(AnsibleExitJson, r"ASUP settings have been updated"):
|
|
with mock.patch(self.REQ_FUNC, return_value=(200, dict(asupCapable=True))):
|
|
with mock.patch.object(asup, "get_configuration", return_value=initial):
|
|
asup.update()
|