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 <[email protected]>
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