zold 0.16.13 → 0.16.14

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.
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