mirror of https://github.com/knative/func.git
125 lines
3.9 KiB
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)
|
|
}
|