| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package httpclient | |
| import ( | |
| "fmt" | |
| "net/http" | |
| "net/http/httptest" | |
| "net/url" | |
| "testing" | |
| "github.com/hashicorp/terraform/version" | |
| ) | |
| func TestNew_userAgent(t *testing.T) { | |
| var actualUserAgent string | |
| ts := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { | |
| actualUserAgent = req.UserAgent() | |
| })) | |
| defer ts.Close() | |
| tsURL, err := url.Parse(ts.URL) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| for i, c := range []struct { | |
| expected string | |
| request func(c *http.Client) error | |
| }{ | |
| { | |
| fmt.Sprintf("Terraform/%s", version.Version), | |
| func(c *http.Client) error { | |
| _, err := c.Get(ts.URL) | |
| return err | |
| }, | |
| }, | |
| { | |
| "foo/1", | |
| func(c *http.Client) error { | |
| req := &http.Request{ | |
| Method: "GET", | |
| URL: tsURL, | |
| Header: http.Header{ | |
| "User-Agent": []string{"foo/1"}, | |
| }, | |
| } | |
| _, err := c.Do(req) | |
| return err | |
| }, | |
| }, | |
| { | |
| "", | |
| func(c *http.Client) error { | |
| req := &http.Request{ | |
| Method: "GET", | |
| URL: tsURL, | |
| Header: http.Header{ | |
| "User-Agent": []string{""}, | |
| }, | |
| } | |
| _, err := c.Do(req) | |
| return err | |
| }, | |
| }, | |
| } { | |
| t.Run(fmt.Sprintf("%d %s", i, c.expected), func(t *testing.T) { | |
| actualUserAgent = "" | |
| cli := New() | |
| err := c.request(cli) | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| if actualUserAgent != c.expected { | |
| t.Fatalf("actual User-Agent '%s' is not '%s'", actualUserAgent, c.expected) | |
| } | |
| }) | |
| } | |
| } |