def _test__handle_modify(change_attributes=False,
                          change_bucket_info=False):
     current_attributes = dict(
         name='Example',
         bucket_info=dict(bucket_type=portal_enum.BucketType.AWS,
                          bucket='ctera_bucket',
                          direct=True,
                          access_key='ACCESS_KEY',
                          secret_key='SECRET',
                          endpoint='s3.example.com',
                          https=True),
         read_only=False,
         dedicated_to='Main',
     )
     desired_attributes = copy.deepcopy(current_attributes)
     if change_attributes:
         if change_bucket_info:
             desired_attributes['bucket_info']['https'] = False
         else:
             desired_attributes['read_only'] = True
     storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
     storage_node.parameters = desired_attributes
     storage_node._handle_modify(current_attributes)
     if change_attributes:
         if change_bucket_info:
             storage_node._ctera_portal.buckets.modify.assert_not_called()
         else:
             storage_node._ctera_portal.buckets.modify.assert_called_with(
                 desired_attributes['name'],
                 read_only=desired_attributes['read_only'])
    def test__handle_create(self):
        parameters = dict(
            name='Example',
            bucket_info=dict(bucket_type=portal_enum.BucketType.AWS,
                             bucket='ctera_bucket',
                             direct=True,
                             access_key='ACCESS_KEY',
                             secret_key='SECRET',
                             endpoint='s3.example.com',
                             https=None),
            read_only=True,
            dedicated_to='Main',
        )
        expected_params = copy.deepcopy(parameters)
        expected_params['bucket'] = mock.ANY
        expected_params.pop('bucket_info')

        storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
        storage_node.parameters = parameters
        storage_node._handle_create()
        storage_node._ctera_portal.buckets.add.assert_called_with(
            **expected_params)
        self._verify_bucket_info(
            parameters['bucket_info'],
            storage_node._ctera_portal.buckets.add.call_args[1]['bucket'])
 def _test_ensure_absent(is_present):
     name = 'example'
     storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
     storage_node.parameters = dict(name=name)
     storage_node._ensure_absent(
         storage_node.parameters if is_present else None)
     if is_present:
         storage_node._ctera_portal.buckets.delete.assert_called_once_with(
             name)
     else:
         storage_node._ctera_portal.buckets.delete.assert_not_called()
 def _test_ensure_present(is_present):
     storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
     storage_node._handle_create = mock.MagicMock()
     storage_node._handle_modify = mock.MagicMock()
     storage_node._ensure_present(
         {'name': 'example'} if is_present else None)
     if is_present:
         storage_node._handle_modify.assert_called_once_with(mock.ANY)
         storage_node._handle_create.assert_not_called()
     else:
         storage_node._handle_create.assert_called_once_with()
         storage_node._handle_modify.assert_not_called()
    def _test__execute(self, is_present):
        storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
        if is_present:
            storage_node.parameters = dict(state='present',
                                           bucket_info=dict(bucket_type='AWS'))
        else:
            storage_node.parameters = dict(state='absent')

        storage_node._get_storage_node = mock.MagicMock(return_value=dict())
        storage_node._ensure_present = mock.MagicMock()
        storage_node._ensure_absent = mock.MagicMock()
        storage_node._execute()
        if is_present:
            storage_node._ensure_present.assert_called_once_with(mock.ANY)
            self.assertEqual(
                storage_node.parameters['bucket_info']['bucket_type'],
                portal_enum.BucketType.AWS)
            storage_node._ensure_absent.assert_not_called()
        else:
            storage_node._ensure_absent.assert_called_once_with(mock.ANY)
            storage_node._ensure_present.assert_not_called()
    def test_get_storage_node_exists(self):
        expected_storage_node_dict = dict(
            name='Example',
            bucket_info=dict(bucket_type=portal_enum.BucketType.AWS,
                             bucket='ctera_bucket',
                             direct=True,
                             access_key='ACCESS_KEY',
                             secret_key='SECRET',
                             endpoint='s3.example.com',
                             https=True),
            read_only=True,
            dedicated_to='Main',
        )
        storage_node_obj_dict = copy.deepcopy(expected_storage_node_dict)
        storage_node_obj_dict['readOnly'] = storage_node_obj_dict.pop(
            'read_only')
        storage_node_obj_dict['dedicatedPortal'] = storage_node_obj_dict.pop(
            'dedicated_to')
        storage_node_obj_dict['storage'] = storage_node_obj_dict[
            'bucket_info']['bucket_type']
        storage_node_obj_dict['bucket'] = storage_node_obj_dict['bucket_info'][
            'bucket']
        storage_node_obj_dict['directUpload'] = storage_node_obj_dict[
            'bucket_info']['direct']
        storage_node_obj_dict['awsAccessKey'] = storage_node_obj_dict[
            'bucket_info']['access_key']
        storage_node_obj_dict['awsSecretKey'] = storage_node_obj_dict[
            'bucket_info']['secret_key']
        storage_node_obj_dict['s3Endpoint'] = storage_node_obj_dict[
            'bucket_info']['endpoint']
        storage_node_obj_dict['httpsOnly'] = storage_node_obj_dict[
            'bucket_info']['https']
        storage_node_obj_dict.pop('bucket_info')

        storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
        storage_node.parameters = dict(name=expected_storage_node_dict['name'])
        storage_node._ctera_portal.buckets.get = mock.MagicMock(
            return_value=munch.Munch(storage_node_obj_dict))
        self.assertDictEqual(expected_storage_node_dict,
                             storage_node._get_storage_node())
 def test__get_storage_node_doesnt_exist(self):
     storage_node = ctera_portal_storage_node.CteraPortalStorageNode()
     storage_node.parameters = dict(name='example')
     storage_node._ctera_portal.buckets.get = mock.MagicMock(
         side_effect=CTERAException(response=munch.Munch(code=404)))
     self.assertIsNone(storage_node._get_storage_node())