# -*- coding: utf-8 -*- # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. from __future__ import absolute_import, division, print_function from tests.common.impala_test_suite import ImpalaTestSuite from tests.common.test_dimensions import create_client_protocol_http_transport from tests.shell.util import run_impala_shell_cmd class TestImpalaShellJwtAuth(ImpalaTestSuite): @classmethod def add_test_dimensions(cls): """Overrides all other add_dimension methods in super classes up the entire class hierarchy ensuring that each test in this class only get run once.""" cls.ImpalaTestMatrix.add_dimension(create_client_protocol_http_transport()) def test_jwt_cmd_without_jwt_auth(self, vector): """Asserts the jwt_cmd arg is only allowed when JWT auth is enabled.""" result = run_impala_shell_cmd(vector, ['--jwt_cmd=echo', '--protocol=hs2-http', '--auth_creds_ok_in_clear'], expect_success=False) assert "Option --jwt_cmd requires using JWT authentication mechanism (-j)" \ in result.stderr def test_jwt_cmd_invalid(self, vector): """Asserts an invalid jwt_cmd arg value produces an explanatory error message.""" result = run_impala_shell_cmd(vector, ['-j', '--protocol=hs2-http', '--auth_creds_ok_in_clear', '--jwt_cmd=idontexist'], expect_success=False) assert "Error retrieving JWT" in result.stderr assert "command was: 'idontexist'" in result.stderr def test_jwt_auth_without_ssl_creds_in_clear(self, vector): """Asserts that JWTs do not get sent over insecure network connections if the user does not provide the auth_creds_ok_in_clear arg.""" result = run_impala_shell_cmd(vector, ['-j', '--protocol=hs2-http'], expect_success=False) assert "JWTs may not be sent over insecure connections. Enable SSL or " \ "set --auth_creds_ok_in_clear" in result.stderr def test_jwt_auth_protocol_beeswax(self, vector): """Asserts that JWT auth does not work with the beeswax protocol.""" result = run_impala_shell_cmd(vector, ['-j', '--protocol=beeswax'], expect_success=False) assert "Invalid protocol 'beeswax'. JWT authentication requires using the " \ "'hs2-http' protocol" in result.stderr def test_jwt_auth_protocol_hs2_no_http(self, vector): """Asserts that JWT auth does not work with the plain hs2 protocol.""" result = run_impala_shell_cmd(vector, ['-j', '--protocol=hs2'], expect_success=False) assert "Invalid protocol 'hs2'. JWT authentication requires using the " \ "'hs2-http' protocol" in result.stderr def test_jwt_auth_protocol_strict_hs2(self, vector): """Asserts that JWT auth does not work when strict hs2 is enabled.""" result = run_impala_shell_cmd(vector, ['-j', '--protocol=hs2-http', '--strict_hs2_protocol'], expect_success=False) assert "JWT authentication is not supported when using strict hs2." in result.stderr def test_multiple_auth_ldap_jwt(self, vector): """Asserts that ldap and jwt auth cannot both be enabled.""" result = run_impala_shell_cmd(vector, ['-l', '-j'], expect_success=False) assert "Please specify at most one authentication mechanism (-k, -l, -j, or -a)" \ in result.stderr def test_multiple_auth_ldap_kerberos(self, vector): """Asserts that ldap and kerberos auth cannot both be enabled.""" result = run_impala_shell_cmd(vector, ['-l', '-k'], expect_success=False) assert "Please specify at most one authentication mechanism (-k, -l, -j, or -a)" \ in result.stderr def test_multiple_auth_jwt_kerberos(self, vector): """Asserts that jwt and kerberos auth cannot both be enabled.""" result = run_impala_shell_cmd(vector, ['-j', '-k'], expect_success=False) assert "Please specify at most one authentication mechanism (-k, -l, -j, or -a)" \ in result.stderr def test_multiple_auth_ldap_jwt_kerberos(self, vector): """Asserts ldap, jwt, and kerberos auth cannot all be enabled.""" result = run_impala_shell_cmd(vector, ['-l', '-j', '-k'], expect_success=False) assert "Please specify at most one authentication mechanism (-k, -l, -j, or -a)" \ in result.stderr