miga-base 0.6.4.2 → 0.7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/dataset_test.rb CHANGED
@@ -19,25 +19,25 @@ class DatasetTest < Test::Unit::TestCase
19
19
 
20
20
  def test_known_types
21
21
  assert_respond_to(MiGA::Dataset, :KNOWN_TYPES)
22
- assert(MiGA::Dataset.KNOWN_TYPES.has_key?(:genome))
22
+ assert { MiGA::Dataset.KNOWN_TYPES.has_key?(:genome) }
23
23
  end
24
24
 
25
25
  def test_exist
26
26
  assert_respond_to(MiGA::Dataset, :exist?)
27
- assert(MiGA::Dataset.exist?($p1, 'dataset1'))
28
- assert(!MiGA::Dataset.exist?($p1, 'Nope'))
27
+ assert { MiGA::Dataset.exist?($p1, 'dataset1') }
28
+ assert { !MiGA::Dataset.exist?($p1, 'Nope') }
29
29
  end
30
30
 
31
31
  def test_info_fields
32
32
  assert_respond_to(MiGA::Dataset, :INFO_FIELDS)
33
- assert(MiGA::Dataset.INFO_FIELDS.include?('name'))
33
+ assert { MiGA::Dataset.INFO_FIELDS.include?('name') }
34
34
  end
35
35
 
36
36
  def test_initialize
37
37
  assert_raise { MiGA::Dataset.new($p1, 'dataset-1') }
38
38
  assert_equal($p1, $d1.project)
39
39
  assert_equal('dataset1', $d1.name)
40
- assert($d1.is_ref?)
40
+ assert_predicate($d1, :is_ref?)
41
41
  assert_equal(MiGA::Metadata, $d1.metadata.class)
42
42
  end
43
43
 
@@ -45,21 +45,21 @@ class DatasetTest < Test::Unit::TestCase
45
45
  d2 = $p1.add_dataset('ds_save')
46
46
  assert_respond_to(d2, :save)
47
47
  d2.save
48
- assert(!d2.is_multi?)
49
- assert(!d2.is_nonmulti?)
48
+ assert_not_predicate(d2, :is_multi?)
49
+ assert_not_predicate(d2, :is_nonmulti?)
50
50
  assert_nil(d2.metadata[:type])
51
51
  d2.metadata[:type] = :metagenome
52
52
  d2.save
53
53
  assert_equal(:metagenome, d2.metadata[:type])
54
- assert(d2.is_multi?)
55
- assert(!d2.is_nonmulti?)
54
+ assert_predicate(d2, :is_multi?)
55
+ assert_not_predicate(d2, :is_nonmulti?)
56
56
  end
57
57
 
58
58
  def test_remove
59
59
  d2 = $p1.add_dataset('ds_remove')
60
- assert(File.exist?(d2.metadata.path))
60
+ assert_path_exist(d2.metadata.path)
61
61
  d2.remove!
62
- assert(! File.exist?(d2.metadata.path))
62
+ assert_path_not_exist(d2.metadata.path)
63
63
  end
64
64
 
65
65
  def test_info
@@ -82,7 +82,7 @@ class DatasetTest < Test::Unit::TestCase
82
82
  d2 = $p1.add_dataset('ds_preprocessing')
83
83
  assert_nil(d2.first_preprocessing)
84
84
  assert_nil(d2.next_preprocessing)
85
- assert(! d2.done_preprocessing?)
85
+ assert_not_predicate(d2, :done_preprocessing?)
86
86
  FileUtils.touch(File.expand_path(
87
87
  "data/02.trimmed_reads/#{d2.name}.1.clipped.fastq", $p1.path
88
88
  ))
@@ -91,26 +91,26 @@ class DatasetTest < Test::Unit::TestCase
91
91
  ))
92
92
  assert_equal(:trimmed_reads, d2.first_preprocessing(true))
93
93
  assert_equal(:read_quality, d2.next_preprocessing(true))
94
- assert(! d2.done_preprocessing?(true))
94
+ assert { !d2.done_preprocessing?(true) }
95
95
  # Ref and undeclared multi
