mirror of
https://github.com/OliveTin/OliveTin
synced 2026-08-26 12:36:30 +00:00
93 lines
2.5 KiB
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)
|
|
}
|