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']
예제 #3
0
 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
예제 #7
0
 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']
예제 #11
0
 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')
예제 #16
0
 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']
예제 #20
0
 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']
예제 #26
0
 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
예제 #28
0
 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
예제 #30
0
 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