Fix service/revision list output with '-o' param (#1276)

* Fix service/revision list output with '-o' param

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Update CHANGELOG

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Simplify output flag check

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Respect '-o' in all list commands

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Fix imports

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Fix e2e test

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Fix e2e test

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Remove unnecessary import

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Fix import

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>

* Fix tests

Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>
This commit is contained in:
Yevhen Vydolob 2021-04-13 17:53:00 +03:00 committed by GitHub
parent 64c6851972
commit 563f1d9294
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 283 additions and 17 deletions

View File

@ -12,6 +12,16 @@
| https://github.com/knative/client/pull/[#]
////
## (Unreleased)
[cols="1,10,3", options="header", width="100%"]
|===
| | Description | PR
|🐛
| Respect `-o` in `list` commands in case if no data present
| https://github.com/knative/client/pull/1276[#1276]
|===
## v0.22.0 (2021-04-06)
[cols="1,10,3", options="header", width="100%"]
|===

View File

@ -61,7 +61,7 @@ func NewBrokerListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
if len(brokerList.Items) == 0 {
if !brokerListFlags.GenericPrintFlags.OutputFlagSpecified() && len(brokerList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No brokers found.\n")
return nil
}

View File

@ -61,6 +61,20 @@ func TestBrokerListEmpty(t *testing.T) {
eventingRecorder.Validate()
}
func TestBrokerListEmptyWithJSON(t *testing.T) {
eventingClient := clienteventingv1.NewMockKnEventingClient(t)
eventingRecorder := eventingClient.Recorder()
brokerList := &v1beta1.BrokerList{}
brokerList.APIVersion = "eventing.knative.dev/v1beta1"
brokerList.Kind = "BrokerList"
eventingRecorder.ListBrokers(brokerList, nil)
output, err := executeBrokerCommand(eventingClient, "list", "-o", "json")
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(output, "\"apiVersion\": \"eventing.knative.dev/v1beta1\"", "\"items\": [],", "\"kind\": \"BrokerList\""))
eventingRecorder.Validate()
}
func TestTriggerListAllNamespace(t *testing.T) {
eventingClient := clienteventingv1.NewMockKnEventingClient(t)
eventingRecorder := eventingClient.Recorder()

View File

@ -17,10 +17,13 @@ package channel
import (
"fmt"
"github.com/spf13/cobra"
"knative.dev/client/pkg/util"
messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1"
"github.com/spf13/cobra"
"knative.dev/client/pkg/kn/commands"
"knative.dev/client/pkg/kn/commands/flags"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
)
// NewChannelListCommand is for listing channel objects
@ -51,7 +54,14 @@ func NewChannelListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if channelList == nil || len(channelList.Items) == 0 {
if channelList == nil {
channelList = &messagingv1.ChannelList{}
err := util.UpdateGroupVersionKindWithScheme(channelList, messagingv1.SchemeGroupVersion, scheme.Scheme)
if err != nil {
return err
}
}
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(channelList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No channels found.\n")
return nil
}

View File

@ -17,6 +17,8 @@ package channel
import (
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
"k8s.io/apimachinery/pkg/runtime/schema"
@ -36,6 +38,29 @@ func TestChannelListNoChannelsFound(t *testing.T) {
cRecorder.Validate()
}
func TestChannelListNoChannelsFoundWithOutputSet(t *testing.T) {
cClient := clientmessagingv1.NewMockKnChannelsClient(t)
cRecorder := cClient.Recorder()
cRecorder.ListChannel(nil, nil)
out, err := executeChannelCommand(cClient, "list", "-o", "json")
assert.NilError(t, err)
assert.Check(t, util.ContainsAll(out, "\"apiVersion\": \"messaging.knative.dev/v1\"", "\"kind\": \"ChannelList\"", "\"items\": []"))
cRecorder.Validate()
}
func TestChannelListEmptyWithOutputSet(t *testing.T) {
cClient := clientmessagingv1.NewMockKnChannelsClient(t)
cRecorder := cClient.Recorder()
channelList := &messagingv1.ChannelList{}
err := util.UpdateGroupVersionKindWithScheme(channelList, messagingv1.SchemeGroupVersion, scheme.Scheme)
assert.NilError(t, err)
cRecorder.ListChannel(channelList, nil)
out, err := executeChannelCommand(cClient, "list", "-o", "json")
assert.NilError(t, err)
assert.Check(t, util.ContainsAll(out, "\"apiVersion\": \"messaging.knative.dev/v1\"", "\"kind\": \"ChannelList\"", "\"items\": []"))
cRecorder.Validate()
}
func TestChannelList(t *testing.T) {
cClient := clientmessagingv1.NewMockKnChannelsClient(t)
cRecorder := cClient.Recorder()

View File

@ -62,10 +62,18 @@ func NewChannelListTypesCommand(p *commands.KnParams) *cobra.Command {
return knerrors.GetError(err)
}
if channelListTypes == nil || len(channelListTypes.Items) == 0 {
if channelListTypes == nil {
channelListTypes = &unstructured.UnstructuredList{}
}
if !listTypesFlags.GenericPrintFlags.OutputFlagSpecified() && len(channelListTypes.Items) == 0 {
return fmt.Errorf("no channels found on the backend, please verify the installation")
}
if channelListTypes.GroupVersionKind().Empty() {
channelListTypes.SetAPIVersion("apiextensions.k8s.io/v1")
channelListTypes.SetKind("CustomResourceDefinitionList")
}
printer, err := listTypesFlags.ToPrinter()
if err != nil {
return nil

View File

@ -71,6 +71,15 @@ func TestChannelListTypesNoChannelInstalled(t *testing.T) {
assert.Check(t, util.ContainsAll(err.Error(), "no channels found on the backend, please verify the installation"))
}
func TestChannelListTypesNoChannelWithJsonOutput(t *testing.T) {
dynamicClient := dynamicfakeClient.CreateFakeKnDynamicClient(testNamespace)
assert.Equal(t, dynamicClient.Namespace(), testNamespace)
output, err := channelFakeCmd([]string{"channel", "list-types", "-o", "json"}, dynamicClient)
assert.NilError(t, err)
assert.Check(t, util.ContainsAll(strings.Join(output[:], "\n"), "\"apiVersion\": \"apiextensions.k8s.io/v1\"", "\"items\": []", "\"kind\": \"CustomResourceDefinitionList\""))
}
func TestChannelListTypesErrorDynamicClient(t *testing.T) {
dynamicClient := dynamicfakeClient.CreateFakeKnDynamicClient("")
assert.Check(t, dynamicClient.Namespace() != testNamespace)

View File

@ -83,7 +83,7 @@ func NewRevisionListCommand(p *commands.KnParams) *cobra.Command {
}
// Stop if nothing found
if len(revisionList.Items) == 0 {
if !revisionListFlags.GenericPrintFlags.OutputFlagSpecified() && len(revisionList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No revisions found.\n")
return nil
}

View File

@ -60,6 +60,17 @@ func TestRevisionListEmpty(t *testing.T) {
}
}
func TestRevisionListEmptyWithJSON(t *testing.T) {
action, output, err := fakeRevisionList([]string{"revision", "list", "-o", "json"}, &servingv1.RevisionList{})
assert.NilError(t, err)
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "revisions") {
t.Errorf("Bad action %v", action)
}
assert.Assert(t, util.ContainsAll(strings.Join(output[:], "\n"), "\"apiVersion\": \"serving.knative.dev/v1\"", "\"items\": [],", "\"kind\": \"RevisionList\""))
}
func TestRevisionListEmptyByName(t *testing.T) {
action, _, err := fakeRevisionList([]string{"revision", "list", "name"}, &servingv1.RevisionList{})
assert.NilError(t, err)

View File

@ -66,7 +66,7 @@ func NewRouteListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
if len(routeList.Items) == 0 {
if !routeListFlags.GenericPrintFlags.OutputFlagSpecified() && len(routeList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No routes found.\n")
return nil
}

View File

@ -57,6 +57,19 @@ func TestListEmpty(t *testing.T) {
}
}
func TestListEmptyWithJsonOutput(t *testing.T) {
action, output, err := fakeRouteList([]string{"route", "list", "-o", "json"}, &servingv1.RouteList{})
assert.NilError(t, err)
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "routes") {
t.Errorf("Bad action %v", action)
}
outputJson := strings.Join(output[:], "\n")
assert.Assert(t, util.ContainsAll(outputJson, "\"apiVersion\": \"serving.knative.dev/v1\"", "\"items\": [],", "\"kind\": \"RouteList\""))
}
func TestRouteListDefaultOutput(t *testing.T) {
route1 := createMockRouteSingleTarget("foo", "foo-01234", 100)
route2 := createMockRouteSingleTarget("bar", "bar-98765", 100)

View File

@ -64,7 +64,9 @@ func NewServiceListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
if len(serviceList.Items) == 0 {
// Stop if nothing found
if !serviceListFlags.GenericPrintFlags.OutputFlagSpecified() && len(serviceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No services found.\n")
return nil
}

View File

@ -58,6 +58,18 @@ func TestListEmpty(t *testing.T) {
}
}
func TestListEmptyWithJSON(t *testing.T) {
action, output, err := fakeServiceList([]string{"service", "list", "-o", "json"}, &servingv1.ServiceList{})
assert.NilError(t, err)
if action == nil {
t.Errorf("No action")
} else if !action.Matches("list", "services") {
t.Errorf("Bad action %v", action)
}
assert.Assert(t, util.ContainsAll(strings.Join(output[:], "\n"), "\"apiVersion\": \"serving.knative.dev/v1\"", "\"items\": [],", "\"kind\": \"ServiceList\""))
}
func TestGetEmpty(t *testing.T) {
action, _, err := fakeServiceList([]string{"service", "list", "name"}, &servingv1.ServiceList{})
assert.NilError(t, err)

View File

@ -50,7 +50,7 @@ func NewAPIServerListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if len(sourceList.Items) == 0 {
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No ApiServer source found.\n")
return nil
}

View File

@ -17,6 +17,8 @@ package apiserver
import (
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
@ -58,3 +60,18 @@ func TestListAPIServerSourceEmpty(t *testing.T) {
apiServerRecorder.Validate()
}
func TestListAPIServerSourceEmptyWithJsonOutput(t *testing.T) {
apiServerClient := v1alpha22.NewMockKnAPIServerSourceClient(t)
apiServerRecorder := apiServerClient.Recorder()
sampleSourceList := v1alpha2.ApiServerSourceList{}
_ = util.UpdateGroupVersionKindWithScheme(&sampleSourceList, v1alpha2.SchemeGroupVersion, scheme.Scheme)
apiServerRecorder.ListAPIServerSource(&sampleSourceList, nil)
out, err := executeAPIServerSourceCommand(apiServerClient, nil, "list", "-o", "json")
assert.NilError(t, err, "Sources should be listed")
assert.Assert(t, util.ContainsAll(out, "\"apiVersion\": \"sources.knative.dev/v1alpha2\"", "\"items\": []", "\"kind\": \"ApiServerSourceList\""))
apiServerRecorder.Validate()
}

View File

@ -49,7 +49,7 @@ func NewBindingListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if len(sourceList.Items) == 0 {
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No sink binding found.\n")
return nil
}

View File

@ -17,6 +17,8 @@ package binding
import (
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
@ -58,3 +60,18 @@ func TestListBindingEmpty(t *testing.T) {
bindingRecorder.Validate()
}
func TestListBindingEmptyWithJsonOutput(t *testing.T) {
bindingClient := clientv1alpha2.NewMockKnSinkBindingClient(t)
bindingRecorder := bindingClient.Recorder()
bindingList := v1alpha2.SinkBindingList{}
_ = util.UpdateGroupVersionKindWithScheme(&bindingList, v1alpha2.SchemeGroupVersion, scheme.Scheme)
bindingRecorder.ListSinkBindings(&bindingList, nil)
out, err := executeSinkBindingCommand(bindingClient, nil, "list", "-o", "json")
assert.NilError(t, err, "Sources should be listed")
assert.Assert(t, util.ContainsAll(out, "\"apiVersion\": \"sources.knative.dev/v1alpha2\"", "\"items\": []", "\"kind\": \"SinkBindingList\""))
bindingRecorder.Validate()
}

View File

@ -50,7 +50,7 @@ func NewContainerListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if len(sourceList.Items) == 0 {
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No Container source found.\n")
return nil
}

View File

@ -19,6 +19,8 @@ package container
import (
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
v1alpha22 "knative.dev/client/pkg/sources/v1alpha2"
"knative.dev/client/pkg/util"
@ -58,3 +60,18 @@ func TestListContainerSourceEmpty(t *testing.T) {
containerRecorder.Validate()
}
func TestListContainerSourceEmptyWithJsonOutput(t *testing.T) {
containerClient := v1alpha22.NewMockKnContainerSourceClient(t)
containerRecorder := containerClient.Recorder()
sampleSourceList := v1alpha2.ContainerSourceList{}
_ = util.UpdateGroupVersionKindWithScheme(&sampleSourceList, v1alpha2.SchemeGroupVersion, scheme.Scheme)
containerRecorder.ListContainerSources(&sampleSourceList, nil)
out, err := executeContainerSourceCommand(containerClient, nil, "list", "-o", "json")
assert.NilError(t, err, "Sources should be listed")
assert.Assert(t, util.ContainsAll(out, "\"apiVersion\": \"sources.knative.dev/v1alpha2\"", "\"items\": []", "\"kind\": \"ContainerSourceList\""))
containerRecorder.Validate()
}

View File

@ -18,7 +18,8 @@ import (
"fmt"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"knative.dev/client/pkg/dynamic"
knerrors "knative.dev/client/pkg/errors"
"knative.dev/client/pkg/kn/commands"
@ -27,6 +28,12 @@ import (
sourcesv1alpha2 "knative.dev/client/pkg/sources/v1alpha2"
)
const (
sourceListGroup = "client.knative.dev"
sourceListVersion = "v1alpha1"
sourceListKind = "SourceList"
)
var listExample = `
# List available eventing sources
kn source list
@ -73,10 +80,17 @@ func NewListCommand(p *commands.KnParams) *cobra.Command {
return knerrors.GetError(err)
}
if sourceList == nil || len(sourceList.Items) == 0 {
if sourceList == nil {
sourceList = &unstructured.UnstructuredList{}
}
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No sources found.\n")
return nil
}
if sourceList.GroupVersionKind().Empty() {
sourceList.SetGroupVersionKind(schema.GroupVersionKind{Group: sourceListGroup, Version: sourceListVersion, Kind: sourceListKind})
}
// empty namespace indicates all namespaces flag is specified
if namespace == "" {
listFlags.EnsureWithNamespace()

View File

@ -59,6 +59,18 @@ func TestSourceListTypesNoSourcesInstalled(t *testing.T) {
assert.Check(t, util.ContainsAll(err.Error(), "no sources", "found", "backend", "verify", "installation"))
}
func TestSourceListTypesNoSourcesWithJsonOutput(t *testing.T) {
output, err := sourceFakeCmd([]string{"source", "list-types", "-o", "json"},
&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apiextensions.k8s.io/v1",
"kind": "CustomResourceDefinitionList",
},
})
assert.NilError(t, err)
assert.Check(t, util.ContainsAll(strings.Join(output[:], "\n"), "\"apiVersion\": \"apiextensions.k8s.io/v1\"", "\"items\": []", "\"kind\": \"CustomResourceDefinitionList\""))
}
func TestSourceListTypes(t *testing.T) {
output, err := sourceFakeCmd([]string{"source", "list-types"},
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),
@ -95,6 +107,15 @@ func TestSourceListNoSourcesInstalled(t *testing.T) {
assert.Check(t, util.ContainsAll(err.Error(), "no sources", "found", "backend", "verify", "installation"))
}
func TestSourceListEmpty(t *testing.T) {
output, err := sourceFakeCmd([]string{"source", "list", "-o", "json"},
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),
)
assert.NilError(t, err)
outputJson := strings.Join(output[:], "\n")
assert.Assert(t, util.ContainsAll(outputJson, "\"apiVersion\": \"client.knative.dev/v1alpha1\"", "\"items\": [],", "\"kind\": \"SourceList\""))
}
func TestSourceList(t *testing.T) {
output, err := sourceFakeCmd([]string{"source", "list"},
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),

View File

@ -62,10 +62,19 @@ func NewListTypesCommand(p *commands.KnParams) *cobra.Command {
return knerrors.GetError(err)
}
if sourceListTypes == nil || len(sourceListTypes.Items) == 0 {
if sourceListTypes == nil {
sourceListTypes = &unstructured.UnstructuredList{}
}
if !listTypesFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceListTypes.Items) == 0 {
return fmt.Errorf("no sources found on the backend, please verify the installation")
}
if sourceListTypes.GroupVersionKind().Empty() {
sourceListTypes.SetAPIVersion("apiextensions.k8s.io/v1")
sourceListTypes.SetKind("CustomResourceDefinitionList")
}
printer, err := listTypesFlags.ToPrinter()
if err != nil {
return nil

View File

@ -50,7 +50,7 @@ func NewPingListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if len(sourceList.Items) == 0 {
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No Ping source found.\n")
return nil
}

View File

@ -17,6 +17,8 @@ package ping
import (
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
@ -58,3 +60,18 @@ func TestListPingJobSourceEmpty(t *testing.T) {
pingRecorder.Validate()
}
func TestListPingJobSourceEmptyWithJsonOutput(t *testing.T) {
pingClient := clientv1alpha2.NewMockKnPingSourceClient(t)
pingRecorder := pingClient.Recorder()
cJSourceList := v1alpha2.PingSourceList{}
_ = util.UpdateGroupVersionKindWithScheme(&cJSourceList, v1alpha2.SchemeGroupVersion, scheme.Scheme)
pingRecorder.ListPingSource(&cJSourceList, nil)
out, err := executePingSourceCommand(pingClient, nil, "list", "-o", "json")
assert.NilError(t, err, "Sources should be listed")
assert.Assert(t, util.ContainsAll(out, "\"apiVersion\": \"sources.knative.dev/v1alpha2\"", "\"items\": []", "\"kind\": \"PingSourceList\""))
pingRecorder.Validate()
}

View File

@ -19,6 +19,10 @@ package subscription
import (
"fmt"
"knative.dev/client/pkg/util"
messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"github.com/spf13/cobra"
"knative.dev/client/pkg/kn/commands"
@ -52,7 +56,14 @@ func NewSubscriptionListCommand(p *commands.KnParams) *cobra.Command {
return err
}
if subscriptionList == nil || len(subscriptionList.Items) == 0 {
if subscriptionList == nil {
subscriptionList = &messagingv1.SubscriptionList{}
err := util.UpdateGroupVersionKindWithScheme(subscriptionList, messagingv1.SchemeGroupVersion, scheme.Scheme)
if err != nil {
return err
}
}
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(subscriptionList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No subscriptions found.\n")
return nil
}

View File

@ -20,6 +20,8 @@ import (
"strings"
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1"
@ -37,6 +39,18 @@ func TestSubscriptionListNoSubscriptionsFound(t *testing.T) {
cRecorder.Validate()
}
func TestSubscriptionListNoSubscriptionsWithJsonOutput(t *testing.T) {
cClient := v1beta1.NewMockKnSubscriptionsClient(t)
cRecorder := cClient.Recorder()
clist := &messagingv1.SubscriptionList{}
_ = util.UpdateGroupVersionKindWithScheme(clist, messagingv1.SchemeGroupVersion, scheme.Scheme)
cRecorder.ListSubscription(clist, nil)
out, err := executeSubscriptionCommand(cClient, nil, "list", "-o", "json")
assert.NilError(t, err)
assert.Check(t, util.ContainsAll(out, "\"apiVersion\": \"messaging.knative.dev/v1\"", "\"items\": []", "\"kind\": \"SubscriptionList\""))
cRecorder.Validate()
}
func TestSubscriptionList(t *testing.T) {
cClient := v1beta1.NewMockKnSubscriptionsClient(t)
cRecorder := cClient.Recorder()

View File

@ -50,7 +50,7 @@ func NewTriggerListCommand(p *commands.KnParams) *cobra.Command {
if err != nil {
return err
}
if len(triggerList.Items) == 0 {
if !triggerListFlags.GenericPrintFlags.OutputFlagSpecified() && len(triggerList.Items) == 0 {
fmt.Fprintf(cmd.OutOrStdout(), "No triggers found.\n")
return nil
}

View File

@ -18,6 +18,8 @@ import (
"strings"
"testing"
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
"gotest.tools/v3/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
@ -69,6 +71,19 @@ func TestTriggerListEmpty(t *testing.T) {
eventingRecorder.Validate()
}
func TestTriggerListEmptyWithJsonOutput(t *testing.T) {
eventingClient := clienteventingv1.NewMockKnEventingClient(t)
eventingRecorder := eventingClient.Recorder()
triggerList := &eventingv1.TriggerList{}
util.UpdateGroupVersionKindWithScheme(triggerList, eventingv1.SchemeGroupVersion, scheme.Scheme)
eventingRecorder.ListTriggers(triggerList, nil)
output, err := executeTriggerCommand(eventingClient, nil, "list", "-o", "json")
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(output, " \"apiVersion\": \"eventing.knative.dev/v1\"", "\"kind\": \"TriggerList\"", "\"items\": [],"))
eventingRecorder.Validate()
}
func TestTriggerListAllNamespace(t *testing.T) {
servingClient := clientservingv1.NewMockKnServiceClient(t)
servingRecorder := servingClient.Recorder()

View File

@ -88,7 +88,7 @@ func TestSourceList(t *testing.T) {
output = sourceList(r, "--type", "testapisource0")
assert.Check(t, util.ContainsAll(output, "No", "sources", "found."))
output = sourceList(r, "--type", "TestSource", "-oyaml")
assert.Check(t, util.ContainsAll(output, "No", "sources", "found."))
assert.Check(t, util.ContainsAll(output, "apiVersion", "client.knative.dev/v1alpha1", "items", "[]", "kind", "SourceList"))
t.Log("List available source in YAML format")
output = sourceList(r, "--type", "PingSource,ApiServerSource", "-oyaml")