Commit 38bf2f30 authored by Daniel Smith's avatar Daniel Smith

fix missing error type in watch decode

parent d3491451
...@@ -51,7 +51,7 @@ func (d *Decoder) Decode() (watch.EventType, runtime.Object, error) { ...@@ -51,7 +51,7 @@ func (d *Decoder) Decode() (watch.EventType, runtime.Object, error) {
return "", nil, err return "", nil, err
} }
switch got.Type { switch got.Type {
case watch.Added, watch.Modified, watch.Deleted: case watch.Added, watch.Modified, watch.Deleted, watch.Error:
default: default:
return "", nil, fmt.Errorf("got invalid watch event type: %v", got.Type) return "", nil, fmt.Errorf("got invalid watch event type: %v", got.Type)
} }
......
...@@ -24,61 +24,65 @@ import ( ...@@ -24,61 +24,65 @@ import (
"time" "time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "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/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/watch" "github.com/GoogleCloudPlatform/kubernetes/pkg/watch"
) )
func TestDecoder(t *testing.T) { func TestDecoder(t *testing.T) {
out, in := io.Pipe() table := []watch.EventType{watch.Added, watch.Deleted, watch.Modified, watch.Error}
decoder := NewDecoder(out, v1beta1.Codec)
for _, eventType := range table {
expect := &api.Pod{TypeMeta: api.TypeMeta{ID: "foo"}} out, in := io.Pipe()
encoder := json.NewEncoder(in) decoder := NewDecoder(out, testapi.Codec())
go func() {
data, err := v1beta1.Codec.Encode(expect) expect := &api.Pod{TypeMeta: api.TypeMeta{ID: "foo"}}
if err != nil { encoder := json.NewEncoder(in)
t.Fatalf("Unexpected error %v", err) go func() {
} data, err := testapi.Codec().Encode(expect)
if err := encoder.Encode(&watchEvent{watch.Added, runtime.RawExtension{json.RawMessage(data)}}); err != nil { if err != nil {
t.Errorf("Unexpected error %v", err) t.Fatalf("Unexpected error %v", err)
} }
in.Close() if err := encoder.Encode(&watchEvent{eventType, runtime.RawExtension{json.RawMessage(data)}}); err != nil {
}() t.Errorf("Unexpected error %v", err)
}
done := make(chan struct{}) in.Close()
go func() { }()
action, got, err := decoder.Decode()
if err != nil { done := make(chan struct{})
t.Fatalf("Unexpected error %v", err) go func() {
} action, got, err := decoder.Decode()
if e, a := watch.Added, action; e != a { if err != nil {
t.Errorf("Expected %v, got %v", e, a) t.Fatalf("Unexpected error %v", err)
} }
if e, a := expect, got; !reflect.DeepEqual(e, a) { if e, a := eventType, action; e != a {
t.Errorf("Expected %v, got %v", e, a) t.Errorf("Expected %v, got %v", e, a)
} }
t.Logf("Exited read") if e, a := expect, got; !reflect.DeepEqual(e, a) {
close(done) t.Errorf("Expected %v, got %v", e, a)
}() }
<-done t.Logf("Exited read")
close(done)
done = make(chan struct{}) }()
go func() { <-done
_, _, err := decoder.Decode()
if err == nil { done = make(chan struct{})
t.Errorf("Unexpected nil error") go func() {
} _, _, err := decoder.Decode()
close(done) if err == nil {
}() t.Errorf("Unexpected nil error")
<-done }
close(done)
decoder.Close() }()
<-done
decoder.Close()
}
} }
func TestDecoder_SourceClose(t *testing.T) { func TestDecoder_SourceClose(t *testing.T) {
out, in := io.Pipe() out, in := io.Pipe()
decoder := NewDecoder(out, v1beta1.Codec) decoder := NewDecoder(out, testapi.Codec())
done := make(chan struct{}) done := make(chan struct{})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment