Skip to content

Commit

Permalink
Configure parallel tests and tinker tests to pass
Browse files Browse the repository at this point in the history
Add worker suffix to search index during tests
  • Loading branch information
colby-swandale committed Oct 9, 2024
1 parent 839de87 commit c86e1c1
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 32 deletions.
3 changes: 1 addition & 2 deletions app/models/concerns/rubygem_searchable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ module RubygemSearchable
extend ActiveSupport::Concern

included do
searchkick index_name: Gemcutter::SEARCH_INDEX_NAME,
callbacks: false,
searchkick callbacks: false,
settings: {
number_of_shards: 1,
number_of_replicas: Gemcutter::SEARCH_NUM_REPLICAS,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
module SearchKickHelper
def import_and_refresh
Rubygem.searchkick_reindex

# wait for indexing to finish
Searchkick.client.cluster.health wait_for_status: "yellow"
end

def es_downloads(id)
Expand All @@ -17,7 +13,6 @@ def es_version_downloads(id)
end

def get_response(id)
Rubygem.searchkick_index.refresh
Searchkick.client.get index: "rubygems-#{Rails.env}", id: id
Searchkick.client.get index: Rubygem.searchkick_index.name, id: id
end
end
30 changes: 13 additions & 17 deletions test/models/concerns/rubygem_searchable_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,6 @@
class RubygemSearchableTest < ActiveSupport::TestCase
include SearchKickHelper

setup do
Rubygem.searchkick_index.delete if Rubygem.searchkick_index.exists?
end

context "#search_data" do
setup do
@rubygem = create(:rubygem, name: "example_gem", downloads: 10)
Expand Down Expand Up @@ -128,7 +124,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
create(:rubygem, name: "example-gem", number: "0.0.1")
create(:rubygem, name: "example_1", number: "0.0.1")
create(:rubygem, name: "example.rb", number: "0.0.1")
import_and_refresh

end

should "find all gems with matching tokens" do
Expand All @@ -147,7 +143,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
example_2 = create(:rubygem, name: "example_2")
create(:version, rubygem: example_1, indexed: false)
create(:version, rubygem: example_2)
import_and_refresh

end

should "filter yanked gems from the result" do
Expand All @@ -167,7 +163,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
create(:version, rubygem: example_gem1, description: "some", summary: "some")
create(:version, rubygem: example_gem2, description: "keyword", summary: "some")
create(:version, rubygem: example_gem3, summary: "keyword", description: "some")
import_and_refresh

end

should "look for keyword in name, summary and description and order them in same priority order" do
Expand All @@ -184,7 +180,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
rubygem = create(:rubygem, name: "gem_#{downloads}", downloads: downloads)
create(:version, rubygem: rubygem)
end
import_and_refresh

end

should "boost score of result by downloads count" do
Expand All @@ -197,9 +193,9 @@ class RubygemSearchableTest < ActiveSupport::TestCase

context "source" do
setup do
rubygem = create(:rubygem, name: "example_gem", downloads: 10)
create(:version, rubygem: rubygem, summary: "some summary", description: "some description")
import_and_refresh
@rubygem = create(:rubygem, name: "example_gem", downloads: 10)
@version = create(:version, rubygem: @rubygem, summary: "some summary", description: "some description")

end

should "return all terms of source" do
Expand All @@ -225,7 +221,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
example2 = create(:rubygem, name: "keywordo")
example3 = create(:rubygem, name: "keywo")
[example1, example2, example3].each { |gem| create(:version, rubygem: gem) }
import_and_refresh

end

should "suggest names of possible gems" do
Expand All @@ -249,7 +245,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
rubygem2 = create(:rubygem, name: "web-rubygem", downloads: 99)
create(:version, rubygem: rubygem1, summary: "special word with web-rubygem")
create(:version, rubygem: rubygem2, description: "example special word")
import_and_refresh

end

should "filter gems on downloads" do
Expand Down Expand Up @@ -303,7 +299,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
create(:version, rubygem: rubygem2, description: "example gems set the example")
rubygem1.update_column("updated_at", 2.days.ago)
rubygem2.update_column("updated_at", 10.days.ago)
import_and_refresh

_, @response = ElasticSearcher.new("example").search
end

Expand All @@ -326,7 +322,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase

context "#search" do
context "exception handling" do
setup { import_and_refresh }
# setup { import_and_refresh }

context "Searchkick::InvalidQueryError" do
setup do
Expand Down Expand Up @@ -364,7 +360,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
rubygem = create(:rubygem, name: gem_name, downloads: 10)
create(:version, rubygem: rubygem)
end
import_and_refresh

end

should "not affect results" do
Expand All @@ -381,7 +377,7 @@ class RubygemSearchableTest < ActiveSupport::TestCase
%w[term-ansicolor term-an].each do |gem_name|
create(:rubygem, name: gem_name, number: "0.0.1", downloads: 10)
end
import_and_refresh

end

should "return results" do
Expand Down
2 changes: 1 addition & 1 deletion test/models/deletion_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ class DeletionTest < ActiveSupport::TestCase

perform_enqueued_jobs

response = Searchkick.client.get index: "rubygems-#{Rails.env}",
response = Searchkick.client.get index: Rubygem.searchkick_index.name,
id: @version.rubygem_id

assert response["_source"]["yanked"]
Expand Down
4 changes: 2 additions & 2 deletions test/models/pusher_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ def two_cert_chain(signing_key:, root_not_before: Time.current, cert_not_before:
should "create rubygem index" do
@rubygem.update_column("updated_at", Date.new(2016, 07, 04))
perform_enqueued_jobs only: ReindexRubygemJob
response = Searchkick.client.get index: "rubygems-#{Rails.env}",
response = Searchkick.client.get index: Rubygem.searchkick_index.name,
id: @rubygem.id
expected_response = {
"name" => "gemsgemsgems",
Expand Down Expand Up @@ -731,7 +731,7 @@ def two_cert_chain(signing_key:, root_not_before: Time.current, cert_not_before:

should "update rubygem index" do
perform_enqueued_jobs only: ReindexRubygemJob
response = Searchkick.client.get index: "rubygems-#{Rails.env}",
response = Searchkick.client.get index: Rubygem.searchkick_index.name,
id: @rubygem.id

assert_equal "new summary", response["_source"]["summary"]
Expand Down
12 changes: 8 additions & 4 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
require "helpers/api_policy_helpers"
require "helpers/gem_helpers"
require "helpers/email_helpers"
require "helpers/es_helper"
require "helpers/searchkick_helper"
require "helpers/password_helpers"
require "helpers/policy_helpers"
require "helpers/webauthn_helpers"
Expand Down Expand Up @@ -74,8 +74,6 @@
c.strict_keyword_argument_matching = true
end

Rubygem.searchkick_reindex(import: false)

OmniAuth.config.test_mode = true

class ActiveSupport::TestCase
Expand All @@ -84,8 +82,11 @@ class ActiveSupport::TestCase
include EmailHelpers
include PasswordHelpers

parallelize_setup do |_worker|
parallelize(workers: :number_of_processors)

parallelize_setup do |worker|
SemanticLogger.reopen
Searchkick.index_suffix = "_#{worker}"
end

setup do
Expand All @@ -96,6 +97,9 @@ class ActiveSupport::TestCase
Unpwn.offline = true
OmniAuth.config.mock_auth.clear

Rubygem.reindex
Searchkick.disable_callbacks

@launch_darkly = LaunchDarkly::Integrations::TestData.data_source
config = LaunchDarkly::Config.new(data_source: @launch_darkly, send_events: false)
Rails.configuration.launch_darkly_client = LaunchDarkly::LDClient.new("", config)
Expand Down

0 comments on commit c86e1c1

Please sign in to comment.