Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/fbe/repeatedly.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# SPDX-License-Identifier: MIT

require 'others'
require 'securerandom'
require 'tago'
require_relative '../fbe'
require_relative 'fb'
Expand Down Expand Up @@ -33,7 +34,7 @@
# f.issues_found = count_issues
# # PMP might have: hours_between_checks=6
# end
def Fbe.repeatedly(area, p_every_hours, fb: Fbe.fb, judge: $judge, loog: $loog, &)
def Fbe.repeatedly(area, p_every_hours, fb: Fbe.fb, judge: $judge, loog: $loog, &) # rubocop:disable Metrics/AbcSize
raise(Fbe::Error, 'The area is nil') if area.nil?
raise(Fbe::Error, 'The p_every_hours is nil') if p_every_hours.nil?
raise(Fbe::Error, 'The fb is nil') if fb.nil?
Expand All @@ -58,6 +59,7 @@ def Fbe.repeatedly(area, p_every_hours, fb: Fbe.fb, judge: $judge, loog: $loog,
f.what = 'repeatedly'
f.judge = judge
end
f._id = SecureRandom.random_number(9_999_999_999_999) if f['_id'].nil?
attrs = {}
yield(
others(fact: f, map: attrs) do |k, *rest|
Expand Down
47 changes: 47 additions & 0 deletions test/fbe/test_repeatedly.rb
Original file line number Diff line number Diff line change
Expand Up @@ -227,4 +227,51 @@ def test_prefers_the_configured_interval_over_the_daily_default
end
assert(ran, "the judge stayed idle #{hours + 1} hours later, while the interval is #{hours}, seed is #{seed}")
end

def test_replaces_property_on_the_second_run_on_a_plain_factbase
seed = Random.new_seed
count = Random.new(seed).rand(1..1_000_000)
fb = Factbase.new
2.times do |i|
Time.stub(:now, Time.now + (i * 25 * 60 * 60)) do
Fbe.repeatedly('качество', 'every_x_hours', fb:, judge: 'test', loog: Loog::NULL) do |f|
f.servers_checked = count + i
end
end
end
assert_equal([count + 1], fb.query('(always)').each.first['servers_checked'], "second run is lost, seed #{seed}")
end

def test_runs_again_on_an_old_marker_without_id
seed = Random.new_seed
count = Random.new(seed).rand(1..1_000_000)
fb = Factbase.new
m = fb.insert
m.what = 'repeatedly'
m.judge = 'test'
m.when = Time.now - (25 * 60 * 60)
m.servers_checked = count
Fbe.repeatedly('качество', 'every_x_hours', fb:, judge: 'test', loog: Loog::NULL) do |f|
f.servers_checked = count + 1
end
assert_equal(
[count + 1], fb.query('(always)').each.first['servers_checked'],
"old marker is not updated, seed #{seed}"
)
end

def test_keeps_the_id_of_a_marker_that_has_one
seed = Random.new_seed
id = Random.new(seed).rand(1..1_000_000)
fb = Factbase.new
m = fb.insert
m._id = id
m.what = 'repeatedly'
m.judge = 'test'
m.when = Time.now - (25 * 60 * 60)
Fbe.repeatedly('качество', 'every_x_hours', fb:, judge: 'test', loog: Loog::NULL) do |f|
f.servers_checked = id
end
assert_equal([id], fb.query('(always)').each.first['_id'], "marker got another id, seed #{seed}")
end
end
Loading