mirror of https://github.com/knative/client.git
218 lines
7.2 KiB
Go
218 lines
7.2 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 service
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/spf13/viper"
|
|
"gotest.tools/v3/assert"
|
|
"knative.dev/client/pkg/config"
|
|
|
|
"knative.dev/client/pkg/commands"
|
|
"knative.dev/client/pkg/util"
|
|
"knative.dev/serving/pkg/apis/autoscaling"
|
|
)
|
|
|
|
func TestApplyPullPolicyFlag(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
svc := createTestService("test-svc", []string{"test-svc-00001", "test-svc-00002"}, goodConditions())
|
|
cmd.SetArgs([]string{"--pull-policy", "Always"})
|
|
cmd.Execute()
|
|
err := editFlags.Apply(&svc, nil, cmd)
|
|
assert.NilError(t, err)
|
|
}
|
|
|
|
func TestApplyPullPolicyFlagError(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
svc := createTestService("test-svc", []string{"test-svc-00001", "test-svc-00002"}, goodConditions())
|
|
cmd.SetArgs([]string{"--pull-policy", "InvalidPolicy"})
|
|
cmd.Execute()
|
|
err := editFlags.Apply(&svc, nil, cmd)
|
|
assert.Assert(t, util.ContainsAll(err.Error(), "invalid", "InvalidPolicy", "Valid arguments (case insensitive): Always | Never | IfNotPresent"))
|
|
}
|
|
|
|
func TestScaleMetric(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
svc := createTestService("test-svc", []string{"test-svc-00001", "test-svc-00002"}, goodConditions())
|
|
cmd.SetArgs([]string{"--scale-metric", "rps"})
|
|
cmd.Execute()
|
|
err := editFlags.Apply(&svc, nil, cmd)
|
|
assert.NilError(t, err)
|
|
}
|
|
|
|
func TestScaleActivation(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
svc := createTestService("test-svc", []string{"test-svc-00001"}, goodConditions())
|
|
cmd.SetArgs([]string{"--scale-activation", "2"})
|
|
cmd.Execute()
|
|
err := editFlags.Apply(&svc, nil, cmd)
|
|
assert.NilError(t, err)
|
|
assert.Equal(t, svc.Spec.Template.Annotations[autoscaling.ActivationScaleKey], "2")
|
|
}
|
|
|
|
func TestApplyDefaultProfileFlag(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
|
|
err := config.BootstrapConfig()
|
|
assert.NilError(t, err)
|
|
|
|
svc := createTestService("test-svc", []string{"test-svc-00001"}, goodConditions())
|
|
cmd.SetArgs([]string{"--profile", "istio"})
|
|
cmd.Execute()
|
|
editFlags.Apply(&svc, nil, cmd)
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.istio.io/inject"], "true")
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.istio.io/rewriteAppHTTPProbers"], "true")
|
|
assert.Equal(t, svc.Spec.Template.Annotations["serving.knative.openshift.io/enablePassthrough"], "true")
|
|
}
|
|
|
|
func TestApplyProfileFlag(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
configYaml := `
|
|
profiles:
|
|
testprofile:
|
|
labels:
|
|
- name: environment
|
|
value: "test"
|
|
annotations:
|
|
- name: sidecar.testprofile.io/inject
|
|
value: "true"
|
|
- name: sidecar.testprofile.io/rewriteAppHTTPProbers
|
|
value: "true"
|
|
`
|
|
_, cleanup := setupConfig(t, configYaml)
|
|
defer cleanup()
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
|
|
err := config.BootstrapConfig()
|
|
assert.NilError(t, err)
|
|
|
|
svc := createTestService("test-svc", []string{"test-svc-00001"}, goodConditions())
|
|
cmd.SetArgs([]string{"--profile", "testprofile"})
|
|
cmd.Execute()
|
|
editFlags.Apply(&svc, nil, cmd)
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.testprofile.io/inject"], "true")
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.testprofile.io/rewriteAppHTTPProbers"], "true")
|
|
assert.Equal(t, svc.ObjectMeta.Labels["environment"], "test")
|
|
}
|
|
|
|
func TestDeleteProfileFlag(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
configYaml := `
|
|
profiles:
|
|
testprofile:
|
|
labels:
|
|
- name: environment
|
|
value: "test"
|
|
annotations:
|
|
- name: sidecar.testprofile.io/inject
|
|
value: "true"
|
|
- name: sidecar.testprofile.io/rewriteAppHTTPProbers
|
|
value: "true"
|
|
`
|
|
_, cleanup := setupConfig(t, configYaml)
|
|
defer cleanup()
|
|
|
|
editFlags.AddCreateFlags(cmd)
|
|
|
|
err := config.BootstrapConfig()
|
|
assert.NilError(t, err)
|
|
|
|
svc := createTestService("test-svc", []string{"test-svc-00001"}, goodConditions())
|
|
cmd.SetArgs([]string{"--profile", "testprofile"})
|
|
cmd.Execute()
|
|
editFlags.Apply(&svc, nil, cmd)
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.testprofile.io/inject"], "true")
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.testprofile.io/rewriteAppHTTPProbers"], "true")
|
|
assert.Equal(t, svc.ObjectMeta.Labels["environment"], "test")
|
|
|
|
cmd.SetArgs([]string{"--profile", "testprofile-"})
|
|
cmd.Execute()
|
|
editFlags.Apply(&svc, nil, cmd)
|
|
|
|
assert.Equal(t, svc.Spec.Template.Annotations["sidecar.istio.io/inject"], "")
|
|
assert.Equal(t, len(svc.Spec.Template.Annotations), 1)
|
|
|
|
assert.Equal(t, svc.ObjectMeta.Labels["environment"], "")
|
|
}
|
|
|
|
func TestApplyProfileFlagError(t *testing.T) {
|
|
var editFlags ConfigurationEditFlags
|
|
knParams := &commands.KnParams{}
|
|
cmd, _, _ := commands.CreateTestKnCommand(NewServiceCreateCommand(knParams), knParams)
|
|
editFlags.AddCreateFlags(cmd)
|
|
err := config.BootstrapConfig()
|
|
assert.NilError(t, err)
|
|
|
|
svc := createTestService("test-svc", []string{"test-svc-00001"}, goodConditions())
|
|
cmd.SetArgs([]string{"--profile", "invalidprofile"})
|
|
cmd.Execute()
|
|
err = editFlags.Apply(&svc, nil, cmd)
|
|
assert.Assert(t, util.ContainsAll(err.Error(), "profile", "invalidprofile"))
|
|
}
|
|
|
|
func setupConfig(t *testing.T, configContent string) (string, func()) {
|
|
tmpDir := t.TempDir()
|
|
|
|
// Avoid to be fooled by the things in the the real homedir
|
|
oldHome := os.Getenv("HOME")
|
|
os.Setenv("HOME", tmpDir)
|
|
|
|
// Save old args
|
|
backupArgs := os.Args
|
|
|
|
// WriteCache out a temporary configContent file
|
|
var cfgFile string
|
|
if configContent != "" {
|
|
cfgFile = filepath.Join(tmpDir, "config.yaml")
|
|
os.Args = []string{"kn", "--config", cfgFile}
|
|
err := os.WriteFile(cfgFile, []byte(configContent), 0644)
|
|
assert.NilError(t, err)
|
|
}
|
|
return cfgFile, func() {
|
|
// Cleanup everything
|
|
os.Setenv("HOME", oldHome)
|
|
os.Args = backupArgs
|
|
viper.Reset()
|
|
}
|
|
}
|