mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
Turn RequestInfoResolver into a RequestInfoFactory
This commit is contained in:
parent
a7f6557f1d
commit
7cfd0150e4
@ -3251,8 +3251,8 @@ func newTestServer(handler http.Handler) *httptest.Server {
|
|||||||
return httptest.NewServer(handler)
|
return httptest.NewServer(handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestRequestInfoResolver() *request.RequestInfoResolver {
|
func newTestRequestInfoResolver() *request.RequestInfoFactory {
|
||||||
return &request.RequestInfoResolver{
|
return &request.RequestInfoFactory{
|
||||||
APIPrefixes: sets.NewString("api", "apis"),
|
APIPrefixes: sets.NewString("api", "apis"),
|
||||||
GrouplessAPIPrefixes: sets.NewString("api"),
|
GrouplessAPIPrefixes: sets.NewString("api"),
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resolver := newTestRequestInfoResolver()
|
resolver := newTestRequestInfoResolver()
|
||||||
info, err := resolver.GetRequestInfo(req)
|
info, err := resolver.NewRequestInfo(req)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
ctx = request.WithRequestInfo(ctx, info)
|
ctx = request.WithRequestInfo(ctx, info)
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// WithRequestInfo attaches a RequestInfo to the context.
|
// WithRequestInfo attaches a RequestInfo to the context.
|
||||||
func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoResolver, requestContextMapper api.RequestContextMapper) http.Handler {
|
func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoFactory, requestContextMapper api.RequestContextMapper) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||||
ctx, ok := requestContextMapper.Get(req)
|
ctx, ok := requestContextMapper.Get(req)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -34,7 +34,7 @@ func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoResolver
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
info, err := resolver.GetRequestInfo(req)
|
info, err := resolver.NewRequestInfo(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
internalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
|
internalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
|
||||||
return
|
return
|
||||||
|
@ -21,8 +21,8 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newTestRequestInfoResolver() *request.RequestInfoResolver {
|
func newTestRequestInfoResolver() *request.RequestInfoFactory {
|
||||||
return &request.RequestInfoResolver{
|
return &request.RequestInfoFactory{
|
||||||
APIPrefixes: sets.NewString("api", "apis"),
|
APIPrefixes: sets.NewString("api", "apis"),
|
||||||
GrouplessAPIPrefixes: sets.NewString("api"),
|
GrouplessAPIPrefixes: sets.NewString("api"),
|
||||||
}
|
}
|
||||||
|
@ -67,13 +67,13 @@ var namespaceSubresources = sets.NewString("status", "finalize")
|
|||||||
// NamespaceSubResourcesForTest exports namespaceSubresources for testing in pkg/master/master_test.go, so we never drift
|
// NamespaceSubResourcesForTest exports namespaceSubresources for testing in pkg/master/master_test.go, so we never drift
|
||||||
var NamespaceSubResourcesForTest = sets.NewString(namespaceSubresources.List()...)
|
var NamespaceSubResourcesForTest = sets.NewString(namespaceSubresources.List()...)
|
||||||
|
|
||||||
type RequestInfoResolver struct {
|
type RequestInfoFactory struct {
|
||||||
APIPrefixes sets.String // without leading and trailing slashes
|
APIPrefixes sets.String // without leading and trailing slashes
|
||||||
GrouplessAPIPrefixes sets.String // without leading and trailing slashes
|
GrouplessAPIPrefixes sets.String // without leading and trailing slashes
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO write an integration test against the swagger doc to test the RequestInfo and match up behavior to responses
|
// TODO write an integration test against the swagger doc to test the RequestInfo and match up behavior to responses
|
||||||
// GetRequestInfo returns the information from the http request. If error is not nil, RequestInfo holds the information as best it is known before the failure
|
// NewRequestInfo returns the information from the http request. If error is not nil, RequestInfo holds the information as best it is known before the failure
|
||||||
// It handles both resource and non-resource requests and fills in all the pertinent information for each.
|
// It handles both resource and non-resource requests and fills in all the pertinent information for each.
|
||||||
// Valid Inputs:
|
// Valid Inputs:
|
||||||
// Resource paths
|
// Resource paths
|
||||||
@ -103,7 +103,7 @@ type RequestInfoResolver struct {
|
|||||||
// /api
|
// /api
|
||||||
// /healthz
|
// /healthz
|
||||||
// /
|
// /
|
||||||
func (r *RequestInfoResolver) GetRequestInfo(req *http.Request) (*RequestInfo, error) {
|
func (r *RequestInfoFactory) NewRequestInfo(req *http.Request) (*RequestInfo, error) {
|
||||||
// start with a non-resource request until proven otherwise
|
// start with a non-resource request until proven otherwise
|
||||||
requestInfo := RequestInfo{
|
requestInfo := RequestInfo{
|
||||||
IsResourceRequest: false,
|
IsResourceRequest: false,
|
||||||
|
@ -104,7 +104,7 @@ func TestGetAPIRequestInfo(t *testing.T) {
|
|||||||
for _, successCase := range successCases {
|
for _, successCase := range successCases {
|
||||||
req, _ := http.NewRequest(successCase.method, successCase.url, nil)
|
req, _ := http.NewRequest(successCase.method, successCase.url, nil)
|
||||||
|
|
||||||
apiRequestInfo, err := resolver.GetRequestInfo(req)
|
apiRequestInfo, err := resolver.NewRequestInfo(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error for url: %s %v", successCase.url, err)
|
t.Errorf("Unexpected error for url: %s %v", successCase.url, err)
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ func TestGetAPIRequestInfo(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error %v", err)
|
t.Errorf("Unexpected error %v", err)
|
||||||
}
|
}
|
||||||
apiRequestInfo, err := resolver.GetRequestInfo(req)
|
apiRequestInfo, err := resolver.NewRequestInfo(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%s: Unexpected error %v", k, err)
|
t.Errorf("%s: Unexpected error %v", k, err)
|
||||||
}
|
}
|
||||||
@ -183,7 +183,7 @@ func TestGetNonAPIRequestInfo(t *testing.T) {
|
|||||||
for testName, tc := range tests {
|
for testName, tc := range tests {
|
||||||
req, _ := http.NewRequest("GET", tc.url, nil)
|
req, _ := http.NewRequest("GET", tc.url, nil)
|
||||||
|
|
||||||
apiRequestInfo, err := resolver.GetRequestInfo(req)
|
apiRequestInfo, err := resolver.NewRequestInfo(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%s: Unexpected error %v", testName, err)
|
t.Errorf("%s: Unexpected error %v", testName, err)
|
||||||
}
|
}
|
||||||
@ -193,8 +193,8 @@ func TestGetNonAPIRequestInfo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestRequestInfoResolver() *RequestInfoResolver {
|
func newTestRequestInfoResolver() *RequestInfoFactory {
|
||||||
return &RequestInfoResolver{
|
return &RequestInfoFactory{
|
||||||
APIPrefixes: sets.NewString("api", "apis"),
|
APIPrefixes: sets.NewString("api", "apis"),
|
||||||
GrouplessAPIPrefixes: sets.NewString("api"),
|
GrouplessAPIPrefixes: sets.NewString("api"),
|
||||||
}
|
}
|
||||||
|
@ -507,8 +507,8 @@ func DefaultAndValidateRunOptions(options *options.ServerRunOptions) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRequestInfoResolver(c *Config) *request.RequestInfoResolver {
|
func NewRequestInfoResolver(c *Config) *request.RequestInfoFactory {
|
||||||
return &request.RequestInfoResolver{
|
return &request.RequestInfoFactory{
|
||||||
APIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/"), strings.Trim(c.APIGroupPrefix, "/")), // all possible API prefixes
|
APIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/"), strings.Trim(c.APIGroupPrefix, "/")), // all possible API prefixes
|
||||||
GrouplessAPIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/")), // APIPrefixes that won't have groups (legacy)
|
GrouplessAPIPrefixes: sets.NewString(strings.Trim(c.APIPrefix, "/")), // APIPrefixes that won't have groups (legacy)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user