pytest_config_tests.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import yaml # type: ignore
  2. from dotenv import dotenv_values
  3. from pathlib import Path
  4. BASE_API_AND_DOCKER_CONFIG_SET_DIFF = {
  5. "APP_MAX_EXECUTION_TIME",
  6. "BATCH_UPLOAD_LIMIT",
  7. "CELERY_BEAT_SCHEDULER_TIME",
  8. "CODE_EXECUTION_API_KEY",
  9. "HTTP_REQUEST_MAX_CONNECT_TIMEOUT",
  10. "HTTP_REQUEST_MAX_READ_TIMEOUT",
  11. "HTTP_REQUEST_MAX_WRITE_TIMEOUT",
  12. "KEYWORD_DATA_SOURCE_TYPE",
  13. "LOGIN_LOCKOUT_DURATION",
  14. "LOG_FORMAT",
  15. "OCI_ACCESS_KEY",
  16. "OCI_BUCKET_NAME",
  17. "OCI_ENDPOINT",
  18. "OCI_REGION",
  19. "OCI_SECRET_KEY",
  20. "REDIS_DB",
  21. "RESEND_API_URL",
  22. "RESPECT_XFORWARD_HEADERS_ENABLED",
  23. "SENTRY_DSN",
  24. "SSRF_DEFAULT_CONNECT_TIME_OUT",
  25. "SSRF_DEFAULT_MAX_RETRIES",
  26. "SSRF_DEFAULT_READ_TIME_OUT",
  27. "SSRF_DEFAULT_TIME_OUT",
  28. "SSRF_DEFAULT_WRITE_TIME_OUT",
  29. "UPSTASH_VECTOR_TOKEN",
  30. "UPSTASH_VECTOR_URL",
  31. "USING_UGC_INDEX",
  32. "WEAVIATE_BATCH_SIZE",
  33. "WEAVIATE_GRPC_ENABLED",
  34. }
  35. BASE_API_AND_DOCKER_COMPOSE_CONFIG_SET_DIFF = {
  36. "BATCH_UPLOAD_LIMIT",
  37. "CELERY_BEAT_SCHEDULER_TIME",
  38. "HTTP_REQUEST_MAX_CONNECT_TIMEOUT",
  39. "HTTP_REQUEST_MAX_READ_TIMEOUT",
  40. "HTTP_REQUEST_MAX_WRITE_TIMEOUT",
  41. "KEYWORD_DATA_SOURCE_TYPE",
  42. "LOGIN_LOCKOUT_DURATION",
  43. "LOG_FORMAT",
  44. "OPENDAL_FS_ROOT",
  45. "OPENDAL_S3_ACCESS_KEY_ID",
  46. "OPENDAL_S3_BUCKET",
  47. "OPENDAL_S3_ENDPOINT",
  48. "OPENDAL_S3_REGION",
  49. "OPENDAL_S3_ROOT",
  50. "OPENDAL_S3_SECRET_ACCESS_KEY",
  51. "OPENDAL_S3_SERVER_SIDE_ENCRYPTION",
  52. "PGVECTOR_MAX_CONNECTION",
  53. "PGVECTOR_MIN_CONNECTION",
  54. "PGVECTO_RS_DATABASE",
  55. "PGVECTO_RS_HOST",
  56. "PGVECTO_RS_PASSWORD",
  57. "PGVECTO_RS_PORT",
  58. "PGVECTO_RS_USER",
  59. "RESPECT_XFORWARD_HEADERS_ENABLED",
  60. "SCARF_NO_ANALYTICS",
  61. "SSRF_DEFAULT_CONNECT_TIME_OUT",
  62. "SSRF_DEFAULT_MAX_RETRIES",
  63. "SSRF_DEFAULT_READ_TIME_OUT",
  64. "SSRF_DEFAULT_TIME_OUT",
  65. "SSRF_DEFAULT_WRITE_TIME_OUT",
  66. "STORAGE_OPENDAL_SCHEME",
  67. "SUPABASE_API_KEY",
  68. "SUPABASE_BUCKET_NAME",
  69. "SUPABASE_URL",
  70. "USING_UGC_INDEX",
  71. "VIKINGDB_CONNECTION_TIMEOUT",
  72. "VIKINGDB_SOCKET_TIMEOUT",
  73. "WEAVIATE_BATCH_SIZE",
  74. "WEAVIATE_GRPC_ENABLED",
  75. }
  76. API_CONFIG_SET = set(dotenv_values(Path("api") / Path(".env.example")).keys())
  77. DOCKER_CONFIG_SET = set(dotenv_values(Path("docker") / Path(".env.example")).keys())
  78. DOCKER_COMPOSE_CONFIG_SET = set()
  79. with open(Path("docker") / Path("docker-compose.yaml")) as f:
  80. DOCKER_COMPOSE_CONFIG_SET = set(yaml.safe_load(f.read())["x-shared-env"].keys())
  81. def test_yaml_config():
  82. # python set == operator is used to compare two sets
  83. DIFF_API_WITH_DOCKER = (
  84. API_CONFIG_SET - DOCKER_CONFIG_SET - BASE_API_AND_DOCKER_CONFIG_SET_DIFF
  85. )
  86. if DIFF_API_WITH_DOCKER:
  87. print(
  88. f"API and Docker config sets are different with key: {DIFF_API_WITH_DOCKER}"
  89. )
  90. raise Exception("API and Docker config sets are different")
  91. DIFF_API_WITH_DOCKER_COMPOSE = (
  92. API_CONFIG_SET
  93. - DOCKER_COMPOSE_CONFIG_SET
  94. - BASE_API_AND_DOCKER_COMPOSE_CONFIG_SET_DIFF
  95. )
  96. if DIFF_API_WITH_DOCKER_COMPOSE:
  97. print(
  98. f"API and Docker Compose config sets are different with key: {DIFF_API_WITH_DOCKER_COMPOSE}"
  99. )
  100. raise Exception("API and Docker Compose config sets are different")
  101. print("All tests passed!")
  102. if __name__ == "__main__":
  103. test_yaml_config()