mirror of https://github.com/knative/client.git
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:
parent
64c6851972
commit
563f1d9294
|
|
@ -12,6 +12,16 @@
|
||||||
| https://github.com/knative/client/pull/[#]
|
| 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)
|
## v0.22.0 (2021-04-06)
|
||||||
[cols="1,10,3", options="header", width="100%"]
|
[cols="1,10,3", options="header", width="100%"]
|
||||||
|===
|
|===
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ func NewBrokerListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(brokerList.Items) == 0 {
|
if !brokerListFlags.GenericPrintFlags.OutputFlagSpecified() && len(brokerList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No brokers found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No brokers found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,20 @@ func TestBrokerListEmpty(t *testing.T) {
|
||||||
eventingRecorder.Validate()
|
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) {
|
func TestTriggerListAllNamespace(t *testing.T) {
|
||||||
eventingClient := clienteventingv1.NewMockKnEventingClient(t)
|
eventingClient := clienteventingv1.NewMockKnEventingClient(t)
|
||||||
eventingRecorder := eventingClient.Recorder()
|
eventingRecorder := eventingClient.Recorder()
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,13 @@ package channel
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"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"
|
||||||
"knative.dev/client/pkg/kn/commands/flags"
|
"knative.dev/client/pkg/kn/commands/flags"
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewChannelListCommand is for listing channel objects
|
// NewChannelListCommand is for listing channel objects
|
||||||
|
|
@ -51,7 +54,14 @@ func NewChannelListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
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")
|
fmt.Fprintf(cmd.OutOrStdout(), "No channels found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ package channel
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
|
||||||
|
|
@ -36,6 +38,29 @@ func TestChannelListNoChannelsFound(t *testing.T) {
|
||||||
cRecorder.Validate()
|
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) {
|
func TestChannelList(t *testing.T) {
|
||||||
cClient := clientmessagingv1.NewMockKnChannelsClient(t)
|
cClient := clientmessagingv1.NewMockKnChannelsClient(t)
|
||||||
cRecorder := cClient.Recorder()
|
cRecorder := cClient.Recorder()
|
||||||
|
|
|
||||||
|
|
@ -62,10 +62,18 @@ func NewChannelListTypesCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return knerrors.GetError(err)
|
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")
|
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()
|
printer, err := listTypesFlags.ToPrinter()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
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) {
|
func TestChannelListTypesErrorDynamicClient(t *testing.T) {
|
||||||
dynamicClient := dynamicfakeClient.CreateFakeKnDynamicClient("")
|
dynamicClient := dynamicfakeClient.CreateFakeKnDynamicClient("")
|
||||||
assert.Check(t, dynamicClient.Namespace() != testNamespace)
|
assert.Check(t, dynamicClient.Namespace() != testNamespace)
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ func NewRevisionListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop if nothing found
|
// 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")
|
fmt.Fprintf(cmd.OutOrStdout(), "No revisions found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
func TestRevisionListEmptyByName(t *testing.T) {
|
||||||
action, _, err := fakeRevisionList([]string{"revision", "list", "name"}, &servingv1.RevisionList{})
|
action, _, err := fakeRevisionList([]string{"revision", "list", "name"}, &servingv1.RevisionList{})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ func NewRouteListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(routeList.Items) == 0 {
|
if !routeListFlags.GenericPrintFlags.OutputFlagSpecified() && len(routeList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No routes found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No routes found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
func TestRouteListDefaultOutput(t *testing.T) {
|
||||||
route1 := createMockRouteSingleTarget("foo", "foo-01234", 100)
|
route1 := createMockRouteSingleTarget("foo", "foo-01234", 100)
|
||||||
route2 := createMockRouteSingleTarget("bar", "bar-98765", 100)
|
route2 := createMockRouteSingleTarget("bar", "bar-98765", 100)
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,9 @@ func NewServiceListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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")
|
fmt.Fprintf(cmd.OutOrStdout(), "No services found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
func TestGetEmpty(t *testing.T) {
|
||||||
action, _, err := fakeServiceList([]string{"service", "list", "name"}, &servingv1.ServiceList{})
|
action, _, err := fakeServiceList([]string{"service", "list", "name"}, &servingv1.ServiceList{})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ func NewAPIServerListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sourceList.Items) == 0 {
|
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No ApiServer source found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No ApiServer source found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ package apiserver
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
|
||||||
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
||||||
|
|
@ -58,3 +60,18 @@ func TestListAPIServerSourceEmpty(t *testing.T) {
|
||||||
|
|
||||||
apiServerRecorder.Validate()
|
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()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ func NewBindingListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sourceList.Items) == 0 {
|
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No sink binding found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No sink binding found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ package binding
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
||||||
|
|
||||||
|
|
@ -58,3 +60,18 @@ func TestListBindingEmpty(t *testing.T) {
|
||||||
|
|
||||||
bindingRecorder.Validate()
|
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()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ func NewContainerListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sourceList.Items) == 0 {
|
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No Container source found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No Container source found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ package container
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
v1alpha22 "knative.dev/client/pkg/sources/v1alpha2"
|
v1alpha22 "knative.dev/client/pkg/sources/v1alpha2"
|
||||||
"knative.dev/client/pkg/util"
|
"knative.dev/client/pkg/util"
|
||||||
|
|
@ -58,3 +60,18 @@ func TestListContainerSourceEmpty(t *testing.T) {
|
||||||
|
|
||||||
containerRecorder.Validate()
|
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()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"knative.dev/client/pkg/dynamic"
|
"knative.dev/client/pkg/dynamic"
|
||||||
knerrors "knative.dev/client/pkg/errors"
|
knerrors "knative.dev/client/pkg/errors"
|
||||||
"knative.dev/client/pkg/kn/commands"
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
|
@ -27,6 +28,12 @@ import (
|
||||||
sourcesv1alpha2 "knative.dev/client/pkg/sources/v1alpha2"
|
sourcesv1alpha2 "knative.dev/client/pkg/sources/v1alpha2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
sourceListGroup = "client.knative.dev"
|
||||||
|
sourceListVersion = "v1alpha1"
|
||||||
|
sourceListKind = "SourceList"
|
||||||
|
)
|
||||||
|
|
||||||
var listExample = `
|
var listExample = `
|
||||||
# List available eventing sources
|
# List available eventing sources
|
||||||
kn source list
|
kn source list
|
||||||
|
|
@ -73,10 +80,17 @@ func NewListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return knerrors.GetError(err)
|
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")
|
fmt.Fprintf(cmd.OutOrStdout(), "No sources found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sourceList.GroupVersionKind().Empty() {
|
||||||
|
sourceList.SetGroupVersionKind(schema.GroupVersionKind{Group: sourceListGroup, Version: sourceListVersion, Kind: sourceListKind})
|
||||||
|
}
|
||||||
// empty namespace indicates all namespaces flag is specified
|
// empty namespace indicates all namespaces flag is specified
|
||||||
if namespace == "" {
|
if namespace == "" {
|
||||||
listFlags.EnsureWithNamespace()
|
listFlags.EnsureWithNamespace()
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,18 @@ func TestSourceListTypesNoSourcesInstalled(t *testing.T) {
|
||||||
assert.Check(t, util.ContainsAll(err.Error(), "no sources", "found", "backend", "verify", "installation"))
|
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) {
|
func TestSourceListTypes(t *testing.T) {
|
||||||
output, err := sourceFakeCmd([]string{"source", "list-types"},
|
output, err := sourceFakeCmd([]string{"source", "list-types"},
|
||||||
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),
|
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"))
|
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) {
|
func TestSourceList(t *testing.T) {
|
||||||
output, err := sourceFakeCmd([]string{"source", "list"},
|
output, err := sourceFakeCmd([]string{"source", "list"},
|
||||||
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),
|
newSourceCRDObjWithSpec("pingsources", "sources.knative.dev", "v1alpha1", "PingSource"),
|
||||||
|
|
|
||||||
|
|
@ -62,10 +62,19 @@ func NewListTypesCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return knerrors.GetError(err)
|
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")
|
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()
|
printer, err := listTypesFlags.ToPrinter()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ func NewPingListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sourceList.Items) == 0 {
|
if !listFlags.GenericPrintFlags.OutputFlagSpecified() && len(sourceList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No Ping source found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No Ping source found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ package ping
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
|
||||||
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
v1alpha2 "knative.dev/eventing/pkg/apis/sources/v1alpha2"
|
||||||
|
|
@ -58,3 +60,18 @@ func TestListPingJobSourceEmpty(t *testing.T) {
|
||||||
|
|
||||||
pingRecorder.Validate()
|
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()
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,10 @@ package subscription
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"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"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"knative.dev/client/pkg/kn/commands"
|
"knative.dev/client/pkg/kn/commands"
|
||||||
|
|
@ -52,7 +56,14 @@ func NewSubscriptionListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
return err
|
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")
|
fmt.Fprintf(cmd.OutOrStdout(), "No subscriptions found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1"
|
messagingv1 "knative.dev/eventing/pkg/apis/messaging/v1"
|
||||||
|
|
||||||
|
|
@ -37,6 +39,18 @@ func TestSubscriptionListNoSubscriptionsFound(t *testing.T) {
|
||||||
cRecorder.Validate()
|
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) {
|
func TestSubscriptionList(t *testing.T) {
|
||||||
cClient := v1beta1.NewMockKnSubscriptionsClient(t)
|
cClient := v1beta1.NewMockKnSubscriptionsClient(t)
|
||||||
cRecorder := cClient.Recorder()
|
cRecorder := cClient.Recorder()
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ func NewTriggerListCommand(p *commands.KnParams) *cobra.Command {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if len(triggerList.Items) == 0 {
|
if !triggerListFlags.GenericPrintFlags.OutputFlagSpecified() && len(triggerList.Items) == 0 {
|
||||||
fmt.Fprintf(cmd.OutOrStdout(), "No triggers found.\n")
|
fmt.Fprintf(cmd.OutOrStdout(), "No triggers found.\n")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"knative.dev/eventing/pkg/client/clientset/versioned/scheme"
|
||||||
|
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
|
eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
|
||||||
|
|
@ -69,6 +71,19 @@ func TestTriggerListEmpty(t *testing.T) {
|
||||||
eventingRecorder.Validate()
|
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) {
|
func TestTriggerListAllNamespace(t *testing.T) {
|
||||||
servingClient := clientservingv1.NewMockKnServiceClient(t)
|
servingClient := clientservingv1.NewMockKnServiceClient(t)
|
||||||
servingRecorder := servingClient.Recorder()
|
servingRecorder := servingClient.Recorder()
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ func TestSourceList(t *testing.T) {
|
||||||
output = sourceList(r, "--type", "testapisource0")
|
output = sourceList(r, "--type", "testapisource0")
|
||||||
assert.Check(t, util.ContainsAll(output, "No", "sources", "found."))
|
assert.Check(t, util.ContainsAll(output, "No", "sources", "found."))
|
||||||
output = sourceList(r, "--type", "TestSource", "-oyaml")
|
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")
|
t.Log("List available source in YAML format")
|
||||||
output = sourceList(r, "--type", "PingSource,ApiServerSource", "-oyaml")
|
output = sourceList(r, "--type", "PingSource,ApiServerSource", "-oyaml")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue