Fix flaky specs fro container repository delete tags service
What does this MR do and why?
Previously, when running spec in defined order, we were seeing the following failure:
1) Projects::ContainerRepository::Gitlab::DeleteTagsService#execute
with tags to delete with timeout set to a valid value tracks the
exception
Failure/Error: clear_memoization(name) if Time.current > expire_at
ArgumentError:
comparison of Integer with ActiveSupport::TimeWithZone failed
This commit ensure that Time.now.zone
returns
ActiveSupport::TimeWithZone
and not an Integer
.
Refs !118411 (comment 1409166073)
How to set up and validate locally
# On master
$ bin/rspec ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb[1:1:1:1:1,1:1:1:5:1:1,1:1:1:5:1:2] --seed 11984
Failures:
1) Projects::ContainerRepository::Gitlab::DeleteTagsService#execute with tags to delete with timeout set to a valid value tracks the exception
Failure/Error: clear_memoization(name) if Time.current > expire_at
ArgumentError:
comparison of Integer with ActiveSupport::TimeWithZone failed
# ./lib/gitlab/utils/strong_memoize.rb:47:in `>'
# ./lib/gitlab/utils/strong_memoize.rb:47:in `strong_memoize_with_expiration'
# ./app/models/container_repository.rb:421:in `registry'
# ./app/models/container_repository.rb:59:in `client'
# ./app/models/container_repository.rb:516:in `delete_tag_by_name'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:37:in `block in delete_tags'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:34:in `each'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:34:in `delete_tags'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:23:in `execute'
# ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:13:in `block (3 levels) in <top (required)>'
# ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:68:in `block (6 levels) in <top (required)>'
# ./spec/spec_helper.rb:425:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:18:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:416:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:412:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:61:in `with_raw_context'
# ./spec/spec_helper.rb:412:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:243:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <main>'
# ./spec/support/database/prevent_cross_joins.rb:108:in `block (3 levels) in <main>'
# ./spec/support/database/prevent_cross_joins.rb:62:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:108:in `block (2 levels) in <main>'
2) Projects::ContainerRepository::Gitlab::DeleteTagsService#execute with tags to delete with timeout set to a valid value
Failure/Error: clear_memoization(name) if Time.current > expire_at
ArgumentError:
comparison of Integer with ActiveSupport::TimeWithZone failed
# ./lib/gitlab/utils/strong_memoize.rb:47:in `>'
# ./lib/gitlab/utils/strong_memoize.rb:47:in `strong_memoize_with_expiration'
# ./app/models/container_repository.rb:421:in `registry'
# ./app/models/container_repository.rb:59:in `client'
# ./app/models/container_repository.rb:516:in `delete_tag_by_name'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:37:in `block in delete_tags'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:34:in `each'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:34:in `delete_tags'
# ./app/services/projects/container_repository/gitlab/delete_tags_service.rb:23:in `execute'
# ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:13:in `block (3 levels) in <top (required)>'
# ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:62:in `block (6 levels) in <top (required)>'
# ./spec/spec_helper.rb:425:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:18:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:416:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:412:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:61:in `with_raw_context'
# ./spec/spec_helper.rb:412:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:243:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <main>'
# ./spec/support/database/prevent_cross_joins.rb:108:in `block (3 levels) in <main>'
# ./spec/support/database/prevent_cross_joins.rb:62:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:108:in `block (2 levels) in <main>'
Finished in 13.91 seconds (files took 38.12 seconds to load)
3 examples, 2 failures
Failed examples:
rspec ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:64 # Projects::ContainerRepository::Gitlab::DeleteTagsService#execute with tags to delete with timeout set to a valid value tracks the exception
rspec ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb:62 # Projects::ContainerRepository::Gitlab::DeleteTagsService#execute with tags to delete with timeout set to a valid value
Randomized with seed 11984
# This MR
$ bin/rspec ./spec/services/projects/container_repository/gitlab/delete_tags_service_spec.rb[1:1:1:1:1,1:1:1:5:1:1,1:1:1:5:1:2] --seed 11984
Passes!
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Peter Leitzen