test_auth.py
1 # SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai> 2 # 3 # SPDX-License-Identifier: Apache-2.0 4 5 import os 6 from dataclasses import FrozenInstanceError 7 8 import pytest 9 10 from haystack.utils.auth import EnvVarSecret, Secret, SecretType, TokenSecret 11 12 13 def test_secret_type(): 14 for e in SecretType: 15 assert e == SecretType.from_str(e.value) 16 17 with pytest.raises(ValueError, match="Unknown secret type"): 18 SecretType.from_str("disk") 19 20 21 def test_token_secret(): 22 secret = Secret.from_token("test-token") 23 assert secret.type == SecretType.TOKEN 24 assert isinstance(secret, TokenSecret) 25 assert secret._token == "test-token" 26 assert secret.resolve_value() == "test-token" 27 28 with pytest.raises(ValueError, match="Cannot serialize token-based secret"): 29 secret.to_dict() 30 31 with pytest.raises(ValueError, match="cannot be empty"): 32 Secret.from_token("") 33 34 with pytest.raises(FrozenInstanceError): 35 secret._token = "abba" 36 with pytest.raises(FrozenInstanceError): 37 secret._type = SecretType.ENV_VAR 38 39 40 def test_env_var_secret(): 41 secret = Secret.from_env_var("TEST_ENV_VAR1") 42 os.environ["TEST_ENV_VAR1"] = "test-token" 43 44 assert secret.type == SecretType.ENV_VAR 45 assert isinstance(secret, EnvVarSecret) 46 assert secret._env_vars == ("TEST_ENV_VAR1",) 47 assert secret._strict is True 48 assert secret.resolve_value() == "test-token" 49 50 del os.environ["TEST_ENV_VAR1"] 51 with pytest.raises(ValueError, match="None of the following .* variables are set"): 52 secret.resolve_value() 53 54 secret = Secret.from_env_var("TEST_ENV_VAR2", strict=False) 55 assert secret._strict is False 56 assert secret.resolve_value() == None 57 58 secret = Secret.from_env_var(["TEST_ENV_VAR2", "TEST_ENV_VAR1"], strict=True) 59 assert secret._env_vars == ("TEST_ENV_VAR2", "TEST_ENV_VAR1") 60 with pytest.raises(ValueError, match="None of the following .* variables are set"): 61 secret.resolve_value() 62 os.environ["TEST_ENV_VAR1"] = "test-token-2" 63 assert secret.resolve_value() == "test-token-2" 64 os.environ["TEST_ENV_VAR2"] = "test-token" 65 assert secret.resolve_value() == "test-token" 66 67 with pytest.raises(ValueError, match="One or more environment variables"): 68 Secret.from_env_var([]) 69 70 assert secret.to_dict() == {"type": "env_var", "env_vars": ["TEST_ENV_VAR2", "TEST_ENV_VAR1"], "strict": True} 71 assert ( 72 Secret.from_dict({"type": "env_var", "env_vars": ["TEST_ENV_VAR2", "TEST_ENV_VAR1"], "strict": True}) == secret 73 ) 74 75 with pytest.raises(FrozenInstanceError): 76 secret._env_vars = ("A", "B") 77 with pytest.raises(FrozenInstanceError): 78 secret._strict = False 79 with pytest.raises(FrozenInstanceError): 80 secret._type = SecretType.TOKEN