zold 0.16.13 → 0.16.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/bin/zold +3 -2
  3. data/lib/zold/commands/create.rb +1 -1
  4. data/lib/zold/commands/pay.rb +1 -1
  5. data/lib/zold/endless.rb +1 -1
  6. data/lib/zold/gem.rb +1 -1
  7. data/lib/zold/node/farm.rb +15 -8
  8. data/lib/zold/node/front.rb +12 -2
  9. data/lib/zold/version.rb +1 -1
  10. data/test/commands/routines/test_reconnect.rb +1 -1
  11. data/test/commands/routines/test_spread.rb +1 -1
  12. data/test/commands/test_alias.rb +1 -1
  13. data/test/commands/test_calculate.rb +1 -1
  14. data/test/commands/test_clean.rb +1 -1
  15. data/test/commands/test_create.rb +1 -1
  16. data/test/commands/test_diff.rb +1 -1
  17. data/test/commands/test_fetch.rb +1 -1
  18. data/test/commands/test_invoice.rb +1 -1
  19. data/test/commands/test_list.rb +1 -1
  20. data/test/commands/test_merge.rb +1 -1
  21. data/test/commands/test_node.rb +1 -1
  22. data/test/commands/test_pay.rb +1 -1
  23. data/test/commands/test_propagate.rb +1 -1
  24. data/test/commands/test_pull.rb +1 -1
  25. data/test/commands/test_push.rb +1 -1
  26. data/test/commands/test_remote.rb +1 -1
  27. data/test/commands/test_remove.rb +1 -1
  28. data/test/commands/test_show.rb +1 -1
  29. data/test/commands/test_taxes.rb +1 -1
  30. data/test/node/test_async_entrance.rb +1 -1
  31. data/test/node/test_emission.rb +1 -1
  32. data/test/node/test_entrance.rb +1 -1
  33. data/test/node/test_farm.rb +1 -1
  34. data/test/node/test_farmers.rb +1 -1
  35. data/test/node/test_front.rb +2 -1
  36. data/test/node/test_nodup_entrance.rb +1 -1
  37. data/test/node/test_safe_entrance.rb +1 -1
  38. data/test/node/test_spread_entrance.rb +1 -1
  39. data/test/node/test_sync_entrance.rb +1 -1
  40. data/test/node/test_trace.rb +1 -1
  41. data/test/test__helper.rb +16 -2
  42. data/test/test_age.rb +1 -1
  43. data/test/test_amount.rb +1 -1
  44. data/test/test_cached_wallets.rb +1 -1
  45. data/test/test_copies.rb +1 -1
  46. data/test/test_dir_items.rb +2 -2
  47. data/test/test_gem.rb +1 -1
  48. data/test/test_hexnum.rb +1 -1
  49. data/test/test_http.rb +1 -1
  50. data/test/test_id.rb +1 -1
  51. data/test/test_key.rb +1 -1
  52. data/test/test_log.rb +1 -1
  53. data/test/test_metronome.rb +1 -1
  54. data/test/test_patch.rb +1 -1
  55. data/test/test_prefixes.rb +1 -1
  56. data/test/test_remotes.rb +1 -1
  57. data/test/test_signature.rb +1 -1
  58. data/test/test_size.rb +1 -1
  59. data/test/test_sync_wallets.rb +1 -1
  60. data/test/test_tax.rb +1 -1
  61. data/test/test_tree_wallets.rb +1 -1
  62. data/test/test_txn.rb +1 -1
  63. data/test/test_upgrades.rb +1 -1
  64. data/test/test_verbose_thread.rb +1 -1
  65. data/test/test_version.rb +1 -1
  66. data/test/test_wallet.rb +1 -1
  67. data/test/test_wallets.rb +1 -1
  68. data/test/test_zold.rb +5 -4
  69. data/test/upgrades/test_protocol_up.rb +1 -1
  70. data/zold.gemspec +1 -0
  71. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec1ca28cf2d44bd430e43965a3a2ebdae2c10c149ed70e2edc38fb43295feb93
4
- data.tar.gz: ef06fa34ba837fb99be1a935c907cbf1ad5a0a732f733b80e7e710c5d9b9f852
3
+ metadata.gz: 51c68760612879b65f070ac7b07fc10849c687fa1dd69000a0d5128a0e6f414d
4
+ data.tar.gz: 2e533397cfcfab38a17237d92f1c10e58262622154eca4abd0678cead502d20a
5
5
  SHA512:
