mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
**Related issue:** Resolves #42883 Added a new premium GET /api/_version_/fleet/rest_api endpoint that returns the contents of the embedded `api_endpoints.yml` artifact.
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
package apiendpoints
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/fleet"
|
|
"github.com/gorilla/mux"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestValidateAPIEndpoints(t *testing.T) {
|
|
originalYAML := apiEndpointsYAML
|
|
t.Cleanup(func() {
|
|
apiEndpointsYAML = originalYAML
|
|
})
|
|
|
|
endpoints := []fleet.APIEndpoint{
|
|
fleet.NewAPIEndpointFromTpl("GET", "/api/v1/fleet/hosts"),
|
|
fleet.NewAPIEndpointFromTpl("POST", "/api/v1/fleet/hosts/:id/refetch"),
|
|
}
|
|
apiEndpointsYAML = []byte(`
|
|
- method: "GET"
|
|
path: "/api/v1/fleet/hosts"
|
|
display_name: "Route 1"
|
|
- method: "POST"
|
|
path: "/api/v1/fleet/hosts/:id/refetch"
|
|
display_name: "Route 2"`)
|
|
|
|
routerWithEndpoints := func(endpoints []fleet.APIEndpoint) *mux.Router {
|
|
r := mux.NewRouter()
|
|
for _, e := range endpoints {
|
|
path := strings.Replace(e.Path, "/_version_/", "/{fleetversion:(?:v1|latest)}/", 1)
|
|
r.Handle(path, http.NotFoundHandler()).Methods(e.Method)
|
|
}
|
|
return r
|
|
}
|
|
|
|
t.Run("all routes present", func(t *testing.T) {
|
|
err := Init(routerWithEndpoints(endpoints))
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("missing route returns error", func(t *testing.T) {
|
|
err := Init(routerWithEndpoints(endpoints[:1]))
|
|
require.ErrorContains(t, err, endpoints[1].Method+" "+endpoints[1].Path)
|
|
})
|
|
|
|
t.Run("no routes registered returns error listing all missing", func(t *testing.T) {
|
|
err := Init(mux.NewRouter())
|
|
require.ErrorContains(t, err, "the following API endpoints are unknown")
|
|
})
|
|
|
|
t.Run("non-mux handler returns error", func(t *testing.T) {
|
|
err := Init(http.NewServeMux())
|
|
require.ErrorContains(t, err, "expected *mux.Router")
|
|
})
|
|
|
|
t.Run("empty endpoint list always passes", func(t *testing.T) {
|
|
apiEndpointsYAML = []byte(``)
|
|
err := Init(mux.NewRouter())
|
|
require.NoError(t, err)
|
|
})
|
|
}
|