github.com/filecoin-project/bacalhau@v0.3.23-0.20230228154132-45c989550ace/pkg/compute/store/test/active_executions_test.go (about) 1 package test 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/filecoin-project/bacalhau/pkg/compute/store" 8 "github.com/filecoin-project/bacalhau/pkg/compute/store/inmemory" 9 "github.com/filecoin-project/bacalhau/pkg/model" 10 "github.com/google/uuid" 11 "github.com/stretchr/testify/suite" 12 ) 13 14 type Suite struct { 15 suite.Suite 16 executionStore store.ExecutionStore 17 execution store.Execution 18 } 19 20 func (s *Suite) SetupTest() { 21 s.executionStore = inmemory.NewStore() 22 s.execution = newExecution() 23 } 24 25 func TestSuite(t *testing.T) { 26 suite.Run(t, new(Suite)) 27 } 28 29 func (s *Suite) TestGetActiveExecution_Single() { 30 ctx := context.Background() 31 err := s.executionStore.CreateExecution(ctx, s.execution) 32 s.NoError(err) 33 34 active, err := store.GetActiveExecution(ctx, s.executionStore, s.execution.Shard.ID()) 35 s.NoError(err) 36 s.Equal(s.execution, active) 37 } 38 39 func (s *Suite) TestGetActiveExecution_Multiple() { 40 ctx := context.Background() 41 42 // create a newer execution with same shard as the previous one 43 newerExecution := s.execution 44 newerExecution.ID = uuid.NewString() 45 newerExecution.Shard = s.execution.Shard 46 newerExecution.UpdateTime = s.execution.UpdateTime.Add(1) 47 48 err := s.executionStore.CreateExecution(ctx, s.execution) 49 s.NoError(err) 50 51 err = s.executionStore.CreateExecution(ctx, newerExecution) 52 s.NoError(err) 53 54 active, err := store.GetActiveExecution(ctx, s.executionStore, s.execution.Shard.ID()) 55 s.NoError(err) 56 s.Equal(newerExecution, active) 57 } 58 59 func (s *Suite) TestGetActiveExecution_DoestExist() { 60 _, err := store.GetActiveExecution(context.Background(), s.executionStore, s.execution.Shard.ID()) 61 s.ErrorAs(err, &store.ErrExecutionsNotFoundForShard{}) 62 } 63 64 func newExecution() store.Execution { 65 return *store.NewExecution( 66 uuid.NewString(), 67 model.JobShard{ 68 Job: &model.Job{ 69 Metadata: model.Metadata{ 70 ID: uuid.NewString(), 71 }, 72 }, 73 Index: 1, 74 }, 75 "nodeID-1", 76 model.ResourceUsageData{ 77 CPU: 1, 78 Memory: 2, 79 }) 80 }