Skip to content

Commit 5676351

Browse files
committed
Try parallel testing. Hacky fix for redis connections per process
1 parent 70ea837 commit 5676351

10 files changed

Lines changed: 37 additions & 28 deletions

File tree

app/models/concerns/has_test_job.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ module HasTestJob
22
extend ActiveSupport::Concern
33

44
def test_job_id
5-
Redis.new(url: TeSS::Config.redis_url).get(test_job_id_key)
5+
TeSS::Config.redis.get(test_job_id_key)
66
end
77

88
def test_job_id=(job_id)
9-
Redis.new(url: TeSS::Config.redis_url).set(test_job_id_key, job_id)
9+
TeSS::Config.redis.set(test_job_id_key, job_id)
1010
end
1111

1212
def test_job_status

app/models/event.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ def geocoding_cache_lookup
369369
location = address
370370

371371
begin
372-
redis = Redis.new(url: TeSS::Config.redis_url)
372+
redis = TeSS::Config.redis
373373
if redis.exists?(location)
374374
self.latitude, self.longitude = JSON.parse(redis.get(location))
375375
Rails.logger.info("Re-using: #{location}")
@@ -395,7 +395,7 @@ def geocoding_api_lookup
395395
self.latitude = result[:lat]
396396
self.longitude = result[:lon]
397397
begin
398-
redis = Redis.new(url: TeSS::Config.redis_url)
398+
redis = TeSS::Config.redis
399399
redis.set(location, [latitude, longitude].to_json)
400400
rescue Redis::BaseError => e
401401
raise e unless Rails.env.production?
@@ -418,7 +418,7 @@ def enqueue_geocoding_worker
418418
location = address
419419

420420
begin
421-
redis = Redis.new(url: TeSS::Config.redis_url)
421+
redis = TeSS::Config.redis
422422
last_geocode = redis.get('last_geocode') || Time.now
423423

424424
run_at = [last_geocode.to_i, Time.now.to_i].max + NOMINATIM_DELAY

app/workers/geocoding_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def perform(arg_array)
1818
return
1919
end
2020

21-
redis = Redis.new(url: TeSS::Config.redis_url)
21+
redis = TeSS::Config.redis
2222

2323
if redis.exists?(location)
2424
event.geocoding_cache_lookup

config/application.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,11 @@ def self.merge_config(default_config, config, current_path = '')
112112
merge_config(Rails.configuration.tess_defaults.with_indifferent_access, tess_config)
113113

114114
class TessConfig < OpenStruct
115+
116+
def redis
117+
_redis || Redis.new(url: TeSS::Config.redis_url)
118+
end
119+
115120
def redis_url
116121
if Rails.env.test?
117122
ENV.fetch('REDIS_TEST_URL') { 'redis://localhost:6379/0' }

lib/fairsharing/client.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def get_token(username = nil, password = nil)
3333
end
3434

3535
def token
36-
redis = Redis.new(url: TeSS::Config.redis_url)
36+
redis = TeSS::Config.redis
3737
expiry = redis.hget(REDIS_KEY, 'expiry')
3838
t = redis.hget(REDIS_KEY, 'token')
3939
if t && expiry && !Time.at(expiry.to_i).past?

test/integration/sitemap_test.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
class SitemapTest < ActionDispatch::IntegrationTest
44
teardown do
55
dir = Rails.root.join('public', 'test_sitemaps')
6-
dir.glob('*.xml').each(&:delete)
7-
dir.delete
6+
if dir.exist?
7+
dir.glob('*.xml').each(&:delete)
8+
dir.delete
9+
end
810
end
911

1012
test 'generates sitemap' do

test/models/event_test.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,7 @@ class EventTest < ActiveSupport::TestCase
321321
venue: 'A place', city: 'Manchester',
322322
country: @event.country, postcode: @event.postcode })
323323
event = Event.new(parameters)
324-
redis = Redis.new(url: TeSS::Config.redis_url)
325-
redis.set(event.address, [45, 45].to_json)
324+
TeSS::Config.redis.set(event.address, [45, 45].to_json)
326325

327326
refute event.address.blank?
328327

test/test_helper.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,14 @@
4141
class ActiveSupport::TestCase
4242
include SchemaHelper
4343