96
- assert(d2.ignore_task?(:mytaxa))
97
- assert(d2.ignore_task?(:mytaxa_scan))
98
- assert(d2.ignore_task?(:distances))
96
+ assert { d2.ignore_task?(:mytaxa) }
97
+ assert { d2.ignore_task?(:mytaxa_scan) }
98
+ assert { d2.ignore_task?(:distances) }
99
99
  # Ref and multi
100
100
  d2.metadata[:type] = :metagenome
101
- assert(! d2.ignore_task?(:mytaxa))
102
- assert(d2.ignore_task?(:mytaxa_scan))
103
- assert(d2.ignore_task?(:distances))
101
+ assert { !d2.ignore_task?(:mytaxa) }
102
+ assert { d2.ignore_task?(:mytaxa_scan) }
103
+ assert { d2.ignore_task?(:distances) }
104
104
  # Ref and nonmulti
105
105
  d2.metadata[:type] = :genome
106
- assert(d2.ignore_task?(:mytaxa))
107
- assert(! d2.ignore_task?(:mytaxa_scan))
108
- assert(! d2.ignore_task?(:distances))
106
+ assert { d2.ignore_task?(:mytaxa) }
107
+ assert { !d2.ignore_task?(:mytaxa_scan) }
108
+ assert { !d2.ignore_task?(:distances) }
109
109
  # Qry and nonmulti
110
110
  d2.metadata[:ref] = false
111
- assert(d2.ignore_task?(:mytaxa))
112
- assert(d2.ignore_task?(:mytaxa_scan))
113
- assert(! d2.ignore_task?(:distances))
111
+ assert { d2.ignore_task?(:mytaxa) }
112
+ assert { d2.ignore_task?(:mytaxa_scan) }
113
+ assert { !d2.ignore_task?(:distances) }
114
114
  end
115
115
 
116
116
  def test_profile_advance
data/test/hook_test.rb CHANGED
@@ -78,18 +78,18 @@ class HookTest < Test::Unit::TestCase
78
78
  def test_dataset_run_cmd
79
79
  f = File.expand_path('hook_ds_cmd', $tmp)
80
80
  $d1.metadata[:on_remove] = [[:run_cmd, "echo {{dataset}} > '#{f}'"]]
81
- assert(! File.exist?(f))
81
+ assert_path_not_exist(f)
82
82
  $d1.remove!
83
- assert(File.exist? f)
83
+ assert_path_exist(f)
84
84
  assert_equal($d1.name, File.read(f).chomp)
85
85
  end
86
86
 
87
87
  def test_project_run_cmd
88
88
  f = File.expand_path('hook_pr_cmd', $tmp)
89
89
  $p1.add_hook(:on_save, :run_cmd, "echo {{project}} > '#{f}'")
90
- assert(! File.exist?(f))
90
+ assert_path_not_exist(f)
91
91
  $p1.save
92
- assert(File.exist? f)
92
+ assert_path_exist(f)
93
93
  assert_equal($p1.path, File.read(f).chomp)
94
94
  end
95
95
 
data/test/json_test.rb CHANGED
@@ -4,11 +4,11 @@ class JsonTest < Test::Unit::TestCase
4
4
 
5
5
  def test_parse
6
6
  assert_equal(
7
- {a: 1, b: 2},
7
+ { a: 1, b: 2 },
8
8
  MiGA::Json.parse('{"a": 1, "b": 2}', contents: true)
9
9
  )
10
10
  assert_equal(
11
- {'a' => 1, 'b' => 2},
11
+ { 'a' => 1, 'b' => 2 },
12
12
  MiGA::Json.parse('{"a": 1, "b": 2}', contents: true, symbolize: false)
13
13
  )
14
14
  assert_equal(1.0, MiGA::Json.parse('1.0', contents: true))
