@@ -23,17 +23,18 @@ import (
2323 "github.com/agent-substrate/substrate/cmd/ateapi/internal/store"
2424 "github.com/agent-substrate/substrate/cmd/ateapi/internal/store/storetest"
2525 "github.com/agent-substrate/substrate/internal/ateerrors"
26+ "github.com/agent-substrate/substrate/internal/resources"
2627 "github.com/agent-substrate/substrate/pkg/proto/ateapipb"
2728 "google.golang.org/grpc/codes"
2829 "google.golang.org/grpc/status"
2930)
3031
3132// seedActor stores a running actor with all worker-binding fields populated, so
3233// tests can assert they are cleared when the actor crashes.
33- func seedActor (t * testing.T , ctx context.Context , st store.Interface , atespace , actorName string ) {
34+ func seedActor (t * testing.T , ctx context.Context , st store.Interface , actorRef resources. ActorRef ) {
3435 t .Helper ()
3536 if _ , err := st .CreateActor (ctx , & ateapipb.Actor {
36- Metadata : & ateapipb.ResourceMetadata {Name : actorName , Atespace : atespace },
37+ Metadata : & ateapipb.ResourceMetadata {Name : actorRef . Name , Atespace : actorRef . Atespace },
3738 Status : ateapipb .Actor_STATUS_RUNNING ,
3839 AteomPodNamespace : "ns" ,
3940 AteomPodName : "pod" ,
@@ -47,17 +48,17 @@ func seedActor(t *testing.T, ctx context.Context, st store.Interface, atespace,
4748}
4849
4950// seedWorker registers the worker referenced by seedActor's binding fields,
50- // assigned to the given actor in atespace (unassigned if assignedActor is "" ).
51- func seedWorker (t * testing.T , ctx context.Context , st store.Interface , atespace , assignedActor string ) {
51+ // assigned to the given actor (unassigned if assigned is the zero ActorRef ).
52+ func seedWorker (t * testing.T , ctx context.Context , st store.Interface , actorRef resources. ActorRef ) {
5253 t .Helper ()
5354 worker := & ateapipb.Worker {
5455 WorkerNamespace : "ns" ,
5556 WorkerPool : "pool" ,
5657 WorkerPod : "pod" ,
5758 }
58- if assignedActor != "" {
59+ if actorRef != (resources. ActorRef {}) {
5960 worker .Assignment = & ateapipb.Assignment {
60- Actor : & ateapipb. ObjectRef { Atespace : atespace , Name : assignedActor } ,
61+ Actor : actorRef . ToObjectRef () ,
6162 }
6263 }
6364 if err := st .CreateWorker (ctx , worker ); err != nil {
@@ -67,10 +68,10 @@ func seedWorker(t *testing.T, ctx context.Context, st store.Interface, atespace,
6768
6869// seedUnboundActor stores a running actor whose worker-binding fields were
6970// already cleared, e.g. by a prior release.
70- func seedUnboundActor (t * testing.T , ctx context.Context , st store.Interface , atespace , actorName string ) {
71+ func seedUnboundActor (t * testing.T , ctx context.Context , st store.Interface , actorRef resources. ActorRef ) {
7172 t .Helper ()
7273 if _ , err := st .CreateActor (ctx , & ateapipb.Actor {
73- Metadata : & ateapipb.ResourceMetadata {Name : actorName , Atespace : atespace },
74+ Metadata : & ateapipb.ResourceMetadata {Name : actorRef . Name , Atespace : actorRef . Atespace },
7475 Status : ateapipb .Actor_STATUS_RUNNING ,
7576 InProgressSnapshot : "gs://snapshots/actor-1/reserved" ,
7677 }); err != nil {
@@ -80,11 +81,11 @@ func seedUnboundActor(t *testing.T, ctx context.Context, st store.Interface, ate
8081
8182// assertCrashed reloads the actor and verifies it is CRASHED with its worker
8283// binding cleared.
83- func assertCrashed (t * testing.T , ctx context.Context , st store.Interface , atespace , actorName string ) {
84+ func assertCrashed (t * testing.T , ctx context.Context , st store.Interface , actorRef resources. ActorRef ) {
8485 t .Helper ()
85- got , err := st .GetActor (ctx , atespace , actorName )
86+ got , err := st .GetActor (ctx , actorRef )
8687 if err != nil {
87- t .Fatalf ("GetActor(%q, %q ) = %v, want nil" , atespace , actorName , err )
88+ t .Fatalf ("GetActor(%v ) = %v, want nil" , actorRef , err )
8889 }
8990 if got .GetStatus () != ateapipb .Actor_STATUS_CRASHED {
9091 t .Errorf ("status = %v, want %v" , got .GetStatus (), ateapipb .Actor_STATUS_CRASHED )
@@ -107,10 +108,7 @@ func assertCrashed(t *testing.T, ctx context.Context, st store.Interface, atespa
107108}
108109
109110func TestCrashActor (t * testing.T ) {
110- const (
111- atespace = "team-a"
112- actorName = "actor-1"
113- )
111+ actorRef := resources.ActorRef {Atespace : "team-a" , Name : "actor-1" }
114112
115113 tests := []struct {
116114 name string
@@ -127,20 +125,20 @@ func TestCrashActor(t *testing.T) {
127125 if err != nil {
128126 t .Fatalf ("crashActor() = %v, want nil" , err )
129127 }
130- assertCrashed (t , ctx , st , atespace , actorName )
128+ assertCrashed (t , ctx , st , actorRef )
131129 },
132130 },
133131 {
134132 name : "releases worker assigned to crashed actor" ,
135133 seed : true ,
136134 setup : func (t * testing.T , ctx context.Context , st store.Interface ) {
137- seedWorker (t , ctx , st , atespace , actorName )
135+ seedWorker (t , ctx , st , actorRef )
138136 },
139137 check : func (t * testing.T , ctx context.Context , st store.Interface , err error ) {
140138 if err != nil {
141139 t .Fatalf ("crashActor() = %v, want nil" , err )
142140 }
143- assertCrashed (t , ctx , st , atespace , actorName )
141+ assertCrashed (t , ctx , st , actorRef )
144142 worker , gerr := st .GetWorker (ctx , "ns" , "pool" , "pod" )
145143 if gerr != nil {
146144 t .Fatalf ("GetWorker() = %v, want nil" , gerr )
@@ -154,13 +152,13 @@ func TestCrashActor(t *testing.T) {
154152 name : "keeps worker assigned to another actor" ,
155153 seed : true ,
156154 setup : func (t * testing.T , ctx context.Context , st store.Interface ) {
157- seedWorker (t , ctx , st , atespace , "actor-2" )
155+ seedWorker (t , ctx , st , resources. ActorRef { Atespace : actorRef . Atespace , Name : "actor-2" } )
158156 },
159157 check : func (t * testing.T , ctx context.Context , st store.Interface , err error ) {
160158 if err != nil {
161159 t .Fatalf ("crashActor() = %v, want nil" , err )
162160 }
163- assertCrashed (t , ctx , st , atespace , actorName )
161+ assertCrashed (t , ctx , st , actorRef )
164162 worker , gerr := st .GetWorker (ctx , "ns" , "pool" , "pod" )
165163 if gerr != nil {
166164 t .Fatalf ("GetWorker() = %v, want nil" , gerr )
@@ -174,14 +172,14 @@ func TestCrashActor(t *testing.T) {
174172 name : "skips release for actor with no worker binding" ,
175173 seed : false ,
176174 setup : func (t * testing.T , ctx context.Context , st store.Interface ) {
177- seedUnboundActor (t , ctx , st , atespace , actorName )
178- seedWorker (t , ctx , st , atespace , actorName )
175+ seedUnboundActor (t , ctx , st , actorRef )
176+ seedWorker (t , ctx , st , actorRef )
179177 },
180178 check : func (t * testing.T , ctx context.Context , st store.Interface , err error ) {
181179 if err != nil {
182180 t .Fatalf ("crashActor() = %v, want nil" , err )
183181 }
184- assertCrashed (t , ctx , st , atespace , actorName )
182+ assertCrashed (t , ctx , st , actorRef )
185183 // Without a binding the worker cannot be looked up, so its
186184 // assignment must be left untouched even though it names
187185 // the crashed actor.
@@ -218,24 +216,21 @@ func TestCrashActor(t *testing.T) {
218216 defer cleanup ()
219217
220218 if tt .seed {
221- seedActor (t , ctx , st , atespace , actorName )
219+ seedActor (t , ctx , st , actorRef )
222220 }
223221 if tt .setup != nil {
224222 tt .setup (t , ctx , st )
225223 }
226224
227- err := crashActor (ctx , st , atespace , actorName )
225+ err := crashActor (ctx , st , actorRef )
228226 tt .check (t , ctx , st , err )
229227 })
230228 }
231229}
232230
233231func TestMaybeCrashActor (t * testing.T ) {
234- const (
235- atespace = "team-a"
236- actorName = "actor-1"
237- wrapMsg = "calling atelet"
238- )
232+ const wrapMsg = "calling atelet"
233+ actorRef := resources.ActorRef {Atespace : "team-a" , Name : "actor-1" }
239234
240235 crashErr := ateerrors .NewGRPCError (context .Background (), codes .NotFound , ateerrors .ReasonTerminalFileSystemError , ateerrors .ActorCrashedMetadata (), errors .New ("boom" ))
241236 // A structured error carrying a reason but no actorCrashed directive must be
@@ -271,7 +266,7 @@ func TestMaybeCrashActor(t *testing.T) {
271266 if got := status .Code (err ); got != codes .DataLoss {
272267 t .Errorf ("status code = %v, want %v" , got , codes .DataLoss )
273268 }
274- assertCrashed (t , ctx , st , atespace , actorName )
269+ assertCrashed (t , ctx , st , actorRef )
275270 },
276271 },
277272 {
@@ -305,7 +300,7 @@ func TestMaybeCrashActor(t *testing.T) {
305300 t .Errorf ("maybeCrashActor() error = %q, want prefix %q" , err , wrapMsg )
306301 }
307302 // The actor must not have been crashed.
308- got , gerr := st .GetActor (ctx , atespace , actorName )
303+ got , gerr := st .GetActor (ctx , actorRef )
309304 if gerr != nil {
310305 t .Fatalf ("GetActor() = %v, want nil" , gerr )
311306 }
@@ -329,7 +324,7 @@ func TestMaybeCrashActor(t *testing.T) {
329324 t .Errorf ("maybeCrashActor() error = %q, want prefix %q" , err , wrapMsg )
330325 }
331326 // The actor must not have been crashed.
332- got , gerr := st .GetActor (ctx , atespace , actorName )
327+ got , gerr := st .GetActor (ctx , actorRef )
333328 if gerr != nil {
334329 t .Fatalf ("GetActor() = %v, want nil" , gerr )
335330 }
@@ -347,10 +342,10 @@ func TestMaybeCrashActor(t *testing.T) {
347342 defer cleanup ()
348343
349344 if tt .seed {
350- seedActor (t , ctx , st , atespace , actorName )
345+ seedActor (t , ctx , st , actorRef )
351346 }
352347
353- err := maybeCrashActor (ctx , st , atespace , actorName , tt .err , wrapMsg )
348+ err := maybeCrashActor (ctx , st , actorRef , tt .err , wrapMsg )
354349 tt .check (t , ctx , st , err )
355350 })
356351 }
0 commit comments