| Index: appengine/middleware/appengine_test.go
|
| diff --git a/appengine/middleware/appengine_test.go b/appengine/middleware/appengine_test.go
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..50d4f6fa736fef8b00a8668cb1037555d3bbe1cf
|
| --- /dev/null
|
| +++ b/appengine/middleware/appengine_test.go
|
| @@ -0,0 +1,111 @@
|
| +// Copyright 2015 The Chromium 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 middleware
|
| +
|
| +import (
|
| + "net/http"
|
| + "net/http/httptest"
|
| + "testing"
|
| +
|
| + "github.com/julienschmidt/httprouter"
|
| + . "github.com/smartystreets/goconvey/convey"
|
| + "golang.org/x/net/context"
|
| +)
|
| +
|
| +func TestRequireCron(t *testing.T) {
|
| + t.Parallel()
|
| +
|
| + Convey("Test RequireCron", t, func() {
|
| + hit := false
|
| + f := func(c context.Context, rw http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
| + hit = true
|
| + rw.Write([]byte("ok"))
|
| + }
|
| +
|
| + Convey("from non-cron fails", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireCron(f))(rec, &http.Request{}, nil)
|
| + So(hit, ShouldBeFalse)
|
| + So(rec.Body.String(), ShouldEqual, "error: must be run from cron")
|
| + So(rec.Code, ShouldEqual, http.StatusForbidden)
|
| + })
|
| +
|
| + Convey("from cron succeeds", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireCron(f))(rec, &http.Request{
|
| + Header: http.Header{
|
| + http.CanonicalHeaderKey("x-appengine-cron"): []string{"true"},
|
| + },
|
| + }, nil)
|
| + So(hit, ShouldBeTrue)
|
| + So(rec.Body.String(), ShouldEqual, "ok")
|
| + So(rec.Code, ShouldEqual, http.StatusOK)
|
| + })
|
| + })
|
| +}
|
| +
|
| +func TestRequireTQ(t *testing.T) {
|
| + t.Parallel()
|
| +
|
| + Convey("Test RequireTQ", t, func() {
|
| + hit := false
|
| + f := func(c context.Context, rw http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
| + hit = true
|
| + rw.Write([]byte("ok"))
|
| + }
|
| +
|
| + Convey("from non-tq fails (wat)", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireTaskQueue("wat", f))(rec, &http.Request{}, nil)
|
| + So(hit, ShouldBeFalse)
|
| + So(rec.Body.String(), ShouldEqual, "error: must be run from the taskqueue \"wat\"")
|
| + So(rec.Code, ShouldEqual, http.StatusForbidden)
|
| + })
|
| +
|
| + Convey("from non-tq fails", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireTaskQueue("", f))(rec, &http.Request{}, nil)
|
| + So(hit, ShouldBeFalse)
|
| + So(rec.Body.String(), ShouldEqual, "error: must be run from a taskqueue")
|
| + So(rec.Code, ShouldEqual, http.StatusForbidden)
|
| + })
|
| +
|
| + Convey("from wrong tq fails (wat)", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireTaskQueue("wat", f))(rec, &http.Request{
|
| + Header: http.Header{
|
| + http.CanonicalHeaderKey("x-appengine-queuename"): []string{"else"},
|
| + },
|
| + }, nil)
|
| + So(hit, ShouldBeFalse)
|
| + So(rec.Body.String(), ShouldEqual, "error: must be run from the taskqueue \"wat\"")
|
| + So(rec.Code, ShouldEqual, http.StatusForbidden)
|
| + })
|
| +
|
| + Convey("from right tq succeeds (wat)", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireTaskQueue("wat", f))(rec, &http.Request{
|
| + Header: http.Header{
|
| + http.CanonicalHeaderKey("x-appengine-queuename"): []string{"wat"},
|
| + },
|
| + }, nil)
|
| + So(hit, ShouldBeTrue)
|
| + So(rec.Body.String(), ShouldEqual, "ok")
|
| + So(rec.Code, ShouldEqual, http.StatusOK)
|
| + })
|
| +
|
| + Convey("from any tq succeeds", func() {
|
| + rec := httptest.NewRecorder()
|
| + BaseTest(RequireTaskQueue("", f))(rec, &http.Request{
|
| + Header: http.Header{
|
| + http.CanonicalHeaderKey("x-appengine-queuename"): []string{"wat"},
|
| + },
|
| + }, nil)
|
| + So(hit, ShouldBeTrue)
|
| + So(rec.Body.String(), ShouldEqual, "ok")
|
| + So(rec.Code, ShouldEqual, http.StatusOK)
|
| + })
|
| + })
|
| +}
|
|
|