opensnitch/daemon/rule/rule_test.go

120 lines
3.1 KiB
Go
Raw Normal View History

package rule
import (
"testing"
)
func TestCreate(t *testing.T) {
t.Log("Test: Create rule")
var list []Operator
oper, _ := NewOperator(Simple, false, OpTrue, "", list)
r := Create("000-test-name", "rule description 000", true, false, false, Allow, Once, oper)
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()
}
})
}
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()
}
})
}