У меня очень простая Google Cloud Function , написанная на Python, и она ссылается на Google Secret Manager через их библиотеку Python.
Код очень прост и это выглядит так:
import os
from google.cloud import secretmanager
import logging
client = secretmanager.SecretManagerServiceClient()
secret_name = "my-secret"
project_id = os.environ.get('GCP_PROJECT')
resource_name = "projects/{}/secrets/{}/versions/latest".format(project_id, secret_name)
response = client.access_secret_version(resource_name)
secret_string = response.payload.data.decode('UTF-8')
def new_measures_handler(data, context):
logging.info(secret_string)
print('File: {}.'.format(data['name']))
, а затем у меня есть мой простой модульный тест, который пытается использовать исправление обезьян :
import main
def test_print(capsys, monkeypatch):
# arrange
monkeypatch.setenv("GCP_PROJECT", "TestingUser")
monkeypatch.setattr(secretmanager, "SecretManagerServiceClient", lambda: 1)
name = 'test'
data = {'name': name}
# act
main.new_measures_handler(data, None)
out, err = capsys.readouterr()
#assert
assert out == 'File: {}.\n'.format(name)
Все идет хорошо с макетом для переменной среды, но я не могу издеваться secretmanager
. Он продолжает пытаться вызвать фактический API. Моя конечная цель - смоделировать secretmanager.SecretManagerServiceClient()
и заставить его вернуть объект, который в дальнейшем может быть использован: client.access_secret_version(resource_name)
(я думаю, что мне также нужно будет высмеивать)