func/test/oncluster/scenario_revision_test.go

125 lines
3.9 KiB
Go

//go:build oncluster
package oncluster
/*
Tests on this file covers "on cluster build" use cases:
A) I want my function hosted on my public git repository from a FEATURE BRANCH to get built deployed
b) I want my function hosted on my public git repository from a specific GIT TAG to get built and deployed
c) I want my function hosted on my public git repository from a specific COMMIT HASH to get built and deployed
*/
import (
"os"
"path/filepath"
"strings"
"testing"
"k8s.io/apimachinery/pkg/util/rand"
fn "knative.dev/func/pkg/functions"
common "knative.dev/func/test/common"
)
func TestFromFeatureBranch(t *testing.T) {
setupCodeFn := func(sh *common.TestExecCmd, funcProjectPath string, clusterCloneUrl string) {
WriteNewSimpleIndexJS(t, funcProjectPath, "hello branch")
sh.Exec("git checkout -b feature/branch")
sh.Exec("git add index.js")
sh.Exec(`git commit -m "feature branch change"`)
sh.Exec("git push -u origin feature/branch")
UpdateFuncGit(t, funcProjectPath, fn.Git{URL: clusterCloneUrl, Revision: "feature/branch"})
}
assertBodyFn := func(response string) bool {
return strings.Contains(response, "hello branch")
}
GitRevisionCheck(t, "test-func-feature-branch"+rand.String(5), setupCodeFn, assertBodyFn)
}
func TestFromRevisionTag(t *testing.T) {
setupCodeFn := func(sh *common.TestExecCmd, funcProjectPath string, clusterCloneUrl string) {
WriteNewSimpleIndexJS(t, funcProjectPath, "hello v1")
sh.Exec("git add index.js")
sh.Exec(`git commit -m "version 1"`)
sh.Exec("git push origin main")
sh.Exec("git tag tag-v1")
sh.Exec("git push origin tag-v1")
WriteNewSimpleIndexJS(t, funcProjectPath, "hello v2")
sh.Exec("git add index.js")
sh.Exec(`git commit -m "version 2"`)
sh.Exec("git push origin main")
UpdateFuncGit(t, funcProjectPath, fn.Git{URL: clusterCloneUrl, Revision: "tag-v1"})
}
assertBodyFn := func(response string) bool {
return strings.Contains(response, "hello v1")
}
GitRevisionCheck(t, "test-func-tag"+rand.String(5), setupCodeFn, assertBodyFn)
}
func TestFromCommitHash(t *testing.T) {
setupCodeFn := func(sh *common.TestExecCmd, funcProjectPath string, clusterCloneUrl string) {
WriteNewSimpleIndexJS(t, funcProjectPath, "hello v1")
sh.Exec("git add index.js")
sh.Exec(`git commit -m "version 1"`)
sh.Exec("git push origin main")
gitRevParse := sh.Exec("git rev-parse HEAD")
WriteNewSimpleIndexJS(t, funcProjectPath, "hello v2")
sh.Exec("git add index.js")
sh.Exec(`git commit -m "version 2"`)
sh.Exec("git push origin main")
commitHash := strings.TrimSpace(gitRevParse.Out)
UpdateFuncGit(t, funcProjectPath, fn.Git{URL: clusterCloneUrl, Revision: commitHash})
t.Logf("Revision Check: commit hash resolved to [%v]", commitHash)
}
assertBodyFn := func(response string) bool {
return strings.Contains(response, "hello v1")
}
GitRevisionCheck(t, "test-func-commit"+rand.String(5), setupCodeFn, assertBodyFn)
}
func GitRevisionCheck(
t *testing.T,
funcName string,
setupCodeFn func(shell *common.TestExecCmd, funcProjectPath string, clusterCloneUrl string),
assertBodyFn func(response string) bool) {
var funcPath = filepath.Join(t.TempDir(), funcName)
gitServer := common.GetGitServer(t)
remoteRepo := gitServer.CreateRepository(funcName)
defer gitServer.DeleteRepository(funcName)
knFunc := common.NewKnFuncShellCli(t)
knFunc.Exec("create", "-l", "node", funcPath)
defer os.RemoveAll(funcPath)
sh := GitInitialCommitAndPush(t, funcPath, remoteRepo.ExternalCloneURL)
// Setup specific code
setupCodeFn(sh, funcPath, remoteRepo.ClusterCloneURL)
knFunc.Exec("deploy",
"-r", common.GetRegistry(),
"-p", funcPath,
"--remote",
"--verbose")
defer knFunc.Exec("delete", "-p", funcPath)
// -- Assertions --
result := knFunc.Exec("invoke", "-p", funcPath)
if !assertBodyFn(result.Out) {
t.Error("Func Body does not contains expected expression")
}
AssertThatTektonPipelineRunSucceed(t, funcName)
}