client/pkg/kn/commands/domain/describe_test.go

161 lines
5.0 KiB
Go

// Copyright © 2021 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 domain
import (
"errors"
"strings"
"testing"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"gotest.tools/v3/assert"
"gotest.tools/v3/assert/cmp"
"knative.dev/client/pkg/serving/v1beta1"
"knative.dev/client/pkg/util"
"knative.dev/pkg/apis"
duckv1 "knative.dev/pkg/apis/duck/v1"
servingv1beta1 "knative.dev/serving/pkg/apis/serving/v1beta1"
)
func TestDomainMappingDescribe(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
servingRecorder.GetDomainMapping("foo.bar", getDomainMapping(), nil)
out, err := executeDomainCommand(client, nil, "describe", "foo.bar")
assert.NilError(t, err)
assert.Assert(t, cmp.Regexp("Name:\\s+foo.bar", out))
assert.Assert(t, cmp.Regexp("Namespace:\\s+default", out))
assert.Assert(t, util.ContainsAll(out, "URL:", "http://foo.bar"))
assert.Assert(t, cmp.Regexp("Reference:", out))
assert.Assert(t, cmp.Regexp("Kind:\\s+Service", out))
assert.Assert(t, cmp.Regexp("Name:\\s+foo", out))
assert.Assert(t, util.ContainsAll(out, "Conditions:", "Ready"))
// There're 2 empty lines used in the "describe" formatting
lineCounter := 0
for _, line := range strings.Split(strings.TrimSpace(out), "\n") {
if line == "" {
lineCounter++
}
}
assert.Equal(t, lineCounter, 3)
servingRecorder.Validate()
}
func TestDomainMappingDescribeDiffNamespace(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
servingRecorder.GetDomainMapping("foo.bar", getDomainMapping("otherNS"), nil)
out, err := executeDomainCommand(client, nil, "describe", "foo.bar")
assert.NilError(t, err)
assert.Assert(t, cmp.Regexp("Name:\\s+foo.bar", out))
assert.Assert(t, cmp.Regexp("Namespace:\\s+default", out))
assert.Assert(t, util.ContainsAll(out, "URL:", "http://foo.bar"))
assert.Assert(t, cmp.Regexp("Reference:", out))
assert.Assert(t, cmp.Regexp("Kind:\\s+Service", out))
assert.Assert(t, cmp.Regexp("Name:\\s+foo", out))
assert.Assert(t, cmp.Regexp("Namespace:\\s+otherNS", out))
assert.Assert(t, util.ContainsAll(out, "Conditions:", "Ready"))
servingRecorder.Validate()
}
func TestDomainMappingDescribeError(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
servingRecorder.GetDomainMapping("foo.bar", getDomainMapping(), errors.New("domainmappings.serving.knative.dev 'foo.bar' not found"))
_, err := executeDomainCommand(client, nil, "describe", "foo.bar")
assert.ErrorContains(t, err, "foo", "not found")
servingRecorder.Validate()
}
func TestDomainMappingDescribeNameError(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
_, err := executeDomainCommand(client, nil, "describe")
assert.Assert(t, err != nil)
assert.Assert(t, util.ContainsAll(err.Error(), "name", "single", "argument"))
servingRecorder.Validate()
_, err = executeDomainCommand(client, nil, "describe", "foo", "bar")
assert.Assert(t, err != nil)
assert.Assert(t, util.ContainsAll(err.Error(), "name", "single", "argument"))
servingRecorder.Validate()
}
func TestDomainMappingDescribeURL(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
servingRecorder.GetDomainMapping("foo.bar", getDomainMapping(), nil)
out, err := executeDomainCommand(client, nil, "describe", "foo.bar", "-o", "url")
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(out, "http://foo.bar"))
servingRecorder.Validate()
}
func TestDomainMappingDescribeYAML(t *testing.T) {
client := v1beta1.NewMockKnServiceClient(t)
servingRecorder := client.Recorder()
servingRecorder.GetDomainMapping("foo.bar", getDomainMapping(), nil)
out, err := executeDomainCommand(client, nil, "describe", "foo.bar", "-o", "yaml")
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(out, "kind: DomainMapping", "spec:", "status:", "metadata:"))
servingRecorder.Validate()
}
func getDomainMapping(ns ...string) *servingv1beta1.DomainMapping {
serviceNamespace := "default"
if len(ns) == 1 {
serviceNamespace = ns[0]
}
dm := createDomainMapping("foo.bar", createServiceRef("foo", serviceNamespace), "")
dm.TypeMeta = v1.TypeMeta{
Kind: "DomainMapping",
APIVersion: servingv1beta1.SchemeGroupVersion.String(),
}
dm.Status = servingv1beta1.DomainMappingStatus{
Status: duckv1.Status{
Conditions: duckv1.Conditions{
apis.Condition{
Type: "Ready",
Status: "True",
},
},
},
URL: &apis.URL{Scheme: "http", Host: "foo.bar"},
}
return dm
}