data/test/lair_test.rb ADDED
@@ -0,0 +1,93 @@
1
+ require 'test_helper'
2
+ require 'miga/lair'
3
+
4
+ class LairTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ $jruby_tests = !ENV['JRUBY_TESTS'].nil?
8
+ $tmp = Dir.mktmpdir
9
+ ENV['MIGA_HOME'] = $tmp
10
+ FileUtils.touch(File.expand_path('.miga_rc', ENV['MIGA_HOME']))
11
+ daemon_json = File.expand_path('.miga_daemon.json', ENV['MIGA_HOME'])
12
+ File.open(daemon_json, 'w') do |fh|
13
+ fh.puts '{"maxjobs":1,"ppn":1,"latency":1,"varsep":" ",
14
+ "var":"{{key}}={{value}}","cmd":"echo {{task_name}} >/dev/null",
15
+ "alive":"echo 1 # {{pid}}","type":"bash","format_version":1}'
16
+ end
17
+ Dir.mkdir(File.join($tmp, 'sub'))
18
+ $p1 = MiGA::Project.new(File.join($tmp, 'project1'))
19
+ $p2 = MiGA::Project.new(File.join($tmp, 'project2'))
20
+ $p3 = MiGA::Project.new(File.join($tmp, 'sub/project3'))
21
+ end
22
+
23
+ def teardown
24
+ FileUtils.rm_rf $tmp
25
+ ENV['MIGA_HOME'] = nil
26
+ end
27
+
28
+ def test_lair_init
29
+ path = $tmp
30
+ lair = MiGA::Lair.new(path, name: 'Alt-X')
31
+ assert_equal(MiGA::Lair, lair.class)
32
+ assert_equal(path, lair.path)
33
+ assert_equal(path, lair.daemon_home)
34
+ assert_equal('MiGA:Alt-X', lair.daemon_name)
35
+ assert_equal(lair.daemon_home, MiGA::Lair.daemon_home(lair.daemon_home))
36
+ end
37
+
38
+ def test_in_loop
39
+ omit_if($jruby_tests, 'JRuby doesn\'t implement fork.')
40
+ lair = MiGA::Lair.new($tmp, name: 'Oh')
41
+ omit_if($jruby_tests, 'JRuby doesn\'t implement fork.')
42
+ child = lair.start(['--shush'])
43
+ assert_not_nil(child)
44
+ assert_gt(child, 0, 'The daemon process should have non-zero PID')
45
+ sleep(2)
46
+ capture_stderr { lair.stop }
47
+ assert_raise(Errno::ESRCH) { Process.kill(0, child) }
48
+ assert_nil(lair.declare_alive_pid)
49
+ assert_path_exist(lair.output_file)
50
+ l = File.readlines(lair.output_file)
51
+ assert_match(/-{20}\n/, l[0])
52
+ assert_match(/MiGA:Oh launched\n/, l[1])
53
+ end
54
+
55
+ def test_first_loop
56
+ lair = MiGA::Lair.new($tmp, name: 'Ew')
57
+ out = capture_stderr { lair.daemon_first_loop }.string
58
+ assert_match(/-{20}/, out)
59
+ end
60
+
61
+ def test_loop
62
+ lair = MiGA::Lair.new($tmp, name: 'Ew', latency: 1, dry: true)
63
+ out = capture_stderr { assert { !lair.daemon_loop } }.string
64
+ assert_match(/Launching daemon: \S*project1/, out)
65
+ assert_match(/Launching daemon: \S*project2/, out)
66
+ assert_match(/Launching daemon: \S*sub\/project3/, out)
67
+ end
68
+
69
+ def test_daemon_launch
70
+ lair = MiGA::Lair.new(File.join($tmp, 'sub'), latency: 1)
71
+ p = MiGA::Project.load(File.join(lair.path, 'project3'))
72
+ d = MiGA::Daemon.new(p)
73
+ assert_not_predicate(d, :active?)
74
+ assert_path_exist(d.daemon_home)
75
+
76
+ omit_if($jruby_tests, 'JRuby doesn\'t implement fork.')
77
+ capture_stdout do
78
+ FileUtils.touch(d.output_file) # <- To prevent test racing
79
+ out = capture_stderr { lair.check_directories }.string
80
+ assert_match(/Launching daemon: \S+project3/, out)
81
+ assert_predicate(d, :active?)
82
+ end
83
+
84
+ out = capture_stderr { lair.terminate_daemons }.string
85
+ assert_match(/Probing MiGA::Daemon/, out)
86
+ assert_match(/Sending termination message/, out)
87
+ sleep(2)
88
+ assert_not_predicate(d, :active?)
89
+
90
+ out = capture_stderr { assert { lair.daemon_loop } }.string
91
+ assert_equal('', out)
92
+ end
93
+ end
@@ -23,8 +23,8 @@ class MetadataTest < Test::Unit::TestCase
23
23
  t1 = Time.new
