diff --git a/pkg/api/testapi/testapi.go b/pkg/api/testapi/testapi.go index 79e4fedcf95..23a5b25391b 100644 --- a/pkg/api/testapi/testapi.go +++ b/pkg/api/testapi/testapi.go @@ -24,7 +24,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" ) -// Version returns the API version to test against as set by the KUBE_API_VERSION env var. +// Version returns the API version to test against, as set by the KUBE_API_VERSION env var. func Version() string { version := os.Getenv("KUBE_API_VERSION") if version == "" { @@ -33,10 +33,22 @@ func Version() string { return version } -func CodecForVersionOrDie() runtime.Codec { +// Codec returns the codec for the API version to test against, as set by the +// KUBE_API_VERSION env var. +func Codec() runtime.Codec { interfaces, err := latest.InterfacesFor(Version()) if err != nil { panic(err) } return interfaces.Codec } + +// ResourceVersioner returns the ResourceVersioner for the API version to test against, +// as set by the KUBE_API_VERSION env var. +func ResourceVersioner() runtime.ResourceVersioner { + interfaces, err := latest.InterfacesFor(Version()) + if err != nil { + panic(err) + } + return interfaces.ResourceVersioner +} diff --git a/pkg/client/restclient_test.go b/pkg/client/restclient_test.go index 0240fcc8d4c..8c1df0d0ae8 100644 --- a/pkg/client/restclient_test.go +++ b/pkg/client/restclient_test.go @@ -109,7 +109,7 @@ func TestDoRequest(t *testing.T) { {Request: testRequest{Method: "GET", Path: "error"}, Response: Response{StatusCode: 500}, Error: true}, {Request: testRequest{Method: "POST", Path: "faildecode"}, Response: Response{StatusCode: 200, RawBody: &invalid}}, {Request: testRequest{Method: "GET", Path: "failread"}, Response: Response{StatusCode: 200, RawBody: &invalid}}, - {Client: &Client{&RESTClient{baseURL: uri, Codec: testapi.CodecForVersionOrDie()}}, Request: testRequest{Method: "GET", Path: "nocertificate"}, Error: true}, + {Client: &Client{&RESTClient{baseURL: uri, Codec: testapi.Codec()}}, Request: testRequest{Method: "GET", Path: "nocertificate"}, Error: true}, } for _, c := range testClients { client := c.Setup() diff --git a/pkg/controller/replication_controller_test.go b/pkg/controller/replication_controller_test.go index fa3c3890d91..4b81737c6cb 100644 --- a/pkg/controller/replication_controller_test.go +++ b/pkg/controller/replication_controller_test.go @@ -149,7 +149,7 @@ func TestSyncReplicationControllerDeletes(t *testing.T) { } func TestSyncReplicationControllerCreates(t *testing.T) { - body := runtime.EncodeOrDie(testapi.CodecForVersionOrDie(), newPodList(0)) + body := runtime.EncodeOrDie(testapi.Codec(), newPodList(0)) fakeHandler := util.FakeHandler{ StatusCode: 200, ResponseBody: string(body), @@ -170,7 +170,7 @@ func TestSyncReplicationControllerCreates(t *testing.T) { func TestCreateReplica(t *testing.T) { ctx := api.NewDefaultContext() - body := runtime.EncodeOrDie(testapi.CodecForVersionOrDie(), &api.Pod{}) + body := runtime.EncodeOrDie(testapi.Codec(), &api.Pod{}) fakeHandler := util.FakeHandler{ StatusCode: 200, ResponseBody: string(body), diff --git a/pkg/service/endpoints_controller_test.go b/pkg/service/endpoints_controller_test.go index e85f1d77f3e..fd074cc24ab 100644 --- a/pkg/service/endpoints_controller_test.go +++ b/pkg/service/endpoints_controller_test.go @@ -203,7 +203,7 @@ func TestSyncEndpointsItemsPreexisting(t *testing.T) { if err := endpoints.SyncServiceEndpoints(); err != nil { t.Errorf("unexpected error: %v", err) } - data := runtime.EncodeOrDie(testapi.CodecForVersionOrDie(), &api.Endpoints{ + data := runtime.EncodeOrDie(testapi.Codec(), &api.Endpoints{ TypeMeta: api.TypeMeta{ ID: "foo", ResourceVersion: "1", @@ -261,7 +261,7 @@ func TestSyncEndpointsItems(t *testing.T) { if err := endpoints.SyncServiceEndpoints(); err != nil { t.Errorf("unexpected error: %v", err) } - data := runtime.EncodeOrDie(testapi.CodecForVersionOrDie(), &api.Endpoints{ + data := runtime.EncodeOrDie(testapi.Codec(), &api.Endpoints{ TypeMeta: api.TypeMeta{ ResourceVersion: "", }, diff --git a/pkg/watch/json/decoder.go b/pkg/watch/json/decoder.go index bb087b88003..416ef110953 100644 --- a/pkg/watch/json/decoder.go +++ b/pkg/watch/json/decoder.go @@ -51,7 +51,7 @@ func (d *Decoder) Decode() (watch.EventType, runtime.Object, error) { return "", nil, err } switch got.Type { - case watch.Added, watch.Modified, watch.Deleted: + case watch.Added, watch.Modified, watch.Deleted, watch.Error: default: return "", nil, fmt.Errorf("got invalid watch event type: %v", got.Type) } diff --git a/pkg/watch/json/decoder_test.go b/pkg/watch/json/decoder_test.go index 2b35b1dcf2f..7571819d4db 100644 --- a/pkg/watch/json/decoder_test.go +++ b/pkg/watch/json/decoder_test.go @@ -24,61 +24,65 @@ import ( "time" "github.com/GoogleCloudPlatform/kubernetes/pkg/api" - "github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1" + "github.com/GoogleCloudPlatform/kubernetes/pkg/api/testapi" "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" "github.com/GoogleCloudPlatform/kubernetes/pkg/watch" ) func TestDecoder(t *testing.T) { - out, in := io.Pipe() - decoder := NewDecoder(out, v1beta1.Codec) + table := []watch.EventType{watch.Added, watch.Deleted, watch.Modified, watch.Error} - expect := &api.Pod{TypeMeta: api.TypeMeta{ID: "foo"}} - encoder := json.NewEncoder(in) - go func() { - data, err := v1beta1.Codec.Encode(expect) - if err != nil { - t.Fatalf("Unexpected error %v", err) - } - if err := encoder.Encode(&watchEvent{watch.Added, runtime.RawExtension{json.RawMessage(data)}}); err != nil { - t.Errorf("Unexpected error %v", err) - } - in.Close() - }() + for _, eventType := range table { + out, in := io.Pipe() + decoder := NewDecoder(out, testapi.Codec()) - done := make(chan struct{}) - go func() { - action, got, err := decoder.Decode() - if err != nil { - t.Fatalf("Unexpected error %v", err) - } - if e, a := watch.Added, action; e != a { - t.Errorf("Expected %v, got %v", e, a) - } - if e, a := expect, got; !reflect.DeepEqual(e, a) { - t.Errorf("Expected %v, got %v", e, a) - } - t.Logf("Exited read") - close(done) - }() - <-done + expect := &api.Pod{TypeMeta: api.TypeMeta{ID: "foo"}} + encoder := json.NewEncoder(in) + go func() { + data, err := testapi.Codec().Encode(expect) + if err != nil { + t.Fatalf("Unexpected error %v", err) + } + if err := encoder.Encode(&watchEvent{eventType, runtime.RawExtension{json.RawMessage(data)}}); err != nil { + t.Errorf("Unexpected error %v", err) + } + in.Close() + }() - done = make(chan struct{}) - go func() { - _, _, err := decoder.Decode() - if err == nil { - t.Errorf("Unexpected nil error") - } - close(done) - }() - <-done + done := make(chan struct{}) + go func() { + action, got, err := decoder.Decode() + if err != nil { + t.Fatalf("Unexpected error %v", err) + } + if e, a := eventType, action; e != a { + t.Errorf("Expected %v, got %v", e, a) + } + if e, a := expect, got; !reflect.DeepEqual(e, a) { + t.Errorf("Expected %v, got %v", e, a) + } + t.Logf("Exited read") + close(done) + }() + <-done - decoder.Close() + done = make(chan struct{}) + go func() { + _, _, err := decoder.Decode() + if err == nil { + t.Errorf("Unexpected nil error") + } + close(done) + }() + <-done + + decoder.Close() + } } func TestDecoder_SourceClose(t *testing.T) { out, in := io.Pipe() - decoder := NewDecoder(out, v1beta1.Codec) + decoder := NewDecoder(out, testapi.Codec()) done := make(chan struct{}) diff --git a/plugin/pkg/scheduler/factory/factory_test.go b/plugin/pkg/scheduler/factory/factory_test.go index f333f1e3fb3..d7b3cf008ff 100644 --- a/plugin/pkg/scheduler/factory/factory_test.go +++ b/plugin/pkg/scheduler/factory/factory_test.go @@ -317,7 +317,7 @@ func TestBind(t *testing.T) { t.Errorf("Unexpected error: %v", err) continue } - expectedBody := runtime.EncodeOrDie(testapi.CodecForVersionOrDie(), item.binding) + expectedBody := runtime.EncodeOrDie(testapi.Codec(), item.binding) handler.ValidateRequest(t, "/api/"+testapi.Version()+"/bindings", "POST", &expectedBody) } }