Browse Source

fix(rule): update rule should return topo problem

Signed-off-by: Jiyong Huang <huangjy@emqx.io>
Jiyong Huang 2 years ago
parent
commit
27f4a92ebf
3 changed files with 23 additions and 8 deletions
  1. 6 6
      internal/server/rest.go
  2. 12 0
      internal/server/rest_test.go
  3. 5 2
      internal/server/rule_manager.go

+ 6 - 6
internal/server/rest.go

@@ -1,4 +1,4 @@
-// Copyright 2021-2022 EMQ Technologies Co., Ltd.
+// Copyright 2021-2023 EMQ Technologies Co., Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -450,7 +450,7 @@ func ruleHandler(w http.ResponseWriter, r *http.Request) {
 	case http.MethodGet:
 		rule, err := ruleProcessor.GetRuleJson(name)
 		if err != nil {
-			handleError(w, err, "describe rule error", logger)
+			handleError(w, err, "Describe rule error", logger)
 			return
 		}
 		w.Header().Add(ContentType, ContentTypeJSON)
@@ -459,7 +459,7 @@ func ruleHandler(w http.ResponseWriter, r *http.Request) {
 		deleteRule(name)
 		content, err := ruleProcessor.ExecDrop(name)
 		if err != nil {
-			handleError(w, err, "delete rule error", logger)
+			handleError(w, err, "Delete rule error", logger)
 			return
 		}
 		w.WriteHeader(http.StatusOK)
@@ -467,7 +467,7 @@ func ruleHandler(w http.ResponseWriter, r *http.Request) {
 	case http.MethodPut:
 		_, err := ruleProcessor.GetRuleById(name)
 		if err != nil {
-			handleError(w, err, "not found this rule", logger)
+			handleError(w, err, "Rule not found", logger)
 			return
 		}
 
@@ -478,7 +478,7 @@ func ruleHandler(w http.ResponseWriter, r *http.Request) {
 		}
 		err = updateRule(name, string(body))
 		if err != nil {
-			handleError(w, err, "restart rule error", logger)
+			handleError(w, err, "Update rule error", logger)
 			return
 		}
 		// Update to db after validation
@@ -751,7 +751,7 @@ func configurationImport(data []byte, reboot bool) error {
 	rulesetProcessor.ImportRuleSet(ruleSet)
 	if !reboot {
 		infra.SafeRun(func() error {
-			for name, _ := range ruleSet.Rules {
+			for name := range ruleSet.Rules {
 				rul, ee := ruleProcessor.GetRuleById(name)
 				if ee != nil {
 					logger.Error(ee)

+ 12 - 0
internal/server/rest_test.go

@@ -258,6 +258,18 @@ func Test_rulesManageHandler(t *testing.T) {
 		t.Errorf("Expect\t%v\nBut got\t%v", 200, w1.Result().StatusCode)
 	}
 
+	//update wron rule
+	ruleJson = `{"id": "rule1","sql": "select * from alert1","actions": [{"nop": {}}]}`
+
+	buf2 = bytes.NewBuffer([]byte(ruleJson))
+	req1, _ = http.NewRequest(http.MethodPut, "http://localhost:8080/rules/rule1", buf2)
+	w1 = httptest.NewRecorder()
+	r.ServeHTTP(w1, req1)
+
+	if w1.Result().StatusCode != 400 {
+		t.Errorf("Expect\t%v\nBut got\t%v", 200, w1.Result().StatusCode)
+	}
+
 	//get rule
 	req1, _ = http.NewRequest(http.MethodGet, "http://localhost:8080/rules/rule1", bytes.NewBufferString("any"))
 	w1 = httptest.NewRecorder()

+ 5 - 2
internal/server/rule_manager.go

@@ -1,4 +1,4 @@
-// Copyright 2021-2022 EMQ Technologies Co., Ltd.
+// Copyright 2021-2023 EMQ Technologies Co., Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -146,7 +146,10 @@ func updateRule(ruleId, ruleJson string) error {
 		return fmt.Errorf("Invalid rule json: %v", err)
 	}
 	if rs, ok := registry.Load(r.Id); ok {
-		rs.UpdateTopo(r)
+		err := rs.UpdateTopo(r)
+		if err != nil {
+			return err
+		}
 		err = ruleProcessor.ExecReplaceRuleState(rs.RuleId, true)
 		return err
 	} else {