Repository navigation
Expand file tree
/
Copy pathname_test.go
More file actions
74 lines (65 loc) · 2.66 KB
/
Copy pathname_test.go
File metadata and controls
74 lines (65 loc) · 2.66 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
package runnerq
import (
"encoding/json"
"testing"
)
type namedHandler struct{ DefaultDeadLetterHandler }
func (namedHandler) Handle(ActivityContext, json.RawMessage) (json.RawMessage, error) {
return nil, nil
}
func TestNameOfDerivesBareTypeName(t *testing.T) {
if got := NameOf[namedHandler](); got != "namedHandler" {
t.Fatalf("NameOf[T] = %q", got)
}
if got := NameOf[*namedHandler](); got != "namedHandler" {
t.Fatalf("NameOf[*T] = %q, want pointer dereferenced", got)
}
if got := NameOf[**namedHandler](); got != "namedHandler" {
t.Fatalf("NameOf[**T] = %q", got)
}
mustPanic(t, func() { NameOf[struct{ DefaultDeadLetterHandler }]() })
mustPanic(t, func() { NameOf[func()]() })
}
func TestRegisterActivityDerivesNameAndRejectsBadInput(t *testing.T) {
e := NewWorkerEngineWithBackend(newLifecycleBackend(), DefaultWorkerConfig())
e.RegisterActivity(&namedHandler{})
if _, ok := e.handlers[NameOf[namedHandler]()]; !ok {
t.Fatalf("handler not registered under derived name; have %v", e.handlers)
}
// Value receivers register under the same name as pointers.
mustPanic(t, func() { e.RegisterActivity(namedHandler{}) })
// Duplicate names are a configuration bug, for pinned names too.
mustPanic(t, func() { e.RegisterActivityWithName("namedHandler", &funcHandler{}) })
mustPanic(t, func() { e.RegisterActivity(nil) })
mustPanic(t, func() { e.RegisterActivity((*namedHandler)(nil)) })
mustPanic(t, func() { e.RegisterActivityWithName("typed-nil", (*namedHandler)(nil)) })
mustPanic(t, func() { e.RegisterActivityWithName("", &funcHandler{}) })
mustPanic(t, func() { e.RegisterActivityWithName("x", nil) })
// Unnamed handler types need a pinned name.
anon := &struct {
DefaultDeadLetterHandler
funcHandler
}{}
mustPanic(t, func() { e.RegisterActivity(anon) })
e.RegisterActivityWithName("anon", anon)
if _, ok := e.handlers["anon"]; !ok {
t.Fatal("pinned registration of unnamed type failed")
}
}
func TestExecutorSpawnNamesMatchRegistration(t *testing.T) {
e := NewWorkerEngineWithBackend(newLifecycleBackend(), DefaultWorkerConfig())
e.RegisterActivity(&namedHandler{})
exec := e.GetActivityExecutor()
if got := exec.Activity[namedHandler]().activityType; got != NameOf[namedHandler]() {
t.Fatalf("Activity[T] targets %q, want %q", got, NameOf[namedHandler]())
}
if got := exec.Activity[*namedHandler]().activityType; got != "namedHandler" {
t.Fatalf("Activity[*T] targets %q", got)
}
if got := exec.ActivityNamed("pinned").activityType; got != "pinned" {
t.Fatalf("ActivityNamed targets %q", got)
}
if _, ok := e.handlers[exec.Activity[namedHandler]().activityType]; !ok {
t.Fatal("Activity[T] does not resolve to the registered handler")
}
}