forked from capnspacehook/taskmaster
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtesting_utils.go
More file actions
131 lines (100 loc) · 2.97 KB
/
Copy pathtesting_utils.go
File metadata and controls
131 lines (100 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//go:build windows
// +build windows
package taskmaster
import (
"strings"
"testing"
)
const (
testTaskFolderName = "TaskmasterTests"
testTaskRoot = `\` + testTaskFolderName
)
func setupTaskService(t *testing.T) *TaskService {
t.Helper()
taskService, err := Connect()
if err != nil {
t.Fatalf("failed to connect to Task Scheduler: %v", err)
}
resetTestFolder(t, &taskService)
t.Cleanup(func() {
resetTestFolder(t, &taskService)
taskService.Disconnect()
})
return &taskService
}
func resetTestFolder(t *testing.T, taskService *TaskService) {
t.Helper()
if taskService.taskFolderExist(testTaskRoot) {
if _, err := taskService.DeleteFolder(testTaskRoot, true); err != nil {
t.Fatalf("failed to delete %s: %v", testTaskRoot, err)
}
}
}
func testTaskPath(parts ...string) string {
if len(parts) == 0 {
return testTaskRoot
}
cleaned := make([]string, 0, len(parts))
for _, part := range parts {
cleaned = append(cleaned, strings.Trim(part, "\\"))
}
return testTaskRoot + `\` + strings.Join(cleaned, `\`)
}
func createTestTask(taskSvc *TaskService) RegisteredTask {
newTaskDef := taskSvc.NewTaskDefinition()
newTaskDef.AddAction(ExecAction{
Path: "cmd.exe",
Args: "/c timeout $(Arg0)",
})
newTaskDef.Settings.MultipleInstances = TASK_INSTANCES_PARALLEL
task, _, err := taskSvc.CreateTask(testTaskPath("TestTask"), newTaskDef, true)
if err != nil {
panic(err)
}
return task
}
func withRegisteredTask(t *testing.T, taskSvc *TaskService, path string, fn func(RegisteredTask)) {
t.Helper()
task, err := taskSvc.GetRegisteredTask(path)
if err != nil {
t.Fatalf("failed to get registered task %s: %v", path, err)
}
defer task.Release()
fn(task)
}
func requireActionCount(t *testing.T, task RegisteredTask, expected int) {
t.Helper()
if len(task.Definition.Actions) != expected {
t.Fatalf("expected %d actions, got %d", expected, len(task.Definition.Actions))
}
}
func requireTriggerCount(t *testing.T, task RegisteredTask, expected int) {
t.Helper()
if len(task.Definition.Triggers) != expected {
t.Fatalf("expected %d triggers, got %d", expected, len(task.Definition.Triggers))
}
}
func requireActionAt[T Action](t *testing.T, task RegisteredTask, idx int) T {
t.Helper()
if idx >= len(task.Definition.Actions) {
t.Fatalf("expected action at index %d, only %d actions available", idx, len(task.Definition.Actions))
}
action, ok := task.Definition.Actions[idx].(T)
if !ok {
var zero T
t.Fatalf("expected action %T at index %d, got %T", zero, idx, task.Definition.Actions[idx])
}
return action
}
func requireTriggerAt[T Trigger](t *testing.T, task RegisteredTask, idx int) T {
t.Helper()
if idx >= len(task.Definition.Triggers) {
t.Fatalf("expected trigger at index %d, only %d triggers available", idx, len(task.Definition.Triggers))
}
trigger, ok := task.Definition.Triggers[idx].(T)
if !ok {
var zero T
t.Fatalf("expected trigger %T at index %d, got %T", zero, idx, task.Definition.Triggers[idx])
}
return trigger
}