/tests/integration/idem_vault/states/secrets/kv_v1/test_key.py

https://gitlab.com/hyingzhi/idem-vault
Python | 116 lines | 93 code | 13 blank | 10 comment | 11 complexity | 7644e1f94a499667e2d49ae88f3a046c MD5 | raw file
  1. import copy
  2. import uuid
  3. import pytest
  4. @pytest.mark.asyncio
  5. async def test_secret(hub, ctx, version):
  6. if version == "v2":
  7. return
  8. secret_name = "idem-test-kv-v1-key-" + str(uuid.uuid4())
  9. path = "secret/idem-test-kv-v1-key"
  10. # create secrets with 2 keys in the above path
  11. data = {"my-secret": "my-secret-value", "new-secret": "new-secret-value"}
  12. ret = await hub.states.vault.secrets.kv_v1.secret.present(
  13. ctx=ctx, name=secret_name, path=path, data=data
  14. )
  15. assert ret["result"], ret["comment"]
  16. # Add one more secret to the same path using key state
  17. key = "secret-key"
  18. value = "secret-value"
  19. test_ctx = copy.deepcopy(ctx)
  20. test_ctx["test"] = True
  21. ret = await hub.states.vault.secrets.kv_v1.key.present(
  22. ctx=test_ctx, name=secret_name, path=path, key=key, value=value
  23. )
  24. assert ret["result"], ret["comment"]
  25. assert f"Would create vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  26. assert not ret["old_state"] and ret["new_state"]
  27. resource = ret["new_state"]
  28. assert key == resource.get("key")
  29. assert value == resource.get("value")
  30. ret = await hub.states.vault.secrets.kv_v1.key.present(
  31. ctx=ctx, name=secret_name, path=path, key=key, value=value
  32. )
  33. assert ret["result"], ret["comment"]
  34. assert f"Created vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  35. assert not ret["old_state"] and ret["new_state"]
  36. resource = ret["new_state"]
  37. assert key == resource.get("key")
  38. assert value == resource.get("value")
  39. # Search using secret state should return newly added key along with other keys
  40. ret = await hub.states.vault.secrets.kv_v1.secret.search(
  41. ctx=ctx, name=secret_name, path=path
  42. )
  43. assert ret["result"], ret["comment"]
  44. assert ret["old_state"] and ret["new_state"]
  45. resource = ret["new_state"]
  46. assert 3 == len(resource.get("data"))
  47. # Update a key with new value with --test flag
  48. value = "update-secret-value"
  49. ret = await hub.states.vault.secrets.kv_v1.key.present(
  50. ctx=test_ctx, name=secret_name, path=path, key=key, value=value
  51. )
  52. assert ret["result"], ret["comment"]
  53. assert f"Would update vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  54. assert ret["old_state"] and ret["new_state"]
  55. resource = ret["new_state"]
  56. assert key == resource.get("key")
  57. assert value == resource.get("value")
  58. ret = await hub.states.vault.secrets.kv_v1.key.present(
  59. ctx=ctx, name=secret_name, path=path, key=key, value=value
  60. )
  61. assert ret["result"], ret["comment"]
  62. assert f"Updated vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  63. assert ret["old_state"] and ret["new_state"]
  64. resource = ret["new_state"]
  65. assert key == resource.get("key")
  66. assert value == resource.get("value")
  67. # delete the key with --test
  68. ret = await hub.states.vault.secrets.kv_v1.key.absent(
  69. ctx=test_ctx, name=secret_name, path=path, key=key
  70. )
  71. assert ret["result"], ret["comment"]
  72. assert f"Would delete vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  73. assert ret["old_state"] and not ret["new_state"]
  74. # Delete key in real
  75. ret = await hub.states.vault.secrets.kv_v1.key.absent(
  76. ctx=ctx, name=secret_name, path=path, key=key
  77. )
  78. assert ret["result"], ret["comment"]
  79. assert f"Deleted vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  80. assert ret["old_state"] and not ret["new_state"]
  81. assert f"Deleted vault.secrets.kv_v1.key '{key}'." in ret["comment"]
  82. # Delete the same key again
  83. ret = await hub.states.vault.secrets.kv_v1.key.absent(
  84. ctx=ctx, name=secret_name, path=path, key=key
  85. )
  86. assert ret["result"], ret["comment"]
  87. assert not ret["old_state"] and not ret["new_state"]
  88. assert f"vault.secrets.kv_v1.key '{key}' is already absent." in ret["comment"]
  89. # Search should now return only 2 keys
  90. ret = await hub.states.vault.secrets.kv_v1.secret.search(
  91. ctx=ctx, name=secret_name, path=path
  92. )
  93. assert ret["result"], ret["comment"]
  94. assert ret["old_state"] and ret["new_state"]
  95. resource = ret["new_state"]
  96. assert 2 == len(resource.get("data"))
  97. # Destroy all keys in the path
  98. # Delete secret with all versions with test
  99. ret = await hub.states.vault.secrets.kv_v1.secret.absent(
  100. ctx=test_ctx, name=secret_name, path=path
  101. )
  102. assert ret["result"], ret["comment"]
  103. assert ret["old_state"] and not ret["new_state"]