mirror of https://github.com/knative/docs.git
refactor e2e test (#1093)
This commit is contained in:
parent
05c608e7eb
commit
40b64f27f8
|
@ -21,22 +21,26 @@ package e2etest
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/knative/docs/test/sampleapp"
|
||||||
|
|
||||||
|
"github.com/knative/docs/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
configFile = "config.yaml"
|
configFile = "../sampleapp/config.yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestSampleApp runs all sample apps from different languages
|
// TestSampleApp runs all sample apps from different languages
|
||||||
func TestSampleApp(t *testing.T) {
|
func TestSampleApp(t *testing.T) {
|
||||||
lcs, err := getConfigs(configFile)
|
lcs, err := sampleapp.GetConfigs(configFile)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
t.Fatalf("Failed reading config file %s: '%v'", configFile, err)
|
t.Fatalf("Failed reading config file %s: '%v'", configFile, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
whitelist := make(map[string]bool)
|
whitelist := make(map[string]bool)
|
||||||
if "" != Flags.Languages {
|
if "" != test.Flags.Languages {
|
||||||
for _, l := range strings.Split(Flags.Languages, ",") {
|
for _, l := range strings.Split(test.Flags.Languages, ",") {
|
||||||
whitelist[l] = true
|
whitelist[l] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +48,7 @@ func TestSampleApp(t *testing.T) {
|
||||||
if _, ok := whitelist[lc.Language]; len(whitelist) > 0 && !ok {
|
if _, ok := whitelist[lc.Language]; len(whitelist) > 0 && !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
lc.useDefaultIfNotProvided()
|
lc.UseDefaultIfNotProvided()
|
||||||
t.Run(lc.Language, func(t *testing.T) {
|
t.Run(lc.Language, func(t *testing.T) {
|
||||||
SampleAppTestBase(t, lc, lc.ExpectedOutput)
|
SampleAppTestBase(t, lc, lc.ExpectedOutput)
|
||||||
})
|
})
|
||||||
|
|
|
@ -29,6 +29,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/knative/docs/test/sampleapp"
|
||||||
|
|
||||||
|
"github.com/knative/docs/test"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -73,7 +77,7 @@ func ingressAddress(gateway string, addressType string) string {
|
||||||
"-o", fmt.Sprintf("jsonpath={.status.loadBalancer.ingress[*]['%s']}", addressType))
|
"-o", fmt.Sprintf("jsonpath={.status.loadBalancer.ingress[*]['%s']}", addressType))
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareWorkDir(t *testing.T, srcDir, workDir string, preCommands []command, copies []string, postCommands []command) {
|
func prepareWorkDir(t *testing.T, srcDir, workDir string, preCommands []sampleapp.Command, copies []string, postCommands []sampleapp.Command) {
|
||||||
t.Log("Prepare source project")
|
t.Log("Prepare source project")
|
||||||
err := os.RemoveAll(workDir) // this function returns nil if path not found
|
err := os.RemoveAll(workDir) // this function returns nil if path not found
|
||||||
if nil == err {
|
if nil == err {
|
||||||
|
@ -86,7 +90,7 @@ func prepareWorkDir(t *testing.T, srcDir, workDir string, preCommands []command,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range preCommands {
|
for _, c := range preCommands {
|
||||||
c.run(t)
|
c.Run(t)
|
||||||
}
|
}
|
||||||
for _, f := range copies {
|
for _, f := range copies {
|
||||||
src := path.Join(srcDir, f)
|
src := path.Join(srcDir, f)
|
||||||
|
@ -98,7 +102,7 @@ func prepareWorkDir(t *testing.T, srcDir, workDir string, preCommands []command,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, c := range postCommands {
|
for _, c := range postCommands {
|
||||||
c.run(t)
|
c.Run(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,9 +179,9 @@ func checkDeployment(t *testing.T, appName, expectedOutput string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SampleAppTestBase tests individual sample app
|
// SampleAppTestBase tests individual sample app
|
||||||
func SampleAppTestBase(t *testing.T, lc languageConfig, expectedOutput string) {
|
func SampleAppTestBase(t *testing.T, lc sampleapp.LanguageConfig, expectedOutput string) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
imagePath := ImagePath(lc.AppName)
|
imagePath := test.ImagePath(lc.AppName)
|
||||||
yamlFilePath := path.Join(lc.WorkDir, "service.yaml")
|
yamlFilePath := path.Join(lc.WorkDir, "service.yaml")
|
||||||
|
|
||||||
CleanupOnInterrupt(func() { cleanup(yamlFilePath, lc.WorkDir) })
|
CleanupOnInterrupt(func() { cleanup(yamlFilePath, lc.WorkDir) })
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
// +build e2e
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2019 The Knative Authors
|
Copyright 2019 The Knative Authors
|
||||||
|
|
||||||
|
@ -16,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package e2etest
|
package test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
|
@ -1,5 +1,3 @@
|
||||||
// +build e2e
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright 2019 The Knative Authors
|
Copyright 2019 The Knative Authors
|
||||||
|
|
||||||
|
@ -16,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package e2etest
|
package sampleapp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -36,28 +34,32 @@ const (
|
||||||
defaultYamlImagePlaceHolder = "docker.io/{username}/helloworld-%s"
|
defaultYamlImagePlaceHolder = "docker.io/{username}/helloworld-%s"
|
||||||
)
|
)
|
||||||
|
|
||||||
type allConfigs struct {
|
// AllConfigs contains all LanguageConfig
|
||||||
Languages []languageConfig `yaml:"languages`
|
type AllConfigs struct {
|
||||||
|
Languages []LanguageConfig `yaml:"languages`
|
||||||
}
|
}
|
||||||
|
|
||||||
type languageConfig struct {
|
// LanguageConfig contains all information for building/deploying an app
|
||||||
|
type LanguageConfig struct {
|
||||||
Language string `yaml:"language"`
|
Language string `yaml:"language"`
|
||||||
ExpectedOutput string `yaml:"expectedOutput"`
|
ExpectedOutput string `yaml:"expectedOutput"`
|
||||||
SrcDir string `yaml:"srcDir"` // Directory contains sample code
|
SrcDir string `yaml:"srcDir"` // Directory contains sample code
|
||||||
WorkDir string `yaml:"workDir"` // Temp work directory
|
WorkDir string `yaml:"workDir"` // Temp work directory
|
||||||
AppName string `yaml:"appName"`
|
AppName string `yaml:"appName"`
|
||||||
YamlImagePlaceholder string `yaml:"yamlImagePlaceholder"` // Token to be replaced by real docker image URI
|
YamlImagePlaceholder string `yaml:"yamlImagePlaceholder"` // Token to be replaced by real docker image URI
|
||||||
PreCommands []command `yaml:"preCommands"` // Commands to be ran before copying
|
PreCommands []Command `yaml:"preCommands"` // Commands to be ran before copying
|
||||||
Copies []string `yaml:"copies"` // Files to be copied from SrcDir to WorkDir
|
Copies []string `yaml:"copies"` // Files to be copied from SrcDir to WorkDir
|
||||||
PostCommands []command `yaml:"postCommands"` // Commands to be ran after copying
|
PostCommands []Command `yaml:"postCommands"` // Commands to be ran after copying
|
||||||
}
|
}
|
||||||
|
|
||||||
type command struct {
|
// Command contains shell commands
|
||||||
|
type Command struct {
|
||||||
Exec string `yaml:"exec"`
|
Exec string `yaml:"exec"`
|
||||||
Args string `yaml:"args"`
|
Args string `yaml:"args"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lc *languageConfig) useDefaultIfNotProvided() {
|
// UseDefaultIfNotProvided sets default value to SrcDir, WorkDir, AppName, and YamlImagePlaceholder if not provided
|
||||||
|
func (lc *LanguageConfig) UseDefaultIfNotProvided() {
|
||||||
if "" == lc.SrcDir {
|
if "" == lc.SrcDir {
|
||||||
lc.SrcDir = fmt.Sprintf(defaultSrcDir, lc.Language)
|
lc.SrcDir = fmt.Sprintf(defaultSrcDir, lc.Language)
|
||||||
}
|
}
|
||||||
|
@ -72,15 +74,17 @@ func (lc *languageConfig) useDefaultIfNotProvided() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *command) run(t *testing.T) {
|
// Run runs command and fail if it failed
|
||||||
|
func (c *Command) Run(t *testing.T) {
|
||||||
args := strings.Split(c.Args, " ")
|
args := strings.Split(c.Args, " ")
|
||||||
if output, err := exec.Command(c.Exec, args...).CombinedOutput(); err != nil {
|
if output, err := exec.Command(c.Exec, args...).CombinedOutput(); err != nil {
|
||||||
t.Fatalf("Error executing: '%s' '%s' -err: '%v'", c.Exec, c.Args, strings.TrimSpace(string(output)))
|
t.Fatalf("Error executing: '%s' '%s' -err: '%v'", c.Exec, c.Args, strings.TrimSpace(string(output)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getConfigs(configPath string) (allConfigs, error) {
|
// GetConfigs parses a config yaml file and return AllConfigs struct
|
||||||
var lcs allConfigs
|
func GetConfigs(configPath string) (AllConfigs, error) {
|
||||||
|
var lcs AllConfigs
|
||||||
content, err := ioutil.ReadFile(configPath)
|
content, err := ioutil.ReadFile(configPath)
|
||||||
if nil == err {
|
if nil == err {
|
||||||
err = yaml.Unmarshal(content, &lcs)
|
err = yaml.Unmarshal(content, &lcs)
|
Loading…
Reference in New Issue