mirror of
https://github.com/OliveTin/OliveTin
synced 2026-08-26 12:36:30 +00:00
73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package executor
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
auth "github.com/OliveTin/OliveTin/internal/auth"
|
|
config "github.com/OliveTin/OliveTin/internal/config"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetActiveExecutionsACLFiltersFinishedAndACL(t *testing.T) {
|
|
e, cfg := testingExecutor()
|
|
|
|
allowedAction := &config.Action{
|
|
Title: "allowed",
|
|
Shell: "sleep 1",
|
|
Acls: []string{"view-logs"},
|
|
}
|
|
secretAction := &config.Action{
|
|
Title: "secret",
|
|
Shell: "sleep 1",
|
|
}
|
|
cfg.Actions = append(cfg.Actions, allowedAction, secretAction)
|
|
cfg.DefaultPermissions.Logs = false
|
|
cfg.AccessControlLists = []*config.AccessControlList{
|
|
{
|
|
Name: "view-logs",
|
|
MatchUsernames: []string{"guest"},
|
|
Permissions: config.PermissionsList{
|
|
Logs: true,
|
|
},
|
|
},
|
|
}
|
|
cfg.Sanitize()
|
|
e.RebuildActionMap()
|
|
|
|
allowedBinding := e.FindBindingWithNoEntity(allowedAction)
|
|
secretBinding := e.FindBindingWithNoEntity(secretAction)
|
|
require.NotNil(t, allowedBinding)
|
|
require.NotNil(t, secretBinding)
|
|
|
|
activeAllowed := newQueueTestLogEntry(allowedBinding, false)
|
|
finishedAllowed := newQueueTestLogEntry(allowedBinding, true)
|
|
activeSecret := newQueueTestLogEntry(secretBinding, false)
|
|
|
|
e.SetLog(activeAllowed.ExecutionTrackingID, activeAllowed)
|
|
e.SetLog(finishedAllowed.ExecutionTrackingID, finishedAllowed)
|
|
e.SetLog(activeSecret.ExecutionTrackingID, activeSecret)
|
|
|
|
user := auth.UserGuest(cfg)
|
|
active := e.GetActiveExecutionsACL(cfg, user)
|
|
|
|
require.Len(t, active, 1)
|
|
assert.Equal(t, activeAllowed.ExecutionTrackingID, active[0].ExecutionTrackingID)
|
|
}
|
|
|
|
func newQueueTestLogEntry(binding *ActionBinding, finished bool) *InternalLogEntry {
|
|
entry := &InternalLogEntry{
|
|
Binding: binding,
|
|
DatetimeStarted: time.Now(),
|
|
ExecutionTrackingID: uuid.NewString(),
|
|
ActionTitle: binding.Action.Title,
|
|
ExecutionFinished: finished,
|
|
}
|
|
if finished {
|
|
entry.DatetimeFinished = time.Now()
|
|
}
|
|
return entry
|
|
}
|