func/test/oncluster/scenario_runtime_test.go

92 lines
2.3 KiB
Go

//go:build oncluster || runtime
package oncluster
import (
"fmt"
"os"
"path/filepath"
"strings"
"testing"
"k8s.io/apimachinery/pkg/util/rand"
common "knative.dev/func/test/common"
)
var runtimeSupportMap = map[string][]string{
"node": {"pack", "s2i"},
"go": {"pack"},
"rust": {"pack"},
"python": {"pack", "s2i"},
"quarkus": {"pack", "s2i"},
"springboot": {"pack"},
"typescript": {"pack", "s2i"},
}
// TestRuntime will invoke a language runtime test against (by default) to all runtimes.
// The Environment Variable E2E_RUNTIMES can be used to select the languages/runtimes to be tested
func TestRuntime(t *testing.T) {
var runtimeList = []string{}
runtimes, present := os.LookupEnv("E2E_RUNTIMES")
targetBuilder, _ := os.LookupEnv("FUNC_BUILDER")
if present {
if runtimes != "" {
runtimeList = strings.Split(runtimes, " ")
}
} else {
for k := range runtimeSupportMap {
runtimeList = append(runtimeList, k)
}
}
for _, lang := range runtimeList {
for _, builder := range runtimeSupportMap[lang] {
if targetBuilder == "" || builder == targetBuilder {
t.Run(fmt.Sprintf("%v_%v_test", lang, builder), func(t *testing.T) {
if lang == "python" && os.Getenv("GITHUB_ACTIONS") == "true" {
t.Skip("skipping python test in GH action because of space requirement")
}
runtimeImpl(t, lang, builder)
})
}
}
}
}
func runtimeImpl(t *testing.T, lang string, builder string) {
var gitProjectName = fmt.Sprintf("test-runtime-%v-%v-%v", lang, builder, rand.String(5))
var gitProjectPath = filepath.Join(t.TempDir(), gitProjectName)
var funcName = gitProjectName
var funcPath = gitProjectPath
gitServer := common.GetGitServer(t)
remoteRepo := gitServer.CreateRepository(gitProjectName)
defer gitServer.DeleteRepository(gitProjectName)
knFunc := common.NewKnFuncShellCli(t)
knFunc.Exec("create", "-l", lang, funcPath)
defer os.RemoveAll(gitProjectPath)
GitInitialCommitAndPush(t, gitProjectPath, remoteRepo.ExternalCloneURL)
knFunc.Exec("deploy",
"--registry", common.GetRegistry(),
"--path", funcPath,
"--remote",
"--verbose",
"--builder", builder,
"--git-url", remoteRepo.ClusterCloneURL)
defer knFunc.Exec("delete", "-p", funcPath)
// -- Assertions --
result := knFunc.Exec("invoke", "-p", funcPath)
t.Log(result)
AssertThatTektonPipelineRunSucceed(t, funcName)
}