From 47eb5296ed979e586ce4dc55fa5130e1215b842d Mon Sep 17 00:00:00 2001 From: lhy1024 Date: Mon, 18 Sep 2023 14:17:40 +0800 Subject: [PATCH] add test with debug log Signed-off-by: lhy1024 --- pkg/utils/apiutil/serverapi/middleware.go | 2 + tests/integrations/mcs/scheduling/api_test.go | 47 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/pkg/utils/apiutil/serverapi/middleware.go b/pkg/utils/apiutil/serverapi/middleware.go index 6682f4aabbc6..23fb5478225b 100644 --- a/pkg/utils/apiutil/serverapi/middleware.go +++ b/pkg/utils/apiutil/serverapi/middleware.go @@ -113,6 +113,7 @@ func (h *redirector) matchMicroServiceRedirectRules(r *http.Request) (bool, stri } for _, rule := range h.microserviceRedirectRules { if strings.HasPrefix(r.URL.Path, rule.matchPath) && slice.Contains(rule.matchMethods, r.Method) { + beforePath := r.URL.Path addr, ok := h.s.GetServicePrimaryAddr(r.Context(), rule.targetServiceName) if !ok || addr == "" { log.Warn("failed to get the service primary addr when trying to match redirect rules", @@ -130,6 +131,7 @@ func (h *redirector) matchMicroServiceRedirectRules(r *http.Request) (bool, stri } else { r.URL.Path = rule.targetPath } + log.Debug("redirect to microservice", zap.String("before-path", beforePath), zap.String("after-path", r.URL.Path), zap.String("target", addr)) return true, addr } } diff --git a/tests/integrations/mcs/scheduling/api_test.go b/tests/integrations/mcs/scheduling/api_test.go index 03db3433ec94..cafb0256f5e1 100644 --- a/tests/integrations/mcs/scheduling/api_test.go +++ b/tests/integrations/mcs/scheduling/api_test.go @@ -2,8 +2,10 @@ package scheduling_test import ( "context" + "encoding/json" "fmt" "net/http" + "os" "testing" "time" @@ -114,6 +116,11 @@ func (suite *apiTestSuite) TestAPIForward() { defer tc.Destroy() tc.WaitForPrimaryServing(re) + fname := testutil.InitTempFileLogger("debug") + defer os.RemoveAll(fname) + schedulers := suite.cluster.GetServer(suite.cluster.GetLeader()).GetRaftCluster().GetSchedulers() + re.Empty(schedulers) + urlPrefix := fmt.Sprintf("%s/pd/api/v1", suite.backendEndpoints) var slice []string var resp map[string]interface{} @@ -127,13 +134,49 @@ func (suite *apiTestSuite) TestAPIForward() { re.NoError(err) re.Nil(resp) - // Test checker + // Test checker: only read-only requests are forwarded err = testutil.ReadGetJSON(re, testDialClient, fmt.Sprintf("%s/%s", urlPrefix, "checker/merge"), &resp) re.NoError(err) suite.False(resp["paused"].(bool)) - // Test scheduler + // Test scheduler: only read-only requests are forwarded err = testutil.ReadGetJSON(re, testDialClient, fmt.Sprintf("%s/%s", urlPrefix, "schedulers"), &slice) re.NoError(err) re.Contains(slice, "balance-leader-scheduler") + + b, _ := os.ReadFile(fname) + suite.Contains(string(b), "redirect to microservice") +} + +func (suite *apiTestSuite) TestAPIForward2() { + // POST requests are not forwarded about checkers and schedulers. + re := suite.Require() + tc, err := tests.NewTestSchedulingCluster(suite.ctx, 2, suite.backendEndpoints) + re.NoError(err) + defer tc.Destroy() + tc.WaitForPrimaryServing(re) + + fname := testutil.InitTempFileLogger("debug") + defer os.RemoveAll(fname) + schedulers := suite.cluster.GetServer(suite.cluster.GetLeader()).GetRaftCluster().GetSchedulers() + re.Empty(schedulers) + + urlPrefix := fmt.Sprintf("%s/pd/api/v1", suite.backendEndpoints) + input := make(map[string]interface{}) + input["delay"] = 10 + pauseArgs, err := json.Marshal(input) + suite.NoError(err) + err = testutil.CheckPostJSON(testDialClient, fmt.Sprintf("%s/%s", urlPrefix, "checker/merge"), pauseArgs, + testutil.StatusOK(re)) + suite.NoError(err) + + input["delay"] = 30 + pauseArgs, err = json.Marshal(input) + suite.NoError(err) + err = testutil.CheckPostJSON(testDialClient, fmt.Sprintf("%s/%s", urlPrefix, "schedulers/all"), pauseArgs, + testutil.StatusOK(re)) + suite.NoError(err) + + b, _ := os.ReadFile(fname) + suite.NotContains(string(b), "redirect to microservice") }