client/pkg/eventing/v1beta1/client_test.go

181 lines
5.5 KiB
Go

// Copyright © 2022 The Knative Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package v1beta1
import (
"context"
"fmt"
"testing"
"gotest.tools/v3/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
client_testing "k8s.io/client-go/testing"
"knative.dev/eventing/pkg/apis/eventing/v1beta1"
"knative.dev/eventing/pkg/client/clientset/versioned/typed/eventing/v1beta1/fake"
"knative.dev/pkg/apis"
)
const (
testNamespace = "test-ns"
testBroker = "test-broker"
testSource = "test.source"
testType = "test-type"
testName = "test-eventtype"
errName = "error-eventtype"
)
func setup(ns string) (fakeSvr fake.FakeEventingV1beta1, client KnEventingV1Beta1Client) {
fakeE := fake.FakeEventingV1beta1{Fake: &client_testing.Fake{}}
cli := NewKnEventingV1Beta1Client(&fakeE, ns)
return fakeE, cli
}
func TestNamespace(t *testing.T) {
_, client := setup(testNamespace)
assert.Equal(t, testNamespace, client.Namespace())
}
func TestBuilder(t *testing.T) {
et := newEventtypeWithSourceBroker(testName, testSource, testBroker)
assert.Equal(t, et.Name, testName)
assert.Equal(t, et.Spec.Broker, testBroker)
source := et.Spec.Source
assert.Assert(t, source != nil)
assert.Equal(t, source.String(), testSource)
}
func TestKnEventingV1Beta1Client_CreateEventtype(t *testing.T) {
server, client := setup(testNamespace)
server.AddReactor("create", "eventtypes",
func(a client_testing.Action) (bool, runtime.Object, error) {
assert.Equal(t, testNamespace, a.GetNamespace())
name := a.(client_testing.CreateAction).GetObject().(metav1.Object).GetName()
if name == errName {
return true, nil, fmt.Errorf("error while creating eventtype %s", name)
}
return true, nil, nil
})
ctx := context.Background()
t.Run("create eventtype successfully", func(t *testing.T) {
objNew := newEventtype(testName)
err := client.CreateEventtype(ctx, objNew)
assert.NilError(t, err)
})
t.Run("create eventtype with source and broker successfully", func(t *testing.T) {
objNew := newEventtypeWithSourceBroker(testName, testSource, testBroker)
err := client.CreateEventtype(ctx, objNew)
assert.NilError(t, err)
})
t.Run("create eventtype with error", func(t *testing.T) {
objNew := newEventtype(errName)
err := client.CreateEventtype(ctx, objNew)
assert.ErrorContains(t, err, "error while creating eventtype")
})
}
func TestKnEventingV1Beta1Client_DeleteEventtype(t *testing.T) {
server, client := setup(testNamespace)
server.AddReactor("delete", "eventtypes",
func(a client_testing.Action) (bool, runtime.Object, error) {
assert.Equal(t, testNamespace, a.GetNamespace())
name := a.(client_testing.DeleteAction).GetName()
if name == errName {
return true, nil, fmt.Errorf("error while deleting eventtype %s", name)
}
return true, nil, nil
})
ctx := context.Background()
t.Run("delete eventtype successfully", func(t *testing.T) {
err := client.DeleteEventtype(ctx, testName)
assert.NilError(t, err)
})
t.Run("delete eventtype with error", func(t *testing.T) {
err := client.DeleteEventtype(ctx, errName)
assert.ErrorContains(t, err, "error while deleting eventtype")
})
}
func TestKnEventingV1Beta1Client_GetEventtype(t *testing.T) {
server, client := setup(testNamespace)
server.AddReactor("get", "eventtypes",
func(a client_testing.Action) (bool, runtime.Object, error) {
assert.Equal(t, testNamespace, a.GetNamespace())
name := a.(client_testing.GetAction).GetName()
if name == errName {
return true, nil, fmt.Errorf("error while getting eventtype %s", name)
}
return true, newEventtype(testName), nil
})
ctx := context.Background()
t.Run("get eventtype successfully", func(t *testing.T) {
et, err := client.GetEventtype(ctx, testName)
assert.NilError(t, err)
assert.Equal(t, et.Name, testName)
})
t.Run("get eventtype with error", func(t *testing.T) {
_, err := client.GetEventtype(ctx, errName)
assert.ErrorContains(t, err, "error while getting eventtype")
})
}
func TestKnEventingV1Beta1Client_ListEventtypes(t *testing.T) {
server, client := setup(testNamespace)
server.AddReactor("list", "eventtypes",
func(a client_testing.Action) (bool, runtime.Object, error) {
assert.Equal(t, testNamespace, a.GetNamespace())
return true, &v1beta1.EventTypeList{Items: []v1beta1.EventType{
*newEventtype("eventtype-1"),
*newEventtype("eventtype-2")}}, nil
})
ctx := context.Background()
list, err := client.ListEventtypes(ctx)
assert.NilError(t, err)
assert.Assert(t, list != nil)
assert.Equal(t, len(list.Items), 2)
assert.Equal(t, list.Items[0].Name, "eventtype-1")
assert.Equal(t, list.Items[1].Name, "eventtype-2")
}
func newEventtypeWithSourceBroker(name string, source string, broker string) *v1beta1.EventType {
url, _ := apis.ParseURL(source)
return NewEventtypeBuilder(name).
Namespace(testNamespace).
WithGvk().
Type(testType).
Source(url).
Broker(broker).
Build()
}
func newEventtype(name string) *v1beta1.EventType {
return NewEventtypeBuilder(name).
Namespace(testNamespace).
Type(testType).
Build()
}