This is an automated email from the ASF dual-hosted git repository.

kamilbregula pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new a6be597  Test kubernetes refresh config (#18563)
a6be597 is described below

commit a6be59726004001214bd4d7e284fd1748425fa98
Author: Kanthi <subkan...@gmail.com>
AuthorDate: Wed Oct 13 19:30:28 2021 -0400

    Test kubernetes refresh config (#18563)
    
    * Fixed flak8 errors
    
    * Removed unused import
    
    * Fixed pre-commit errors
    
    * Moved return value to mock.patch for test_refresh_config
    
    * Fixed flake8 errors
---
 tests/kubernetes/kube_config            | 37 +++++++++++++++++
 tests/kubernetes/test_refresh_config.py | 73 ++++++++++++++++++++++++++++++++-
 2 files changed, 108 insertions(+), 2 deletions(-)

diff --git a/tests/kubernetes/kube_config b/tests/kubernetes/kube_config
new file mode 100644
index 0000000..fedcb85
--- /dev/null
+++ b/tests/kubernetes/kube_config
@@ -0,0 +1,37 @@
+current-context: federal-context
+apiVersion: v1
+clusters:
+- cluster:
+    api-version: v1
+    server: http://cow.org:8080
+  name: cow-cluster
+- cluster:
+    certificate-authority: path/to/my/cafile
+    server: https://horse.org:4443
+  name: horse-cluster
+- cluster:
+    insecure-skip-tls-verify: true
+    server: https://pig.org:443
+  name: pig-cluster
+contexts:
+- context:
+    cluster: horse-cluster
+    namespace: chisel-ns
+    user: green-user
+  name: federal-context
+- context:
+    cluster: pig-cluster
+    namespace: saw-ns
+    user: black-user
+  name: queen-anne-context
+kind: Config
+preferences:
+  colors: true
+users:
+- name: blue-user
+  user:
+    token: blue-token
+- name: green-user
+  user:
+    client-certificate: path/to/my/client/cert
+    client-key: path/to/my/client/key
diff --git a/tests/kubernetes/test_refresh_config.py 
b/tests/kubernetes/test_refresh_config.py
index a0753e2..61c1b86 100644
--- a/tests/kubernetes/test_refresh_config.py
+++ b/tests/kubernetes/test_refresh_config.py
@@ -15,15 +15,28 @@
 # specific language governing permissions and limitations
 # under the License.
 
-from unittest import TestCase
+import os
+from unittest import TestCase, mock
 
 import pytest
+from kubernetes.config.kube_config import ConfigNode
 from pendulum.parsing import ParserError
 
-from airflow.kubernetes.refresh_config import _parse_timestamp
+from airflow.kubernetes.refresh_config import (
+    RefreshConfiguration,
+    RefreshKubeConfigLoader,
+    _get_kube_config_loader_for_yaml_file,
+    _parse_timestamp,
+)
 
 
 class TestRefreshKubeConfigLoader(TestCase):
+    ROOT_PROJECT_DIR = os.path.abspath(
+        os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir, 
os.pardir)
+    )
+
+    KUBE_CONFIG_PATH = os.path.join(ROOT_PROJECT_DIR, "tests", "kubernetes", 
"kube_config")
+
     def test_parse_timestamp_should_convert_z_timezone_to_unix_timestamp(self):
         ts = _parse_timestamp("2020-01-13T13:42:20Z")
         assert 1578922940 == ts
@@ -35,3 +48,59 @@ class TestRefreshKubeConfigLoader(TestCase):
     def test_parse_timestamp_should_throw_exception(self):
         with pytest.raises(ParserError):
             _parse_timestamp("foobar")
+
+    def test_get_kube_config_loader_for_yaml_file(self):
+        refresh_kube_config_loader = 
_get_kube_config_loader_for_yaml_file(self.KUBE_CONFIG_PATH)
+
+        assert refresh_kube_config_loader is not None
+
+        assert refresh_kube_config_loader.current_context['name'] == 
'federal-context'
+
+        context = refresh_kube_config_loader.current_context['context']
+        assert context is not None
+        assert context['cluster'] == 'horse-cluster'
+        assert context['namespace'] == 'chisel-ns'
+        assert context['user'] == 'green-user'
+
+    def test_get_api_key_with_prefix(self):
+
+        refresh_config = RefreshConfiguration()
+        refresh_config.api_key['key'] = '1234'
+        assert refresh_config is not None
+
+        api_key = refresh_config.get_api_key_with_prefix("key")
+
+        assert api_key == '1234'
+
+    @mock.patch('kubernetes.config.exec_provider.ExecProvider.__init__', 
return_value=None)
+    @mock.patch('kubernetes.config.exec_provider.ExecProvider.run', 
return_value={'token': '1234'})
+    def test_refresh_kube_config_loader(self, exec_provider_run, 
exec_provider_init):
+        current_context = 
_get_kube_config_loader_for_yaml_file(self.KUBE_CONFIG_PATH).current_context
+
+        config_dict = {}
+        config_dict['current-context'] = 'federal-context'
+        config_dict['contexts'] = []
+        config_dict['contexts'].append(current_context)
+
+        config_dict['clusters'] = []
+
+        cluster_config = {}
+        cluster_config['api-version'] = 'v1'
+        cluster_config['server'] = 'http://cow.org:8080'
+        cluster_config['name'] = 'horse-cluster'
+        cluster_root_config = {}
+        cluster_root_config['cluster'] = cluster_config
+        cluster_root_config['name'] = 'horse-cluster'
+        config_dict['clusters'].append(cluster_root_config)
+
+        refresh_kube_config_loader = 
RefreshKubeConfigLoader(config_dict=config_dict)
+        refresh_kube_config_loader._user = {}
+
+        config_node = ConfigNode('command', 'test')
+        config_node.__dict__['apiVersion'] = '2.0'
+        config_node.__dict__['command'] = 'test'
+
+        refresh_kube_config_loader._user['exec'] = config_node
+
+        result = refresh_kube_config_loader._load_from_exec_plugin()
+        assert result is not None

Reply via email to