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 {
