mirror of
https://github.com/j3ssie/osmedeus.git
synced 2026-08-25 17:12:30 +02:00
Major features: - Add run registry for tracking active runs with PID management - Add API-based run cancellation with process termination - Add event trigger input vars syntax for multi-variable extraction - Add filter_functions with utility function support in triggers - Add event envelope injection for full event context in workflows - Add write coordinator for batched database operations API improvements: - Add logout endpoint and diffs endpoints for assets/vulnerabilities - Add step-results listing endpoint - Update schedule model with target, workspace, params fields - Change run_id to run_uuid across API responses Performance: - Add compiled JS program caching for 60-80% faster loop conditions - Add parallel shard rendering for 20-40% faster workflow startup - Add memory-mapped I/O for large file line counting - Add efficient output buffer combining in runners - Add mtime-based cache invalidation for workflow loader Other changes: - Rename trigger field from trigger to triggers in workflow YAML - Disable pongo2 HTML autoescape for shell command templates - Update JWT expiration default to 1440 minutes (1 day) - Change CORS default to reflect-origin for credentials support - Add source_type field to events (run, eval, api) - Skip copying core Unix tools to external-binaries
135 lines
3.0 KiB
Go
135 lines
3.0 KiB
Go
package core
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetCronTriggers(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
workflow Workflow
|
|
want int
|
|
}{
|
|
{
|
|
name: "no triggers",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: nil,
|
|
},
|
|
want: 0,
|
|
},
|
|
{
|
|
name: "one enabled cron trigger",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "cron-1", On: TriggerCron, Schedule: "* * * * *", Enabled: true},
|
|
},
|
|
},
|
|
want: 1,
|
|
},
|
|
{
|
|
name: "one disabled cron trigger",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "cron-1", On: TriggerCron, Schedule: "* * * * *", Enabled: false},
|
|
},
|
|
},
|
|
want: 0,
|
|
},
|
|
{
|
|
name: "mixed triggers - only enabled cron returned",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "cron-enabled", On: TriggerCron, Schedule: "0 0 * * *", Enabled: true},
|
|
{Name: "cron-disabled", On: TriggerCron, Schedule: "0 1 * * *", Enabled: false},
|
|
{Name: "event-enabled", On: TriggerEvent, Enabled: true},
|
|
{Name: "manual", On: TriggerManual, Enabled: true},
|
|
},
|
|
},
|
|
want: 1,
|
|
},
|
|
{
|
|
name: "multiple enabled cron triggers",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "hourly", On: TriggerCron, Schedule: "0 * * * *", Enabled: true},
|
|
{Name: "daily", On: TriggerCron, Schedule: "0 0 * * *", Enabled: true},
|
|
{Name: "weekly", On: TriggerCron, Schedule: "0 0 * * 0", Enabled: true},
|
|
},
|
|
},
|
|
want: 3,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := tt.workflow.GetCronTriggers()
|
|
assert.Equal(t, tt.want, len(got))
|
|
|
|
// Verify all returned triggers are cron and enabled
|
|
for _, trigger := range got {
|
|
assert.Equal(t, TriggerCron, trigger.On)
|
|
assert.True(t, trigger.Enabled)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetEventTriggers(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
workflow Workflow
|
|
want int
|
|
}{
|
|
{
|
|
name: "no triggers",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: nil,
|
|
},
|
|
want: 0,
|
|
},
|
|
{
|
|
name: "one enabled event trigger",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "event-1", On: TriggerEvent, Enabled: true},
|
|
},
|
|
},
|
|
want: 1,
|
|
},
|
|
{
|
|
name: "mixed triggers - only enabled events returned",
|
|
workflow: Workflow{
|
|
Name: "test",
|
|
Triggers: []Trigger{
|
|
{Name: "cron-1", On: TriggerCron, Schedule: "* * * * *", Enabled: true},
|
|
{Name: "event-enabled", On: TriggerEvent, Enabled: true},
|
|
{Name: "event-disabled", On: TriggerEvent, Enabled: false},
|
|
},
|
|
},
|
|
want: 1,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := tt.workflow.GetEventTriggers()
|
|
assert.Equal(t, tt.want, len(got))
|
|
|
|
// Verify all returned triggers are event and enabled
|
|
for _, trigger := range got {
|
|
assert.Equal(t, TriggerEvent, trigger.On)
|
|
assert.True(t, trigger.Enabled)
|
|
}
|
|
})
|
|
}
|
|
}
|