| // 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 task |
| |
| import ( |
| "context" |
| "fmt" |
| "testing" |
| "time" |
| |
| "golang.org/x/build/internal/workflow" |
| ) |
| |
| func TestUpdateProxyTestRepo(t *testing.T) { |
| tc := []struct { |
| name string |
| old, new string |
| wantUpdate bool |
| }{ |
| {"minor version", "1.18.1", "1.18.5", true}, |
| {"update to rc", "1.20", "1.21rc1", true}, |
| {"update rc to point", "1.18rc1", "1.18.0", true}, |
| {"no update earlier major", "1.18.5", "1.17.4", false}, |
| {"no update earlier major rc", "1.18rc1", "1.17", false}, |
| } |
| |
| for _, tt := range tc { |
| t.Run(tt.name, func(t *testing.T) { |
| fakeRepo := NewFakeRepo(t, "fake") |
| fakeGerrit := NewFakeGerrit(t, fakeRepo) |
| // We need to do this so we can push to the branch we checked out. |
| fakeRepo.runGit("config", "receive.denyCurrentBranch", "updateInstead") |
| |
| fakeRepo.CommitOnBranch("master", map[string]string{ |
| "go.mod": fmt.Sprintf("module test\n\ngo %s\n", tt.old), |
| }) |
| fakeRepo.Tag("v1.0.0", "master") |
| |
| upgradeGoVersion := &UpdateProxyTestRepoTasks{ |
| Git: &Git{}, |
| GerritURL: fakeRepo.dir.dir, |
| Branch: "master", |
| } |
| |
| ctx, cancel := context.WithTimeout(context.Background(), time.Minute) |
| defer cancel() |
| if _, err := upgradeGoVersion.UpdateProxyTestRepo(&workflow.TaskContext{Context: ctx}, Published{Version: "go" + tt.new}); err != nil { |
| t.Fatal(err) |
| } |
| |
| tags, err := fakeGerrit.ListTags(ctx, fakeRepo.name) |
| if err != nil { |
| t.Fatalf("unable to list tags: %v", err) |
| } |
| if len(tags) != 1 || tags[0] != "v1.0.0" { |
| t.Errorf("expect v1.0.0, got %v", tags) |
| } |
| |
| checkCommit := func(commit string) { |
| value, err := fakeGerrit.ReadFile(ctx, fakeRepo.name, commit, "go.mod") |
| if err != nil { |
| t.Fatalf("unable to read go.mod: %v", err) |
| } |
| wantVersion := tt.new |
| if !tt.wantUpdate { |
| wantVersion = tt.old |
| } |
| |
| want := fmt.Sprintf("module test\n\ngo %s\n", wantVersion) |
| if string(value) != want { |
| t.Errorf("expected %q, got %q", want, string(value)) |
| } |
| |
| } |
| |
| tag, err := fakeGerrit.GetTag(ctx, fakeRepo.name, "v1.0.0") |
| if err != nil { |
| t.Fatalf("unable to get tag v1.0.0: %v", err) |
| } |
| checkCommit(tag.Revision) |
| |
| head, err := fakeGerrit.ReadBranchHead(ctx, fakeRepo.name, "master") |
| if err != nil { |
| t.Fatalf("unable to read branch head: %v", err) |
| } |
| checkCommit(head) |
| }) |
| } |
| } |