func TestWatchWebsocket(t *testing.T) { simpleStorage := &SimpleRESTStorage{} _ = rest.Watcher(simpleStorage) // Give compile error if this doesn't work. handler := handle(map[string]rest.Storage{"simples": simpleStorage}) server := httptest.NewServer(handler) defer server.Close() dest, _ := url.Parse(server.URL) dest.Scheme = "ws" // Required by websocket, though the server never sees it. dest.Path = "/api/version/watch/simples" dest.RawQuery = "" ws, err := websocket.Dial(dest.String(), "", "http://localhost") if err != nil { t.Errorf("unexpected error: %v", err) } try := func(action watch.EventType, object runtime.Object) { // Send simpleStorage.fakeWatch.Action(action, object) // Test receive var got watchJSON err := websocket.JSON.Receive(ws, &got) if err != nil { t.Fatalf("Unexpected error: %v", err) } if got.Type != action { t.Errorf("Unexpected type: %v", got.Type) } gotObj, err := codec.Decode(got.Object) if err != nil { t.Fatalf("Decode error: %v", err) } if _, err := api.GetReference(gotObj); err != nil { t.Errorf("Unable to construct reference: %v", err) } if e, a := object, gotObj; !reflect.DeepEqual(e, a) { t.Errorf("Expected %#v, got %#v", e, a) } } for _, item := range watchTestTable { try(item.t, item.obj) } simpleStorage.fakeWatch.Stop() var got watchJSON err = websocket.JSON.Receive(ws, &got) if err == nil { t.Errorf("Unexpected non-error") } }
func TestRESTCreate(t *testing.T) { table := []struct { ctx api.Context secret *api.Secret valid bool }{ { ctx: api.NewDefaultContext(), secret: testSecret("foo"), valid: true, }, { ctx: api.NewContext(), secret: testSecret("bar"), valid: false, }, { ctx: api.WithNamespace(api.NewContext(), "nondefault"), secret: testSecret("bazzzz"), valid: false, }, } for _, item := range table { _, storage := NewTestREST() c, err := storage.Create(item.ctx, item.secret) if !item.valid { if err == nil { ctxNS := api.NamespaceValue(item.ctx) t.Errorf("%v: Unexpected non-error: (%v, %v)", item.secret.Name, ctxNS, item.secret.Namespace) } continue } if err != nil { t.Errorf("%v: Unexpected error: %v", item.secret.Name, err) continue } if !api.HasObjectMetaSystemFieldValues(&item.secret.ObjectMeta) { t.Errorf("storage did not populate object meta field values") } if e, a := item.secret, c; !reflect.DeepEqual(e, a) { t.Errorf("diff: %s", util.ObjectDiff(e, a)) } // Ensure we implement the interface _ = rest.Watcher(storage) } }