Skip to content
Merged
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
1 change: 1 addition & 0 deletions ruby/lib/minitest/queue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,7 @@ def with_timestamps
if result
result.start_timestamp = start_timestamp
result.finish_timestamp = current_timestamp
result.time ||= (result.finish_timestamp - result.start_timestamp).to_f
end
end

Expand Down
2 changes: 1 addition & 1 deletion ruby/lib/minitest/queue/test_data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def test_assertions
end

def test_duration
@test.time
@test.time || 0.0
end

def test_start_timestamp
Expand Down
22 changes: 16 additions & 6 deletions ruby/test/minitest/queue/lazy_single_example_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,18 +39,24 @@ def test_run_returns_error_for_load_error

assert result.error?
assert_instance_of Minitest::UnexpectedError, result.failure
refute_nil result.time
assert_nil example.source_location
end

def test_run_handles_script_error
loader = CI::Queue::FileLoader.new
resolver = CI::Queue::ClassResolver
example = LazySingleExample.new('MissingClass', 'test_missing', '/tmp/missing.rb', loader: loader, resolver: resolver)

example.stub(:runnable, -> { raise LoadError, 'boom' }) do
result = example.run
assert result.error?
assert_instance_of Minitest::UnexpectedError, result.failure
times = [Time.at(100), Time.at(108)]

CI::Queue.stub(:time_now, -> { times.shift }) do
example.stub(:runnable, -> { raise LoadError, 'boom' }) do
result = example.run
assert result.error?
assert_instance_of Minitest::UnexpectedError, result.failure
assert_equal 8.0, result.time
assert_instance_of Float, result.time
end
end
end

Expand All @@ -70,13 +76,17 @@ def test_run_skips_stale_entry_when_skip_stale_tests_enabled
loader = CI::Queue::FileLoader.new
resolver = CI::Queue::ClassResolver
example = LazySingleExample.new(class_name, 'test_no_longer_exists', file_path, loader: loader, resolver: resolver)
times = [Time.at(100), Time.at(108)]

old_queue = Minitest.queue
Minitest.queue = Struct.new(:config).new(CI::Queue::Configuration.new(skip_stale_tests: true))

result = example.run
result = CI::Queue.stub(:time_now, -> { times.shift }) { example.run }

assert result.skipped?
refute_nil result.time
assert_equal 8.0, result.time
assert_instance_of Float, result.time
assert_match(/Stale preresolved entry/, result.failure.message)
assert_match(/test_no_longer_exists/, result.failure.message)
ensure
Expand Down
28 changes: 28 additions & 0 deletions ruby/test/minitest/queue/test_data_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,34 @@ def test_error_location_uses_nested_exception_backtrace
assert_equal 42, data[:error_file_number]
end

def test_duration_defaults_to_zero_when_the_result_has_no_time
test = result('test_foo')
test.time = nil

data = TestData.new(
test: test,
index: 0,
namespace: 'namespace',
base_path: Minitest::Queue.project_root,
).to_h

assert_equal 0.0, data[:test_duration]
assert_instance_of Float, data[:test_duration]
end

def test_duration_is_preserved_when_the_result_ran
test = result('test_foo')

data = TestData.new(
test: test,
index: 0,
namespace: 'namespace',
base_path: Minitest::Queue.project_root,
).to_h

assert_equal 0.12, data[:test_duration]
end

def test_parallel_worker_metadata_defaults_to_nil
test = result('test_foo')

Expand Down
Loading