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 {