aboutsummaryrefslogtreecommitdiff
path: root/internal/httputil/httpapi_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/httputil/httpapi_test.go')
-rw-r--r--internal/httputil/httpapi_test.go109
1 files changed, 109 insertions, 0 deletions
diff --git a/internal/httputil/httpapi_test.go b/internal/httputil/httpapi_test.go
new file mode 100644
index 00000000..de6ccf9b
--- /dev/null
+++ b/internal/httputil/httpapi_test.go
@@ -0,0 +1,109 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// 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 httputil
+
+import (
+ "net/http"
+ "net/http/httptest"
+ "testing"
+)
+
+func TestWrapHandlerInBasicAuth(t *testing.T) {
+ type args struct {
+ h http.Handler
+ b BasicAuth
+ }
+
+ dummyHandler := http.HandlerFunc(func(h http.ResponseWriter, r *http.Request) {
+ h.WriteHeader(http.StatusOK)
+ })
+
+ tests := []struct {
+ name string
+ args args
+ want int
+ reqAuth bool
+ }{
+ {
+ name: "no user or password setup",
+ args: args{h: dummyHandler},
+ want: http.StatusOK,
+ reqAuth: false,
+ },
+ {
+ name: "only user set",
+ args: args{
+ h: dummyHandler,
+ b: BasicAuth{Username: "test"}, // no basic auth
+ },
+ want: http.StatusOK,
+ reqAuth: false,
+ },
+ {
+ name: "only pass set",
+ args: args{
+ h: dummyHandler,
+ b: BasicAuth{Password: "test"}, // no basic auth
+ },
+ want: http.StatusOK,
+ reqAuth: false,
+ },
+ {
+ name: "credentials correct",
+ args: args{
+ h: dummyHandler,
+ b: BasicAuth{Username: "test", Password: "test"}, // basic auth enabled
+ },
+ want: http.StatusOK,
+ reqAuth: true,
+ },
+ {
+ name: "credentials wrong",
+ args: args{
+ h: dummyHandler,
+ b: BasicAuth{Username: "test1", Password: "test"}, // basic auth enabled
+ },
+ want: http.StatusForbidden,
+ reqAuth: true,
+ },
+ {
+ name: "no basic auth in request",
+ args: args{
+ h: dummyHandler,
+ b: BasicAuth{Username: "test", Password: "test"}, // basic auth enabled
+ },
+ want: http.StatusForbidden,
+ reqAuth: false,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ baHandler := WrapHandlerInBasicAuth(tt.args.h, tt.args.b)
+
+ req := httptest.NewRequest("GET", "http://localhost/metrics", nil)
+ if tt.reqAuth {
+ req.SetBasicAuth("test", "test")
+ }
+
+ w := httptest.NewRecorder()
+ baHandler(w, req)
+ resp := w.Result()
+
+ if resp.StatusCode != tt.want {
+ t.Errorf("Expected status code %d, got %d", resp.StatusCode, tt.want)
+ }
+ })
+ }
+}