mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 09:28:54 +00:00
Handler tests (#106)
This commit is contained in:
parent
1abc44790e
commit
186f96b8e8
2 changed files with 297 additions and 181 deletions
|
|
@ -11,6 +11,188 @@ import (
|
|||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
func attachAPIRoutes(router *mux.Router, ctx context.Context, svc kolide.Service, opts []kithttp.ServerOption) {
|
||||
router.Handle("/api/v1/kolide/users",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
mustBeAdmin(makeCreateUserEndpoint(svc)),
|
||||
decodeCreateUserRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/users/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canReadUser(makeGetUserEndpoint(svc)),
|
||||
decodeGetUserRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/users/{id}/password",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canModifyUser(makeChangePasswordEndpoint(svc)),
|
||||
decodeChangePasswordRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/users/{id}/role",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
mustBeAdmin(makeUpdateAdminRoleEndpoint(svc)),
|
||||
decodeUpdateAdminRoleRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/users/{id}/status",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canModifyUser(makeUpdateUserStatusEndpoint(svc)),
|
||||
decodeUpdateUserStatusRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetQueryEndpoint(svc),
|
||||
decodeGetQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetAllQueriesEndpoint(svc),
|
||||
decodeNoParamsRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeCreateQueryEndpoint(svc),
|
||||
decodeCreateQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeModifyQueryEndpoint(svc),
|
||||
decodeModifyQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("PATCH")
|
||||
|
||||
router.Handle("/api/v1/kolide/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeleteQueryEndpoint(svc),
|
||||
decodeDeleteQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetPackEndpoint(svc),
|
||||
decodeGetPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetAllPacksEndpoint(svc),
|
||||
decodeNoParamsRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeCreatePackEndpoint(svc),
|
||||
decodeCreatePackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeModifyPackEndpoint(svc),
|
||||
decodeModifyPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("PATCH")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeletePackEndpoint(svc),
|
||||
decodeDeletePackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{pid}/queries/{qid}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeAddQueryToPackEndpoint(svc),
|
||||
decodeAddQueryToPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{id}/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetQueriesInPackEndpoint(svc),
|
||||
decodeGetQueriesInPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
router.Handle("/api/v1/kolide/packs/{pid}/queries/{qid}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeleteQueryFromPackEndpoint(svc),
|
||||
decodeDeleteQueryFromPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
}
|
||||
|
||||
// MakeHandler creates an http handler for the Kolide API
|
||||
func MakeHandler(ctx context.Context, svc kolide.Service, logger kitlog.Logger) http.Handler {
|
||||
opts := []kithttp.ServerOption{
|
||||
|
|
@ -24,189 +206,9 @@ func MakeHandler(ctx context.Context, svc kolide.Service, logger kitlog.Logger)
|
|||
}
|
||||
|
||||
api := mux.NewRouter()
|
||||
|
||||
api.Handle("/users",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
mustBeAdmin(makeCreateUserEndpoint(svc)),
|
||||
decodeCreateUserRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/users/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canReadUser(makeGetUserEndpoint(svc)),
|
||||
decodeGetUserRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/users/{id}/password",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canModifyUser(makeChangePasswordEndpoint(svc)),
|
||||
decodeChangePasswordRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/users/{id}/role",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
mustBeAdmin(makeUpdateAdminRoleEndpoint(svc)),
|
||||
decodeUpdateAdminRoleRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/users/{id}/status",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
canModifyUser(makeUpdateUserStatusEndpoint(svc)),
|
||||
decodeUpdateUserStatusRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetQueryEndpoint(svc),
|
||||
decodeGetQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetAllQueriesEndpoint(svc),
|
||||
decodeNoParamsRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeCreateQueryEndpoint(svc),
|
||||
decodeCreateQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeModifyQueryEndpoint(svc),
|
||||
decodeModifyQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("PATCH")
|
||||
|
||||
api.Handle("/queries/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeleteQueryEndpoint(svc),
|
||||
decodeDeleteQueryRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
|
||||
api.Handle("/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetPackEndpoint(svc),
|
||||
decodeGetPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/packs",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetAllPacksEndpoint(svc),
|
||||
decodeNoParamsRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/packs",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeCreatePackEndpoint(svc),
|
||||
decodeCreatePackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("POST")
|
||||
|
||||
api.Handle("/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeModifyPackEndpoint(svc),
|
||||
decodeModifyPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("PATCH")
|
||||
|
||||
api.Handle("/packs/{id}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeletePackEndpoint(svc),
|
||||
decodeDeletePackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
|
||||
api.Handle("/packs/{pid}/queries/{qid}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeAddQueryToPackEndpoint(svc),
|
||||
decodeAddQueryToPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/packs/{id}/queries",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeGetQueriesInPackEndpoint(svc),
|
||||
decodeGetQueriesInPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("GET")
|
||||
|
||||
api.Handle("/packs/{pid}/queries/{qid}",
|
||||
kithttp.NewServer(
|
||||
ctx,
|
||||
makeDeleteQueryFromPackEndpoint(svc),
|
||||
decodeDeleteQueryFromPackRequest,
|
||||
encodeResponse,
|
||||
opts...,
|
||||
),
|
||||
).Methods("DELETE")
|
||||
attachAPIRoutes(api, ctx, svc, opts)
|
||||
|
||||
r := mux.NewRouter()
|
||||
|
||||
r.PathPrefix("/api/v1/kolide").Handler(authMiddleware(svc, logger, api))
|
||||
r.Handle("/api/login", login(svc, logger)).Methods("POST")
|
||||
r.Handle("/api/logout", logout(svc, logger)).Methods("GET")
|
||||
|
|
|
|||
114
kitserver/handler_test.go
Normal file
114
kitserver/handler_test.go
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
package kitserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/kolide/kolide-ose/datastore"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestAPIRoutes(t *testing.T) {
|
||||
ds, err := datastore.New("gorm-sqlite3", ":memory:")
|
||||
assert.Nil(t, err)
|
||||
|
||||
svc, err := NewService(testConfig(ds))
|
||||
assert.Nil(t, err)
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
r := mux.NewRouter()
|
||||
attachAPIRoutes(r, ctx, svc, nil)
|
||||
handler := mux.NewRouter()
|
||||
handler.PathPrefix("/api/v1/kolide").Handler(r)
|
||||
|
||||
var routes = []struct {
|
||||
verb string
|
||||
uri string
|
||||
}{
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/users",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/users/1",
|
||||
},
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/users/1/password",
|
||||
},
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/users/1/role",
|
||||
},
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/users/1/status",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/queries/1",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/queries",
|
||||
},
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/queries",
|
||||
},
|
||||
{
|
||||
verb: "PATCH",
|
||||
uri: "/api/v1/kolide/queries/1",
|
||||
},
|
||||
{
|
||||
verb: "DELETE",
|
||||
uri: "/api/v1/kolide/queries/1",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/packs/1",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/packs",
|
||||
},
|
||||
{
|
||||
verb: "POST",
|
||||
uri: "/api/v1/kolide/packs",
|
||||
},
|
||||
{
|
||||
verb: "PATCH",
|
||||
uri: "/api/v1/kolide/packs/1",
|
||||
},
|
||||
{
|
||||
verb: "DELETE",
|
||||
uri: "/api/v1/kolide/packs/1",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/packs/1/queries/2",
|
||||
},
|
||||
{
|
||||
verb: "GET",
|
||||
uri: "/api/v1/kolide/packs/1/queries",
|
||||
},
|
||||
{
|
||||
verb: "DELETE",
|
||||
uri: "/api/v1/kolide/packs/1/queries/2",
|
||||
},
|
||||
}
|
||||
|
||||
for _, route := range routes {
|
||||
recorder := httptest.NewRecorder()
|
||||
handler.ServeHTTP(
|
||||
recorder,
|
||||
httptest.NewRequest(route.verb, route.uri, nil),
|
||||
)
|
||||
assert.NotEqual(t, 404, recorder.Code)
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in a new issue