pytest_config_tests.py 3.6 KB

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