fuel-ccp/fuel_ccp/tests/test_validation.py

119 lines
4.0 KiB
Python

import fixtures
import mock
import testscenarios
from fuel_ccp.tests import base
from fuel_ccp.validation import base as base_validation
from fuel_ccp.validation import deploy as deploy_validation
from fuel_ccp.validation import service as service_validation
COMPONENTS_MAP = {
'service1': {
'some_field': True
},
'service2': {
'another_field': False
},
'service3': {
'new_field': None
}
}
class TestBaseValidation(base.TestCase):
def test_validate_components_names(self):
# validations succeeded
base_validation.validate_components_names(
{'service1'}, COMPONENTS_MAP)
base_validation.validate_components_names(
{'service1', 'service2'}, COMPONENTS_MAP)
# validations failed
self.assertRaisesRegexp(
RuntimeError,
"Following components do not match any definitions: srv3",
base_validation.validate_components_names,
{'srv3'}, COMPONENTS_MAP)
self.assertRaisesRegexp(
RuntimeError,
"Following components do not match any definitions: service4",
base_validation.validate_components_names,
{'service1', 'service4'}, COMPONENTS_MAP)
class TestDeployValidation(base.TestCase):
@mock.patch('fuel_ccp.common.utils.get_deployed_components')
@mock.patch('fuel_ccp.dependencies.get_deps')
def test_validate_requested_components(self, m_get_deps, m_get_deployed):
# validations succeeded
# no dependencies and nothing is deployed
m_get_deps.return_value = set()
m_get_deployed.return_value = set()
deploy_validation.validate_requested_components(
{'service1', 'service2'}, COMPONENTS_MAP)
# all dependencies requested
m_get_deps.return_value = {'service1'}
m_get_deployed.return_value = set()
deploy_validation.validate_requested_components(
{'service1', 'service2'}, COMPONENTS_MAP)
# all dependencies deployed
m_get_deps.return_value = {'service1', 'service2'}
m_get_deployed.return_value = {'service2'}
deploy_validation.validate_requested_components(
{'service1'}, COMPONENTS_MAP)
# some dependencies requested and some deployed
m_get_deps.return_value = {'service1', 'service2', 'service3'}
m_get_deployed.return_value = {'service3'}
deploy_validation.validate_requested_components(
{'service1', 'service2'}, COMPONENTS_MAP)
# validations failed
# requirements are not requested and are not deployed
m_get_deps.return_value = {'service1', 'service2'}
m_get_deployed.return_value = set()
self.assertRaisesRegexp(
RuntimeError,
'Following components are also required for successful '
'deployment: service2',
deploy_validation.validate_requested_components,
{'service1'}, COMPONENTS_MAP)
class TestServiceValidation(testscenarios.WithScenarios, base.TestCase):
scenarios = (
('incompatible', {'version': '0.3.0', 'raises': RuntimeError}),
('incompatible_major', {'version': '1.0.0', 'raises': RuntimeError}),
('compatible', {'version': '0.1.0'}),
('larget_but_compatible', {'version': '0.1.0'})
)
raises = None
def setUp(self):
super(TestServiceValidation, self).setUp()
self.useFixture(fixtures.MockPatch("fuel_ccp.dsl_version",
"0.2.0"))
def test_validation(self):
components_map = {
"test": {
"service_content": {
"dsl_version": self.version
}
}
}
if self.raises:
self.assertRaises(
self.raises, service_validation.validate_service_versions,
components_map, ['test']
)
else:
service_validation.validate_service_versions(
components_map, ['test']
)