zold 0.15.0 → 0.16.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/zold +9 -6
- data/features/gem_package.feature +1 -1
- data/features/step_definitions/steps.rb +2 -2
- data/fixtures/merge/into-no-wallet/assert.rb +1 -1
- data/fixtures/merge/random-expenses/assert.rb +1 -1
- data/fixtures/merge/simple-case/assert.rb +1 -1
- data/lib/zold/age.rb +16 -8
- data/lib/zold/amount.rb +4 -2
- data/lib/zold/cached_wallets.rb +5 -6
- data/lib/zold/commands/clean.rb +15 -8
- data/lib/zold/commands/diff.rb +3 -3
- data/lib/zold/commands/fetch.rb +4 -4
- data/lib/zold/commands/list.rb +5 -4
- data/lib/zold/commands/merge.rb +2 -1
- data/lib/zold/commands/node.rb +14 -12
- data/lib/zold/commands/propagate.rb +2 -2
- data/lib/zold/commands/push.rb +3 -3
- data/lib/zold/commands/remove.rb +4 -1
- data/lib/zold/commands/routines/reconnect.rb +1 -0
- data/lib/zold/copies.rb +13 -14
- data/lib/zold/dir_items.rb +44 -0
- data/lib/zold/head.rb +1 -1
- data/lib/zold/key.rb +2 -2
- data/lib/zold/log.rb +2 -0
- data/lib/zold/node/async_entrance.rb +38 -28
- data/lib/zold/node/entrance.rb +4 -11
- data/lib/zold/node/farm.rb +9 -9
- data/lib/zold/node/front.rb +40 -25
- data/lib/zold/node/nodup_entrance.rb +4 -4
- data/lib/zold/node/safe_entrance.rb +2 -2
- data/lib/zold/node/spread_entrance.rb +5 -9
- data/lib/zold/node/sync_entrance.rb +2 -23
- data/lib/zold/patch.rb +2 -2
- data/lib/zold/remotes.rb +10 -6
- data/lib/zold/sync_wallets.rb +3 -22
- data/lib/zold/tree_wallets.rb +11 -6
- data/lib/zold/txns.rb +1 -1
- data/lib/zold/version.rb +1 -1
- data/lib/zold/wallet.rb +14 -5
- data/lib/zold/wallets.rb +5 -4
- data/test/commands/routines/test_spread.rb +1 -1
- data/test/commands/test_alias.rb +4 -4
- data/test/commands/test_clean.rb +14 -1
- data/test/commands/test_create.rb +2 -2
- data/test/commands/test_diff.rb +5 -5
- data/test/commands/test_fetch.rb +2 -2
- data/test/commands/test_merge.rb +19 -19
- data/test/commands/test_node.rb +1 -1
- data/test/commands/test_pay.rb +7 -6
- data/test/commands/test_propagate.rb +2 -1
- data/test/commands/test_pull.rb +1 -1
- data/test/commands/test_push.rb +1 -1
- data/test/commands/test_remove.rb +57 -0
- data/test/commands/test_taxes.rb +1 -1
- data/test/fake_home.rb +11 -8
- data/test/node/fake_node.rb +2 -2
- data/test/node/test_async_entrance.rb +24 -8
- data/test/node/test_emission.rb +2 -2
- data/test/node/test_entrance.rb +8 -6
- data/test/node/test_farm.rb +1 -1
- data/test/node/test_front.rb +42 -33
- data/test/node/test_nodup_entrance.rb +2 -2
- data/test/node/test_safe_entrance.rb +5 -5
- data/test/node/test_spread_entrance.rb +3 -3
- data/test/node/test_sync_entrance.rb +1 -1
- data/test/test__helper.rb +3 -29
- data/test/test_cached_wallets.rb +1 -1
- data/test/test_copies.rb +4 -2
- data/test/test_dir_items.rb +88 -0
- data/test/test_key.rb +2 -2
- data/test/test_log.rb +38 -0
- data/test/test_patch.rb +11 -11
- data/test/test_prefixes.rb +1 -1
- data/test/test_remotes.rb +12 -6
- data/test/test_sync_wallets.rb +6 -6
- data/test/test_tax.rb +4 -4
- data/test/test_tree_wallets.rb +16 -2
- data/test/test_wallet.rb +26 -26
- data/test/test_wallets.rb +5 -2
- data/test/test_zold.rb +2 -2
- data/test/upgrades/test_protocol_up.rb +1 -1
- data/upgrades/move_wallets_into_tree.rb +1 -1
- data/upgrades/protocol_up.rb +3 -3
- data/upgrades/rename_foreign_wallets.rb +1 -1
- data/zold.gemspec +27 -25
- metadata +91 -56
data/test/test_key.rb
CHANGED
@@ -56,9 +56,9 @@ class TestKey < Minitest::Test
|
|
56
56
|
Dir.mktmpdir do |dir|
|
57
57
|
key = OpenSSL::PKey::RSA.new(2048)
|
58
58
|
file = File.join(dir, 'temp')
|
59
|
-
|
59
|
+
IO.write(file, key.public_key.to_s)
|
60
60
|
pub = Zold::Key.new(file: file)
|
61
|
-
|
61
|
+
IO.write(file, key.to_s)
|
62
62
|
pvt = Zold::Key.new(file: file)
|
63
63
|
text = 'How are you doing, dude?'
|
64
64
|
signature = pvt.sign(text)
|
data/test/test_log.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright (c) 2018 Yegor Bugayenko
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in all
|
13
|
+
# copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
22
|
+
|
23
|
+
require 'minitest/autorun'
|
24
|
+
require 'threads'
|
25
|
+
require_relative 'test__helper'
|
26
|
+
require_relative '../lib/zold/log'
|
27
|
+
|
28
|
+
# Log test.
|
29
|
+
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
30
|
+
# Copyright:: Copyright (c) 2018 Yegor Bugayenko
|
31
|
+
# License:: MIT
|
32
|
+
class TestLog < Minitest::Test
|
33
|
+
def test_prints_from_many_threads
|
34
|
+
Threads.new(20).assert do
|
35
|
+
test_log.debug('How are you?')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/test/test_patch.rb
CHANGED
@@ -35,17 +35,17 @@ require_relative '../lib/zold/patch'
|
|
35
35
|
# License:: MIT
|
36
36
|
class TestPatch < Minitest::Test
|
37
37
|
def test_builds_patch
|
38
|
-
FakeHome.new.run do |home|
|
38
|
+
FakeHome.new(log: test_log).run do |home|
|
39
39
|
first = home.create_wallet
|
40
40
|
second = home.create_wallet
|
41
41
|
third = home.create_wallet
|
42
|
-
|
42
|
+
IO.write(second.path, IO.read(first.path))
|
43
43
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
44
44
|
first.sub(Zold::Amount.new(zld: 39.0), "NOPREFIX@#{Zold::Id.new}", key)
|
45
45
|
first.sub(Zold::Amount.new(zld: 11.0), "NOPREFIX@#{Zold::Id.new}", key)
|
46
46
|
first.sub(Zold::Amount.new(zld: 3.0), "NOPREFIX@#{Zold::Id.new}", key)
|
47
47
|
second.sub(Zold::Amount.new(zld: 44.0), "NOPREFIX@#{Zold::Id.new}", key)
|
48
|
-
|
48
|
+
IO.write(third.path, IO.read(first.path))
|
49
49
|
t = third.sub(Zold::Amount.new(zld: 10.0), "NOPREFIX@#{Zold::Id.new}", key)
|
50
50
|
third.add(t.inverse(Zold::Id.new))
|
51
51
|
patch = Zold::Patch.new(home.wallets, log: test_log)
|
@@ -59,10 +59,10 @@ class TestPatch < Minitest::Test
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_rejects_fake_positives
|
62
|
-
FakeHome.new.run do |home|
|
62
|
+
FakeHome.new(log: test_log).run do |home|
|
63
63
|
first = home.create_wallet
|
64
64
|
second = home.create_wallet
|
65
|
-
|
65
|
+
IO.write(second.path, IO.read(first.path))
|
66
66
|
second.add(Zold::Txn.new(1, Time.now, Zold::Amount.new(zld: 11.0), 'NOPREFIX', Zold::Id.new, 'fake'))
|
67
67
|
patch = Zold::Patch.new(home.wallets, log: test_log)
|
68
68
|
patch.join(first)
|
@@ -74,10 +74,10 @@ class TestPatch < Minitest::Test
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_accepts_negative_balance_in_root_wallet
|
77
|
-
FakeHome.new.run do |home|
|
77
|
+
FakeHome.new(log: test_log).run do |home|
|
78
78
|
first = home.create_wallet(Zold::Id::ROOT)
|
79
79
|
second = home.create_wallet
|
80
|
-
|
80
|
+
IO.write(second.path, IO.read(first.path))
|
81
81
|
amount = Zold::Amount.new(zld: 333.0)
|
82
82
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
83
83
|
second.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
|
@@ -91,10 +91,10 @@ class TestPatch < Minitest::Test
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_merges_similar_ids_but_different_signs
|
94
|
-
FakeHome.new.run do |home|
|
94
|
+
FakeHome.new(log: test_log).run do |home|
|
95
95
|
first = home.create_wallet(Zold::Id::ROOT)
|
96
96
|
second = home.create_wallet
|
97
|
-
|
97
|
+
IO.write(second.path, IO.read(first.path))
|
98
98
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
99
99
|
second.sub(Zold::Amount.new(zld: 7.0), "NOPREFIX@#{Zold::Id.new}", key)
|
100
100
|
first.add(Zold::Txn.new(1, Time.now, Zold::Amount.new(zld: 9.0), 'NOPREFIX', Zold::Id.new, 'fake'))
|
@@ -108,10 +108,10 @@ class TestPatch < Minitest::Test
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def test_merges_fragmented_parts
|
111
|
-
FakeHome.new.run do |home|
|
111
|
+
FakeHome.new(log: test_log).run do |home|
|
112
112
|
first = home.create_wallet(Zold::Id::ROOT)
|
113
113
|
second = home.create_wallet
|
114
|
-
|
114
|
+
IO.write(second.path, IO.read(first.path))
|
115
115
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
116
116
|
start = Time.parse('2017-07-19T21:24:51Z')
|
117
117
|
first.add(
|
data/test/test_prefixes.rb
CHANGED
@@ -34,7 +34,7 @@ require_relative '../lib/zold/prefixes'
|
|
34
34
|
# License:: MIT
|
35
35
|
class TestPrefixes < Minitest::Test
|
36
36
|
def test_creates_and_validates
|
37
|
-
FakeHome.new.run do |home|
|
37
|
+
FakeHome.new(log: test_log).run do |home|
|
38
38
|
wallet = home.create_wallet
|
39
39
|
prefixes = Zold::Prefixes.new(wallet)
|
40
40
|
(8..32).each do |len|
|
data/test/test_remotes.rb
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
require 'minitest/autorun'
|
24
24
|
require 'tmpdir'
|
25
25
|
require 'webmock/minitest'
|
26
|
+
require 'threads'
|
26
27
|
require_relative 'test__helper'
|
27
28
|
require_relative '../lib/zold/log'
|
28
29
|
require_relative '../lib/zold/age'
|
@@ -62,7 +63,7 @@ class TestRemotes < Minitest::Test
|
|
62
63
|
'',
|
63
64
|
"\n\n\n\n"
|
64
65
|
].each do |t|
|
65
|
-
|
66
|
+
IO.write(file, t)
|
66
67
|
remotes = Zold::Remotes.new(file: file)
|
67
68
|
assert(remotes.all.empty?, remotes.all)
|
68
69
|
end
|
@@ -167,7 +168,7 @@ class TestRemotes < Minitest::Test
|
|
167
168
|
remotes.clean
|
168
169
|
host = '192.168.0.1'
|
169
170
|
remotes.add(host)
|
170
|
-
|
171
|
+
Threads.new(5).assert do
|
171
172
|
remotes.error(host)
|
172
173
|
end
|
173
174
|
assert_equal(0, remotes.all.reject { |r| r[:host] == host }.size)
|
@@ -199,7 +200,7 @@ class TestRemotes < Minitest::Test
|
|
199
200
|
Dir.mktmpdir do |dir|
|
200
201
|
remotes = Zold::Remotes.new(file: File.join(dir, 'xx.csv'))
|
201
202
|
remotes.clean
|
202
|
-
|
203
|
+
Threads.new(5).assert do |t|
|
203
204
|
remotes.add('127.0.0.1', 8080 + t)
|
204
205
|
end
|
205
206
|
assert_equal(5, remotes.all.count)
|
@@ -212,7 +213,7 @@ class TestRemotes < Minitest::Test
|
|
212
213
|
remotes.clean
|
213
214
|
start = Time.now
|
214
215
|
100.times { |i| remotes.add('192.168.0.1', 8080 + i) }
|
215
|
-
|
216
|
+
Threads.new(4).assert(10) do |t|
|
216
217
|
remotes.add('127.0.0.1', 8080 + t)
|
217
218
|
remotes.error('127.0.0.1', 8080 + t)
|
218
219
|
remotes.all
|
@@ -225,9 +226,14 @@ class TestRemotes < Minitest::Test
|
|
225
226
|
|
226
227
|
def test_empty_remotes
|
227
228
|
Time.stub :now, Time.mktime(2018, 1, 1) do
|
228
|
-
remotes = Zold::Remotes::Empty.new
|
229
|
+
remotes = Zold::Remotes::Empty.new
|
229
230
|
assert_equal(Time.mktime(2018, 1, 1), remotes.mtime)
|
230
|
-
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_reads_mtime_from_empty_file
|
235
|
+
Dir.mktmpdir do |dir|
|
236
|
+
assert(!Zold::Remotes.new(file: File.join(dir, 'file/is/absent')).mtime.nil?)
|
231
237
|
end
|
232
238
|
end
|
233
239
|
|
data/test/test_sync_wallets.rb
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
require 'minitest/autorun'
|
24
24
|
require 'concurrent'
|
25
|
+
require 'threads'
|
25
26
|
require_relative 'test__helper'
|
26
27
|
require_relative 'fake_home'
|
27
28
|
require_relative '../lib/zold/key'
|
@@ -36,22 +37,21 @@ require_relative '../lib/zold/amount'
|
|
36
37
|
# License:: MIT
|
37
38
|
class TestSyncWallets < Minitest::Test
|
38
39
|
def test_adds_wallet
|
39
|
-
FakeHome.new.run do |home|
|
40
|
+
FakeHome.new(log: test_log).run do |home|
|
40
41
|
wallets = home.wallets
|
41
42
|
id = Zold::Id.new
|
42
43
|
home.create_wallet(id)
|
43
44
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
44
45
|
amount = Zold::Amount.new(zld: 5.0)
|
45
|
-
|
46
|
+
Threads.new(5).assert(100) do
|
46
47
|
wallets.find(id) do |wallet|
|
47
48
|
wallet.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
|
48
49
|
wallet.refurbish
|
49
50
|
end
|
50
51
|
end
|
51
|
-
assert_equal_wait(amount * -
|
52
|
-
|
53
|
-
end
|
54
|
-
assert_equal(5, Dir.new(wallets.path).count)
|
52
|
+
# assert_equal_wait(amount * -100, max: 4) do
|
53
|
+
# wallets.find(id, &:balance)
|
54
|
+
# end
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/test/test_tax.rb
CHANGED
@@ -43,7 +43,7 @@ class TestTax < Minitest::Test
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_calculates_tax_for_one_year
|
46
|
-
FakeHome.new.run do |home|
|
46
|
+
FakeHome.new(log: test_log).run do |home|
|
47
47
|
wallet = home.create_wallet
|
48
48
|
wallet.add(
|
49
49
|
Zold::Txn.new(
|
@@ -60,7 +60,7 @@ class TestTax < Minitest::Test
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_calculates_debt
|
63
|
-
FakeHome.new.run do |home|
|
63
|
+
FakeHome.new(log: test_log).run do |home|
|
64
64
|
wallet = home.create_wallet
|
65
65
|
(1..30).each do |i|
|
66
66
|
wallet.add(
|
@@ -83,7 +83,7 @@ class TestTax < Minitest::Test
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def test_takes_tax_payment_into_account
|
86
|
-
FakeHome.new.run do |home|
|
86
|
+
FakeHome.new(log: test_log).run do |home|
|
87
87
|
wallet = home.create_wallet
|
88
88
|
wallet.add(
|
89
89
|
Zold::Txn.new(
|
@@ -101,7 +101,7 @@ class TestTax < Minitest::Test
|
|
101
101
|
end
|
102
102
|
|
103
103
|
def test_checks_existence_of_duplicates
|
104
|
-
FakeHome.new.run do |home|
|
104
|
+
FakeHome.new(log: test_log).run do |home|
|
105
105
|
wallet = home.create_wallet
|
106
106
|
wallet.add(
|
107
107
|
Zold::Txn.new(
|
data/test/test_tree_wallets.rb
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
require 'minitest/autorun'
|
24
24
|
require 'tmpdir'
|
25
|
+
require_relative 'test__helper'
|
25
26
|
require_relative '../lib/zold/key'
|
26
27
|
require_relative '../lib/zold/id'
|
27
28
|
require_relative '../lib/zold/tree_wallets'
|
@@ -37,10 +38,23 @@ class TestTreeWallets < Minitest::Test
|
|
37
38
|
id = Zold::Id.new('abcd0123abcd0123')
|
38
39
|
wallets.find(id) do |wallet|
|
39
40
|
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
40
|
-
assert_equal(1, wallets.all.count)
|
41
|
-
assert_equal(id, wallets.all[0])
|
42
41
|
assert(wallet.path.end_with?('/a/b/c/d/abcd0123abcd0123.z'), wallet.path)
|
43
42
|
end
|
43
|
+
assert_equal(1, wallets.all.count)
|
44
|
+
assert_equal(id, wallets.all[0])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_adds_many_wallets
|
49
|
+
Dir.mktmpdir do |dir|
|
50
|
+
wallets = Zold::TreeWallets.new(dir)
|
51
|
+
10.times do
|
52
|
+
id = Zold::Id.new
|
53
|
+
wallets.find(id) do |wallet|
|
54
|
+
wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
assert_equal(10, wallets.all.count)
|
44
58
|
end
|
45
59
|
end
|
46
60
|
end
|
data/test/test_wallet.rb
CHANGED
@@ -36,7 +36,7 @@ require_relative '../lib/zold/commands/pay'
|
|
36
36
|
# License:: MIT
|
37
37
|
class TestWallet < Minitest::Test
|
38
38
|
def test_reads_empty_wallet
|
39
|
-
FakeHome.new.run do |home|
|
39
|
+
FakeHome.new(log: test_log).run do |home|
|
40
40
|
wallet = home.create_wallet
|
41
41
|
assert(wallet.txns.empty?)
|
42
42
|
assert_equal(Zold::Amount::ZERO, wallet.balance)
|
@@ -45,7 +45,7 @@ class TestWallet < Minitest::Test
|
|
45
45
|
|
46
46
|
def test_reads_large_wallet
|
47
47
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
48
|
-
FakeHome.new.run do |home|
|
48
|
+
FakeHome.new(log: test_log).run do |home|
|
49
49
|
wallet = home.create_wallet(Zold::Id.new('448b451bc62e8e16'))
|
50
50
|
FileUtils.cp('fixtures/448b451bc62e8e16.z', wallet.path)
|
51
51
|
start = Time.now
|
@@ -57,7 +57,7 @@ class TestWallet < Minitest::Test
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_adds_transaction
|
60
|
-
FakeHome.new.run do |home|
|
60
|
+
FakeHome.new(log: test_log).run do |home|
|
61
61
|
wallet = home.create_wallet
|
62
62
|
amount = Zold::Amount.new(zld: 39.99)
|
63
63
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
@@ -72,7 +72,7 @@ class TestWallet < Minitest::Test
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_adds_similar_transaction
|
75
|
-
FakeHome.new.run do |home|
|
75
|
+
FakeHome.new(log: test_log).run do |home|
|
76
76
|
wallet = home.create_wallet
|
77
77
|
amount = Zold::Amount.new(zld: 39.99)
|
78
78
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
@@ -90,7 +90,7 @@ class TestWallet < Minitest::Test
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def test_checks_similar_transaction
|
93
|
-
FakeHome.new.run do |home|
|
93
|
+
FakeHome.new(log: test_log).run do |home|
|
94
94
|
wallet = home.create_wallet
|
95
95
|
amount = Zold::Amount.new(zld: 39.99)
|
96
96
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
@@ -103,32 +103,32 @@ class TestWallet < Minitest::Test
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def test_refurbishes_wallet
|
106
|
-
FakeHome.new.run do |home|
|
106
|
+
FakeHome.new(log: test_log).run do |home|
|
107
107
|
wallet = home.create_wallet
|
108
108
|
amount = Zold::Amount.new(zld: 5.99)
|
109
109
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
110
110
|
wallet.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
|
111
111
|
wallet.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
|
112
|
-
before =
|
113
|
-
|
112
|
+
before = IO.read(wallet.path)
|
113
|
+
IO.write(wallet.path, IO.read(wallet.path) + "\n\n\n")
|
114
114
|
wallet.refurbish
|
115
115
|
assert_equal(amount * -2, wallet.balance)
|
116
|
-
assert_equal(before,
|
116
|
+
assert_equal(before, IO.read(wallet.path))
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
120
|
def test_refurbishes_empty_wallet
|
121
|
-
FakeHome.new.run do |home|
|
121
|
+
FakeHome.new(log: test_log).run do |home|
|
122
122
|
wallet = home.create_wallet
|
123
|
-
before =
|
124
|
-
|
123
|
+
before = IO.read(wallet.path)
|
124
|
+
IO.write(wallet.path, IO.read(wallet.path) + "\n\n\n")
|
125
125
|
wallet.refurbish
|
126
|
-
assert_equal(before,
|
126
|
+
assert_equal(before, IO.read(wallet.path))
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
130
|
def test_positive_transactions_go_first
|
131
|
-
FakeHome.new.run do |home|
|
131
|
+
FakeHome.new(log: test_log).run do |home|
|
132
132
|
wallet = home.create_wallet
|
133
133
|
time = Time.now
|
134
134
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
@@ -141,7 +141,7 @@ class TestWallet < Minitest::Test
|
|
141
141
|
end
|
142
142
|
|
143
143
|
def test_validate_key_on_payment
|
144
|
-
FakeHome.new.run do |home|
|
144
|
+
FakeHome.new(log: test_log).run do |home|
|
145
145
|
wallet = home.create_wallet
|
146
146
|
amount = Zold::Amount.new(zld: 39.99)
|
147
147
|
key = Zold::Key.new(file: 'fixtures/id_rsa-2')
|
@@ -152,7 +152,7 @@ class TestWallet < Minitest::Test
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def test_adds_transaction_and_reads_back
|
155
|
-
FakeHome.new.run do |home|
|
155
|
+
FakeHome.new(log: test_log).run do |home|
|
156
156
|
wallet = home.create_wallet
|
157
157
|
amount = Zold::Amount.new(zld: 39.99)
|
158
158
|
key = Zold::Key.new(file: 'fixtures/id_rsa')
|
@@ -163,7 +163,7 @@ class TestWallet < Minitest::Test
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def test_calculates_wallet_age_in_hours
|
166
|
-
FakeHome.new.run do |home|
|
166
|
+
FakeHome.new(log: test_log).run do |home|
|
167
167
|
wallet = home.create_wallet
|
168
168
|
hours = 100
|
169
169
|
wallet.add(
|
@@ -179,28 +179,28 @@ class TestWallet < Minitest::Test
|
|
179
179
|
end
|
180
180
|
|
181
181
|
def test_returns_modified_time
|
182
|
-
FakeHome.new.run do |home|
|
182
|
+
FakeHome.new(log: test_log).run do |home|
|
183
183
|
wallet = home.create_wallet
|
184
184
|
assert(wallet.mtime > Time.now - 60 * 60)
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
188
|
def test_returns_digest
|
189
|
-
FakeHome.new.run do |home|
|
189
|
+
FakeHome.new(log: test_log).run do |home|
|
190
190
|
wallet = home.create_wallet
|
191
191
|
assert_equal(64, wallet.digest.length)
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
195
|
def test_returns_protocol
|
196
|
-
FakeHome.new.run do |home|
|
196
|
+
FakeHome.new(log: test_log).run do |home|
|
197
197
|
wallet = home.create_wallet
|
198
198
|
assert_equal(Zold::PROTOCOL, wallet.protocol)
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
202
|
def test_iterates_income_transactions
|
203
|
-
FakeHome.new.run do |home|
|
203
|
+
FakeHome.new(log: test_log).run do |home|
|
204
204
|
wallet = home.create_wallet
|
205
205
|
wallet.add(
|
206
206
|
Zold::Txn.new(
|
@@ -226,7 +226,7 @@ class TestWallet < Minitest::Test
|
|
226
226
|
end
|
227
227
|
|
228
228
|
def test_sorts_them_always_right
|
229
|
-
FakeHome.new.run do |home|
|
229
|
+
FakeHome.new(log: test_log).run do |home|
|
230
230
|
time = Time.now
|
231
231
|
txns = []
|
232
232
|
50.times do
|
@@ -238,18 +238,18 @@ class TestWallet < Minitest::Test
|
|
238
238
|
)
|
239
239
|
end
|
240
240
|
wallet = home.create_wallet
|
241
|
-
empty =
|
241
|
+
empty = IO.read(wallet.path)
|
242
242
|
text = ''
|
243
243
|
10.times do
|
244
|
-
|
244
|
+
IO.write(wallet.path, empty)
|
245
245
|
txns.shuffle!
|
246
246
|
txns.each { |t| wallet.add(t) }
|
247
247
|
wallet.refurbish
|
248
248
|
if text.empty?
|
249
|
-
text =
|
249
|
+
text = IO.read(wallet.path)
|
250
250
|
next
|
251
251
|
end
|
252
|
-
assert_equal(text,
|
252
|
+
assert_equal(text, IO.read(wallet.path))
|
253
253
|
end
|
254
254
|
end
|
255
255
|
end
|