package httpclient import ( "fmt" "os" "testing" "github.com/hashicorp/terraform/version" ) func TestUserAgentString_env(t *testing.T) { expectedBase := fmt.Sprintf(userAgentFormat, version.Version) if oldenv, isSet := os.LookupEnv(uaEnvVar); isSet { defer os.Setenv(uaEnvVar, oldenv) } else { defer os.Unsetenv(uaEnvVar) } for i, c := range []struct { expected string additional string }{ {expectedBase, ""}, {expectedBase, " "}, {expectedBase, " \n"}, {fmt.Sprintf("%s test/1", expectedBase), "test/1"}, {fmt.Sprintf("%s test/2", expectedBase), "test/2 "}, {fmt.Sprintf("%s test/3", expectedBase), " test/3 "}, {fmt.Sprintf("%s test/4", expectedBase), "test/4 \n"}, } { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { if c.additional == "" { os.Unsetenv(uaEnvVar) } else { os.Setenv(uaEnvVar, c.additional) } actual := UserAgentString() if c.expected != actual { t.Fatalf("Expected User-Agent '%s' does not match '%s'", c.expected, actual) } }) } } func TestUserAgentAppendViaEnvVar(t *testing.T) { if oldenv, isSet := os.LookupEnv(uaEnvVar); isSet { defer os.Setenv(uaEnvVar, oldenv) } else { defer os.Unsetenv(uaEnvVar) } expectedBase := "HashiCorp Terraform/0.0.0 (+https://www.terraform.io)" testCases := []struct { envVarValue string expected string }{ {"", expectedBase}, {" ", expectedBase}, {" \n", expectedBase}, {"test/1", expectedBase + " test/1"}, {"test/1 (comment)", expectedBase + " test/1 (comment)"}, } for i, tc := range testCases { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { os.Unsetenv(uaEnvVar) os.Setenv(uaEnvVar, tc.envVarValue) givenUA := TerraformUserAgent("0.0.0") if givenUA != tc.expected { t.Fatalf("Expected User-Agent '%s' does not match '%s'", tc.expected, givenUA) } }) } }