image_storage_env_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //go:build unit
  2. package config
  3. import (
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. // TestLoadImageStorageFromEnv guards against a viper trap that silently disabled
  8. // asynchronous image tasks for every environment-variable-only deployment.
  9. //
  10. // viper only decodes keys returned by AllKeys(), which unions SetDefault keys,
  11. // config-file keys and explicit BindEnv keys. AutomaticEnv can override a key
  12. // that is already in that list, but it never introduces a new one. Credentials
  13. // such as image_storage.bucket therefore need an (empty) default registered, or
  14. // IMAGE_STORAGE_BUCKET is dropped on the floor and Active() stays false while
  15. // image_storage.enabled reads true — the endpoints 404 with no useful signal.
  16. func TestLoadImageStorageFromEnv(t *testing.T) {
  17. resetViperWithJWTSecret(t)
  18. t.Setenv("IMAGE_STORAGE_ENABLED", "true")
  19. t.Setenv("IMAGE_STORAGE_ENDPOINT", "https://acct.r2.cloudflarestorage.com")
  20. t.Setenv("IMAGE_STORAGE_BUCKET", "my-images")
  21. t.Setenv("IMAGE_STORAGE_ACCESS_KEY_ID", "ak")
  22. t.Setenv("IMAGE_STORAGE_SECRET_ACCESS_KEY", "sk")
  23. t.Setenv("IMAGE_STORAGE_PUBLIC_BASE_URL", "https://cdn.example.com")
  24. cfg, err := Load()
  25. require.NoError(t, err)
  26. require.True(t, cfg.ImageStorage.Enabled)
  27. require.Equal(t, "https://acct.r2.cloudflarestorage.com", cfg.ImageStorage.Endpoint)
  28. require.Equal(t, "my-images", cfg.ImageStorage.Bucket)
  29. require.Equal(t, "ak", cfg.ImageStorage.AccessKeyID)
  30. require.Equal(t, "sk", cfg.ImageStorage.SecretAccessKey)
  31. require.Equal(t, "https://cdn.example.com", cfg.ImageStorage.PublicBaseURL)
  32. require.True(t, cfg.ImageStorage.IsConfigured())
  33. require.True(t, cfg.ImageStorage.Active(), "async image tasks must be active when every credential is supplied via env")
  34. }