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