mirror of
https://gitee.com/samwaf/SamWaf.git
synced 2026-10-31 02:01:44 +08:00
增加规则验证
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hyperjumptech/grule-rule-engine/ast"
|
||||
"github.com/hyperjumptech/grule-rule-engine/builder"
|
||||
"github.com/hyperjumptech/grule-rule-engine/engine"
|
||||
"github.com/hyperjumptech/grule-rule-engine/pkg"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type MyFact struct {
|
||||
IntAttribute int64
|
||||
StringAttribute string
|
||||
BooleanAttribute bool
|
||||
FloatAttribute float64
|
||||
TimeAttribute time.Time
|
||||
WhatToSay string
|
||||
}
|
||||
|
||||
func (mf *MyFact) GetWhatToSay(sentence string) string {
|
||||
return fmt.Sprintf("Let say \"%s\"", sentence)
|
||||
}
|
||||
|
||||
func TestTutorial(t *testing.T) {
|
||||
myFact := &MyFact{
|
||||
IntAttribute: 1231,
|
||||
StringAttribute: "1Some string value",
|
||||
BooleanAttribute: true,
|
||||
FloatAttribute: 1.234,
|
||||
TimeAttribute: time.Now(),
|
||||
}
|
||||
dataCtx := ast.NewDataContext()
|
||||
err := dataCtx.Add("MF", myFact)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Prepare knowledgebase library and load it with our rule.
|
||||
knowledgeLibrary := ast.NewKnowledgeLibrary()
|
||||
ruleBuilder := builder.NewRuleBuilder(knowledgeLibrary)
|
||||
|
||||
drls := `
|
||||
rule CheckValues "Check the default values" salience 10 {
|
||||
when
|
||||
MF.IntAttribute == 123 && MF.StringAttribute == "Some string value"
|
||||
then
|
||||
MF.WhatToSay = MF.GetWhatToSay("你好");
|
||||
Retract("CheckValues");
|
||||
}
|
||||
`
|
||||
byteArr := pkg.NewBytesResource([]byte(drls))
|
||||
err = ruleBuilder.BuildRuleFromResource("Tutorial", "0.0.1", byteArr)
|
||||
assert.NoError(t, err)
|
||||
|
||||
knowledgeBase := knowledgeLibrary.NewKnowledgeBaseInstance("Tutorial", "0.0.1")
|
||||
|
||||
engine := engine.NewGruleEngine()
|
||||
err = engine.Execute(dataCtx, knowledgeBase)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user