@@ -8,6 +8,7 @@ require 'rake'
88require 'uri'
99require 'zlib'
1010require 'etc'
11+ require 'set'
1112require 'fileutils'
1213require 'securerandom'
1314require 'yaml'
@@ -31,7 +32,7 @@ include BuildTools
3132PATH_CLI_HOME = TMP / "#{ Aspera ::Cli ::Info ::CMD_NAME } _home"
3233PATH_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
3536FILENAME_ASCII = 'data_file.bin'
3637# A medium sized file for testing with unicode characters in file name
3738FILENAME_UNICODE = "\u{1242B} spécial{#\u{1F600} تツ"
@@ -221,20 +222,21 @@ def restart_noded
221222 # -ps -ef|grep aspera|grep -v grep
222223end
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
239241end
240242
@@ -245,35 +247,50 @@ def percent_completed
245247 ( ( completed * 100.0 ) / total ) . round ( 1 )
246248end
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+
248255namespace :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