fleet/server/api_endpoints/api_endpoints_test.go
Juan Fernandez 1bc32467a7
Implement GET /api/v1/fleet/rest_api (#42883)
**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.
2026-04-10 11:12:38 -04:00

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)
})
}