11package cmd
22
33import (
4+ "context"
45 "errors"
56 "os"
67 "syscall"
@@ -42,7 +43,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
4243
4344 finished := make (chan struct {})
4445 go func () {
45- node .Run ()
46+ node .Run (context . Background () )
4647 close (finished )
4748 }()
4849
@@ -62,6 +63,44 @@ func TestRunShutsDownCleanly(t *testing.T) {
6263 }, testLogger .logs )
6364 })
6465
66+ t .Run ("Run shuts down gracefully on context cancel" , func (t * testing.T ) {
67+ testLogger .Reset ()
68+ manager := component .NewComponentManagerBuilder ().
69+ AddWorker (func (ctx irrecoverable.SignalerContext , ready component.ReadyFunc ) {
70+ testLogger .Log ("worker starting up" )
71+ ready ()
72+ testLogger .Log ("worker startup complete" )
73+
74+ <- ctx .Done ()
75+ testLogger .Log ("worker shutting down" )
76+ testLogger .Log ("worker shutdown complete" )
77+ }).
78+ Build ()
79+ node := NewNode (manager , nodeConfig , logger , postShutdown , fatalHandler )
80+
81+ ctx , cancel := context .WithCancel (context .Background ())
82+
83+ finished := make (chan struct {})
84+ go func () {
85+ node .Run (ctx )
86+ close (finished )
87+ }()
88+
89+ <- node .Ready ()
90+
91+ cancel ()
92+
93+ <- finished
94+
95+ assert .Equal (t , []string {
96+ "worker starting up" ,
97+ "worker startup complete" ,
98+ "worker shutting down" ,
99+ "worker shutdown complete" ,
100+ "running cleanup" ,
101+ }, testLogger .logs )
102+ })
103+
65104 t .Run ("Run encounters error during postShutdown" , func (t * testing.T ) {
66105 testLogger .Reset ()
67106 manager := component .NewComponentManagerBuilder ().
@@ -82,7 +121,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
82121
83122 finished := make (chan struct {})
84123 go func () {
85- node .Run ()
124+ node .Run (context . Background () )
86125 close (finished )
87126 }()
88127
@@ -123,7 +162,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
123162
124163 finished := make (chan struct {})
125164 go func () {
126- node .Run ()
165+ node .Run (context . Background () )
127166 close (finished )
128167 }()
129168
@@ -157,7 +196,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
157196
158197 finished := make (chan struct {})
159198 go func () {
160- node .Run ()
199+ node .Run (context . Background () )
161200 close (finished )
162201 }()
163202
@@ -191,7 +230,7 @@ func TestRunShutsDownCleanly(t *testing.T) {
191230
192231 finished := make (chan struct {})
193232 go func () {
194- node .Run ()
233+ node .Run (context . Background () )
195234 close (finished )
196235 }()
197236
0 commit comments