mirror of
https://github.com/git-pkgs/proxy.git
synced 2026-11-09 07:39:19 -05:00
69 lines
2.5 KiB
Go
69 lines
2.5 KiB
Go
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"testing"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestProjectsConfigValidate(t *testing.T) {
|
||
|
|
t.Setenv("PROJECTS_TEST_TOKEN", "from-env")
|
||
|
|
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
projects ProjectsConfig
|
||
|
|
wantErr bool
|
||
|
|
maxAge time.Duration
|
||
|
|
}{
|
||
|
|
{name: "disabled without token", projects: ProjectsConfig{}},
|
||
|
|
{name: "enabled without token", projects: ProjectsConfig{Enabled: true}, wantErr: true},
|
||
|
|
{name: "enabled with token", projects: ProjectsConfig{Enabled: true, Token: "s3cret"}},
|
||
|
|
{name: "token from env reference", projects: ProjectsConfig{Enabled: true, Token: "${PROJECTS_TEST_TOKEN}"}},
|
||
|
|
{name: "token env reference unset", projects: ProjectsConfig{Enabled: true, Token: "${PROJECTS_TEST_UNSET}"}, wantErr: true},
|
||
|
|
{name: "max age in days", projects: ProjectsConfig{Enabled: true, Token: "s3cret", MaxAge: "90d"}, maxAge: 90 * 24 * time.Hour},
|
||
|
|
{name: "max age in hours", projects: ProjectsConfig{Enabled: true, Token: "s3cret", MaxAge: "36h"}, maxAge: 36 * time.Hour},
|
||
|
|
{name: "max age zero keeps projects", projects: ProjectsConfig{Enabled: true, Token: "s3cret", MaxAge: "0"}},
|
||
|
|
{name: "invalid max age", projects: ProjectsConfig{Enabled: true, Token: "s3cret", MaxAge: "soon"}, wantErr: true},
|
||
|
|
{name: "negative max age", projects: ProjectsConfig{Enabled: true, Token: "s3cret", MaxAge: "-1d"}, wantErr: true},
|
||
|
|
}
|
||
|
|
for _, tt := range tests {
|
||
|
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
|
err := tt.projects.Validate()
|
||
|
|
if (err != nil) != tt.wantErr {
|
||
|
|
t.Fatalf("Validate() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
|
}
|
||
|
|
if got := tt.projects.MaxAgeDuration(); err == nil && got != tt.maxAge {
|
||
|
|
t.Errorf("MaxAgeDuration() = %v, want %v", got, tt.maxAge)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestLoadFromEnvProjects(t *testing.T) {
|
||
|
|
cfg := Default()
|
||
|
|
t.Setenv("PROXY_PROJECTS_ENABLED", "true")
|
||
|
|
t.Setenv("PROXY_PROJECTS_TOKEN", "env-token")
|
||
|
|
t.Setenv("PROXY_PROJECTS_MAX_AGE", "30d")
|
||
|
|
|
||
|
|
cfg.LoadFromEnv()
|
||
|
|
|
||
|
|
if !cfg.Projects.Enabled {
|
||
|
|
t.Error("Projects.Enabled not loaded from PROXY_PROJECTS_ENABLED")
|
||
|
|
}
|
||
|
|
if cfg.Projects.TokenExpanded() != "env-token" {
|
||
|
|
t.Errorf("Projects.Token = %q, want env-token", cfg.Projects.Token)
|
||
|
|
}
|
||
|
|
if err := cfg.Validate(); err != nil {
|
||
|
|
t.Fatalf("Validate: %v", err)
|
||
|
|
}
|
||
|
|
if got := cfg.Projects.MaxAgeDuration(); got != 30*24*time.Hour {
|
||
|
|
t.Errorf("MaxAgeDuration() = %v, want 30 days", got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestValidateRejectsProjectsWithoutToken(t *testing.T) {
|
||
|
|
cfg := Default()
|
||
|
|
cfg.Projects = ProjectsConfig{Enabled: true}
|
||
|
|
if err := cfg.Validate(); err == nil {
|
||
|
|
t.Error("Validate() accepted projects.enabled without a token")
|
||
|
|
}
|
||
|
|
}
|