zold 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|