type LongRunningRequestCheck … type RequestInfoResolver … type RequestInfo … var specialVerbs … var specialVerbsNoSubresources … var namespaceSubresources … var verbsWithSelectors … var NamespaceSubResourcesForTest … type RequestInfoFactory … // TODO write an integration test against the swagger doc to test the RequestInfo and match up behavior to responses // 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. // Valid Inputs: // Resource paths // /apis/{api-group}/{version}/namespaces // /api/{version}/namespaces // /api/{version}/namespaces/{namespace} // /api/{version}/namespaces/{namespace}/{resource} // /api/{version}/namespaces/{namespace}/{resource}/{resourceName} // /api/{version}/{resource} // /api/{version}/{resource}/{resourceName} // // Special verbs without subresources: // /api/{version}/proxy/{resource}/{resourceName} // /api/{version}/proxy/namespaces/{namespace}/{resource}/{resourceName} // // Special verbs with subresources: // /api/{version}/watch/{resource} // /api/{version}/watch/namespaces/{namespace}/{resource} // // NonResource paths // /apis/{api-group}/{version} // /apis/{api-group} // /apis // /api/{version} // /api // /healthz // / func (r *RequestInfoFactory) NewRequestInfo(req *http.Request) (*RequestInfo, error) { … } type requestInfoKeyType … const requestInfoKey … // WithRequestInfo returns a copy of parent in which the request info value is set func WithRequestInfo(parent context.Context, info *RequestInfo) context.Context { … } // RequestInfoFrom returns the value of the RequestInfo key on the ctx func RequestInfoFrom(ctx context.Context) (*RequestInfo, bool) { … } // splitPath returns the segments for a URL path. func splitPath(path string) []string { … }