Add an e2e against an existing test server Change-Id: Ib4a204ac5e3c2837b130b0261099da3bc7e1fccd
diff --git a/cmd/checker/checker.go b/cmd/checker/checker.go index 02b5921..6473174 100644 --- a/cmd/checker/checker.go +++ b/cmd/checker/checker.go
@@ -34,8 +34,8 @@ // gerritChecker run formatting checks against a gerrit server. type gerritChecker struct { server *gerrit.Server - - todo chan *gerrit.PendingChecksInfo + delay time.Duration + todo chan *gerrit.PendingChecksInfo } // checkerScheme is the scheme by which we are registered in the Gerrit server. @@ -112,15 +112,17 @@ if len(fields) != 2 { return "", false } + return fields[0], true } // NewGerritChecker creates a server that periodically checks a gerrit // server for pending checks. -func NewGerritChecker(server *gerrit.Server) (*gerritChecker, error) { +func NewGerritChecker(server *gerrit.Server, delay time.Duration) (*gerritChecker, error) { gc := &gerritChecker{ server: server, todo: make(chan *gerrit.PendingChecksInfo, 5), + delay: delay, } return gc, nil @@ -178,9 +180,9 @@ msg = "found a difference" } msgs = append(msgs, fmt.Sprintf("%s: %s", f.Name, msg)) - log.Printf("file %s: %s", f.Name, f.Message) + log.Printf("%s/%d: file %s: %s", changeID, psID, f.Name, f.Message) } else { - log.Printf("file %s: OK", f.Name) + log.Printf("%s/%d: file %s: OK", changeID, psID, f.Name) } } @@ -257,8 +259,6 @@ // executeCheck executes the pending checks specified in the argument. func (gc *gerritChecker) executeCheck(pc *gerrit.PendingChecksInfo) error { - log.Println("checking", pc) - changeID := strconv.Itoa(pc.PatchSet.ChangeNumber) psID := pc.PatchSet.PatchSetID for uuid := range pc.PendingChecks { @@ -268,9 +268,8 @@ State: statusRunning.String(), Started: &now, } - log.Printf("posted %s", &checkInput) - _, err := gc.server.PostCheck( - changeID, psID, &checkInput) + log.Printf("change %s, %s set to %q", pc.PatchSet, uuid, statusRunning) + _, err := gc.server.PostCheck(changeID, psID, &checkInput) if err != nil { return err } @@ -279,7 +278,8 @@ msg := "" lang, ok := checkerLanguage(uuid) if !ok { - return fmt.Errorf("uuid %q had unknown language", uuid) + msg = fmt.Sprintf("uuid %q has unknown language", uuid) + status = statusFail } else { msgs, err := gc.checkChange(changeID, psID, lang) if err == errIrrelevant { @@ -299,13 +299,12 @@ } } - log.Printf("status %s for lang %s on %v", status, lang, pc.PatchSet) + log.Printf("status %s for %s on %v", status, uuid, pc.PatchSet) checkInput = gerrit.CheckInput{ CheckerUUID: uuid, State: status.String(), Message: msg, } - log.Printf("posted %s", &checkInput) if _, err := gc.server.PostCheck(changeID, psID, &checkInput); err != nil { return err
diff --git a/cmd/checker/checker_test.go b/cmd/checker/checker_test.go new file mode 100644 index 0000000..9d2614e --- /dev/null +++ b/cmd/checker/checker_test.go
@@ -0,0 +1,111 @@ +// Copyright 2020 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "fmt" + "log" + "net/url" + "strconv" + "testing" + "time" + + "github.com/google/gerrit-linter/gerrit" +) + +func urlParse(s string) url.URL { + u, err := url.Parse(s) + if err != nil { + panic(err) + } + + return *u +} + +type changeInfo struct { + ChangeId string `json:"change_id"` + Number int `json:"_number"` +} + +func TestGerrit(t *testing.T) { + g := gerrit.New(urlParse("http://localhost:8080/")) + g.Authenticator = gerrit.NewBasicAuth("admin:secret") + g.Debug = true + + gc, err := NewGerritChecker(g, 75*time.Millisecond) + if err != nil { + t.Fatal(err) + } + + go gc.Serve() + + if _, err := g.GetPath("/projects/gerrit-linter-test/"); err != nil { + t.Fatalf("GetPath: %v", err) + } + msgChecker, err := gc.PostChecker("gerrit-linter-test", "commitmsg", true) + if err != nil { + // create + msgChecker, err = gc.PostChecker("gerrit-linter-test", "commitmsg", false) + if err != nil { + t.Fatalf("create PostChecker: %v", err) + } + } + content, err := g.PostPath("a/changes/", + "application/json", + []byte(`{ + "project": "gerrit-linter-test", + "subject": "my linter test change.", + "branch": "master"} +`)) + if err != nil { + t.Fatal(err) + } + var change changeInfo + if err := gerrit.Unmarshal(content, &change); err != nil { + t.Fatal(err) + } + log.Printf("created change %d", change.Number) + + gc.processPendingChecks() + + info, err := g.GetCheck(fmt.Sprintf("%d", change.Number), 1, msgChecker.UUID) + if err != nil { + t.Fatal(err) + } + + if info.State != statusFail.String() { + t.Fatalf("got %q, want %q", info.State, statusFail) + } + + if _, err := g.PutPath(fmt.Sprintf("a/changes/%d/message", change.Number), "application/json", []byte( + fmt.Sprintf(`{"message": "New Commit message\n\nChange-Id: %s\n"}`, change.ChangeId))); err != nil { + t.Fatalf("edit message: %v", err) + } + gc.processPendingChecks() + + info, err = g.GetCheck(strconv.Itoa(change.Number), 2, msgChecker.UUID) + if err != nil { + t.Fatalf("2nd GetCheck: %v", err) + } + + if info.State != statusSuccessful.String() { + t.Fatalf("got %q, want %q", info.State, statusSuccessful) + } + + if _, err := g.PostPath(fmt.Sprintf("a/changes/%d/abandon", change.Number), + "application/json", []byte(`{"message": "test succeeded"}`)); err != nil { + t.Fatalf("abandon: %v", err) + } +}
diff --git a/cmd/checker/main.go b/cmd/checker/main.go index 77b8d9a..31fc686 100644 --- a/cmd/checker/main.go +++ b/cmd/checker/main.go
@@ -21,6 +21,7 @@ "log" "net/url" "os" + "time" linter "github.com/google/gerrit-linter" "github.com/google/gerrit-linter/gerrit" @@ -75,7 +76,7 @@ log.Fatalf("accounts/self: %v", err) } - gc, err := NewGerritChecker(g) + gc, err := NewGerritChecker(g, 5*time.Second) if err != nil { log.Fatal(err) }
diff --git a/server.go b/server.go index 7dc7233..f73678f 100644 --- a/server.go +++ b/server.go
@@ -139,7 +139,6 @@ for language, fs := range splitByLang(req.Files) { var buf bytes.Buffer entry := Formatters[language] - log.Println("init", Formatters) out, err := entry.Formatter.Format(fs, &buf) if err != nil {