def test_successful_modify(self, snapmirror_modify): ''' modifying snapmirror and testing idempotency ''' data = self.set_default_args() data['policy'] = 'ansible2' data['schedule'] = 'abc2' data['max_transfer_rate'] = 2000 set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_modify.assert_called_with({ 'policy': 'ansible2', 'schedule': 'abc2', 'max_transfer_rate': 2000 }) # to reset na_helper from remembering the previous 'changed' value data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_successful_initialize(self, snapmirror_initialize): ''' initialize snapmirror and testing idempotency ''' data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='transferring') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_initialize.assert_called_with() # to reset na_helper from remembering the previous 'changed' value data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def get_volume_mock_object(self, kind=None, job_error=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection(). :param job_error: error message when getting job status. :return: na_ontap_volume object """ vol_obj = vol_module() vol_obj.ems_log_event = Mock(return_value=None) vol_obj.cluster = Mock() vol_obj.cluster.invoke_successfully = Mock() vol_obj.volume_style = None if kind is None: vol_obj.server = MockONTAPConnection() elif kind == 'volume': vol_obj.server = MockONTAPConnection(kind='volume', data=self.mock_vol) elif kind == 'job_info': vol_obj.server = MockONTAPConnection(kind='job_info', data=self.mock_vol, job_error=job_error) elif kind == 'error_modify': vol_obj.server = MockONTAPConnection(kind='error_modify', data=self.mock_vol) elif kind == 'failure_modify_async': vol_obj.server = MockONTAPConnection(kind='failure_modify_async', data=self.mock_vol) elif kind == 'success_modify_async': vol_obj.server = MockONTAPConnection(kind='success_modify_async', data=self.mock_vol) elif kind == 'zapi_error': vol_obj.server = MockONTAPConnection(kind='zapi_error', data=self.mock_vol) return vol_obj
def test_successful_create(self, snapmirror_create): ''' creating snapmirror and testing idempotency ''' data = self.set_default_args() data['schedule'] = 'abc' data['identity_preserve'] = True set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = self.server with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_create.assert_called_with() # to reset na_helper from remembering the previous 'changed' value set_module_args(self.set_default_args()) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', 'snapmirrored', status='idle') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_successful_modify_schedules_add(self, modify_snapshot): ''' adding snapshot policy schedules and testing idempotency ''' data = self.set_default_args() data['schedule'] = ['hourly', 'daily', 'weekly'] data['count'] = [100, 5, 10] data['snapmirror_label'] = ['', 'daily', ''] set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('policy') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] current = self.set_default_current() modify_snapshot.assert_called_with(current) # to reset na_helper from remembering the previous 'changed' value my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection( 'snapshot_policy_info_schedules_added') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def test_elementsw_svip_exists(self): ''' svip_exists ''' data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) mock_helper = Mock() mock_helper.get_cluster_info.return_value.cluster_info.svip = '10.10.10.10' if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') res = my_obj.validate_elementsw_svip('10.10.10.10:/lun/1000', mock_helper) assert res is None
def get_policy_group_mock_object(self, kind=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_volume object """ policy_obj = qos_policy_group_module() policy_obj.autosupport_log = Mock(return_value=None) policy_obj.cluster = Mock() policy_obj.cluster.invoke_successfully = Mock() if kind is None: policy_obj.server = MockONTAPConnection() else: policy_obj.server = MockONTAPConnection(kind=kind, data=self.mock_policy_group) return policy_obj
def get_ndmp_mock_object(self, kind=None): """ Helper method to return an na_ontap_ndmp object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_ndmp object """ obj = ndmp_module() obj.asup_log_for_cserver = Mock(return_value=None) obj.server = Mock() obj.server.invoke_successfully = Mock() if kind is None: obj.server = MockONTAPConnection() else: obj.server = MockONTAPConnection(kind=kind, data=self.mock_ndmp) return obj
def test_elementsw_svip_exists_negative(self): ''' svip_exists negative testing''' data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) mock_helper = Mock() mock_helper.get_cluster_info.return_value.cluster_info.svip = '10.10.10.10' if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') with pytest.raises(AnsibleFailJson) as exc: my_obj.validate_elementsw_svip('10.10.10.11:/lun/1000', mock_helper) assert 'Error: Invalid SVIP' in exc.value.args[0]['msg']
def test_if_all_methods_catch_exception(self): module_args = {} module_args.update(self.set_default_args()) module_args.update({'service_state': 'online'}) module_args.update({'unmount_volumes': 'True'}) module_args.update({'from_name': 'test_name2'}) set_module_args(module_args) my_obj = my_module() if not self.onbox: my_obj.server = MockONTAPConnection('aggregate_fail') with pytest.raises(AnsibleFailJson) as exc: my_obj.aggr_get_iter(module_args.get('name')) assert '' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.aggregate_online() assert 'Error changing the state of aggregate' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.aggregate_offline() assert 'Error changing the state of aggregate' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.create_aggr() assert 'Error provisioning aggregate' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.delete_aggr() assert 'Error removing aggregate' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.rename_aggregate() assert 'Error renaming aggregate' in exc.value.args[0]['msg'] with pytest.raises(AnsibleFailJson) as exc: my_obj.asup_log_for_cserver = Mock(return_value=None) my_obj.apply() assert 'Error renaming: aggregate test_name2 does not exist' in exc.value.args[0]['msg']
def get_nfs_mock_object(self, kind=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_volume object """ nfsy_obj = nfs_module() nfsy_obj.asup_log_for_cserver = Mock(return_value=None) nfsy_obj.cluster = Mock() nfsy_obj.cluster.invoke_successfully = Mock() if kind is None: nfsy_obj.server = MockONTAPConnection() else: nfsy_obj.server = MockONTAPConnection(kind=kind, data=self.mock_nfs_group) return nfsy_obj
def test_set_elem_connection_destination(self, create_sf_connection): ''' test set_elem_connection for destination''' data = self.set_default_args() data['source_hostname'] = 'test_source' set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) create_sf_connection.return_value = Mock() if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') my_obj.set_element_connection('destination') assert my_obj.module.params['hostname'] == data['hostname'] assert my_obj.module.params['username'] == data['username'] assert my_obj.module.params['password'] == data['password']
def get_role_mock_object(self, kind=None): """ Helper method to return an na_ontap_user_role object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_user_role object """ role_obj = role_module() role_obj.asup_log_for_cserver = Mock(return_value=None) role_obj.cluster = Mock() role_obj.cluster.invoke_successfully = Mock() if kind is None: role_obj.server = MockONTAPConnection() else: role_obj.server = MockONTAPConnection(kind=kind, data=self.mock_role) return role_obj
def test_delete_called(self, delete_ifgrp, get_ifgrp): data = self.mock_args() data['state'] = 'absent' set_module_args(data) get_ifgrp.return_value = Mock() with pytest.raises(AnsibleExitJson) as exc: self.get_ifgrp_mock_object().apply() get_ifgrp.assert_called_with() delete_ifgrp.assert_called_with()
def test_successful_ontap_element_create(self, snapmirror_get, check_param, snapmirror_create): ''' creating ONTAP to ElementSW snapmirror ''' data = self.set_default_args() data['schedule'] = 'abc' data['connection_type'] = 'ontap_elementsw' data['source_hostname'] = '10.10.10.10' set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) snapmirror_get.side_effect = [Mock(), None] if not self.onbox: my_obj.server = self.server with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] snapmirror_create.assert_called_with() check_param.assert_called_with('destination')
def get_demand_mock_object(self, kind=None): scanner_obj = onDemand_module() scanner_obj.asup_log_for_cserver = Mock(return_value=None) if kind is None: scanner_obj.server = MockONTAPConnection() else: scanner_obj.server = MockONTAPConnection(kind='task', data=self.mock_onDemand) return scanner_obj
def test_remote_volume_exists(self): ''' test check_if_remote_volume_exists ''' data = self.set_default_args() data['source_volume'] = 'test_vol' data['destination_volume'] = 'test_vol2' set_module_args(data) my_obj = my_module() my_obj.set_source_cluster_connection = Mock(return_value=None) my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') my_obj.source_server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') res = my_obj.check_if_remote_volume_exists() assert res
def test_check_elementsw_params_source(self, validate_volume, validate_svip, connection): ''' check elementsw parameters for source ''' data = self.set_default_args() data['source_path'] = '10.10.10.10:/lun/1000' set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) mock_elem, mock_helper = Mock(), Mock() connection.return_value = mock_helper, mock_elem if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') my_obj.check_elementsw_parameters('source') connection.called_once_with('source') validate_svip.called_once_with(data['source_path'], mock_elem) validate_volume.called_once_with(data['source_path'], mock_helper)
def test_successful_create(self, create_snapshot): ''' creating snapshot policy and testing idempotency ''' set_module_args(self.set_default_args()) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = self.server with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert exc.value.args[0]['changed'] create_snapshot.assert_called_with() # to reset na_helper from remembering the previous 'changed' value my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('policy') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() assert not exc.value.args[0]['changed']
def get_cluster_peer_mock_object(self, kind=None): """ Helper method to return an na_ontap_cluster_peer object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_cluster_peer object """ cluster_peer_obj = my_module() cluster_peer_obj.asup_log_for_cserver = Mock(return_value=None) cluster_peer_obj.cluster = Mock() cluster_peer_obj.cluster.invoke_successfully = Mock() if kind is None: cluster_peer_obj.server = MockONTAPConnection() cluster_peer_obj.dest_server = MockONTAPConnection() else: cluster_peer_obj.server = MockONTAPConnection( kind=kind, parm1=self.mock_cluster_peer) cluster_peer_obj.dest_server = MockONTAPConnection( kind=kind, parm1=self.mock_cluster_peer) return cluster_peer_obj
def test_elementsw_volume_exists(self): ''' elementsw_volume_exists ''' data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) mock_helper = Mock() mock_helper.volume_id_exists.side_effect = [1000, None] if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') res = my_obj.check_if_elementsw_volume_exists('10.10.10.10:/lun/1000', mock_helper) assert res is None with pytest.raises(AnsibleFailJson) as exc: my_obj.check_if_elementsw_volume_exists('10.10.10.10:/lun/1000', mock_helper) assert 'Error: Source volume does not exist in the ElementSW cluster' in exc.value.args[ 0]['msg']
def get_net_route_mock_object(self, kind=None, data=None): """ Helper method to return an na_ontap_net_route object :param kind: passes this param to MockONTAPConnection() :param data: passes this data to MockONTAPConnection() :return: na_ontap_net_route object """ net_route_obj = net_route_module() net_route_obj.ems_log_event = Mock(return_value=None) net_route_obj.cluster = Mock() net_route_obj.cluster.invoke_successfully = Mock() if kind is None: net_route_obj.server = MockONTAPConnection() else: if data is None: net_route_obj.server = MockONTAPConnection( kind='net_route', data=self.mock_net_route) else: net_route_obj.server = MockONTAPConnection(kind='net_route', data=data) return net_route_obj
def call_command(self, module_args): ''' utility function to call apply ''' module_args.update(self.set_default_args()) set_module_args(module_args) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: # mock the connection my_obj.server = MockONTAPConnection('aggregate', '12', 'test_name') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() return exc.value.args[0]['changed']
def test_successful_delete_error_check(self): ''' check required parameter source cluster hostname deleting snapmirror''' data = self.set_default_args() data['state'] = 'absent' set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.server = MockONTAPConnection('snapmirror', status='idle') with pytest.raises(AnsibleFailJson) as exc: my_obj.apply() assert 'Missing parameters for delete:' in exc.value.args[0]['msg']
def test_snapmirror_release(self): data = self.set_default_args() set_module_args(data) my_obj = my_module() my_obj.asup_log_for_cserver = Mock(return_value=None) if not self.onbox: my_obj.source_server = MockONTAPConnection('snapmirror', status='idle', parm='snapmirrored') my_obj.snapmirror_release() assert my_obj.source_server.xml_in['destination-location'] == data[ 'destination_path']
def get_broadcast_domain_mock_object(self, kind=None, data=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection() :param data: passes this param to MockONTAPConnection() :return: na_ontap_volume object """ broadcast_domain_obj = broadcast_domain_module() broadcast_domain_obj.asup_log_for_cserver = Mock(return_value=None) broadcast_domain_obj.cluster = Mock() broadcast_domain_obj.cluster.invoke_successfully = Mock() if kind is None: broadcast_domain_obj.server = MockONTAPConnection() else: if data is None: broadcast_domain_obj.server = MockONTAPConnection( kind='broadcast_domain', data=self.mock_broadcast_domain) else: broadcast_domain_obj.server = MockONTAPConnection( kind='broadcast_domain', data=data) return broadcast_domain_obj
def get_ifgrp_mock_object(self, kind=None, data=None): """ Helper method to return an na_ontap_net_ifgrp object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_net_ifgrp object """ obj = ifgrp_module() obj.autosupport_log = Mock(return_value=None) if data is None: data = self.mock_ifgrp obj.server = MockONTAPConnection(kind=kind, data=data) return obj
def test_cluster_create_called(self, cluster_create): ''' creating cluster''' module_args = {} module_args.update(self.set_default_args()) set_module_args(module_args) my_obj = my_module() my_obj.autosupport_log = Mock(return_value=None) if not self.use_vsim: my_obj.server = MockONTAPConnection('cluster') with pytest.raises(AnsibleExitJson) as exc: my_obj.apply() print('Info: test_cluster_apply: %s' % repr(exc.value)) cluster_create.assert_called_with()
def get_sp_mock_object(self, kind=None): """ Helper method to return an na_ontap_volume object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_volume object """ sp_obj = sp_module() sp_obj.autosupport_log = Mock(return_value=None) if kind is None: sp_obj.server = MockONTAPConnection() else: sp_obj.server = MockONTAPConnection(kind=kind, data=self.mock_sp) return sp_obj
def get_job_mock_object(self, kind=None): """ Helper method to return an na_ontap_job_schedule object :param kind: passes this param to MockONTAPConnection() :return: na_ontap_job_schedule object """ job_obj = job_module() job_obj.autosupport_log = Mock(return_value=None) if kind is None: job_obj.server = MockONTAPConnection() else: job_obj.server = MockONTAPConnection(kind=kind, data=self.mock_job) return job_obj