def test_secret_value_pulled_from_context(self): secret = PrefectSecret(name="test") with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(test=42)): assert secret.run() == 42 with pytest.raises(ValueError): secret.run()
def test_local_secrets_auto_load_json_strings(self): secret = PrefectSecret(name="test") with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(test='{"x": 42}')): assert secret.run() == {"x": 42} with pytest.raises(ValueError): secret.run()
def test_secret_value_depends_on_use_local_secrets(self, monkeypatch): response = {"errors": "Malformed Authorization header"} post = MagicMock(return_value=MagicMock(json=MagicMock(return_value=response))) session = MagicMock() session.return_value.post = post monkeypatch.setattr("requests.Session", session) secret = PrefectSecret(name="test") with set_temporary_config( {"cloud.use_local_secrets": False, "cloud.auth_token": None} ): with prefect.context(secrets=dict()): with pytest.raises(ClientError): secret.run()
def test_cloud_secrets_remain_plain_dictionaries(self, monkeypatch): response = { "data": { "secret_value": { "a": "1234", "b": [1, 2, { "c": 3 }] } } } post = MagicMock(return_value=MagicMock(json=MagicMock( return_value=response))) session = MagicMock() session.return_value.post = post monkeypatch.setattr("requests.Session", session) with set_temporary_config({ "cloud.auth_token": "secret_token", "cloud.use_local_secrets": False }): my_secret = PrefectSecret(name="the-key") val = my_secret.run() assert val == {"a": "1234", "b": [1, 2, {"c": 3}]} assert isinstance(val, dict) and not isinstance(val, box.Box) val2 = val["b"] assert isinstance(val2, list) and not isinstance(val2, box.BoxList) val3 = val["b"][2] assert isinstance(val3, dict) and not isinstance(val3, box.Box)
def test_local_secrets_remain_plain_dictionaries(self): secret = PrefectSecret(name="test") with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(test={"x": 42})): assert isinstance(prefect.context.secrets["test"], dict) val = secret.run() assert val == {"x": 42} assert isinstance(val, dict) and not isinstance(val, box.Box)
def test_reads_by_rerunning_task(self): task = PrefectSecret("foo") task.run = lambda *args, **kwargs: 42 result = SecretResult(task) result.location == "foo" new_result = result.read("foo") assert new_result.value == 42 new_result.location == "foo"
def test_secrets_use_client(self, monkeypatch): response = {"data": {"secret_value": '"1234"'}} post = MagicMock(return_value=MagicMock(json=MagicMock(return_value=response))) session = MagicMock() session.return_value.post = post monkeypatch.setattr("requests.Session", session) with set_temporary_config( {"cloud.auth_token": "secret_token", "cloud.use_local_secrets": False} ): my_secret = PrefectSecret(name="the-key") val = my_secret.run() assert val == "1234"
def test_cloud_secrets_auto_load_json_strings(self, monkeypatch): response = {"data": {"secret_value": '{"x": 42}'}} post = MagicMock(return_value=MagicMock(json=MagicMock(return_value=response))) session = MagicMock() session.return_value.post = post monkeypatch.setattr("requests.Session", session) with set_temporary_config( {"cloud.auth_token": "secret_token", "cloud.use_local_secrets": False} ): my_secret = PrefectSecret(name="the-key") val = my_secret.run() assert isinstance(val, dict)
def test_secret_raises_if_doesnt_exist(self): secret = PrefectSecret(name="test") with set_temporary_config({"cloud.use_local_secrets": True}): with pytest.raises(ValueError, match="not found"): secret.run()
def test_secret_raises_if_no_name_provided(self): secret = PrefectSecret() with set_temporary_config({"cloud.use_local_secrets": True}): with pytest.raises(ValueError, match="secret name must be provided"): secret.run()
def test_secret_name_set_at_runtime(self): secret = PrefectSecret() with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(foo="bar")): assert secret.run(name="foo") == "bar"
def test_secret_name_can_be_overwritten(self): secret = PrefectSecret(name="test") with set_temporary_config({"cloud.use_local_secrets": True}): with prefect.context(secrets=dict(test=42, foo="bar")): assert secret.run() == 42 assert secret.run(name="foo") == "bar"