You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by tl...@apache.org on 2020/07/21 15:57:19 UTC

[incubator-sdap-ingester] 02/02: add unit test for K8sConfigMap

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 <th...@jpl.nasa.gov>
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()