mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	add UnversionedPath() to fix ServerAPIVersions()
This commit is contained in:
		@@ -140,7 +140,7 @@ func (c *Client) ServerVersion() (*version.Info, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ServerAPIVersions retrieves and parses the list of API versions the server supports.
 | 
					// ServerAPIVersions retrieves and parses the list of API versions the server supports.
 | 
				
			||||||
func (c *Client) ServerAPIVersions() (*api.APIVersions, error) {
 | 
					func (c *Client) ServerAPIVersions() (*api.APIVersions, error) {
 | 
				
			||||||
	body, err := c.Get().AbsPath("/api").Do().Raw()
 | 
						body, err := c.Get().UnversionedPath("").Do().Raw()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -210,6 +210,23 @@ func (r *Request) NamespaceIfScoped(namespace string, scoped bool) *Request {
 | 
				
			|||||||
	return r
 | 
						return r
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UnversionedPath strips the apiVersion from the baseURL before appending segments.
 | 
				
			||||||
 | 
					func (r *Request) UnversionedPath(segments ...string) *Request {
 | 
				
			||||||
 | 
						if r.err != nil {
 | 
				
			||||||
 | 
							return r
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						upath := path.Clean(r.baseURL.Path)
 | 
				
			||||||
 | 
						//TODO(jdef) this is a pretty hackish version test
 | 
				
			||||||
 | 
						if strings.HasPrefix(path.Base(upath), "v") {
 | 
				
			||||||
 | 
							upath = path.Dir(upath)
 | 
				
			||||||
 | 
							if upath == "." {
 | 
				
			||||||
 | 
								upath = "/"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						r.path = path.Join(append([]string{upath}, segments...)...)
 | 
				
			||||||
 | 
						return r
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AbsPath overwrites an existing path with the segments provided. Trailing slashes are preserved
 | 
					// AbsPath overwrites an existing path with the segments provided. Trailing slashes are preserved
 | 
				
			||||||
// when a single segment is passed.
 | 
					// when a single segment is passed.
 | 
				
			||||||
func (r *Request) AbsPath(segments ...string) *Request {
 | 
					func (r *Request) AbsPath(segments ...string) *Request {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1005,6 +1005,50 @@ func TestVerbs(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestUnversionedPath(t *testing.T) {
 | 
				
			||||||
 | 
						tt := []struct {
 | 
				
			||||||
 | 
							host         string
 | 
				
			||||||
 | 
							prefix       string
 | 
				
			||||||
 | 
							unversioned  string
 | 
				
			||||||
 | 
							expectedPath string
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{"", "", "", "/api"},
 | 
				
			||||||
 | 
							{"", "", "versions", "/api/versions"},
 | 
				
			||||||
 | 
							{"", "/", "", "/"},
 | 
				
			||||||
 | 
							{"", "/versions", "", "/versions"},
 | 
				
			||||||
 | 
							{"", "/api", "", "/api"},
 | 
				
			||||||
 | 
							{"", "/api/vfake", "", "/api/vfake"},
 | 
				
			||||||
 | 
							{"", "/api/vfake", "v1beta100", "/api/vfake/v1beta100"},
 | 
				
			||||||
 | 
							{"", "/api", "/versions", "/api/versions"},
 | 
				
			||||||
 | 
							{"", "/api", "versions", "/api/versions"},
 | 
				
			||||||
 | 
							{"", "/a/api", "", "/a/api"},
 | 
				
			||||||
 | 
							{"", "/a/api", "/versions", "/a/api/versions"},
 | 
				
			||||||
 | 
							{"", "/a/api", "/versions/d/e", "/a/api/versions/d/e"},
 | 
				
			||||||
 | 
							{"", "/a/api/vfake", "/versions/d/e", "/a/api/vfake/versions/d/e"},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i, tc := range tt {
 | 
				
			||||||
 | 
							c := NewOrDie(&Config{Host: tc.host, Prefix: tc.prefix})
 | 
				
			||||||
 | 
							r := c.Post().Prefix("/alpha").UnversionedPath(tc.unversioned)
 | 
				
			||||||
 | 
							if r.path != tc.expectedPath {
 | 
				
			||||||
 | 
								t.Errorf("test case %d failed: unexpected path: %s, expected %s", i+1, r.path, tc.expectedPath)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i, tc := range tt {
 | 
				
			||||||
 | 
							c := NewOrDie(&Config{Host: tc.host, Prefix: tc.prefix, Version: "v1"})
 | 
				
			||||||
 | 
							r := c.Post().Prefix("/alpha").UnversionedPath(tc.unversioned)
 | 
				
			||||||
 | 
							if r.path != tc.expectedPath {
 | 
				
			||||||
 | 
								t.Errorf("test case %d failed: unexpected path: %s, expected %s", i+1, r.path, tc.expectedPath)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i, tc := range tt {
 | 
				
			||||||
 | 
							c := NewOrDie(&Config{Host: tc.host, Prefix: tc.prefix, Version: "v1beta3"})
 | 
				
			||||||
 | 
							r := c.Post().Prefix("/alpha").UnversionedPath(tc.unversioned)
 | 
				
			||||||
 | 
							if r.path != tc.expectedPath {
 | 
				
			||||||
 | 
								t.Errorf("test case %d failed: unexpected path: %s, expected %s", i+1, r.path, tc.expectedPath)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAbsPath(t *testing.T) {
 | 
					func TestAbsPath(t *testing.T) {
 | 
				
			||||||
	expectedPath := "/bar/foo"
 | 
						expectedPath := "/bar/foo"
 | 
				
			||||||
	c := NewOrDie(&Config{})
 | 
						c := NewOrDie(&Config{})
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user