44+
parallelize(workers: :number_of_processors)
45+
46+
parallelize_setup do |worker|
47+
TeSS::Config._redis = Redis.new(url: ENV.fetch('REDIS_TEST_URL') { "redis://localhost:6379/#{2 + worker}" })
48+
end
49+
4450
setup do
45-
redis = Redis.new(url: TeSS::Config.redis_url)
46-
redis.flushdb
51+
TeSS::Config.redis.flushdb
4752
end
4853

4954
teardown do

test/unit/fairsharing/client_test.rb

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ class ClientTest < ActiveSupport::TestCase
77
@token_issue_date = Time.new(2022, 12, 1, 16, 7, 18)
88
@token = 'eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIyMjIxMDlhMi0wZWZkLTQ0Y2EtYTYzOC1jNjFmMWZmNmQxYjAiLCJzdWIiOiI4MjI0Iiwic2NwIjoidXNlciIsImF1ZCI6bnVsbCwiaWF0IjoxNjY5OTEwODM4LCJleHAiOjE2Njk5OTcyMzh9.Dv_E6JiyRSrvoOZMHZeQLiEbqYnsTR0qkyrKyWWqb80'
99
@expiry = '1669997238'
10-
@redis = Redis.new(url: TeSS::Config.redis_url)
1110
end
1211

1312
test 'should get token' do
@@ -21,20 +20,20 @@ class ClientTest < ActiveSupport::TestCase
2120
end
2221

2322
test 'should store token in redis' do
24-
assert_nil @redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
25-
assert_nil @redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
23+
assert_nil TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
24+
assert_nil TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
2625

2726
VCR.use_cassette('fairsharing/get_token') do
2827
travel_to(@token_issue_date) do
2928
@client.token
3029
end
3130
end
3231

33-
assert_equal @expiry, @redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
34-
assert_equal @token, @redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
32+
assert_equal @expiry, TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
33+
assert_equal @token, TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
3534
end
3635

37-
test 'should re-use token from @redis' do
36+
test 'should re-use token from TeSS::Config.redis' do
3837
set_cached_token('abcdefg', 1_669_997_273)
3938

4039
VCR.use_cassette('fairsharing/get_token') do
@@ -44,20 +43,20 @@ class ClientTest < ActiveSupport::TestCase
4443
end
4544
end
4645

47-
assert_equal '1669997273', @redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
48-
assert_equal 'abcdefg', @redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
46+
assert_equal '1669997273', TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
47+
assert_equal 'abcdefg', TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
4948
end
5049

51-
test 'should not re-use token from @redis if expired' do
50+
test 'should not re-use token from TeSS::Config.redis if expired' do
5251
set_cached_token('abcdefg', 3.days.ago.to_i)
5352

5453
VCR.use_cassette('fairsharing/get_token') do
5554
token = @client.token
5655
assert_equal @token, token, 'Token should have been renewed'
5756
end
5857

59-
assert_equal @expiry, @redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
60-
assert_equal @token, @redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
58+
assert_equal @expiry, TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'expiry')
59+
assert_equal @token, TeSS::Config.redis.hget(Fairsharing::Client::REDIS_KEY, 'token')
6160
end
6261

6362
test 'can search' do
@@ -164,8 +163,8 @@ class ClientTest < ActiveSupport::TestCase
164163
private
165164

166165
def set_cached_token(token = @token, expiry = @expiry)
167-
@redis.hset(Fairsharing::Client::REDIS_KEY, 'token', token)
168-
@redis.hset(Fairsharing::Client::REDIS_KEY, 'expiry', expiry)
166+
TeSS::Config.redis.hset(Fairsharing::Client::REDIS_KEY, 'token', token)
167+
TeSS::Config.redis.hset(Fairsharing::Client::REDIS_KEY, 'expiry', expiry)
169168
end
170169
end
171170
end

test/workers/geocoding_worker_test.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ class GeocodingWorkerTest < ActiveSupport::TestCase
2323
assert_nil event.latitude
2424
assert_nil event.longitude
2525

26-
redis = Redis.new(url: TeSS::Config.redis_url)
27-
redis.set(event.address, [45, 45].to_json)
26+
TeSS::Config.redis.set(event.address, [45, 45].to_json)
2827

2928
Sidekiq::Testing.inline! do
3029
GeocodingWorker.perform_async([event.id, event.address])

0 commit comments

Comments
 (0)