24
24
  md1.save
25
25
  t2 = Time.new
26
- assert(! File.exist?(md1.lock_file))
27
- assert(t2-t1 >= 1.0)
26
+ assert_path_not_exist(md1.lock_file)
27
+ assert_ge(t2 - t1, 1.0)
28
28
  end
29
29
 
30
30
  def test_load
@@ -41,8 +41,8 @@ class MetadataTest < Test::Unit::TestCase
41
41
  md1.load
42
42
  t2 = Time.new
43
43
  assert_equal(2, md1[:t])
44
- assert(! File.exist?(md1.lock_file))
45
- assert(t2-t1 >= 1.0)
44
+ assert_path_not_exist(md1.lock_file)
45
+ assert_ge(t2 - t1, 1.0)
46
46
  end
47
47
 
48
48
  end
data/test/project_test.rb CHANGED
@@ -33,7 +33,7 @@ class ProjectTest < Test::Unit::TestCase
33
33
 
34
34
  def test_create
35
35
  assert_equal("#{$tmp}/create", MiGA::Project.new("#{$tmp}/create").path)
36
- assert(Dir.exist?("#{$tmp}/create"))
36
+ assert_path_exist("#{$tmp}/create")
37
37
  assert_raise do
38
38
  ENV['MIGA_HOME'] = $tmp + '/chez-moi'
39
39
  MiGA::Project.new($tmp + '/cuckoo')
@@ -67,25 +67,23 @@ class ProjectTest < Test::Unit::TestCase
67
67
 
68
68
  def test_import_dataset
69
69
  p1 = $p1
70
- d1 = p1.add_dataset('d1')
70
+ d = p1.add_dataset('d1')
71
71
  File.open(
72
- "#{p1.path}/data/01.raw_reads/#{d1.name}.1.fastq", 'w'
72
+ "#{p1.path}/data/01.raw_reads/#{d.name}.1.fastq", 'w'
73
73
  ) { |f| f.puts ':-)' }
74
74
  File.open(
75
- "#{p1.path}/data/01.raw_reads/#{d1.name}.done", 'w'
75
+ "#{p1.path}/data/01.raw_reads/#{d.name}.done", 'w'
76
76
  ) { |f| f.puts ':-)' }
77
- d1.next_preprocessing(true)
77
+ d.next_preprocessing(true)
78
78
  p2 = MiGA::Project.new(File.expand_path('import_dataset', $tmp))
79
- assert(p2.datasets.empty?)
79
+ assert_empty(p2.datasets)
80
80
  assert_nil(p2.dataset('d1'))
81
- p2.import_dataset(d1)
81
+ p2.import_dataset(d)
82
82
  assert_equal(1, p2.datasets.size)
83
83
  assert_equal(MiGA::Dataset, p2.dataset('d1').class)
84
84
  assert_equal(1, p2.dataset('d1').results.size)
85
- assert(
86
- File.exist?(File.join(p2.path, "data/01.raw_reads/#{d1.name}.1.fastq"))
87
- )
88
- assert(File.exist?(File.join(p2.path, "metadata/#{d1.name}.json")))
85
+ assert_path_exist(File.join(p2.path, "data/01.raw_reads/#{d.name}.1.fastq"))
86
+ assert_path_exist(File.join(p2.path, "metadata/#{d.name}.json"))
89
87
  end
90
88
 
91
89
  def test_add_result
@@ -113,11 +111,11 @@ class ProjectTest < Test::Unit::TestCase
113
111
 
114
112
  def test_preprocessing
115
113
  p1 = $p1
