Skip to content

Fix flaky specs fro container repository delete tags service

Peter Leitzen requested to merge pl-spec-flaky-time-now into master

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.

Edited by Peter Leitzen

Merge request reports