| // Copyright 2023 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package configstore_test | |
| import ( | |
| "encoding/json" | |
| "fmt" | |
| "reflect" | |
| "strings" | |
| "testing" | |
| "golang.org/x/telemetry/internal/configstore" | |
| "golang.org/x/telemetry/internal/configtest" | |
| "golang.org/x/telemetry/internal/telemetry" | |
| "golang.org/x/telemetry/internal/testenv" | |
| ) | |
| func TestDownload(t *testing.T) { | |
| testenv.NeedsGo(t) | |
| configVersion := "v0.1.0" | |
| in := &telemetry.UploadConfig{ | |
| GOOS: []string{"darwin"}, | |
| GOARCH: []string{"amd64", "arm64"}, | |
| GoVersion: []string{"1.20.3", "1.20.4"}, | |
| Programs: []*telemetry.ProgramConfig{{ | |
| Name: "gopls", | |
| Versions: []string{"v0.11.0"}, | |
| Counters: []telemetry.CounterConfig{{ | |
| Name: "foobar", | |
| Rate: 2, | |
| }}, | |
| }}, | |
| } | |
| env := configtest.LocalProxyEnv(t, in, configVersion) | |
| testCases := []struct { | |
| version string | |
| want telemetry.UploadConfig | |
| }{ | |
| {version: configVersion, want: *in}, | |
| {version: "latest", want: *in}, | |
| } | |
| for _, tc := range testCases { | |
| t.Run(tc.version, func(t *testing.T) { | |
| got, _, err := configstore.Download(tc.version, env) | |
| if err != nil { | |
| t.Fatal("failed to download:", err) | |
| } | |
| want := tc.want | |
| if !reflect.DeepEqual(*got, want) { | |
| t.Errorf("Download(latest, _) = %v\nwant %v", stringify(got), stringify(want)) | |
| } | |
| }) | |
| } | |
| t.Run("invalidversion", func(t *testing.T) { | |
| got, ver, err := configstore.Download("nonexisting", env) | |
| if err == nil { | |
| t.Fatalf("download succeeded unexpectedly: %v %+v", ver, got) | |
| } | |
| if !strings.Contains(err.Error(), "invalid version") { | |
| t.Errorf("unexpected error message: %v", err) | |
| } | |
| }) | |
| } | |
| func stringify(x any) string { | |
| ret, err := json.MarshalIndent(x, "", " ") | |
| if err != nil { | |
| return fmt.Sprintf("json.Marshal failed - %v", err) | |
| } | |
| return string(ret) | |
| } |