Turn RequestInfoResolver into a RequestInfoFactory

This commit is contained in:
Dr. Stefan Schimanski 2016-09-29 10:10:22 +02:00 committed by deads2k
parent a7f6557f1d
commit 7cfd0150e4
7 changed files with 17 additions and 17 deletions

View File

@ -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"),
} }

View File

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

View File

@ -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

View File

@ -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"),
} }

View File

@ -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,

View File

@ -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"),
} }

View File

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