func/test/oncluster/scenario_basic_test.go

125 lines
3.7 KiB
Go

//go:build oncluster
package oncluster
import (
"os"
"path/filepath"
"strings"
"testing"
"gotest.tools/v3/assert"
"k8s.io/apimachinery/pkg/util/rand"
common "knative.dev/func/test/common"
)
// TestBasicUpload check if direct source upload works
func TestBasicUpload(t *testing.T) {
var funcName = "test-func-basic-upload" + rand.String(5)
var funcPath = filepath.Join(t.TempDir(), funcName)
func() {
knFunc := common.NewKnFuncShellCli(t)
knFunc.Exec("create", "-l", "node", funcPath)
// Write an `index.js` that make node func to return 'first revision'
WriteNewSimpleIndexJS(t, funcPath, "first revision")
// Deploy it
knFunc.Exec("deploy",
"-p", funcPath,
"-r", common.GetRegistry(),
"--remote",
"--verbose",
)
defer knFunc.Exec("delete", "-p", funcPath)
// Assert "first revision" is returned
result := knFunc.Exec("invoke", "-p", funcPath)
assert.Assert(t, strings.Contains(result.Out, "first revision"), "Func body does not contain 'first revision'")
previousServiceRevision := common.GetCurrentServiceRevision(t, funcName)
// Update index.js to force node func to return 'new revision'
WriteNewSimpleIndexJS(t, funcPath, "new revision")
// Re-Deploy Func
knFunc.Exec("deploy",
"-r", common.GetRegistry(),
"-p", funcPath,
"--remote",
"--verbose")
common.WaitForNewRevisionReady(t, previousServiceRevision, funcName) // Wait New Service Revision
// -- Assertions --
result = knFunc.Exec("invoke", "-p", funcPath)
assert.Assert(t, strings.Contains(result.Out, "new revision"), "Func body does not contain 'new revision'")
AssertThatTektonPipelineRunSucceed(t, funcName)
}()
AssertThatTektonPipelineResourcesNotExists(t, funcName)
}
// TestDefault covers basic test scenario that ensure on cluster build from a "default branch" and
// code changes (new commits) will be properly built and deployed on new revision
func TestBasicGit(t *testing.T) {
var funcName = "test-func-basic-git" + rand.String(5)
var funcPath = filepath.Join(t.TempDir(), funcName)
func() {
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)
// Write an `index.js` that make node func to return 'first revision'
WriteNewSimpleIndexJS(t, funcPath, "first revision")
sh := GitInitialCommitAndPush(t, funcPath, remoteRepo.ExternalCloneURL)
// Deploy it
knFunc.Exec("deploy",
"-p", funcPath,
"-r", common.GetRegistry(),
"--remote",
"--verbose",
"--git-url", remoteRepo.ClusterCloneURL,
)
defer knFunc.Exec("delete", "-p", funcPath)
// Assert "first revision" is returned
result := knFunc.Exec("invoke", "-p", funcPath)
assert.Assert(t, strings.Contains(result.Out, "first revision"), "Func body does not contain 'first revision'")
previousServiceRevision := common.GetCurrentServiceRevision(t, funcName)
// Update index.js to force node func to return 'new revision'
WriteNewSimpleIndexJS(t, funcPath, "new revision")
sh.Exec(`git add index.js`)
sh.Exec(`git commit -m "revision 2"`)
sh.Exec(`git push`)
// Re-Deploy Func
knFunc.Exec("deploy",
"-r", common.GetRegistry(),
"-p", funcPath,
"--remote",
"--verbose")
common.WaitForNewRevisionReady(t, previousServiceRevision, funcName) // Wait New Service Revision
// -- Assertions --
result = knFunc.Exec("invoke", "-p", funcPath)
assert.Assert(t, strings.Contains(result.Out, "new revision"), "Func body does not contain 'new revision'")
AssertThatTektonPipelineRunSucceed(t, funcName)
}()
AssertThatTektonPipelineResourcesNotExists(t, funcName)
}