blob: 33261c8396e5a6abcb999808c4e8c1cc5ef413e0 [file] [log] [blame]
// 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)
}