mirror of
https://github.com/valitydev/salt.git
synced 2024-11-09 01:36:48 +00:00
113 lines
4.0 KiB
Python
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',
|
|
})
|