salt/tests/unit/states/test_docker_image.py
2017-09-27 14:26:32 -06:00

113 lines
4.0 KiB
Python

# -*- coding: utf-8 -*-
'''
Unit tests for the docker state
'''
# Import Python Libs
from __future__ import absolute_import
# Import Salt Testing Libs
from tests.support.mixins import LoaderModuleMockMixin
from tests.support.unit import skipIf, TestCase
from tests.support.mock import (
MagicMock,
NO_MOCK,
NO_MOCK_REASON,
patch
)
# Import Salt Libs
import salt.modules.dockermod as docker_mod
import salt.states.docker_image as docker_state
@skipIf(NO_MOCK, NO_MOCK_REASON)
class DockerImageTestCase(TestCase, LoaderModuleMockMixin):
'''
Test docker_image states
'''
def setup_loader_modules(self):
return {
docker_mod: {
'__context__': {'docker.docker_version': ''}
},
docker_state: {
'__opts__': {'test': False}
}
}
def test_present_already_local(self):
'''
According following sls,
.. code-block:: yaml
image:latest:
docker_image.present:
- force: true
if ``image:latest`` is already downloaded locally the state
should not report changes.
'''
docker_inspect_image = MagicMock(return_value={'Id': 'abcdefghijkl'})
docker_pull = MagicMock(
return_value={'Layers':
{'Already_Pulled': ['abcdefghijkl'],
'Pulled': []},
'Status': 'Image is up to date for image:latest',
'Time_Elapsed': 1.1})
docker_list_tags = MagicMock(return_value=['image:latest'])
docker_resolve_tag = MagicMock(return_value='image:latest')
__salt__ = {'docker.list_tags': docker_list_tags,
'docker.pull': docker_pull,
'docker.inspect_image': docker_inspect_image,
'docker.resolve_tag': docker_resolve_tag}
with patch.dict(docker_state.__dict__,
{'__salt__': __salt__}):
ret = docker_state.present('image:latest', force=True)
self.assertEqual(ret,
{'changes': {},
'result': True,
'comment': "Image 'image:latest' was pulled, "
"but there were no changes",
'name': 'image:latest',
})
def test_present_and_force(self):
'''
According following sls,
.. code-block:: yaml
image:latest:
docker_image.present:
- force: true
if ``image:latest`` is not downloaded and force is true
should pull a new image successfuly.
'''
docker_inspect_image = MagicMock(return_value={'Id': '1234567890ab'})
docker_pull = MagicMock(
return_value={'Layers':
{'Pulled': ['abcdefghijkl']},
'Status': "Image 'image:latest' was pulled",
'Time_Elapsed': 1.1})
docker_list_tags = MagicMock(side_effect=[[], ['image:latest']])
docker_resolve_tag = MagicMock(return_value='image:latest')
__salt__ = {'docker.list_tags': docker_list_tags,
'docker.pull': docker_pull,
'docker.inspect_image': docker_inspect_image,
'docker.resolve_tag': docker_resolve_tag}
with patch.dict(docker_state.__dict__,
{'__salt__': __salt__}):
ret = docker_state.present('image:latest', force=True)
self.assertEqual(ret,
{'changes': {
'Layers': {'Pulled': ['abcdefghijkl']},
'Status': "Image 'image:latest' was pulled",
'Time_Elapsed': 1.1},
'result': True,
'comment': "Image 'image:latest' was pulled",
'name': 'image:latest',
})