This is an automated email from the ASF dual-hosted git repository. tloubrieu pushed a commit to branch kopf-operator in repository https://gitbox.apache.org/repos/asf/incubator-sdap-ingester.git
commit 6b40f0680abbba680031ba09f7f6bf9186e4e0ae Author: thomas loubrieu <[email protected]> AuthorDate: Tue Jul 21 08:56:50 2020 -0700 add unit test for K8sConfigMap --- .../config_operator/k8s/K8sConfigMap.py | 26 +++++++++------- config_operator/tests/k8s/test_K8sConfigMap.py | 35 ++++++++++++++++++++-- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/config_operator/config_operator/k8s/K8sConfigMap.py b/config_operator/config_operator/k8s/K8sConfigMap.py index e2a7a10..40d07c9 100644 --- a/config_operator/config_operator/k8s/K8sConfigMap.py +++ b/config_operator/config_operator/k8s/K8sConfigMap.py @@ -4,7 +4,8 @@ from kubernetes import client, config from config_operator.config_source import LocalDirConfig, RemoteGitConfig from kubernetes.client.rest import ApiException from typing import Union - +from kubernetes.client.api.core_v1_api import CoreV1Api +from kubernetes.client import ApiClient from config_operator.config_source.exceptions import UnreadableFileException logging.basicConfig(level=logging.INFO) @@ -14,19 +15,24 @@ logger = logging.getLogger(__name__) class K8sConfigMap: def __init__(self, configmap_name: str, namespace: str, - external_config: Union[LocalDirConfig, RemoteGitConfig]): + external_config: Union[LocalDirConfig, RemoteGitConfig], + api_instance: ApiClient = None, + api_core_v1_instance: CoreV1Api = None): self._git_remote_config = external_config self._namespace = namespace self._configmap_name = configmap_name - # test is this runs inside kubernetes cluster - if os.getenv('KUBERNETES_SERVICE_HOST'): - config.load_incluster_config() - else: - config.load_kube_config() - configuration = client.Configuration() - self._api_instance = client.ApiClient(configuration) - self._api_core_v1_instance = client.CoreV1Api(self._api_instance) + if api_core_v1_instance is None: + # test is this runs inside kubernetes cluster + if os.getenv('KUBERNETES_SERVICE_HOST'): + config.load_incluster_config() + else: + config.load_kube_config() + configuration = client.Configuration() + api_instance = client.ApiClient(configuration) + api_core_v1_instance = client.CoreV1Api(api_instance) + self._api_instance = api_instance + self._api_core_v1_instance = api_core_v1_instance self.publish() def __del__(self): diff --git a/config_operator/tests/k8s/test_K8sConfigMap.py b/config_operator/tests/k8s/test_K8sConfigMap.py index 710b3f6..e649fbc 100644 --- a/config_operator/tests/k8s/test_K8sConfigMap.py +++ b/config_operator/tests/k8s/test_K8sConfigMap.py @@ -1,5 +1,7 @@ import unittest +from unittest.mock import Mock import os +from kubernetes.client.rest import ApiException from config_operator.k8s import K8sConfigMap from config_operator.config_source import RemoteGitConfig, LocalDirConfig @@ -28,14 +30,43 @@ class K8sConfigMapTest(unittest.TestCase): config_map = K8sConfigMap('collection-ingester', 'sdap', remote_git_config) config_map.publish() + @unittest.skip('requires kubernetes') + def test_createconfigmapfromlocaldir_with_k8s(self): + local_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), + '..', + 'resources', + 'localDirTest') + local_config = LocalDirConfig(local_dir) + + config_map = K8sConfigMap('collection-ingester', 'sdap', local_config) + config_map.publish() + def test_createconfigmapfromlocaldir(self): local_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'localDirTest') - remote_git_config = LocalDirConfig(local_dir) + local_config = LocalDirConfig(local_dir) - config_map = K8sConfigMap('collection-ingester', 'sdap', remote_git_config) + api_instance = Mock() + api_instance.close = Mock() + + api_core_v1_mock = Mock() + api_core_v1_mock.create_namespaced_config_map = Mock(return_value={ + 'api_version': 'v1', + 'binary_data': None, + 'data': {} + }) + api_core_v1_mock.patch_namespaced_config_map = Mock(return_value={ + 'api_version': 'v1', + 'binary_data': None, + 'data': {} + }) + api_core_v1_mock.create_namespaced_config_map.side_effect = Mock(side_effect=ApiException('409')) + + config_map = K8sConfigMap('collection-ingester', 'sdap', local_config, + api_instance = api_instance, + api_core_v1_instance=api_core_v1_mock) config_map.publish()
