mirror of
https://github.com/projectatomic/atomic.git
synced 2026-02-05 18:45:01 +01:00
Fix a slew of issues related to deletion of images and containers. Also added --assume_yes to be consistent with other commands. This will benefit dbus interaction as well given that we do not want confirmation occuring over dbus. Issues that were fixed: * Proper catch and error for trying to delete all images|containers when no images|containers exist * Catch and error when no image|container is given by user and no --all * when --storage and --all are used, only images|containers in that backend are now deleted * when --all is given but not --storage, all images|containers from all backends are now deleted. * Fixed logical error when deleting containers * Deletion of images|containers now is consistent in its confirm and abort messages. Added unittests. Closes: #864 Approved by: rhatdan
112 lines
5.7 KiB
Python
112 lines
5.7 KiB
Python
#pylint: skip-file
|
|
import unittest
|
|
from Atomic.backendutils import BackendUtils
|
|
from Atomic.backends._docker import DockerBackend
|
|
from Atomic.backends._ostree import OSTreeBackend
|
|
from Atomic.syscontainers import SystemContainers
|
|
from Atomic.info import Info
|
|
from Atomic.images import Images
|
|
from Atomic.delete import Delete
|
|
|
|
no_mock = True
|
|
try:
|
|
from unittest.mock import MagicMock, patch
|
|
no_mock = False
|
|
except ImportError:
|
|
try:
|
|
from mock import MagicMock, patch
|
|
no_mock = False
|
|
except ImportError:
|
|
# Mock is already set to False
|
|
pass
|
|
|
|
docker_images = [{'Id': '7968321274dc6b6171697c33df7815310468e694ac5be0ec03ff053bb135e768', 'Size': 1109996, 'ParentId': '', 'Created': 1484345634, 'RepoTags': ['docker.io/busybox:latest'], 'VirtualSize': 1109996, 'RepoDigests': ['docker.io/busybox@sha256:817a12c32a39bbe394944ba49de563e085f1d3c5266eb8e9723256bc4448680e'], 'Labels': {}}, {'Id': '88e169ea8f46ff0d0df784b1b254a15ecfaf045aee1856dca1ec242fdd231ddd', 'Size': 3979756, 'ParentId': '', 'Created': 1482862645, 'RepoTags': ['docker.io/alpine:latest'], 'VirtualSize': 3979756, 'RepoDigests': ['docker.io/alpine@sha256:dfbd4a3a8ebca874ebd2474f044a0b33600d4523d03b0df76e5c5986cb02d7e8'], 'Labels': None}]
|
|
ostree_images = [{'Id': '5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d', 'Labels': {}, 'ImageType': 'system', 'Version': '<none>', 'ImageId': '5040bd2983909aa8896b9932438c3f1479d25ae837a5f6220242a264d0221f2d', 'RepoTags': ['<none>'], 'OSTree-rev': 'fe2619a941bff9f323d1f5eef7fc3e05f2c82d421c4ba383ec646c888231752b', 'Created': 1486143371, 'Names': []}, {'Id': 'e5599115b6a67e08278d176b05a3defb30e5564f5be6d73264ec560b484514a2', 'Labels': {}, 'ImageType': 'system', 'Version': 'debian:latest', 'ImageId': 'e5599115b6a67e08278d176b05a3defb30e5564f5be6d73264ec560b484514a2', 'RepoTags': ['debian:latest'], 'OSTree-rev': '8d4551074942f65080a613d68a21f131fdebc0bf8ce437dd676bb4dbfa50fa08', 'Created': 1486143371, 'Names': []}, {'Id': '45a2e645736c4c66ef34acce2407ded21f7a9b231199d3b92d6c9776df264729', 'Labels': {}, 'ImageType': 'system', 'Version': '<none>', 'ImageId': '45a2e645736c4c66ef34acce2407ded21f7a9b231199d3b92d6c9776df264729', 'RepoTags': ['<none>'], 'OSTree-rev': 'a2512de2d19ab0916f9acce1ebd731203a336c366a1d002126c198ceff280375', 'Created': 1486143486, 'Names': []}, {'Id': '67591570dd29de0e124ee89d50458b098dbd83b12d73e5fdaf8b4dcbd4ea50f8', 'Labels': {}, 'ImageType': 'system', 'Version': 'centos:latest', 'ImageId': '67591570dd29de0e124ee89d50458b098dbd83b12d73e5fdaf8b4dcbd4ea50f8', 'RepoTags': ['centos:latest'], 'OSTree-rev': '1ce1d5393d4c1d4e04d70576be95ca598b26dff14aa9deacc92e06df5f71c470', 'Created': 1486143486, 'Names': []}]
|
|
|
|
|
|
@unittest.skipIf(no_mock, "Mock not found")
|
|
class TestInfo(unittest.TestCase):
|
|
class Args():
|
|
def __init__(self):
|
|
self.storage = None
|
|
self.force = False
|
|
self.all = False
|
|
self.assumeyes = True
|
|
self.debug = False
|
|
self.delete_targets = []
|
|
self.remote = False
|
|
|
|
def test_delete_no_images(self):
|
|
with patch('Atomic.backendutils.BackendUtils.get_images') as mockobj:
|
|
args = self.Args()
|
|
args.all = True
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
mockobj.return_value([])
|
|
with self.assertRaises(ValueError):
|
|
del_.delete_image()
|
|
|
|
def test_delete_no_images_ostree(self):
|
|
with patch('Atomic.backends._ostree.OSTreeBackend.get_images') as mockobj:
|
|
args = self.Args()
|
|
args.all = True
|
|
args.storage = 'ostree'
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
mockobj.return_value([])
|
|
with self.assertRaises(ValueError):
|
|
del_.delete_image()
|
|
|
|
def test_delete_no_images_docker(self):
|
|
with patch('Atomic.backends._docker.DockerBackend.get_images') as mockobj:
|
|
args = self.Args()
|
|
args.all = True
|
|
args.storage = 'docker'
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
mockobj.return_value([])
|
|
with self.assertRaises(ValueError):
|
|
del_.delete_image()
|
|
|
|
def test_delete_all_and_images(self):
|
|
args = self.Args()
|
|
args.all = True
|
|
args.delete_targets = 'foobar'
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
with self.assertRaises(ValueError):
|
|
del_.delete_image()
|
|
|
|
def test_delete_not_all_and_not_images(self):
|
|
args = self.Args()
|
|
args.delete_targets = []
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
with self.assertRaises(ValueError):
|
|
del_.delete_image()
|
|
|
|
|
|
def test_delete_all_docker(self):
|
|
with patch('Atomic.backends._docker.DockerBackend.delete_image') as deleteobj:
|
|
with patch('Atomic.backends._docker.DockerBackend._get_images') as imageobj:
|
|
args = self.Args()
|
|
args.all = True
|
|
args.storage = 'docker'
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
deleteobj.return_value = None
|
|
imageobj.return_value = docker_images
|
|
self.assertEqual(del_.delete_image(), 0)
|
|
|
|
def test_delete_all_ostree(self):
|
|
with patch('Atomic.backends._ostree.OSTreeBackend.delete_image') as deleteobj:
|
|
with patch('Atomic.syscontainers.SystemContainers.get_system_images') as imageobj:
|
|
args = self.Args()
|
|
args.all = True
|
|
args.storage = 'ostree'
|
|
del_ = Delete()
|
|
del_.set_args(args)
|
|
deleteobj.return_value = None
|
|
imageobj.return_value = ostree_images
|
|
self.assertEqual(del_.delete_image(), 0)
|