6
- metadata.gz: a6b6aade154501ffab625707cbafcce32790b9c878a7d889a844277c7b8bc291922b8c39924d7772fd10572e5f9a1354ad65bf7cd15ee5c75b384a07f52f2dfc
7
- data.tar.gz: c927263e4882236b28f58a7b49971b6194c0e852d57b836b0438ff22a3fcac541caea38d815d78b5aa54c5a07021fab8e4b83d5416fc4c946d6efce68d9c4f75
6
+ metadata.gz: 9981735a709e7f33ca4e532d0585b32c6c8ef55bf0a57f596bae45fd64dd823b15b156275e96dfef80259cca8f4b3277521a08c7bb14190f946011e315559a63
7
+ data.tar.gz: 1848c9278157073de768bca4d137cc12e06d547d9c82d5cf7a60a9868a36482310cef92f4718dec17702c7a7f4b7eeb5bd2f10b79d241c6d0b0a4a17d82e1bb1
data/bin/zold CHANGED
@@ -27,6 +27,7 @@ start = Time.now
27
27
 
28
28
  require 'slop'
29
29
  require 'rainbow'
30
+ require 'backtrace'
30
31
  require_relative '../lib/zold'
31
32
  require_relative '../lib/zold/version'
32
33
  require_relative '../lib/zold/wallet'
@@ -166,7 +167,7 @@ Available options:"
166
167
 
167
168
  wallets = Zold::SyncWallets.new(
168
169
  Zold::CachedWallets.new(
169
- command == 'node' ? Zold::TreeWallets.new('.') : Zold::Wallets.new('.')
170
+ command == 'node' ? Zold::TreeWallets.new(home) : Zold::Wallets.new(home)
170
171
  ),
171
172
  log: log
172
173
  )
@@ -245,7 +246,7 @@ Available options:"
245
246
  end
246
247
  rescue StandardError => ex
247
248
  log.error("#{ex.message} (#{ex.class.name})")
248
- puts(ex.backtrace) if opts['trace']
249
+ puts(Backtrace.new(ex)) if opts['trace']
249
250
  exit -1
250
251
  end
251
252
 
@@ -46,7 +46,7 @@ Available options:"
46
46
  o.string '--public-key',
47
47
  'The location of RSA public key (default: ~/.ssh/id_rsa.pub)',
48
48
  require: true,
49
- default: '~/.ssh/id_rsa.pub'
49
+ default: File.expand_path('~/.ssh/id_rsa.pub')
50
50
  o.string '--network',
51
51
  "The name of the network (default: #{Wallet::MAIN_NETWORK}",
52
52
  require: true,
@@ -52,7 +52,7 @@ Available options:"
52
52
  o.string '--private-key',
53
53
  'The location of RSA private key (default: ~/.ssh/id_rsa)',
54
54
  require: true,
55
- default: '~/.ssh/id_rsa'
55
+ default: File.expand_path('~/.ssh/id_rsa')
56
56
  o.bool '--force',
57
57
  'Ignore all validations',
58
58
  default: false
@@ -47,7 +47,7 @@ module Zold
47
47
  end
48
48
  end
49
49
  ensure
50
- @log.debug("Endless loop \"#{@title}\" quit in #{Age.new(start)}")
50
+ @log.debug("Endless loop \"#{@title}\" quit after #{Age.new(start)} of work")
51
51
  end
52
52
  end
53
53
  end
@@ -34,7 +34,7 @@ module Zold
34
34
  class Gem
35
35
  def last_version
36
36
  JsonPage.new(
37
- Http.new(uri: 'https://rubygems.org/api/v1/versions/zold/latest.json', score: Score::ZERO).get.body
37
+ Http.new(uri: 'https://rubygems.org/api/v1/versions/zold/latest.json').get.body
38
38
  ).to_hash['version']
39
39
  rescue StandardError => _
40
40
  '0.0.0'
@@ -128,17 +128,24 @@ module Zold
128
128
  end
129
129
  end
130
130
  end
131
- ready = false
132
- @threads << Thread.new do
133
- Endless.new('cleanup', log: @log).run do
134
- cleanup(host, port, strength, threads)
135
- ready = true
136
- sleep(1)
131
+ unless threads.zero?
132
+ ready = false
133
+ @threads << Thread.new do
134
+ Endless.new('cleanup', log: @log).run do
135
+ cleanup(host, port, strength, threads)
136
+ ready = true
137
+ sleep(1)
138
+ end
137
139
  end
140
+ loop { break if ready }
138
141
  end
