discourse/spec/services/random_topic_selector_spec.rb
David Taylor afb5ec811d FIX: Don't use DistributedCache to store redis readonly state
This can cause unbound CPU usage in some cases, and excessive logging in other cases. This commit moves redis readonly information into the local process, but maintains the DistributedCache for postgres readonly state.
2019-06-25 11:20:34 +08:00

37 lines
1.0 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe RandomTopicSelector do
it 'can correctly use cache' do
key = RandomTopicSelector.cache_key
$redis.del key
4.times do |t|
$redis.rpush key, t
end
expect(RandomTopicSelector.next(0)).to eq([])
expect(RandomTopicSelector.next(2)).to eq([0, 1])
$redis.expects(:multi).returns(Discourse.received_redis_readonly!)
expect(RandomTopicSelector.next(2)).to eq([2, 3])
$redis.unstub(:multi)
expect(RandomTopicSelector.next(2)).to eq([2, 3])
expect(RandomTopicSelector.next(2)).to eq([])
end
it 'can correctly backfill' do
category = Fabricate(:category, sort_order: 'op_likes')
t1 = Fabricate(:topic, category_id: category.id)
_t2 = Fabricate(:topic, category_id: category.id, visible: false)
_t3 = Fabricate(:topic, category_id: category.id, deleted_at: 1.minute.ago)
t4 = Fabricate(:topic, category_id: category.id)
expect(RandomTopicSelector.next(5, category).sort).to eq([t1.id, t4.id].sort)
end
end