<!-- Provide a brief summary of your changes --> ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> The following PR introduces a `/version` API that serves the build details along with the version of the API server being served. The `/version` endpoint allows users to programmatically query which exact version of the registry is running in production for debugging. ~~auditing, and compatibility checks~~. ## How Has This Been Tested? <!-- Have you tested this in a real application? Which scenarios were tested? --> ## Breaking Changes <!-- Will users need to update their code or configurations? --> ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [ ] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [ ] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> Signed-off-by: Radoslav Dimitrov <radoslav@stacklok.com>
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package v0_test
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/danielgtaylor/huma/v2"
|
|
"github.com/danielgtaylor/huma/v2/adapters/humago"
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
v0 "github.com/modelcontextprotocol/registry/internal/api/handlers/v0"
|
|
)
|
|
|
|
func TestVersionEndpoint(t *testing.T) {
|
|
// Test cases
|
|
testCases := []struct {
|
|
name string
|
|
versionInfo *v0.VersionBody
|
|
expectedBody map[string]string
|
|
}{
|
|
{
|
|
name: "returns version information",
|
|
versionInfo: &v0.VersionBody{
|
|
Version: "v1.2.3",
|
|
GitCommit: "abc123def456",
|
|
BuildTime: "2025-10-14T12:00:00Z",
|
|
},
|
|
expectedBody: map[string]string{
|
|
"version": "v1.2.3",
|
|
"git_commit": "abc123def456",
|
|
"build_time": "2025-10-14T12:00:00Z",
|
|
},
|
|
},
|
|
{
|
|
name: "returns dev version information",
|
|
versionInfo: &v0.VersionBody{
|
|
Version: "dev",
|
|
GitCommit: "unknown",
|
|
BuildTime: "unknown",
|
|
},
|
|
expectedBody: map[string]string{
|
|
"version": "dev",
|
|
"git_commit": "unknown",
|
|
"build_time": "unknown",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
// Create a new test API
|
|
mux := http.NewServeMux()
|
|
api := humago.New(mux, huma.DefaultConfig("Test API", "1.0.0"))
|
|
|
|
// Register the version endpoint
|
|
v0.RegisterVersionEndpoint(api, "/v0", tc.versionInfo)
|
|
|
|
// Create a test request
|
|
req := httptest.NewRequest(http.MethodGet, "/v0/version", nil)
|
|
w := httptest.NewRecorder()
|
|
|
|
// Serve the request
|
|
mux.ServeHTTP(w, req)
|
|
|
|
// Check the status code
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
// Check the response body
|
|
body := w.Body.String()
|
|
assert.Contains(t, body, `"version":"`+tc.expectedBody["version"]+`"`)
|
|
assert.Contains(t, body, `"git_commit":"`+tc.expectedBody["git_commit"]+`"`)
|
|
assert.Contains(t, body, `"build_time":"`+tc.expectedBody["build_time"]+`"`)
|
|
})
|
|
}
|
|
}
|