added tasks tests

added tests for TaskManager, nodeMonitor and pidmonitor.
This commit is contained in:
Gustavo Iñiguez Goia 2024-10-11 00:01:00 +02:00
parent e20e79d686
commit c3939c7dfd
Failed to generate hash of commit
3 changed files with 221 additions and 0 deletions

64
daemon/tasks/main_test.go Normal file
View file

@ -0,0 +1,64 @@
package tasks
import (
"context"
"testing"
)
type BasicTask struct {
TaskBase
Name string
}
func (pm *BasicTask) Start(ctx context.Context, cancel context.CancelFunc) error {
return nil
}
func (pm *BasicTask) Pause() error {
return nil
}
func (pm *BasicTask) Resume() error {
return nil
}
func (pm *BasicTask) Stop() error {
return nil
}
func (pm *BasicTask) Errors() <-chan error {
return pm.TaskBase.Errors
}
func (pm *BasicTask) Results() <-chan interface{} {
return pm.TaskBase.Results
}
var basicTask = BasicTask{
TaskBase: TaskBase{
Results: make(chan interface{}),
Errors: make(chan error),
},
Name: "basic-task",
}
func TestTaskManager(t *testing.T) {
tkMgr := NewTaskManager()
t.Run("AddTask", func(t *testing.T) {
_, err := tkMgr.AddTask(basicTask.Name, &basicTask)
if err != nil {
t.Error("AddTask():", err)
}
})
t.Run("GetTask", func(t *testing.T) {
if tk, found := tkMgr.GetTask(basicTask.Name); !found {
t.Error("GetTask() not found:", tk)
}
})
t.Run("RemoveTask", func(t *testing.T) {
if err := tkMgr.RemoveTask(basicTask.Name); err != nil {
t.Error("RemoveTask() error:", err)
}
if tk, found := tkMgr.GetTask(basicTask.Name); found {
t.Error("RemoveTask() task note removed:", tk)
}
})
}

View file

@ -0,0 +1,76 @@
package nodemonitor
import (
"context"
"encoding/json"
"syscall"
"testing"
"time"
"github.com/evilsocket/opensnitch/daemon/tasks"
)
var tkMgr = tasks.NewTaskManager()
func TestNodeMonitor(t *testing.T) {
taskName, nodeMon := New("my-node", "1s", false)
activity := false
var ctx context.Context
var err error
var sysinfoRaw string
t.Run("AddTask", func(t *testing.T) {
ctx, err = tkMgr.AddTask(taskName, nodeMon)
if err != nil {
t.Error("TaskManager.AddTask() error:", err)
}
})
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
goto Exit
case err := <-nodeMon.Errors():
t.Error("Error via channel Errors():", err)
case temp := <-nodeMon.Results():
var ok bool
sysinfoRaw, ok = temp.(string)
if !ok {
t.Error("Error on Results() channel:", temp)
goto Exit
}
activity = true
}
}
Exit:
}(ctx)
time.Sleep(3 * time.Second)
if !activity {
t.Error("Error: no activity after 5s")
}
t.Run("Unmarshal response", func(t *testing.T) {
var sysinfo syscall.Sysinfo_t
err = json.Unmarshal([]byte(sysinfoRaw), &sysinfo)
if err != nil {
t.Error("Error unmarshaling response:", err)
}
})
t.Run("RemoveTask", func(t *testing.T) {
err = tkMgr.RemoveTask(taskName)
if err != nil {
t.Error("RemoveTask() error:", err)
}
if tk, found := tkMgr.GetTask(taskName); found {
t.Error("Task not removed:", tk)
}
})
activity = false
time.Sleep(2 * time.Second)
if activity {
t.Error("Error: task active after being removed/stopped")
}
}

View file

@ -0,0 +1,81 @@
package pidmonitor
import (
"context"
"encoding/json"
"os"
"testing"
"time"
"github.com/evilsocket/opensnitch/daemon/procmon"
"github.com/evilsocket/opensnitch/daemon/tasks"
)
var tkMgr = tasks.NewTaskManager()
func TestPIDMonitor(t *testing.T) {
ourPID := os.Getpid()
taskName, pidMon := New(ourPID, "1s", false)
activity := false
var ctx context.Context
var err error
var procRaw string
t.Run("AddTask", func(t *testing.T) {
ctx, err = tkMgr.AddTask(taskName, pidMon)
if err != nil {
t.Error("TaskManager.AddTask() error:", err)
}
})
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
goto Exit
case err := <-pidMon.Errors():
t.Error("Error via channel Errors():", err)
case temp := <-pidMon.Results():
var ok bool
procRaw, ok = temp.(string)
if !ok {
t.Error("Error on Results() channel:", temp)
goto Exit
}
activity = true
}
}
Exit:
}(ctx)
time.Sleep(3 * time.Second)
if !activity {
t.Error("Error: no activity after 5s")
}
t.Run("Unmarshal response", func(t *testing.T) {
var proc procmon.Process
err = json.Unmarshal([]byte(procRaw), &proc)
if err != nil {
t.Error("Error unmarshaling response:", err)
}
if proc.ID != ourPID {
t.Error("invalid Process object received:", ourPID, proc)
}
})
t.Run("RemoveTask", func(t *testing.T) {
err = tkMgr.RemoveTask(taskName)
if err != nil {
t.Error("RemoveTask() error:", err)
}
if tk, found := tkMgr.GetTask(taskName); found {
t.Error("Task not removed:", tk)
}
})
activity = false
time.Sleep(2 * time.Second)
if activity {
t.Error("Task active after being removed/stopped")
}
}