def test_create_image_put_v2_bad_delete(self, mock_image_client,
                                            mock_is_client_version):
        mock_is_client_version.return_value = True
        self.cloud.image_api_use_tasks = False

        mock_image_client.get.return_value = []
        self.assertEqual([], self.cloud.list_images())

        args = {
            'name': '42 name',
            'container_format': 'bare',
            'disk_format': 'qcow2',
            'owner_specified.openstack.md5': mock.ANY,
            'owner_specified.openstack.sha256': mock.ANY,
            'owner_specified.openstack.object': 'images/42 name',
            'visibility': 'private',
            'min_disk': 0,
            'min_ram': 0
        }
        ret = munch.Munch(args.copy())
        ret['id'] = '42'
        ret['status'] = 'success'
        mock_image_client.get.side_effect = [
            [],
            [ret],
            [ret],
        ]
        mock_image_client.post.return_value = ret
        mock_image_client.put.side_effect = exc.OpenStackCloudHTTPError(
            "Some error", {})
        self.assertRaises(exc.OpenStackCloudHTTPError,
                          self._call_create_image,
                          '42 name',
                          min_disk='0',
                          min_ram=0)
        mock_image_client.post.assert_called_with('/images', json=args)
        mock_image_client.put.assert_called_with(
            '/images/42/file',
            headers={'Content-Type': 'application/octet-stream'},
            data=mock.ANY)
        mock_image_client.delete.assert_called_with('/images/42')
    def test_create_image_put_v1_bad_delete(self, mock_image_client,
                                            mock_is_client_version):
        mock_is_client_version.return_value = False
        mock_image_client.get.return_value = []
        self.assertEqual([], self.cloud.list_images())

        args = {
            'name': '42 name',
            'container_format': 'bare',
            'disk_format': 'qcow2',
            'properties': {
                'owner_specified.openstack.md5': mock.ANY,
                'owner_specified.openstack.sha256': mock.ANY,
                'owner_specified.openstack.object': 'images/42 name',
                'is_public': False
            }
        }
        ret = munch.Munch(args.copy())
        ret['id'] = '42'
        ret['status'] = 'success'
        mock_image_client.get.side_effect = [
            [],
            [ret],
        ]
        mock_image_client.post.return_value = ret
        mock_image_client.put.side_effect = exc.OpenStackCloudHTTPError(
            "Some error", {})
        self.assertRaises(exc.OpenStackCloudHTTPError, self._call_create_image,
                          '42 name')
        mock_image_client.post.assert_called_with('/images', json=args)
        mock_image_client.put.assert_called_with(
            '/images/42',
            data=mock.ANY,
            headers={
                'x-image-meta-checksum': mock.ANY,
                'x-glance-registry-purge-props': 'false'
            })
        mock_image_client.delete.assert_called_with('/images/42')