4
0

api_actions_active_test.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package api
  2. import (
  3. "testing"
  4. config "github.com/OliveTin/OliveTin/internal/config"
  5. "github.com/OliveTin/OliveTin/internal/executor"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func TestBuildActiveBindingStates(t *testing.T) {
  10. cfg := config.DefaultConfig()
  11. cfg.Actions = []*config.Action{
  12. {Title: "backup", Shell: "sleep 1", MaxConcurrent: 1},
  13. {Title: "ping", Shell: "echo ping"},
  14. }
  15. cfg.Sanitize()
  16. ex := executor.DefaultExecutor(cfg)
  17. ex.RebuildActionMap()
  18. backupBinding := ex.FindBindingWithNoEntity(cfg.Actions[0])
  19. pingBinding := ex.FindBindingWithNoEntity(cfg.Actions[1])
  20. require.NotNil(t, backupBinding)
  21. require.NotNil(t, pingBinding)
  22. backupRunning := newAPIQueueLogEntry(backupBinding, true, false)
  23. backupWaiting := newAPIQueueLogEntry(backupBinding, false, false)
  24. pingRunning := newAPIQueueLogEntry(pingBinding, true, false)
  25. states := buildActiveBindingStates([]*executor.InternalLogEntry{
  26. backupRunning,
  27. backupWaiting,
  28. pingRunning,
  29. })
  30. backupState, ok := states[backupBinding.ID]
  31. require.True(t, ok)
  32. assert.True(t, backupState.hasRunning)
  33. assert.True(t, backupState.hasQueued)
  34. pingState, ok := states[pingBinding.ID]
  35. require.True(t, ok)
  36. assert.True(t, pingState.hasRunning)
  37. assert.False(t, pingState.hasQueued)
  38. }
  39. func TestBuildActionIncludesActiveBindingState(t *testing.T) {
  40. cfg := config.DefaultConfig()
  41. cfg.Actions = []*config.Action{
  42. {Title: "backup", Shell: "sleep 1"},
  43. }
  44. cfg.Sanitize()
  45. ex := executor.DefaultExecutor(cfg)
  46. ex.RebuildActionMap()
  47. binding := ex.FindBindingWithNoEntity(cfg.Actions[0])
  48. require.NotNil(t, binding)
  49. running := newAPIQueueLogEntry(binding, true, false)
  50. queued := newAPIQueueLogEntry(binding, false, false)
  51. ex.SetLog(running.ExecutionTrackingID, running)
  52. ex.SetLog(queued.ExecutionTrackingID, queued)
  53. rr := &DashboardRenderRequest{
  54. cfg: cfg,
  55. ex: ex,
  56. }
  57. populateActiveBindingStates(rr)
  58. action := buildAction(binding, rr)
  59. require.NotNil(t, action)
  60. assert.True(t, action.HasRunningInstance)
  61. assert.True(t, action.HasQueuedInstance)
  62. }
  63. func TestBuildActiveBindingStatesIgnoresFinished(t *testing.T) {
  64. cfg := config.DefaultConfig()
  65. cfg.Actions = []*config.Action{{Title: "backup", Shell: "sleep 1"}}
  66. cfg.Sanitize()
  67. ex := executor.DefaultExecutor(cfg)
  68. ex.RebuildActionMap()
  69. binding := ex.FindBindingWithNoEntity(cfg.Actions[0])
  70. require.NotNil(t, binding)
  71. finished := newAPIQueueLogEntry(binding, true, true)
  72. states := buildActiveBindingStates([]*executor.InternalLogEntry{finished})
  73. assert.Empty(t, states)
  74. }