Skip to content

Commit d3abeee

Browse files
rake test:reset also reset deps
Signed-off-by: Laurent Martin <laurent.martin.l@gmail.com>
1 parent a82b6ec commit d3abeee

File tree

2 files changed

+73
-58
lines changed

2 files changed

+73
-58
lines changed

rakelib/test.rake

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require 'rake'
88
require 'uri'
99
require 'zlib'
1010
require 'etc'
11+
require 'set'
1112
require 'fileutils'
1213
require 'securerandom'
1314
require 'yaml'
@@ -31,7 +32,7 @@ include BuildTools
3132
PATH_CLI_HOME = TMP / "#{Aspera::Cli::Info::CMD_NAME}_home"
3233
PATH_VERSION_CHECK_PERSIST = PATH_CLI_HOME / 'persist_store/version_last_check.txt'
3334
# Package title for faspex and aoc
34-
PACKAGE_TITLE_BASE = Time.now.to_s
35+
TIMESTEMP_TEST_RUN = Time.now.to_s
3536
FILENAME_ASCII = 'data_file.bin'
3637
# A medium sized file for testing with unicode characters in file name
3738
FILENAME_UNICODE = "\u{1242B}spécial{#\u{1F600}تツ"
@@ -221,20 +222,21 @@ def restart_noded
221222
# -ps -ef|grep aspera|grep -v grep
222223
end
223224

224-
def select_test_cases(selection, &block)
225-
raise 'missing block' unless block_given?
225+
# @return [Array<String>] List of matching test case names
226+
def select_test_cases(selection)
226227
list = selection&.split(' ')
227228
if list.nil?
228-
ALL_TESTS.each(&block)
229+
ALL_TESTS.keys
229230
elsif list.first.eql?('tag')
230231
list.shift
232+
unknown = list - ALL_TESTS.each_with_object(Set.new){ |(_, i), m| m.merge(i[:tags])}.to_a
233+
Aspera.assert(unknown.empty?){"Unknown tag: #{unknown.join(', ')}".red}
231234
list.map!(&:to_sym)
232-
ALL_TESTS.select{ |_, info| info[:tags].intersect?(list)}.each(&block)
235+
ALL_TESTS.filter_map{ |name, info| name if info[:tags].intersect?(list)}
233236
else
234-
list.each do |name|
235-
raise "Unknown test: #{name}" unless ALL_TESTS.key?(name)
236-
yield(name, ALL_TESTS[name])
237-
end
237+
unknown = list - ALL_TESTS.keys
238+
Aspera.assert(unknown.empty?){"Unknown test: #{unknown.join(', ')}".red}
239+
list
238240
end
239241
end
240242

@@ -245,35 +247,50 @@ def percent_completed
245247
((completed * 100.0) / total).round(1)
246248
end
247249

250+
# Set description of target when selectors are available
251+
def selector_desc(description)
252+
desc("#{description}: all, by names, or by tags (space-sep)")
253+
end
254+
248255
namespace :test do
249-
desc 'List tests: all, by names, or by tags (space-sep)'
256+
selector_desc 'List tests'
250257
task :list, [:name_list] do |_, args|
251-
select_test_cases(args[:name_list]) do |name, info|
252-
log.info("#{name.ljust(20)} #{info[:tags].join(', ')}")
258+
select_test_cases(args[:name_list]).each do |name|
259+
log.info("#{name.ljust(20)} #{ALL_TESTS[name][:tags].join(', ')}")
253260
end
254261
end
255262

256-
desc 'Run tests: all, by names, or by tags (space-sep)'
263+
selector_desc 'Run tests'
257264
task :run, [:name_list] do |_, args|
258-
select_test_cases(args[:name_list]) do |name, _info|
265+
select_test_cases(args[:name_list]).each do |name|
259266
Rake::Task["#{TEST_CASE_NS}:#{name}"].invoke
260267
end
261268
end
262269

263-
desc 'Skip tests: all, by names, or by tags (space-sep)'
270+
selector_desc 'Skip tests'
264271
task :skip, [:name_list] do |_, args|
265-
select_test_cases(args[:name_list]) do |name, _info|
272+
select_test_cases(args[:name_list]).each do |name|
266273
STATES[name] = 'skipped'
267274
log.info("[SKIP] #{name}")
268275
end
269276
save_state
270277
end
271278

272-
desc 'Reset tests: all, by names, or by tags (space-sep)'
279+
selector_desc 'Reset tests'
273280
task :reset, [:name_list] do |_, args|
274-
select_test_cases(args[:name_list]) do |name, _info|
275-
STATES.delete(name)
276-
log.info("[RESET] #{name}")
281+
to_reset = select_test_cases(args[:name_list])
282+
# find all reverse dependencies
283+
loop do
284+
# find tests that depend on current selection
285+
revdep = ALL_TESTS.filter_map do |name, info|
286+
name if info[:depends_on]&.intersect?(to_reset)
287+
end
288+
# end if no new dependecy
289+
break if (revdep - to_reset).empty?
290+
to_reset |= revdep
291+
end
292+
to_reset.each do |name|
293+
log.info("[RESET] #{name}") if STATES.delete(name)
277294
end
278295
save_state
279296
end

0 commit comments

Comments
 (0)