139
- @log.info("Farm started with #{@threads.count} threads (one for cleanup) \
142
+ if @threads.empty?
143
+ cleanup(host, port, strength, threads)
144
+ @log.info('Farm started with no threads (there will be no score)')
145
+ else
146
+ @log.info("Farm started with #{@threads.count} threads (one for cleanup) \
140
147
  at #{host}:#{port}, strength is #{strength}")
141
- loop { break if ready }
148
+ end
142
149
  begin
143
150
  yield(self)
144
151
  ensure
@@ -29,6 +29,7 @@ require 'sinatra/base'
29
29
  require 'concurrent'
30
30
  require 'backtrace'
31
31
  require 'zache'
32
+ require 'posix/spawn'
32
33
  require_relative '../version'
33
34
  require_relative '../size'
34
35
  require_relative '../wallet'
@@ -143,6 +144,11 @@ in #{Age.new(@start, limit: 1)}")
143
144
  settings.version
144
145
  end
145
146
 
147
+ get '/protocol' do
148
+ content_type('text/plain')
149
+ settings.protocol.to_s
150
+ end
151
+
146
152
  get '/pid' do
147
153
  content_type('text/plain')
148
154
  Process.pid.to_s
@@ -405,7 +411,7 @@ in #{Age.new(@start, limit: 1)}")
405
411
 
406
412
  get '/ps' do
407
413
  content_type('text/plain')
408
- `ps ax | grep zold`
414
+ processes.join("\n")
409
415
  end
410
416
 
411
417
  not_found do
@@ -455,10 +461,14 @@ in #{Age.new(@start, limit: 1)}")
455
461
 
456
462
  def processes_count
457
463
  settings.zache.get(:processes, lifetime: settings.network == Wallet::MAIN_NETWORK ? 60 : 0) do
458
- `ps ax | grep zold | wc -l`
464
+ processes.count
459
465
  end
460
466
  end
461
467
 
468
+ def processes
469
+ POSIX::Spawn::Child.new('ps', 'ax').out.split("\n").select { |t| t.include?('zold') }
470
+ end
471
+
462
472
  def score
463
473
  settings.zache.get(:score, lifetime: settings.network == Wallet::MAIN_NETWORK ? 60 : 0) do
464
474
  b = settings.farm.best
@@ -25,6 +25,6 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.16.13'
28
+ VERSION = '0.16.14'
29
29
  PROTOCOL = 2
30
30
  end
@@ -31,7 +31,7 @@ require_relative '../../../lib/zold/commands/routines/reconnect.rb'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestReconnect < Minitest::Test
34
+ class TestReconnect < Zold::Test
35
35
  def test_reconnects
36
36
  Dir.mktmpdir do |dir|
37
37
  remotes = Zold::Remotes.new(file: File.join(dir, 'remotes.csv'))
@@ -32,7 +32,7 @@ require_relative '../../../lib/zold/node/entrance.rb'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestSpread < Minitest::Test
35
+ class TestSpread < Zold::Test
36
36
  def test_spread_wallets
37
37
  FakeHome.new(log: test_log).run do |home|
38
38
  5.times { home.create_wallet }
@@ -5,7 +5,7 @@ require_relative '../test__helper'
5
5
  require_relative '../fake_home'
6
6
  require_relative '../../lib/zold/commands/alias'
7
7
 
8
- class TestAlias < Minitest::Test
8
+ class TestAlias < Zold::Test
9
9
  # alias set <wallet> <alias>
10
10
  # @todo #322:30min Implement the set command and unskip this test.
11
11
  # The syntax is already documented in the alias command in the help.
@@ -29,7 +29,7 @@ require_relative '../../lib/zold/commands/calculate'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestCalculate < Minitest::Test
32
+ class TestCalculate < Zold::Test
33
33
  def test_calculates_score
34
34
  score = Zold::Calculate.new(log: test_log).run(
35
35
  ['score', '--strength=2', '--max=8', '--invoice=NOSUFFIX@ffffffffffffffff']
@@ -32,7 +32,7 @@ require_relative '../../lib/zold/commands/clean'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestClean < Minitest::Test
35
+ class TestClean < Zold::Test
36
36
  def test_cleans_copies
37
37
  FakeHome.new(log: test_log).run do |home|
38
38
  wallet = home.create_wallet
@@ -31,7 +31,7 @@ require_relative '../../lib/zold/commands/create'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestCreate < Minitest::Test
34
+ class TestCreate < Zold::Test
35
35
  def test_creates_wallet
36
36
  Dir.mktmpdir do |dir|
37
37
  wallets = Zold::Wallets.new(dir)
@@ -38,7 +38,7 @@ require_relative '../../lib/zold/commands/diff'
38
38
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
39
39
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
40
40
  # License:: MIT
41
- class TestDiff < Minitest::Test
41
+ class TestDiff < Zold::Test
42
42
  def test_diff_with_copies
43
43
  FakeHome.new(log: test_log).run do |home|
44
44
  wallet = home.create_wallet
@@ -40,7 +40,7 @@ require_relative '../../lib/zold/commands/fetch'
40
40
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
41
41
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
42
42
  # License:: MIT
43
- class TestFetch < Minitest::Test
43
+ class TestFetch < Zold::Test
44
44
  def test_fetches_wallet
45
45
  FakeHome.new(log: test_log).run do |home|
46
46
  wallet = home.create_wallet
@@ -33,7 +33,7 @@ require_relative '../../lib/zold/commands/invoice'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestInvoice < Minitest::Test
36
+ class TestInvoice < Zold::Test
37
37
  def test_generates_invoice
38
38
  Dir.mktmpdir do |dir|
39
39
  id = Zold::Id.new
@@ -32,7 +32,7 @@ require_relative '../../lib/zold/commands/list'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestList < Minitest::Test
35
+ class TestList < Zold::Test
36
36
  def test_lists_wallets_with_balances
37
37
  Dir.mktmpdir do |dir|
38
38
  id = Zold::Id.new
@@ -40,7 +40,7 @@ require_relative '../../lib/zold/commands/pay'
40
40
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
41
41
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
42
42
  # License:: MIT
43
- class TestMerge < Minitest::Test
43
+ class TestMerge < Zold::Test
44
44
  def test_merges_wallet
45
45
  FakeHome.new(log: test_log).run do |home|
46
46
  wallet = home.create_wallet
@@ -38,7 +38,7 @@ require_relative '../node/fake_node'
38
38
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
39
39
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
40
40
  # License:: MIT
41
- class TestNode < Minitest::Test
41
+ class TestNode < Zold::Test
42
42
  # @todo #306:30min This test is failing from time to time
43
43
  # We should find a way to check that tests involved in thread concurrency
44
44
  # are always working
@@ -34,7 +34,7 @@ require_relative '../../lib/zold/commands/pay'
34
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
35
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
36
36
  # License:: MIT
37
- class TestPay < Minitest::Test
37
+ class TestPay < Zold::Test
38
38
  def test_sends_from_wallet_to_wallet
39
39
  FakeHome.new(log: test_log).run do |home|
40
40
  source = home.create_wallet
@@ -31,7 +31,7 @@ require_relative '../../lib/zold/commands/pay'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestPropagate < Minitest::Test
34
+ class TestPropagate < Zold::Test
35
35
  def test_propagates_wallet
36
36
  FakeHome.new(log: test_log).run do |home|
37
37
  wallet = home.create_wallet
@@ -32,7 +32,7 @@ require_relative '../../lib/zold/commands/pull'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestPull < Minitest::Test
35
+ class TestPull < Zold::Test
36
36
  def test_pull_wallet
37
37
  FakeHome.new(log: test_log).run do |home|
38
38
  remotes = home.remotes
@@ -35,7 +35,7 @@ require_relative '../../lib/zold/commands/push'
35
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
36
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
37
37
  # License:: MIT
38
- class TestPush < Minitest::Test
38
+ class TestPush < Zold::Test
39
39
  def test_pushes_wallet
40
40
  FakeHome.new(log: test_log).run do |home|
41
41
  wallet = home.create_wallet
@@ -36,7 +36,7 @@ require_relative '../../lib/zold/commands/remote'
36
36
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
37
37
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
38
38
  # License:: MIT
39
- class TestRemote < Minitest::Test
39
+ class TestRemote < Zold::Test
40
40
  def test_updates_remote
41
41
  Dir.mktmpdir do |dir|
42
42
  remotes = Zold::Remotes.new(file: File.join(dir, 'a/b/c/remotes'))
@@ -29,7 +29,7 @@ require_relative '../../lib/zold/commands/remove'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestRemove < Minitest::Test
32
+ class TestRemove < Zold::Test
33
33
  def test_removes_one_wallet
34
34
  FakeHome.new(log: test_log).run do |home|
35
35
  wallet = home.create_wallet
@@ -33,7 +33,7 @@ require_relative '../../lib/zold/commands/show'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestShow < Minitest::Test
36
+ class TestShow < Zold::Test
37
37
  def test_checks_wallet_balance
38
38
  Dir.mktmpdir do |dir|
39
39
  id = Zold::Id.new
@@ -36,7 +36,7 @@ require_relative '../../lib/zold/commands/taxes'
36
36
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
37
37
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
38
38
  # License:: MIT
39
- class TestTaxes < Minitest::Test
39
+ class TestTaxes < Zold::Test
40
40
  def test_pays_taxes
41
41
  FakeHome.new(log: test_log).run do |home|
42
42
  wallets = home.wallets
@@ -32,7 +32,7 @@ require_relative 'fake_entrance'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestAsyncEntrance < Minitest::Test
35
+ class TestAsyncEntrance < Zold::Test
36
36
  def test_renders_json
37
37
  FakeHome.new(log: test_log).run do |home|
38
38
  Zold::AsyncEntrance.new(FakeEntrance.new, home.dir, log: test_log).start do |e|
@@ -26,7 +26,7 @@ require_relative '../test__helper'
26
26
  require_relative '../../lib/zold/node/emission'
27
27
  require_relative '../../lib/zold/amount'
28
28
 
29
- class EmissionTest < Minitest::Test
29
+ class EmissionTest < Zold::Test
30
30
  def test_emission
31
31
  (1..10).each do |year|
32
32
  FakeHome.new(log: test_log).run do |home|
@@ -35,7 +35,7 @@ require_relative '../../lib/zold/commands/pay'
35
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
36
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
37
37
  # License:: MIT
38
- class TestEntrance < Minitest::Test
38
+ class TestEntrance < Zold::Test
39
39
  def test_pushes_wallet
40
40
  sid = Zold::Id::ROOT
41
41
  tid = Zold::Id.new
@@ -27,7 +27,7 @@ require_relative '../test__helper'
27
27
  require_relative '../../lib/zold/log'
28
28
  require_relative '../../lib/zold/node/farm'
29
29
 
30
- class FarmTest < Minitest::Test
30
+ class FarmTest < Zold::Test
31
31
  def test_renders_in_json
32
32
  Dir.mktmpdir do |dir|
33
33
  farm = Zold::Farm.new('NOPREFIX6@ffffffffffffffff', File.join(dir, 'f'), log: test_log)
@@ -26,7 +26,7 @@ require 'zold/score'
26
26
  require_relative '../test__helper'
27
27
  require_relative '../../lib/zold/node/farmers'
28
28
 
29
- class FarmersTest < Minitest::Test
29
+ class FarmersTest < Zold::Test
30
30
  def test_calculates_next_score
31
31
  before = Zold::Score.new(host: 'some-host', port: 9999, invoice: 'NOPREFIX4@ffffffffffffffff', strength: 3)
32
32
  farmer = Zold::Farmers::Spawn.new(log: test_log)
@@ -33,7 +33,7 @@ require_relative '../../lib/zold/http'
33
33
  require_relative '../../lib/zold/age'
34
34
  require_relative '../../lib/zold/json_page'
35
35
 
36
- class FrontTest < Minitest::Test
36
+ class FrontTest < Zold::Test
37
37
  def app
38
38
  Zold::Front
39
39
  end
@@ -63,6 +63,7 @@ class FrontTest < Minitest::Test
63
63
  '/',
64
64
  '/remotes',
65
65
  '/version',
66
+ '/protocol',
66
67
  '/farm',
67
68
  '/metronome',
68
69
  '/score',
@@ -31,7 +31,7 @@ require_relative 'fake_entrance'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestAsyncEntrance < Minitest::Test
34
+ class TestAsyncEntrance < Zold::Test
35
35
  def test_ignores_dup
36
36
  FakeHome.new(log: test_log).run do |home|
37
37
  wallet = home.create_wallet
@@ -33,7 +33,7 @@ require_relative 'fake_entrance'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestSafeEntrance < Minitest::Test
36
+ class TestSafeEntrance < Zold::Test
37
37
  def test_rejects_wallet_with_negative_balance
38
38
  FakeHome.new(log: test_log).run do |home|
39
39
  wallet = home.create_wallet
@@ -33,7 +33,7 @@ require_relative 'fake_entrance'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestSpreadEntrance < Minitest::Test
36
+ class TestSpreadEntrance < Zold::Test
37
37
  def test_renders_json
38
38
  FakeHome.new(log: test_log).run do |home|
39
39
  wallet = home.create_wallet(Zold::Id.new)
@@ -30,7 +30,7 @@ require_relative 'fake_entrance'
30
30
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
31
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
32
32
  # License:: MIT
33
- class TestSyncEntrance < Minitest::Test
33
+ class TestSyncEntrance < Zold::Test
34
34
  def test_renders_json
35
35
  FakeHome.new(log: test_log).run do
36
36
  Zold::SyncEntrance.new(FakeEntrance.new, log: test_log).start do |e|
@@ -24,7 +24,7 @@ require 'minitest/autorun'
24
24
  require_relative '../test__helper'
25
25
  require_relative '../../lib/zold/node/trace'
26
26
 
27
- class TraceTest < Minitest::Test
27
+ class TraceTest < Zold::Test
28
28
  def test_records_log_lines
29
29
  trace = Zold::Trace.new(test_log, 2)
30
30
  trace.error('This should not be visible')
@@ -23,7 +23,9 @@
23
23
  gem 'openssl'
24
24
  require 'openssl'
25
25
  require 'minitest/autorun'
26
+ require 'minitest/hooks/test'
26
27
  require 'concurrent'
28
+ require 'timeout'
27
29
 
28
30
  STDOUT.sync = true
29
31
 
@@ -36,8 +38,20 @@ if ENV['CI'] == 'true'
36
38
  SimpleCov.formatter = SimpleCov::Formatter::Codecov
37
39
  end
38
40
 
39
- module Minitest
40
- class Test
41
+ module Zold
42
+ class Test < Minitest::Test
43
+ include Minitest::Hooks
44
+
45
+ # We need this in order to make sure any test is faster than a minute. This
46
+ # should help spotting tests that hang out sometimes. The number of seconds
47
+ # to wait can be increased, but try to make it as little as possible,
48
+ # in order to catch problems ealier.
49
+ def around
50
+ Timeout.timeout(120) do
51
+ super
52
+ end
53
+ end
54
+
41
55
  def assert_wait(max: 30)
42
56
  assert_equal_wait(true, max: max) { yield }
43
57
  end
@@ -27,7 +27,7 @@ require_relative '../lib/zold/age'
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
28
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
29
29
  # License:: MIT
30
- class TestAge < Minitest::Test
30
+ class TestAge < Zold::Test
31
31
  def test_prints_age
32
32
  assert_equal('10m', Zold::Age.new(Time.now - 10 * 60).to_s)
33
33
  assert_equal('5.5s', Zold::Age.new(Time.now - 5.5).to_s)
@@ -27,7 +27,7 @@ require_relative '../lib/zold/amount'
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
28
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
29
29
  # License:: MIT
30
- class TestAmount < Minitest::Test
30
+ class TestAmount < Zold::Test
31
31
  def test_parses_zld
32
32
  amount = Zold::Amount.new(zld: 14.95)
33
33
  assert(
@@ -33,7 +33,7 @@ require_relative '../lib/zold/amount'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestCachedWallets < Minitest::Test
36
+ class TestCachedWallets < Zold::Test
37
37
  def test_adds_wallet
38
38
  FakeHome.new(log: test_log).run do |home|
39
39
  wallets = Zold::CachedWallets.new(home.wallets)
@@ -35,7 +35,7 @@ require_relative '../lib/zold/wallet'
35
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
36
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
37
37
  # License:: MIT
38
- class TestCopies < Minitest::Test
38
+ class TestCopies < Zold::Test
39
39
  def test_adds_and_removes_copies
40
40
  Dir.mktmpdir do |dir|
41
41
  copies = Zold::Copies.new(File.join(dir, 'my/a/copies'), log: test_log)
@@ -32,12 +32,12 @@ require_relative '../lib/zold/dir_items'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestDirItems < Minitest::Test
35
+ class TestDirItems < Zold::Test
36
36
  def test_intensive_write_in_threads
37
37
  Dir.mktmpdir do |dir|
38
38
  file = File.join(dir, 'hey.txt')
39
39
  back = Thread.start do
40
- Endless.new('test-diritems', log: test_log).run do
40
+ Zold::Endless.new('test-diritems', log: test_log).run do
41
41
  Zold::DirItems.new(dir).fetch
42
42
  end
43
43
  end
@@ -4,7 +4,7 @@ require_relative '../lib/zold/gem'
4
4
  require 'webmock/minitest'
5
5
  require 'minitest/autorun'
6
6
 
7
- class TestGem < Minitest::Test
7
+ class TestGem < Zold::Test
8
8
  def test_last_version
9
9
  version = (1..3).map { rand(9).to_s } .join('.')
10
10
  stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
@@ -27,7 +27,7 @@ require_relative '../lib/zold/hexnum'
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
28
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
29
29
  # License:: MIT
30
- class TestHexnum < Minitest::Test
30
+ class TestHexnum < Zold::Test
31
31
  def test_prints_and_parses
32
32
  [0, 1, 3, 5, 7, 13, 6447, 897_464, -1, -3, -7584, -900_098].each do |n|
33
33
  assert_equal(n, Zold::Hexnum.parse(Zold::Hexnum.new(n, 6).to_s).to_i)
@@ -31,7 +31,7 @@ require_relative '../lib/zold/http'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestHttp < Minitest::Test
34
+ class TestHttp < Zold::Test
35
35
  def test_pings_broken_uri
36
36
  stub_request(:get, 'http://bad-host/').to_return(status: 500)
37
37
  res = Zold::Http.new(uri: 'http://bad-host/').get
@@ -28,7 +28,7 @@ require_relative '../lib/zold/id'
28
28
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
29
29
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
30
30
  # License:: MIT
31
- class TestId < Minitest::Test
31
+ class TestId < Zold::Test
32
32
  def test_generates_new_id
33
33
  50.times do
34
34
  id = Zold::Id.new
@@ -29,7 +29,7 @@ require_relative '../lib/zold/key'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestKey < Minitest::Test
32
+ class TestKey < Zold::Test
33
33
  def test_reads_public_rsa
34
34
  key = Zold::Key.new(file: 'fixtures/id_rsa.pub')
35
35
  assert(key.to_pub.start_with?('MIICI'))
@@ -29,7 +29,7 @@ require_relative '../lib/zold/log'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestLog < Minitest::Test
32
+ class TestLog < Zold::Test
33
33
  def test_prints_from_many_threads
34
34
  Threads.new(20).assert do
35
35
  test_log.debug('How are you?')
@@ -28,7 +28,7 @@ require_relative '../lib/zold/metronome'
28
28
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
29
29
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
30
30
  # License:: MIT
31
- class TestMetronome < Minitest::Test
31
+ class TestMetronome < Zold::Test
32
32
  def test_start_and_stop
33
33
  metronome = Zold::Metronome.new(test_log)
34
34
  list = []
@@ -33,7 +33,7 @@ require_relative '../lib/zold/patch'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestPatch < Minitest::Test
36
+ class TestPatch < Zold::Test
37
37
  def test_builds_patch
38
38
  FakeHome.new(log: test_log).run do |home|
39
39
  first = home.create_wallet
@@ -32,7 +32,7 @@ require_relative '../lib/zold/prefixes'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestPrefixes < Minitest::Test
35
+ class TestPrefixes < Zold::Test
36
36
  def test_creates_and_validates
37
37
  FakeHome.new(log: test_log).run do |home|
38
38
  wallet = home.create_wallet
@@ -34,7 +34,7 @@ require_relative '../lib/zold/verbose_thread'
34
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
35
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
36
36
  # License:: MIT
37
- class TestRemotes < Minitest::Test
37
+ class TestRemotes < Zold::Test
38
38
  def test_adds_remotes
39
39
  Dir.mktmpdir do |dir|
40
40
  file = File.join(dir, 'remotes')
@@ -32,7 +32,7 @@ require_relative '../lib/zold/signature'
32
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
33
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
34
34
  # License:: MIT
35
- class TestSignature < Minitest::Test
35
+ class TestSignature < Zold::Test
36
36
  def test_signs_and_validates
37
37
  pvt = Zold::Key.new(file: 'fixtures/id_rsa')
38
38
  pub = Zold::Key.new(file: 'fixtures/id_rsa.pub')
@@ -27,7 +27,7 @@ require_relative '../lib/zold/size'
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
28
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
29
29
  # License:: MIT
30
- class TestSize < Minitest::Test
30
+ class TestSize < Zold::Test
31
31
  def test_prints_size
32
32
  assert_equal('?', Zold::Size.new(nil).to_s)
33
33
  assert_equal('10b', Zold::Size.new(10).to_s)
@@ -35,7 +35,7 @@ require_relative '../lib/zold/amount'
35
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
36
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
37
37
  # License:: MIT
38
- class TestSyncWallets < Minitest::Test
38
+ class TestSyncWallets < Zold::Test
39
39
  def test_adds_wallet
40
40
  FakeHome.new(log: test_log).run do |home|
41
41
  wallets = home.wallets
@@ -37,7 +37,7 @@ require_relative '../lib/zold/prefixes'
37
37
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
38
38
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
39
39
  # License:: MIT
40
- class TestTax < Minitest::Test
40
+ class TestTax < Zold::Test
41
41
  def test_print_fee
42
42
  test_log.info("Fee in zents: #{Zold::Tax::FEE.to_i}")
43
43
  end
@@ -31,7 +31,7 @@ require_relative '../lib/zold/tree_wallets'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestTreeWallets < Minitest::Test
34
+ class TestTreeWallets < Zold::Test
35
35
  def test_adds_wallet
36
36
  Dir.mktmpdir do |dir|
37
37
  wallets = Zold::TreeWallets.new(dir)
@@ -31,7 +31,7 @@ require_relative '../lib/zold/amount'
31
31
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
33
  # License:: MIT
34
- class TestTxn < Minitest::Test
34
+ class TestTxn < Zold::Test
35
35
  def test_prints_and_parses
36
36
  time = Time.now
37
37
  txn = Zold::Txn.parse(
@@ -29,7 +29,7 @@ require_relative '../lib/zold/version_file'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestUpgrades < Minitest::Test
32
+ class TestUpgrades < Zold::Test
33
33
  # @todo #327:30min Uncomment, when you're ready to work on upgrade manager's
34
34
  # test case of absent version file. Start with running the test first.
35
35
  def test_no_version_file_is_ok
@@ -28,7 +28,7 @@ require_relative '../lib/zold/verbose_thread'
28
28
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
29
29
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
30
30
  # License:: MIT
31
- class TestVerboseThread < Minitest::Test
31
+ class TestVerboseThread < Zold::Test
32
32
  def test_exceptions_are_logged
33
33
  assert_raises RuntimeError do
34
34
  Zold::VerboseThread.new(Zold::Log::Quiet.new).run do
@@ -4,7 +4,7 @@ require 'semantic'
4
4
  require 'zold/version'
5
5
  require 'minitest/autorun'
6
6
 
7
- class TestVersion < Minitest::Test
7
+ class TestVersion < Zold::Test
8
8
  def test_has_version
9
9
  assert Semantic::Version.new(Zold::VERSION)
10
10
  end
@@ -34,7 +34,7 @@ require_relative '../lib/zold/commands/pay'
34
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
35
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
36
36
  # License:: MIT
37
- class TestWallet < Minitest::Test
37
+ class TestWallet < Zold::Test
38
38
  def test_reads_empty_wallet
39
39
  FakeHome.new(log: test_log).run do |home|
40
40
  wallet = home.create_wallet
@@ -33,7 +33,7 @@ require_relative '../lib/zold/amount'
33
33
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
34
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
35
35
  # License:: MIT
36
- class TestWallets < Minitest::Test
36
+ class TestWallets < Zold::Test
37
37
  def test_adds_wallet
38
38
  FakeHome.new(log: test_log).run do |home|
39
39
  wallets = home.wallets
@@ -26,15 +26,16 @@ require 'open3'
26
26
  require 'English'
27
27
  require_relative 'test__helper'
28
28
  require_relative '../lib/zold/version'
29
+ require_relative '../lib/zold/age'
29
30
 
30
31
  # Zold main module test.
31
32
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
32
33
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
33
34
  # License:: MIT
34
- class TestZold < Minitest::Test
35
- def test_all_scripts
36
- Dir.new('fixtures/scripts').select { |f| f =~ /\.sh$/ && !f.start_with?('_') }.each do |f|
37
- # next unless f == 'push-and-pull.sh'
35
+ class TestZold < Zold::Test
36
+ Dir.new('fixtures/scripts').select { |f| f =~ /\.sh$/ && !f.start_with?('_') }.each do |f|
37
+ # next unless f == 'push-and-pull.sh'
38
+ define_method("test_script_#{f.gsub(/[^a-z]/, '_')}") do
38
39
  start = Time.now
39
40
  test_log.debug("\n\n#{f} running...")
40
41
  Dir.mktmpdir do |dir|
@@ -29,7 +29,7 @@ require_relative '../fake_home'
29
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
30
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
31
  # License:: MIT
32
- class TestProtocolUp < Minitest::Test
32
+ class TestProtocolUp < Zold::Test
33
33
  def test_upgrades_protocol_in_wallet
34
34
  FakeHome.new(log: test_log).run do |home|
35
35
  id = home.create_wallet.id
@@ -79,6 +79,7 @@ and suggests a different architecture for digital wallet maintenance.'
79
79
  s.add_runtime_dependency 'zold-score', '~>0'
80
80
  s.add_development_dependency 'codecov', '~>0'
81
81
  s.add_development_dependency 'minitest', '~>5'
82
+ s.add_development_dependency 'minitest-hooks', '~>1'
82
83
  s.add_development_dependency 'random-port', '~>0'
83
84
  s.add_development_dependency 'rdoc', '~>4'
84
85
  s.add_development_dependency 'rspec-rails', '~>3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.13
4
+ version: 0.16.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-05 00:00:00.000000000 Z
11
+ date: 2018-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
@@ -360,6 +360,20 @@ dependencies:
360
360
  - - "~>"
361
361
  - !ruby/object:Gem::Version
362
362
  version: '5'
363
+ - !ruby/object:Gem::Dependency
364
+ name: minitest-hooks
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - "~>"
368
+ - !ruby/object:Gem::Version
369
+ version: '1'
370
+ type: :development
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - "~>"
375
+ - !ruby/object:Gem::Version
376
+ version: '1'
363
377
  - !ruby/object:Gem::Dependency
364
378
  name: random-port
365
379
  requirement: !ruby/object:Gem::Requirement