func/test/e2e/scenario_config-labels_test.go

92 lines
3.3 KiB
Go

//go:build e2e && !windows
package e2e
import (
"path/filepath"
"gotest.tools/v3/assert"
"knative.dev/func/test/common"
"testing"
)
const (
arrowDown = "\033[B"
enter = "\r"
)
// PrepareInteractiveCommand generates a generic func that can be used to test interactive `func config` commands with user input
func PrepareInteractiveCommand(knFunc *common.TestInteractiveCmd, args ...string) func(userInput ...string) {
fn := knFunc.PrepareRun(args...)
return func(userInput ...string) {
result := fn(userInput...)
if result.Error != nil {
knFunc.T.Fatal(result.Error)
}
}
}
// ConfigLabelsAdd generate sa go function to test `func config labels add` with user input
func ConfigLabelsAdd(knFunc *common.TestInteractiveCmd, functionPath string) func(userInput ...string) {
return PrepareInteractiveCommand(knFunc, "config", "labels", "add", "--path", functionPath)
}
// ConfigLabelsRemove generates a go function to test `func config labels remove` with user input
func ConfigLabelsRemove(knFunc *common.TestInteractiveCmd, functionPath string) func(userInput ...string) {
return PrepareInteractiveCommand(knFunc, "config", "labels", "remove", "--path", functionPath)
}
// TestConfigLabel verifies function labels are properly set on the deployed functions.
// It uses "add" and "remove" sub commands with labels with specified value and labels value from environment variable.
// Test adds 3 labels and removes one.
func TestConfigLabel(t *testing.T) {
// Given...
labelKey1 := "l1"
labelValue1 := "v1"
labelKey2 := "l2"
labelKey3 := "l3"
testEnvName := "TEST_ENV"
testEnvValue := "TEST_VALUE"
knFunc := common.NewTestShellInteractiveCmd(t)
// On When...
funcName := "test-config-labels"
funcPath := filepath.Join(t.TempDir(), funcName)
knFunc.TestCmd.Exec("create", "--language", "go", "--template", "http", funcPath)
knFunc.TestCmd.SourceDir = funcPath
// Config labels add
// Add 2 labels with specified key/value
// Add 1 label with env
configLabelsAdd := ConfigLabelsAdd(knFunc, funcPath)
configLabelsAdd(enter, labelKey1, enter, labelValue1, enter) // Add first label with specified key/value
configLabelsAdd(enter, enter, labelKey2, enter, "any", enter) // Add second label with specified key/value
configLabelsAdd(enter, arrowDown, enter, labelKey3, enter, testEnvName, enter) // Add third label using value from local environment variable
// Delete second label
configLabelsRemove := ConfigLabelsRemove(knFunc, funcPath)
configLabelsRemove(arrowDown, enter)
// Deploy
knFunc.TestCmd.
WithEnv(testEnvName, testEnvValue).
Exec("deploy", "--registry", common.GetRegistry())
defer knFunc.TestCmd.Exec("delete")
// Then assert that...
// label1 exists and matches value2
// label2 does not exists
// label3 exists and matches value3
resource := common.RetrieveKnativeServiceResource(t, funcName)
metadataMap := resource.UnstructuredContent()["metadata"].(map[string]interface{})
labelsMap := metadataMap["labels"].(map[string]interface{})
assert.Assert(t, labelsMap[labelKey1] == labelValue1, "Expected label with name %v and value %v not found", labelKey1, labelValue1)
assert.Assert(t, labelsMap[labelKey2] == nil, "Unexpected label with name %v", labelKey2)
assert.Assert(t, labelsMap[labelKey3] == testEnvValue, "Expected label with name %v and value %v not found", labelKey3, testEnvValue)
}