heat-agents/tests/test_hook_kubelet.py

115 lines
4.0 KiB
Python

#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import re
import testtools
from unittest import mock
from tests import hook_kubelet
class HookKubeletTest(testtools.TestCase):
config = {
"id": "a50ae8dd-b0c4-407f-8732-3571b3a0f28b",
"group": "kubelet",
"inputs": [],
"name": "20_apache_deployment",
"outputs": [],
"options": {},
"config": {
"version": "v1beta2",
"volumes": [{
"name": "mariadb-data"
}],
"containers": [{
"image": "kollaglue/fedora-rdo-rabbitmq",
"name": "rabbitmq",
"ports": [{
"containerPort": 5672,
"hostPort": 5672}]
}, {
"image": "kollaglue/fedora-rdo-heat-engine",
"name": "heat-engine",
"env": [{
"name": "AUTH_ENCRYPTION_KEY",
"value": "Vegu95l2jwkucD9RSYAoFpRbUlh0PGF7"}]
}, {
"image": "kollaglue/fedora-rdo-heat-engine",
"name": "heat-engine2",
"env": [{
"name": "AUTH_ENCRYPTION_KEY",
"value": "Vegu95l2jwkucD9RSYAoFpRbUlh0PGF7"}]
}]
}
}
def setUp(self):
super(HookKubeletTest, self).setUp()
docker = mock.MagicMock()
self.docker_client = mock.MagicMock()
docker.Client.return_value = self.docker_client
self.docker_client.version.return_value = {
'ApiVersion': '1.3.0'
}
hook_kubelet.docker = docker
def test_id_to_pod_name_part(self):
self.assertEqual(
'fc9070b3ba4e4f2',
hook_kubelet.id_to_pod_name_part(
'fc9070b3-ba4e-4f22-b732-5ffdcdb40b74'))
def test_container_pattern(self):
pattern = hook_kubelet.container_pattern(
'fc9070b3-ba4e-4f22-b732-5ffdcdb40b74', 'mariadb')
self.assertEqual(
'^/k8s_mariadb\\.[0-9a-z]{8}_fc9070b3ba4e4f2', pattern)
pat = re.compile(pattern)
self.assertIsNotNone(pat.match(
'/k8s_mariadb.dac8ccce_fc9070b3ba4e4f2'
'uv6pejpu5nqbmrqoungurhtob5gvt.default.'
'file_2c8cf9fc94674e8buv6pejpu5nqbmrqoungurhtob5gvt_dcd1e1d9'))
self.assertIsNotNone(pat.match(
'/k8s_mariadb.dac8ccce_fc9070b3ba4e4f2a'))
self.assertIsNone(pat.match(
'k8s_mariadb.dac8ccce_fc9070b3ba4e4f2a'))
self.assertIsNone(pat.match(
'/k8s_mysqldb.dac8ccce_fc9070b3ba4e4f2a'))
self.assertIsNone(pat.match(
'/k8s_mariadb.dac8ccc_fc9070b3ba4e4f2a'))
self.assertIsNone(pat.match(
'/k8s_mariadb.dac8ccce_gc9070b3ba4e4f22a'))
def test_required_images(self):
self.assertEqual(
set([
'kollaglue/fedora-rdo-heat-engine',
'kollaglue/fedora-rdo-rabbitmq']),
hook_kubelet.required_images(self.config))
self.assertEqual(
set(), hook_kubelet.required_images({'config': {}}))
def test_required_container_patterns(self):
patterns = hook_kubelet.required_container_patterns(self.config)
self.assertEqual({
'heat-engine': '^/k8s_heat-engine\\.[0-9a-z]{8}_a50ae8ddb0c4407',
'heat-engine2': '^/k8s_heat-engine2\\.[0-9a-z]{8}_a50ae8ddb0c4407',
'rabbitmq': '^/k8s_rabbitmq\\.[0-9a-z]{8}_a50ae8ddb0c4407'
}, patterns)