Skip to content

Commit

Permalink
fix: support old agent with new cloud migration to new sequence metho…
Browse files Browse the repository at this point in the history
…ds (#5734)

* fix: support old agent migration to new sequence methods

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: unit tests

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: add unit tests

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: integration test

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: unit test

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: add ccomments

Signed-off-by: Vladislav Sukhin <[email protected]>

* fix: comment typo

Signed-off-by: Vladislav Sukhin <[email protected]>

---------

Signed-off-by: Vladislav Sukhin <[email protected]>
  • Loading branch information
vsukhin committed Aug 7, 2024
1 parent be7d06f commit f4a3a3a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 9 deletions.
24 changes: 19 additions & 5 deletions pkg/repository/sequence/mongo.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ type executionNumber struct {
// GetNextExecutionNumber gets next execution number by name and type
func (r *MongoRepository) GetNextExecutionNumber(ctx context.Context, name string, executionType ExecutionType) (number int32, err error) {
oldName := getOldName(name, executionType)
number, err = r.getOldNumber(ctx, oldName)
number, err = r.getOldNumber(ctx, oldName, executionType)
if err != nil {
return 0, err
}
Expand Down Expand Up @@ -151,15 +151,29 @@ func (r *MongoRepository) DeleteAllExecutionNumbers(ctx context.Context, executi
return err
}

func (r *MongoRepository) getOldNumber(ctx context.Context, name string) (int32, error) {
var executionNumber oldExecutionNumber
func (r *MongoRepository) getOldNumber(ctx context.Context, name string, executionType ExecutionType) (int32, error) {
var oldExecutionNumber oldExecutionNumber

err := r.Coll.FindOne(ctx, bson.M{"name": name}).Decode(&executionNumber)
// get old number from OSS or old agent - old cloud configuration
err := r.Coll.FindOne(ctx, bson.M{"name": name}).Decode(&oldExecutionNumber)
if err != nil && err != mongo.ErrNoDocuments {
return 0, err
}

return int32(executionNumber.Number), nil
number := int32(oldExecutionNumber.Number)
// get old number from old agennt - new cloud configuration
if number == 0 && (executionType == ExecutionTypeTestSuite || executionType == ExecutionTypeTestWorkflow) {
var executionNumber executionNumber

err = r.Coll.FindOne(ctx, bson.M{"_id": getMongoId(name, ExecutionTypeTest)}).Decode(&executionNumber)
if err != nil && err != mongo.ErrNoDocuments {
return 0, err
}

number = int32(executionNumber.Number)
}

return number, nil
}

func getMongoId(name string, executionType ExecutionType) string {
Expand Down
44 changes: 40 additions & 4 deletions pkg/repository/sequence/mongo_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,36 +36,65 @@ func TestNewMongoRepository_GetNextExecutionNumber_Sequential_Integration(t *tes

var tests = []struct {
expectedValue int32
name string
executionType ExecutionType
}{
// check for new resources
{
1,
"test",
ExecutionTypeTest,
},
{
2,
"test",
ExecutionTypeTest,
},
{
1,
"testsuite",
ExecutionTypeTestSuite,
},
{
2,
"testsuite",
ExecutionTypeTestSuite,
},
{
1,
"testworkflow",
ExecutionTypeTestWorkflow,
},
{
2,
"testworkflow",
ExecutionTypeTestWorkflow,
},
// check for existing resources
{
1,
"ts-old-testsuite",
ExecutionTypeTest,
},
{
1,
"old-testworkflow",
ExecutionTypeTest,
},
{
2,
"old-testsuite",
ExecutionTypeTestSuite,
},
{
2,
"old-testworkflow",
ExecutionTypeTestWorkflow,
},
}

for _, tt := range tests {
num, err := repo.GetNextExecutionNumber(ctx, "name", tt.executionType)
num, err := repo.GetNextExecutionNumber(ctx, tt.name, tt.executionType)
assert.NoError(t, err)
assert.Equal(t, tt.expectedValue, num)
}
Expand All @@ -89,30 +118,37 @@ func TestNewMongoRepository_GetNextExecutionNumber_Parallel_Integration(t *testi

var tests = []struct {
expectedValue int32
name string
executionType ExecutionType
}{
{
1,
"test",
ExecutionTypeTest,
},
{
2,
"test",
ExecutionTypeTest,
},
{
1,
"testsuite",
ExecutionTypeTestSuite,
},
{
2,
"testsuite",
ExecutionTypeTestSuite,
},
{
1,
"testworkflow",
ExecutionTypeTestWorkflow,
},
{
2,
"testworkflow",
ExecutionTypeTestWorkflow,
},
}
Expand All @@ -122,14 +158,14 @@ func TestNewMongoRepository_GetNextExecutionNumber_Parallel_Integration(t *testi

for i := range tests {
wg.Add(1)
go func(executionType ExecutionType) {
go func(name string, executionType ExecutionType) {
defer wg.Done()

num, err := repo.GetNextExecutionNumber(ctx, "name", executionType)
num, err := repo.GetNextExecutionNumber(ctx, name, executionType)
assert.NoError(t, err)

results.Store(fmt.Sprintf("%s_%d", executionType, num), num)
}(tests[i].executionType)
}(tests[i].name, tests[i].executionType)
}

wg.Wait()
Expand Down

0 comments on commit f4a3a3a

Please sign in to comment.