Files
OliveTin/service/internal/api/api_actions_active_test.go

93 lines
2.5 KiB
Go

package api
import (
"testing"
config "github.com/OliveTin/OliveTin/internal/config"
"github.com/OliveTin/OliveTin/internal/executor"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestBuildActiveBindingStates(t *testing.T) {
cfg := config.DefaultConfig()
cfg.Actions = []*config.Action{
{Title: "backup", Shell: "sleep 1", MaxConcurrent: 1},
{Title: "ping", Shell: "echo ping"},
}
cfg.Sanitize()
ex := executor.DefaultExecutor(cfg)
ex.RebuildActionMap()
backupBinding := ex.FindBindingWithNoEntity(cfg.Actions[0])
pingBinding := ex.FindBindingWithNoEntity(cfg.Actions[1])
require.NotNil(t, backupBinding)
require.NotNil(t, pingBinding)
backupRunning := newAPIQueueLogEntry(backupBinding, true, false)
backupWaiting := newAPIQueueLogEntry(backupBinding, false, false)
pingRunning := newAPIQueueLogEntry(pingBinding, true, false)
states := buildActiveBindingStates([]*executor.InternalLogEntry{
backupRunning,
backupWaiting,
pingRunning,
})
backupState, ok := states[backupBinding.ID]
require.True(t, ok)
assert.True(t, backupState.hasRunning)
assert.True(t, backupState.hasQueued)
pingState, ok := states[pingBinding.ID]
require.True(t, ok)
assert.True(t, pingState.hasRunning)
assert.False(t, pingState.hasQueued)
}
func TestBuildActionIncludesActiveBindingState(t *testing.T) {
cfg := config.DefaultConfig()
cfg.Actions = []*config.Action{
{Title: "backup", Shell: "sleep 1"},
}
cfg.Sanitize()
ex := executor.DefaultExecutor(cfg)
ex.RebuildActionMap()
binding := ex.FindBindingWithNoEntity(cfg.Actions[0])
require.NotNil(t, binding)
running := newAPIQueueLogEntry(binding, true, false)
queued := newAPIQueueLogEntry(binding, false, false)
ex.SetLog(running.ExecutionTrackingID, running)
ex.SetLog(queued.ExecutionTrackingID, queued)
rr := &DashboardRenderRequest{
cfg: cfg,
ex: ex,
}
populateActiveBindingStates(rr)
action := buildAction(binding, rr)
require.NotNil(t, action)
assert.True(t, action.HasRunningInstance)
assert.True(t, action.HasQueuedInstance)
}
func TestBuildActiveBindingStatesIgnoresFinished(t *testing.T) {
cfg := config.DefaultConfig()
cfg.Actions = []*config.Action{{Title: "backup", Shell: "sleep 1"}}
cfg.Sanitize()
ex := executor.DefaultExecutor(cfg)
ex.RebuildActionMap()
binding := ex.FindBindingWithNoEntity(cfg.Actions[0])
require.NotNil(t, binding)
finished := newAPIQueueLogEntry(binding, true, true)
states := buildActiveBindingStates([]*executor.InternalLogEntry{finished})
assert.Empty(t, states)
}