зеркало из https://github.com/golang/build.git
210 строки
5.9 KiB
Go
210 строки
5.9 KiB
Go
// Copyright 2018 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 main
|
|
|
|
import (
|
|
"net/url"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-github/v48/github"
|
|
"golang.org/x/build/maintner"
|
|
"golang.org/x/build/repos"
|
|
)
|
|
|
|
func newPullRequest(title, body string) *github.PullRequest {
|
|
return &github.PullRequest{
|
|
Title: github.String(title),
|
|
Body: github.String(body),
|
|
Number: github.Int(42),
|
|
Head: &github.PullRequestBranch{SHA: github.String("deadbeef")},
|
|
Base: &github.PullRequestBranch{
|
|
Repo: &github.Repository{
|
|
Owner: &github.User{
|
|
Login: github.String("golang"),
|
|
},
|
|
Name: github.String("go"),
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func newMaintnerCL() *maintner.GerritCL {
|
|
return &maintner.GerritCL{
|
|
Commit: &maintner.GitCommit{
|
|
Msg: `cmd/gerritbot: previous commit messsage
|
|
|
|
Hello there
|
|
|
|
Change-Id: If751ce3ffa3a4d5e00a3138211383d12cb6b23fc
|
|
`,
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestCommitMessage(t *testing.T) {
|
|
if _, err := exec.LookPath("git"); err != nil {
|
|
t.Skipf("skipping; 'git' not in PATH")
|
|
}
|
|
testCases := []struct {
|
|
desc string
|
|
pr *github.PullRequest
|
|
cl *maintner.GerritCL
|
|
expected string
|
|
}{
|
|
{
|
|
"simple",
|
|
newPullRequest("cmd/gerritbot: title of change", "Body text"),
|
|
nil,
|
|
`cmd/gerritbot: title of change
|
|
|
|
Body text
|
|
|
|
Change-Id: I8ef4fc7aa2b40846583a9cbf175d75d023b5564e
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
`,
|
|
},
|
|
{
|
|
"change with Change-Id",
|
|
newPullRequest("x/build/cmd/gerritbot: change with change ID", "Body text"),
|
|
newMaintnerCL(),
|
|
`cmd/gerritbot: change with change ID
|
|
|
|
Body text
|
|
|
|
Change-Id: If751ce3ffa3a4d5e00a3138211383d12cb6b23fc
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
`,
|
|
},
|
|
{
|
|
"Change-Id in body text",
|
|
newPullRequest("cmd/gerritbot: change with change ID in body text",
|
|
"Change-Id: I30e0a6ec666a06eae3e8444490d96fabcab3333e"),
|
|
nil,
|
|
`cmd/gerritbot: change with change ID in body text
|
|
|
|
Change-Id: I30e0a6ec666a06eae3e8444490d96fabcab3333e
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
`,
|
|
},
|
|
{
|
|
"Change-Id in body text with an existing CL",
|
|
newPullRequest("cmd/gerritbot: change with change ID in body text and an existing CL",
|
|
"Change-Id: I30e0a6ec666a06eae3e8444490d96fabcab3333e"),
|
|
newMaintnerCL(),
|
|
`cmd/gerritbot: change with change ID in body text and an existing CL
|
|
|
|
Change-Id: I30e0a6ec666a06eae3e8444490d96fabcab3333e
|
|
|
|
Change-Id: If751ce3ffa3a4d5e00a3138211383d12cb6b23fc
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
`,
|
|
},
|
|
{
|
|
"cq-include-trybots",
|
|
newPullRequest("cmd/gerritbot: title of change",
|
|
`Body text
|
|
Cq-Include-Trybots: bot-a-123,bot-b-123`),
|
|
nil,
|
|
`cmd/gerritbot: title of change
|
|
|
|
Body text
|
|
|
|
Change-Id: I8ef4fc7aa2b40846583a9cbf175d75d023b5564e
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
Cq-Include-Trybots: bot-a-123,bot-b-123
|
|
`,
|
|
},
|
|
{
|
|
"cq-include-trybots-middle",
|
|
newPullRequest("cmd/gerritbot: title of change",
|
|
`Body text
|
|
|
|
Cq-Include-Trybots: bot-a-123,bot-b-123
|
|
|
|
More text`),
|
|
nil,
|
|
`cmd/gerritbot: title of change
|
|
|
|
Body text
|
|
|
|
More text
|
|
|
|
Change-Id: I8ef4fc7aa2b40846583a9cbf175d75d023b5564e
|
|
GitHub-Last-Rev: deadbeef
|
|
GitHub-Pull-Request: golang/go#42
|
|
Cq-Include-Trybots: bot-a-123,bot-b-123
|
|
`,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.desc, func(t *testing.T) {
|
|
msg, err := commitMessage(tc.pr, tc.cl)
|
|
if err != nil {
|
|
t.Fatalf("got unexpected error from commitMessage: %v", err)
|
|
}
|
|
if diff := cmp.Diff(msg, tc.expected); diff != "" {
|
|
t.Errorf("got unexpected commit message (-got +want)\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Test that gerritChangeRE matches the URL to the Change within
|
|
// the git output from Gerrit after successfully creating a new CL.
|
|
// Whenever Gerrit changes the Change URL format in its output,
|
|
// we need to update gerritChangeRE and this test accordingly.
|
|
//
|
|
// See https://golang.org/issue/27561.
|
|
func TestFindChangeURL(t *testing.T) {
|
|
for _, tc := range [...]struct {
|
|
name string
|
|
in string // Output from git (and input to the regexp).
|
|
want string
|
|
}{
|
|
{
|
|
name: "verbatim", // Verbatim git output from Gerrit, extracted from production logs on 2018/09/07.
|
|
in: "remote: \rremote: Processing changes: new: 1 (\\)\rremote: Processing changes: new: 1 (|)\rremote: Processing changes: refs: 1, new: 1 (|)\rremote: Processing changes: refs: 1, new: 1 (|) \rremote: Processing changes: refs: 1, new: 1, done \nremote: \nremote: SUCCESS \nremote: \nremote: New Changes: \nremote: https://go-review.googlesource.com/c/dl/+/134117 remove blank line from codereview.cfg \nTo https://go.googlesource.com/dl\n * [new branch] HEAD -> refs/for/master",
|
|
want: "https://go-review.googlesource.com/c/dl/+/134117",
|
|
},
|
|
{
|
|
name: "repo-with-dash", // A Gerrit repository with a dash in its name (shortened git output).
|
|
in: "remote: \rremote: Processing changes: (\\) [...] https://go-review.googlesource.com/c/vscode-go/+/222417 [...]",
|
|
want: "https://go-review.googlesource.com/c/vscode-go/+/222417",
|
|
},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
got := gerritChangeRE.FindString(tc.in)
|
|
if got != tc.want {
|
|
t.Errorf("could not find change URL in command output: %q\n\ngot %q, want %q", tc.in, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// TestFindChangeURLInAllRepos tests that gerritChangeRE
|
|
// works for names of all Gerrit repositories.
|
|
//
|
|
// See https://golang.org/issue/37725.
|
|
func TestFindChangeURLInAllRepos(t *testing.T) {
|
|
for proj := range repos.ByGerritProject {
|
|
u := (&url.URL{
|
|
Scheme: "https",
|
|
Host: "go-review.googlesource.com",
|
|
Path: "/c/" + proj + "/+/1337",
|
|
}).String()
|
|
if gerritChangeRE.FindString("... "+u+" ...") != u {
|
|
t.Errorf("gerritChangeRE regexp didn't work for Gerrit repository named %q, does the regexp need to be adjusted to match some additional characters?", proj)
|
|
}
|
|
}
|
|
}
|