package storage_test import ( "strings" "testing" "sneak.berlin/go/vaultik/internal/config" "sneak.berlin/go/vaultik/internal/storage" ) // legacyS3Config returns a minimal s3.* (no storage_url) configuration with a // scheme-less endpoint. useSSL mirrors the config file: nil means the key is // omitted, a pointer means it was written explicitly. func legacyS3Config(useSSL *bool) *config.Config { return &config.Config{ S3: config.S3Config{ Endpoint: "s3.example.com", Bucket: "bucket", AccessKeyID: "key", SecretAccessKey: "secret", Region: "us-east-1", UseSSL: useSSL, }, } } // endpointScheme builds the storer from cfg and returns the scheme its // resolved endpoint carries (Info().Location is "endpoint/bucket"). func endpointScheme(t *testing.T, cfg *config.Config) string { t.Helper() storer, err := storage.NewStorer(cfg) if err != nil { t.Fatalf("NewStorer: %v", err) } location := storer.Info().Location switch { case strings.HasPrefix(location, "https://"): return "https" case strings.HasPrefix(location, "http://"): return "http" default: t.Fatalf("endpoint has no http(s) scheme: %q", location) return "" } } func TestLegacyS3SchemelessEndpointDefaultsToTLS(t *testing.T) { t.Parallel() if got := endpointScheme(t, legacyS3Config(nil)); got != "https" { t.Errorf("use_ssl omitted: got %q scheme, want https", got) } no := false if got := endpointScheme(t, legacyS3Config(&no)); got != "http" { t.Errorf("use_ssl: false: got %q scheme, want http", got) } }