116
- assert(p1.done_preprocessing?)
114
+ assert_predicate(p1, :done_preprocessing?)
117
115
  d1 = p1.add_dataset('BAH')
118
- assert(!p1.done_preprocessing?)
116
+ assert_not_predicate(p1, :done_preprocessing?)
119
117
  FileUtils.touch(File.expand_path("data/90.stats/#{d1.name}.done", p1.path))
120
- assert(p1.done_preprocessing?)
118
+ assert_predicate(p1, :done_preprocessing?)
121
119
  assert_nil(p1.next_inclade)
122
120
  p1.metadata[:type] = :clade
123
121
  assert_equal(:subclades, p1.next_inclade)
@@ -20,7 +20,7 @@ class RemoteDatasetTest < Test::Unit::TestCase
20
20
 
21
21
  def test_class_universe
22
22
  assert_respond_to(MiGA::RemoteDataset, :UNIVERSE)
23
- assert(MiGA::RemoteDataset.UNIVERSE.keys.include? :ebi)
23
+ assert_include(MiGA::RemoteDataset.UNIVERSE.keys, :ebi)
24
24
  end
25
25
 
26
26
  def test_bad_remote_dataset
@@ -89,26 +89,26 @@ class RemoteDatasetTest < Test::Unit::TestCase
89
89
  def test_type_status_asm
90
90
  omit_if(!$remote_tests, 'Remote access is error-prone')
91
91
  rd = MiGA::RemoteDataset.new('GCF_000018105.1', :assembly, :ncbi)
92
- assert(rd.get_metadata[:is_type])
92
+ assert { rd.get_metadata[:is_type] }
93
93
  end
94
94
 
95
95
  def test_nontype_status_asm
96
96
  omit_if(!$remote_tests, 'Remote access is error-prone')
97
97
  rd = MiGA::RemoteDataset.new('GCA_004684205.1', :assembly, :ncbi)
98
- assert(!rd.get_metadata[:is_type])
98
+ assert { !rd.get_metadata[:is_type] }
99
99
  end
100
100
 
101
101
  def test_type_status_nuccore
102
102
  omit_if(!$remote_tests, 'Remote access is error-prone')
103
103
  rd = MiGA::RemoteDataset.new('NC_019748.1', :nuccore, :ncbi)
104
- assert(rd.get_metadata[:is_type])
104
+ assert { rd.get_metadata[:is_type] }
105
105
  end
106
106
 
107
107
  def test_ref_type_status
108
108
  omit_if(!$remote_tests, 'Remote access is error-prone')
109
109
  rd = MiGA::RemoteDataset.new('GCA_002849345', :assembly, :ncbi)
110
- assert(!rd.get_metadata[:is_type])
111
- assert(rd.get_metadata[:is_ref_type])
110
+ assert { !rd.get_metadata[:is_type] }
111
+ assert { rd.get_metadata[:is_ref_type] }
112
112
  end
113
113
 
114
114
  # This test is too expensive (too much time to run it!)
@@ -33,7 +33,7 @@ class ResultStatsTest < Test::Unit::TestCase
33
33
  r = $d.add_result(:raw_reads)
34
34
  assert_equal({}, r[:stats])
35
35
  r.compute_stats
36
- assert(!r[:stats].empty?)
36
+ assert_not_empty(r[:stats])
37
37
  assert_equal(Hash, r[:stats].class)
38
38
  assert_equal(1, r[:stats][:reads])
39
39
  assert_equal([40.0, '%'], r[:stats][:g_c_content])
@@ -48,7 +48,7 @@ class ResultStatsTest < Test::Unit::TestCase
48
48
  touch_done(dir)
49
49
  r = $d.add_result(:raw_reads)
50
50
  r.compute_stats
51
- assert(!r[:stats].empty?)
51
+ assert_not_empty(r[:stats])
52
52
  assert_nil(r[:stats][:reads])
53
53
  assert_equal(1, r[:stats][:read_pairs])
54
54
  assert_equal([40.0, '%'], r[:stats][:reverse_g_c_content])
@@ -4,11 +4,11 @@ require 'miga/tax_dist'
4
4
  class TaxDistTest < Test::Unit::TestCase
