Feat: add multicluster test for vela logs

Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>
This commit is contained in:
Qiaozp
2022-12-07 17:35:53 +08:00
parent c8b24ab363
commit 8bbaf27a4c
4 changed files with 51 additions and 39 deletions
-13
View File
@@ -329,19 +329,6 @@ func RealtimePrintCommandOutput(cmd *exec.Cmd, logFile string) error {
return nil
}
// ClusterObject2Map convert ClusterObjectReference to a readable map
func ClusterObject2Map(refs []common.ClusterObjectReference) map[string]string {
clusterResourceRefTmpl := "Cluster: %s | Namespace: %s | Kind: %s | Name: %s"
objs := make(map[string]string, len(refs))
for _, r := range refs {
if r.Cluster == "" {
r.Cluster = "local"
}
objs[r.Cluster+"/"+r.Namespace+"/"+r.Name+"/"+r.Kind] = fmt.Sprintf(clusterResourceRefTmpl, r.Cluster, r.Namespace, r.Kind, r.Name)
}
return objs
}
// ResourceLocation indicates the resource location
type ResourceLocation struct {
Cluster string
+3 -1
View File
@@ -305,9 +305,11 @@ func isResourceInTargetCluster(opt FilterOption, resource common.ClusterObjectRe
if opt.Cluster == "" && opt.ClusterNamespace == "" {
return true
}
if (opt.Cluster == resource.Cluster || (opt.Cluster == "local" && resource.Cluster == "")) && opt.ClusterNamespace == resource.ObjectReference.Namespace {
if (opt.Cluster == resource.Cluster || (opt.Cluster == "local" && resource.Cluster == "")) &&
(opt.ClusterNamespace == resource.ObjectReference.Namespace || opt.ClusterNamespace == "") {
return true
}
return false
}
+17 -21
View File
@@ -256,13 +256,7 @@ func GetServiceEndpoints(ctx context.Context, appName string, namespace string,
"appName": appName,
"appNs": namespace,
}
if f.Component != "" {
params["name"] = f.Component
}
if f.Cluster != "" && f.ClusterNamespace != "" {
params["cluster"] = f.Cluster
params["clusterNs"] = f.ClusterNamespace
}
setFilterParams(f, params)
velaQL := MakeVelaQL("service-endpoints-view", params, "status")
queryView, err := velaql.ParseVelaQL(velaQL)
@@ -292,13 +286,7 @@ func GetApplicationPods(ctx context.Context, appName string, namespace string, v
"appName": appName,
"appNs": namespace,
}
if f.Component != "" {
params["name"] = f.Component
}
if f.Cluster != "" && f.ClusterNamespace != "" {
params["cluster"] = f.Cluster
params["clusterNs"] = f.ClusterNamespace
}
setFilterParams(f, params)
velaQL := MakeVelaQL("component-pod-view", params, "status")
queryView, err := velaql.ParseVelaQL(velaQL)
@@ -328,13 +316,7 @@ func GetApplicationServices(ctx context.Context, appName string, namespace strin
"appName": appName,
"appNs": namespace,
}
if f.Component != "" {
params["name"] = f.Component
}
if f.Cluster != "" && f.ClusterNamespace != "" {
params["cluster"] = f.Cluster
params["clusterNs"] = f.ClusterNamespace
}
setFilterParams(f, params)
velaQL := MakeVelaQL("component-service-view", params, "status")
queryView, err := velaql.ParseVelaQL(velaQL)
if err != nil {
@@ -357,6 +339,20 @@ func GetApplicationServices(ctx context.Context, appName string, namespace strin
return response.Services, nil
}
// setFilterParams will convert Filter fields to velaQL params
func setFilterParams(f Filter, params map[string]string) {
if f.Component != "" {
params["name"] = f.Component
}
if f.Cluster != "" {
params["cluster"] = f.Cluster
}
if f.ClusterNamespace != "" {
params["clusterNs"] = f.ClusterNamespace
}
}
// QueryValue get queryValue from velaQL
func QueryValue(ctx context.Context, velaC common.Args, queryView *velaql.QueryView) (*value.Value, error) {
dm, err := velaC.GetDiscoveryMapper()
@@ -18,8 +18,10 @@ package e2e_multicluster_test
import (
"context"
"io/ioutil"
"github.com/onsi/gomega/gbytes"
"io"
"net/http"
"os"
"os/exec"
"strings"
"time"
@@ -48,7 +50,7 @@ var _ = Describe("Test multicluster CLI commands", func() {
BeforeEach(func() {
hubCtx, workerCtx, namespace = initializeContextAndNamespace()
app = &v1beta1.Application{}
bs, err := ioutil.ReadFile("./testdata/app/example-vela-cli-tool-test-app.yaml")
bs, err := os.ReadFile("./testdata/app/example-vela-cli-tool-test-app.yaml")
Expect(err).Should(Succeed())
appYaml := strings.ReplaceAll(string(bs), "TEST_NAMESPACE", namespace)
Expect(yaml.Unmarshal([]byte(appYaml), app)).Should(Succeed())
@@ -87,7 +89,7 @@ var _ = Describe("Test multicluster CLI commands", func() {
go func() {
defer GinkgoRecover()
command := exec.Command("vela", "port-forward", app.Name, "-n", namespace)
session, err := gexec.Start(command, ioutil.Discard, ioutil.Discard)
session, err := gexec.Start(command, io.Discard, io.Discard)
Expect(err).Should(Succeed())
<-stopChannel
session.Terminate()
@@ -113,7 +115,7 @@ var _ = Describe("Test multicluster CLI commands", func() {
for _, format := range []string{"inline", "wide", "table", "list"} {
outputs, err := execCommand("status", app.Name, "-n", namespace, "--tree", "--detail", "--detail-format", format)
Expect(err).Should(Succeed())
Expect(string(outputs)).Should(SatisfyAll(
Expect(outputs).Should(SatisfyAll(
ContainSubstring("alias-worker-tree"),
ContainSubstring("Deployment/exec-podinfo"),
ContainSubstring("updated"),
@@ -121,6 +123,31 @@ var _ = Describe("Test multicluster CLI commands", func() {
))
}
})
It("Test vela logs", func() {
var (
err error
session *gexec.Session
waitingTime = 2 * time.Minute
stopChannel = make(chan struct{}, 1)
)
defer func() {
stopChannel <- struct{}{}
}()
go func() {
defer GinkgoRecover()
command := exec.Command("vela", "logs", app.Name, "-n", namespace, "--cluster", WorkerClusterName)
session, err = gexec.Start(command, nil, nil)
Expect(err).Should(Succeed())
<-stopChannel
session.Terminate()
Expect(session).Should(gexec.Exit())
}()
Expect(err).Should(Succeed())
Eventually(session, waitingTime).Should(gbytes.Say("exec-podinfo"))
Eventually(session, waitingTime).Should(gbytes.Say("httpd started"))
})
})
})