kubevela/e2e/commonContext.go

194 lines
7.4 KiB
Go

/*
Copyright 2021 The KubeVela Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package e2e
import (
"fmt"
"os"
"github.com/Netflix/go-expect"
"github.com/onsi/ginkgo/v2"
"github.com/onsi/gomega"
)
var (
// EnvInitContext used for test Env
EnvInitContext = func(context string, envName string) bool {
return ginkgo.It(context+": should print environment initiation successful message", func() {
cli := fmt.Sprintf("vela env init %s", envName)
var answer = "default"
if envName != "env-application" {
answer = "vela-system"
}
output, err := InteractiveExec(cli, func(c *expect.Console) {
data := []struct {
q, a string
}{
{
q: "Would you like to choose an existing namespaces as your env?",
a: answer,
},
}
for _, qa := range data {
_, err := c.ExpectString(qa.q)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
_, err = c.SendLine(qa.a)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
}
c.ExpectEOF()
})
gomega.Expect(err).NotTo(gomega.HaveOccurred())
expectedOutput := fmt.Sprintf("environment %s with namespace %s created", envName, answer)
gomega.Expect(output).To(gomega.ContainSubstring(expectedOutput))
})
}
EnvInitWithNamespaceOptionContext = func(context string, envName string, namespace string) bool {
return ginkgo.It(context+": should print environment initiation successful message", func() {
cli := fmt.Sprintf("vela env init %s --namespace %s", envName, namespace)
output, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
expectedOutput := fmt.Sprintf("environment %s with namespace %s created", envName, namespace)
gomega.Expect(output).To(gomega.ContainSubstring(expectedOutput))
})
}
JsonAppFileContext = func(context, jsonAppFile string) bool {
return ginkgo.It(context+": Start the application through the app file in JSON format.", func() {
writeStatus := os.WriteFile("vela.json", []byte(jsonAppFile), 0644)
gomega.Expect(writeStatus).NotTo(gomega.HaveOccurred())
output, err := Exec("vela up -f vela.json")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).NotTo(gomega.ContainSubstring("Error:"))
})
}
JsonAppFileContextWithWait = func(context, jsonAppFile string) bool {
return ginkgo.It(context+": Start the application through the app file in JSON format.", func() {
writeStatus := os.WriteFile("vela.json", []byte(jsonAppFile), 0644)
gomega.Expect(writeStatus).NotTo(gomega.HaveOccurred())
output, err := Exec("vela up -f vela.json --wait")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("Application Deployed Successfully!"))
})
}
JsonAppFileContextWithTimeout = func(context, jsonAppFile, duration string) bool {
return ginkgo.It(context+": Start the application through the app file in JSON format.", func() {
writeStatus := os.WriteFile("vela.json", []byte(jsonAppFile), 0644)
gomega.Expect(writeStatus).NotTo(gomega.HaveOccurred())
output, err := Exec("vela up -f vela.json --wait --timeout=" + duration)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("Timeout waiting Application to be healthy!"))
})
}
DeleteEnvFunc = func(context string, envName string) bool {
return ginkgo.It(context+": should print env does not exist message", func() {
cli := fmt.Sprintf("vela env delete %s", envName)
_, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
})
}
EnvShowContext = func(context string, envName string) bool {
return ginkgo.It(context+": should show detailed environment message", func() {
cli := fmt.Sprintf("vela env ls %s", envName)
output, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("NAME"))
gomega.Expect(output).To(gomega.ContainSubstring("NAMESPACE"))
gomega.Expect(output).To(gomega.ContainSubstring(envName))
})
}
EnvSetContext = func(context string, envName string) bool {
return ginkgo.It(context+": should show environment set message", func() {
cli := fmt.Sprintf("vela env sw %s", envName)
output, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring(envName))
})
}
EnvDeleteContext = func(context string, envName string) bool {
return ginkgo.It(context+": should delete an environment", func() {
cli := fmt.Sprintf("vela env delete %s", envName)
output, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
expectedOutput := fmt.Sprintf("%s deleted", envName)
gomega.Expect(output).To(gomega.ContainSubstring(expectedOutput))
})
}
WorkloadDeleteContext = func(context string, applicationName string) bool {
return ginkgo.It(context+": should print successful deletion information", func() {
cli := fmt.Sprintf("vela delete %s -y", applicationName)
output, err := Exec(cli)
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("succeeded"))
})
}
WorkloadCapabilityListContext = func() bool {
return ginkgo.It("list workload capabilities: should sync capabilities from cluster before listing workload capabilities", func() {
output, err := Exec("vela components")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("webservice"))
})
}
TraitCapabilityListContext = func() bool {
return ginkgo.It("list traits capabilities: should sync capabilities from cluster before listing trait capabilities", func() {
output, err := Exec("vela traits")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("scaler"))
})
}
// ComponentListContext used for test vela svc ls
ComponentListContext = func(context string, applicationName string, workloadType string, traitAlias string) bool {
return ginkgo.It(context+": should list all applications", func() {
output, err := Exec("vela ls")
gomega.Expect(err).NotTo(gomega.HaveOccurred())
gomega.Expect(output).To(gomega.ContainSubstring("COMPONENT"))
gomega.Expect(output).To(gomega.ContainSubstring(applicationName))
gomega.Expect(output).To(gomega.ContainSubstring(workloadType))
if traitAlias != "" {
gomega.Expect(output).To(gomega.ContainSubstring(traitAlias))
}
})
}
ShowCapabilityReference = func(context string, capabilityName string) bool {
return ginkgo.It(context+": should show capability reference", func() {
cli := fmt.Sprintf("vela show %s", capabilityName)
_, err := Exec(cli)
gomega.Expect(err).Should(gomega.BeNil())
})
}
ShowCapabilityReferenceMarkdown = func(context string, capabilityName string) bool {
return ginkgo.It(context+": should show capability reference in markdown", func() {
cli := fmt.Sprintf("vela show %s --format=markdown", capabilityName)
_, err := Exec(cli)
gomega.Expect(err).Should(gomega.BeNil())
})
}
)