5
5
 
6
6
  def test_aai_path
7
- assert(File.size? MiGA::TaxDist.aai_path(:intax))
8
- assert(File.size? MiGA::TaxDist.aai_path(:novel))
9
- assert(File.size? MiGA::TaxDist.aai_path(:intax, engine: :diamond))
10
- assert(File.size? MiGA::TaxDist.aai_path(:novel, engine: :blast))
11
- assert(File.size? MiGA::TaxDist.aai_path(:novel, engine: :'blast+'))
7
+ assert_path_exist(MiGA::TaxDist.aai_path(:intax))
8
+ assert_path_exist(MiGA::TaxDist.aai_path(:novel))
9
+ assert_path_exist(MiGA::TaxDist.aai_path(:intax, engine: :diamond))
10
+ assert_path_exist(MiGA::TaxDist.aai_path(:novel, engine: :blast))
11
+ assert_path_exist(MiGA::TaxDist.aai_path(:novel, engine: :'blast+'))
12
12
  end
13
13
 
14
14
  def test_aai_pvalues
@@ -17,12 +17,12 @@ class TaxIndexTest < Test::Unit::TestCase
17
17
  d = p.add_dataset('dataset1')
18
18
 
19
19
  ti = MiGA::TaxIndex.new
20
- assert(ti.datasets.empty?)
20
+ assert_empty(ti.datasets)
21
21
  ti << d
22
- assert(ti.datasets.empty?, 'Index should ignore datasets without tax.')
22
+ assert_empty(ti.datasets, 'index should ignore datasets without tax')
23
23
  d.metadata[:tax] = MiGA::Taxonomy.new('k:Fantasia g:Unicornia')
24
24
  ti << d
25
- assert_equal(1, ti.datasets.size, 'Index should have one dataset.')
25
+ assert_equal(1, ti.datasets.size, 'index should have one dataset')
26
26
  assert_equal(1, ti.root.datasets_count)
27
27
  ensure
28
28
  FileUtils.rm_rf $tmp
@@ -31,9 +31,9 @@ class TaxIndexTest < Test::Unit::TestCase
31
31
 
32
32
  def test_to_json
33
33
  js = JSON.parse(MiGA::TaxIndex.new.to_json)
34
- assert(js.keys.include? 'datasets')
34
+ assert_include(js.keys, 'datasets')
35
35
  assert_equal(2, js.keys.size)
36
- assert(js['datasets'].empty?)
36
+ assert_empty(js['datasets'])
37
37
  end
38
38
 
39
39
  def test_to_tab
@@ -5,7 +5,7 @@ class TaxonomyTest < Test::Unit::TestCase
5
5
 
6
6
  def test_ranks
7
7
  assert_respond_to(MiGA::Taxonomy, :KNOWN_RANKS)
8
- assert(MiGA::Taxonomy.KNOWN_RANKS.include? :s)
8
+ assert_include(MiGA::Taxonomy.KNOWN_RANKS, :s)
9
9
  assert_nil(MiGA::Taxonomy.normalize_rank 'No Rank')
10
10
  assert_nil(MiGA::Taxonomy.normalize_rank 'Captain')
11
11
  assert_equal(:f, MiGA::Taxonomy.normalize_rank(:Family))
@@ -41,7 +41,7 @@ class TaxonomyTest < Test::Unit::TestCase
41
41
  tx << { genus: 'v3' }
42
42
  assert_equal('v3', tx[:g])
43
43
  tx << 's:v3_0'
44
- assert(tx.in? MiGA::Taxonomy.new('species:v3_0'))
44
+ assert { tx.in? MiGA::Taxonomy.new('species:v3_0') }
45
45
  assert_raise(RuntimeError) { tx << 123 }
46
46
  end
47
47
 
@@ -89,7 +89,7 @@ class TaxonomyTest < Test::Unit::TestCase
89
89
  # Delete
90
90
  alt = tx.delete_alternative
91
91
  assert_equal(4, alt.size)
92
- assert(tx.alternative.empty?)
92
+ assert_empty(tx.alternative)
93
93
  end
94
94
 
95
95
  def test_reset