func main() { dbMap := InitDB() defer dbMap.Db.Close() dbMap.TraceOn("[gorp]", log.New(os.Stdout, "scribble: ", log.Lmicroseconds)) ctx := context.Background() kami.Context = context.WithValue(ctx, "db", dbMap) // Middlwares kami.Use("/api/", auth.AuthMiddleware) // Authentication APIs kami.Post("/api/register", handler.Register) kami.Post("/api/login", handler.Login) kami.Post("/api/logout", handler.Logout) // Note APIs kami.Get("/api/notes", handler.ListNotes) kami.Post("/api/notes", handler.AddNote) kami.Get("/api/notes/:noteId", handler.GetNote) kami.Put("/api/notes/:noteId", handler.UpdateNote) kami.Delete("/api/notes/:noteId", handler.DeleteNote) kami.Serve() }
func TestLoggerAndPanic(t *testing.T) { kami.Reset() // test logger with panic status := 0 kami.LogHandler = func(ctx context.Context, w mutil.WriterProxy, r *http.Request) { status = w.Status() } kami.PanicHandler = kami.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) { err := kami.Exception(ctx) if err != "test panic" { t.Error("unexpected exception:", err) } w.WriteHeader(http.StatusServiceUnavailable) }) kami.Post("/test", func(ctx context.Context, w http.ResponseWriter, r *http.Request) { panic("test panic") }) kami.Put("/ok", func(ctx context.Context, w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) expectResponseCode(t, "POST", "/test", http.StatusServiceUnavailable) if status != http.StatusServiceUnavailable { t.Error("log handler received wrong status code", status, "≠", http.StatusServiceUnavailable) } // test loggers without panics expectResponseCode(t, "PUT", "/ok", http.StatusOK) if status != http.StatusOK { t.Error("log handler received wrong status code", status, "≠", http.StatusOK) } }
func TestLoggerAndPanic(t *testing.T) { kami.Reset() // test logger with panic status := 0 kami.LogHandler = func(ctx context.Context, w mutil.WriterProxy, r *http.Request) { status = w.Status() } kami.PanicHandler = kami.HandlerFunc(func(ctx context.Context, w http.ResponseWriter, r *http.Request) { err := kami.Exception(ctx) if err != "test panic" { t.Error("unexpected exception:", err) } w.WriteHeader(500) w.Write([]byte("error 500")) }) kami.Post("/test", func(ctx context.Context, w http.ResponseWriter, r *http.Request) { panic("test panic") }) kami.Put("/ok", func(ctx context.Context, w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) }) resp := httptest.NewRecorder() req, err := http.NewRequest("POST", "/test", nil) if err != nil { t.Fatal(err) } kami.Handler().ServeHTTP(resp, req) if resp.Code != 500 { t.Error("should return HTTP 500", resp.Code, "≠", 500) } if status != 500 { t.Error("should return HTTP 500", status, "≠", 500) } // test loggers without panics resp = httptest.NewRecorder() req, err = http.NewRequest("PUT", "/ok", nil) if err != nil { t.Fatal(err) } kami.Handler().ServeHTTP(resp, req) if resp.Code != 200 { t.Error("should return HTTP 200", resp.Code, "≠", 200) } if status != 200 { t.Error("should return HTTP 200", status, "≠", 200) } }