@@ -21,6 +21,7 @@ package scriptrunner
2121import (
2222 "context"
2323 "errors"
24+ "sync"
2425 "testing"
2526 "time"
2627
@@ -97,12 +98,15 @@ func errorSource(err error) Source {
9798}
9899
99100type fakeCronStore struct {
101+ scriptsMu sync.Mutex
100102 scripts map [uuid.UUID ]* cvmsgspb.CronScript
101103 receivedResultRequestCh chan <- * metadatapb.RecordExecutionResultRequest
102104}
103105
104106// GetScripts fetches all scripts in the cron script store.
105107func (s * fakeCronStore ) GetScripts (ctx context.Context , req * metadatapb.GetScriptsRequest , opts ... grpc.CallOption ) (* metadatapb.GetScriptsResponse , error ) {
108+ s .scriptsMu .Lock ()
109+ defer s .scriptsMu .Unlock ()
106110 if s .scripts == nil {
107111 return & metadatapb.GetScriptsResponse {}, nil
108112 }
@@ -116,8 +120,20 @@ func (s *fakeCronStore) GetScripts(ctx context.Context, req *metadatapb.GetScrip
116120 }, nil
117121}
118122
123+ func (s * fakeCronStore ) Scripts () map [uuid.UUID ]* cvmsgspb.CronScript {
124+ s .scriptsMu .Lock ()
125+ defer s .scriptsMu .Unlock ()
126+ result := make (map [uuid.UUID ]* cvmsgspb.CronScript , len (s .scripts ))
127+ for id , script := range s .scripts {
128+ result [id ] = script
129+ }
130+ return result
131+ }
132+
119133// AddOrUpdateScript updates or adds a cron script to the store, based on ID.
120134func (s * fakeCronStore ) AddOrUpdateScript (ctx context.Context , req * metadatapb.AddOrUpdateScriptRequest , opts ... grpc.CallOption ) (* metadatapb.AddOrUpdateScriptResponse , error ) {
135+ s .scriptsMu .Lock ()
136+ defer s .scriptsMu .Unlock ()
121137 if s .scripts == nil {
122138 s .scripts = map [uuid.UUID ]* cvmsgspb.CronScript {}
123139 }
@@ -128,6 +144,8 @@ func (s *fakeCronStore) AddOrUpdateScript(ctx context.Context, req *metadatapb.A
128144
129145// DeleteScript deletes a cron script from the store by ID.
130146func (s * fakeCronStore ) DeleteScript (ctx context.Context , req * metadatapb.DeleteScriptRequest , opts ... grpc.CallOption ) (* metadatapb.DeleteScriptResponse , error ) {
147+ s .scriptsMu .Lock ()
148+ defer s .scriptsMu .Unlock ()
131149 _ , ok := s .scripts [utils .UUIDFromProtoOrNil (req .ScriptID )]
132150 if ok {
133151 delete (s .scripts , utils .UUIDFromProtoOrNil (req .ScriptID ))
@@ -138,6 +156,8 @@ func (s *fakeCronStore) DeleteScript(ctx context.Context, req *metadatapb.Delete
138156
139157// SetScripts sets the list of all cron scripts to match the given set of scripts.
140158func (s * fakeCronStore ) SetScripts (ctx context.Context , req * metadatapb.SetScriptsRequest , opts ... grpc.CallOption ) (* metadatapb.SetScriptsResponse , error ) {
159+ s .scriptsMu .Lock ()
160+ defer s .scriptsMu .Unlock ()
141161 m := make (map [uuid.UUID ]* cvmsgspb.CronScript )
142162 for k , v := range req .Scripts {
143163 m [uuid .FromStringOrNil (k )] = v
0 commit comments