2020-12-19 19:31:09 +01:00
|
|
|
package rule
|
|
|
|
|
2023-11-11 02:16:08 +01:00
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
2020-12-19 19:31:09 +01:00
|
|
|
|
|
|
|
func TestCreate(t *testing.T) {
|
|
|
|
t.Log("Test: Create rule")
|
|
|
|
|
|
|
|
var list []Operator
|
|
|
|
oper, _ := NewOperator(Simple, false, OpTrue, "", list)
|
2022-07-04 11:14:26 +02:00
|
|
|
r := Create("000-test-name", "rule description 000", true, false, false, Allow, Once, oper)
|
2020-12-19 19:31:09 +01:00
|
|
|
t.Run("New rule must not be nil", func(t *testing.T) {
|
|
|
|
if r == nil {
|
|
|
|
t.Error("Create() returned nil")
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("Rule name must be 000-test-name", func(t *testing.T) {
|
|
|
|
if r.Name != "000-test-name" {
|
|
|
|
t.Error("Rule name error:", r.Name)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("Rule must be enabled", func(t *testing.T) {
|
|
|
|
if r.Enabled == false {
|
|
|
|
t.Error("Rule Enabled is false:", r)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("Rule Precedence must be false", func(t *testing.T) {
|
|
|
|
if r.Precedence == true {
|
|
|
|
t.Error("Rule Precedence is true:", r)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("Rule Action must be Allow", func(t *testing.T) {
|
|
|
|
if r.Action != Allow {
|
|
|
|
t.Error("Rule Action is not Allow:", r.Action)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
t.Run("Rule Duration should be Once", func(t *testing.T) {
|
|
|
|
if r.Duration != Once {
|
|
|
|
t.Error("Rule Duration is not Once:", r.Duration)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2023-11-11 02:16:08 +01:00
|
|
|
|
|
|
|
func TestRuleSerializers(t *testing.T) {
|
|
|
|
t.Log("Test: Serializers()")
|
|
|
|
|
|
|
|
var opList []Operator
|
|
|
|
opList = append(opList, Operator{
|
|
|
|
Type: Simple,
|
|
|
|
Operand: OpProcessPath,
|
|
|
|
Data: "/path/x",
|
|
|
|
})
|
|
|
|
opList = append(opList, Operator{
|
|
|
|
Type: Simple,
|
|
|
|
Operand: OpDstPort,
|
|
|
|
Data: "23",
|
|
|
|
})
|
|
|
|
|
|
|
|
op, _ := NewOperator(List, false, OpTrue, "", opList)
|
|
|
|
// this string must be erased after Deserialized
|
|
|
|
op.Data = "[\"test\": true]"
|
|
|
|
|
|
|
|
r := Create("000-test-serializer-list", "rule description 000", true, false, false, Allow, Once, op)
|
|
|
|
|
|
|
|
rSerialized := r.Serialize()
|
|
|
|
t.Run("Serialize() must not return nil", func(t *testing.T) {
|
|
|
|
if rSerialized == nil {
|
|
|
|
t.Error("rule.Serialize() returned nil")
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
rDeser, err := Deserialize(rSerialized)
|
|
|
|
t.Run("Deserialize must not return error", func(t *testing.T) {
|
|
|
|
if err != nil {
|
|
|
|
t.Error("rule.Serialize() returned error:", err)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
// commit: b93051026e6a82ba07a5ac2f072880e69f04c238
|
|
|
|
t.Run("Deserialize. Operator.Data must be empty", func(t *testing.T) {
|
|
|
|
if rDeser.Operator.Data != "" {
|
|
|
|
t.Error("rule.Deserialize() Operator.Data not emptied:", rDeser.Operator.Data)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("Deserialize. Operator.List must be expanded", func(t *testing.T) {
|
|
|
|
if len(rDeser.Operator.List) != 2 {
|
|
|
|
t.Error("rule.Deserialize() invalid Operator.List:", rDeser.Operator.List)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if rDeser.Operator.List[0].Operand != OpProcessPath {
|
|
|
|
t.Error("rule.Deserialize() invalid Operator.List 1:", rDeser.Operator.List)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if rDeser.Operator.List[1].Operand != OpDstPort {
|
|
|
|
t.Error("rule.Deserialize() invalid Operator.List 2:", rDeser.Operator.List)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if rDeser.Operator.List[0].Type != Simple || rDeser.Operator.List[1].Type != Simple {
|
|
|
|
t.Error("rule.Deserialize() invalid Operator.List 3:", rDeser.Operator.List)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
if rDeser.Operator.List[0].Data != "/path/x" || rDeser.Operator.List[1].Data != "23" {
|
|
|
|
t.Error("rule.Deserialize() invalid Operator.List 4:", rDeser.Operator.List)
|
|
|
|
t.Fail()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|