Unittest for #9762

Started looking at refactoring of the kubectl Factory, which
caused me to experience all 5 stages of grief. There are some options
for improving, but it probably warrants a proposal with some discussion/
feedback. In the meantime this tests `NegotiateVersion` in isolation.
This commit is contained in:
Jeff Lowdermilk
2015-06-16 20:04:51 -07:00
parent 1dd18673ec
commit 57a6355807
3 changed files with 100 additions and 12 deletions

View File

@@ -17,12 +17,18 @@ limitations under the License.
package client
import (
"bytes"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"reflect"
"strings"
"testing"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi"
)
const (
@@ -314,3 +320,79 @@ func TestSetKubernetesDefaultsUserAgent(t *testing.T) {
t.Errorf("no user agent set: %#v", config)
}
}
func objBody(object interface{}) io.ReadCloser {
output, err := json.MarshalIndent(object, "", "")
if err != nil {
panic(err)
}
return ioutil.NopCloser(bytes.NewReader([]byte(output)))
}
func TestNegotiateVersion(t *testing.T) {
tests := []struct {
name, version, expectedVersion string
serverVersions []string
config *Config
expectErr bool
}{
{
name: "server supports client default",
version: "v1",
expectedVersion: "v1",
config: &Config{},
serverVersions: []string{"v1beta3", "v1"},
expectErr: false,
},
{
name: "server falls back to client supported",
version: "v1",
expectedVersion: "v1beta3",
config: &Config{},
serverVersions: []string{"v1beta3"},
expectErr: false,
},
{
name: "explicit version supported",
version: "",
expectedVersion: "v1",
config: &Config{Version: "v1"},
serverVersions: []string{"v1beta3", "v1"},
expectErr: false,
},
{
name: "explicit version not supported",
version: "",
expectedVersion: "",
config: &Config{Version: "v1"},
serverVersions: []string{"v1beta3"},
expectErr: true,
},
}
codec := testapi.Codec()
for _, test := range tests {
fakeClient := &FakeRESTClient{
Codec: codec,
Resp: &http.Response{
StatusCode: 200,
Body: objBody(&api.APIVersions{Versions: test.serverVersions}),
},
Client: HTTPClientFunc(func(req *http.Request) (*http.Response, error) {
return &http.Response{StatusCode: 200, Body: objBody(&api.APIVersions{Versions: test.serverVersions})}, nil
}),
}
c := NewOrDie(test.config)
c.Client = fakeClient.Client
response, err := NegotiateVersion(c, test.config, test.version)
if err == nil && test.expectErr {
t.Errorf("expected error, got nil for [%s].", test.name)
}
if err != nil && !test.expectErr {
t.Errorf("unexpected error for [%s]: %v.", test.name, err)
}
if response != test.expectedVersion {
t.Errorf("expected version %s, got %s.", test.expectedVersion, response)
}
}
}