zold 0.32.0 → 0.32.1

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/lib/zold/version.rb +1 -1
  4. data/zold.gemspec +1 -1
  5. metadata +2 -168
  6. data/.0pdd.yml +0 -12
  7. data/.gitattributes +0 -9
  8. data/.github/typos.toml +0 -11
  9. data/.github/workflows/actionlint.yml +0 -25
  10. data/.github/workflows/bashate.yml +0 -25
  11. data/.github/workflows/codecov.yml +0 -27
  12. data/.github/workflows/copyrights.yml +0 -15
  13. data/.github/workflows/hadolint.yml +0 -14
  14. data/.github/workflows/markdown-lint.yml +0 -19
  15. data/.github/workflows/pdd.yml +0 -19
  16. data/.github/workflows/rake.yml +0 -31
  17. data/.github/workflows/reuse.yml +0 -19
  18. data/.github/workflows/shellcheck.yml +0 -19
  19. data/.github/workflows/typos.yml +0 -21
  20. data/.github/workflows/xcop.yml +0 -15
  21. data/.github/workflows/yamllint.yml +0 -19
  22. data/.gitignore +0 -15
  23. data/.pdd +0 -7
  24. data/.rubocop.yml +0 -66
  25. data/.ruby-version +0 -1
  26. data/.rultor.yml +0 -41
  27. data/cucumber.yml +0 -6
  28. data/features/cli.feature +0 -18
  29. data/features/gem_package.feature +0 -28
  30. data/features/step_definitions/steps.rb +0 -67
  31. data/features/support/env.rb +0 -9
  32. data/fixtures/448b451bc62e8e16.z +0 -1005
  33. data/fixtures/id_rsa +0 -51
  34. data/fixtures/id_rsa-2 +0 -51
  35. data/fixtures/id_rsa-2.pub +0 -1
  36. data/fixtures/id_rsa.pub +0 -1
  37. data/fixtures/keys/1.pub +0 -1
  38. data/fixtures/keys/2 +0 -51
  39. data/fixtures/keys/2.pub +0 -1
  40. data/fixtures/merge/asserts.rb +0 -20
  41. data/fixtures/merge/id_rsa +0 -51
  42. data/fixtures/merge/id_rsa.pub +0 -1
  43. data/fixtures/merge/into_no_wallet/assert.rb +0 -8
  44. data/fixtures/merge/into_no_wallet/copies/0123456789abcdef/1.zc +0 -6
  45. data/fixtures/merge/into_no_wallet/copies/0123456789abcdef/scores.zc +0 -1
  46. data/fixtures/merge/into_no_wallet/opts +0 -1
  47. data/fixtures/merge/legacy_negatives_stay/0123456789abcdef.z +0 -6
  48. data/fixtures/merge/legacy_negatives_stay/assert.rb +0 -8
  49. data/fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/1.zc +0 -6
  50. data/fixtures/merge/legacy_negatives_stay/copies/0123456789abcdef/scores.zc +0 -1
  51. data/fixtures/merge/legacy_negatives_stay/opts +0 -2
  52. data/fixtures/merge/missed_wallets/0000000000000000.z +0 -6
  53. data/fixtures/merge/missed_wallets/0123456789abcdef.z +0 -4
  54. data/fixtures/merge/missed_wallets/assert.rb +0 -8
  55. data/fixtures/merge/missed_wallets/copies/0123456789abcdef/1.zc +0 -8
  56. data/fixtures/merge/missed_wallets/copies/0123456789abcdef/scores.zc +0 -1
  57. data/fixtures/merge/missed_wallets/opts +0 -3
  58. data/fixtures/merge/negative_overwriting/0123456789abcdef.z +0 -6
  59. data/fixtures/merge/negative_overwriting/146b852f2d9ad984.z +0 -6
  60. data/fixtures/merge/negative_overwriting/assert.rb +0 -8
  61. data/fixtures/merge/negative_overwriting/copies/0123456789abcdef/1.zc +0 -6
  62. data/fixtures/merge/negative_overwriting/copies/0123456789abcdef/scores.zc +0 -1
  63. data/fixtures/merge/negative_overwriting/opts +0 -2
  64. data/fixtures/merge/negatives_in_between/0000000000000000.z +0 -6
  65. data/fixtures/merge/negatives_in_between/0123456789abcdef.z +0 -4
  66. data/fixtures/merge/negatives_in_between/assert.rb +0 -8
  67. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/1.zc +0 -6
  68. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/2.zc +0 -6
  69. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/3.zc +0 -6
  70. data/fixtures/merge/negatives_in_between/copies/0123456789abcdef/scores.zc +0 -3
  71. data/fixtures/merge/negatives_in_between/opts +0 -1
  72. data/fixtures/merge/random_expenses/0000000000000000.z +0 -6
  73. data/fixtures/merge/random_expenses/0123456789abcdef.z +0 -6
  74. data/fixtures/merge/random_expenses/assert.rb +0 -8
  75. data/fixtures/merge/random_expenses/copies/0123456789abcdef/1.zc +0 -7
  76. data/fixtures/merge/random_expenses/copies/0123456789abcdef/2.zc +0 -7
  77. data/fixtures/merge/random_expenses/copies/0123456789abcdef/3.zc +0 -7
  78. data/fixtures/merge/random_expenses/copies/0123456789abcdef/4.zc +0 -7
  79. data/fixtures/merge/random_expenses/copies/0123456789abcdef/5.zc +0 -7
  80. data/fixtures/merge/random_expenses/copies/0123456789abcdef/scores.zc +0 -5
  81. data/fixtures/merge/random_expenses/opts +0 -1
  82. data/fixtures/merge/simple_case/0000000000000000.z +0 -6
  83. data/fixtures/merge/simple_case/0123456789abcdef.z +0 -4
  84. data/fixtures/merge/simple_case/assert.rb +0 -8
  85. data/fixtures/merge/simple_case/copies/0123456789abcdef/1.zc +0 -6
  86. data/fixtures/merge/simple_case/copies/0123456789abcdef/scores.zc +0 -1
  87. data/fixtures/merge/simple_case/opts +0 -1
  88. data/fixtures/merge/unconfirmed_income/0123456789abcdef.z +0 -4
  89. data/fixtures/merge/unconfirmed_income/assert.rb +0 -8
  90. data/fixtures/merge/unconfirmed_income/copies/0123456789abcdef/1.zc +0 -6
  91. data/fixtures/merge/unconfirmed_income/copies/0123456789abcdef/scores.zc +0 -1
  92. data/fixtures/merge/unconfirmed_income/opts +0 -3
  93. data/fixtures/scripts/_head.sh +0 -72
  94. data/fixtures/scripts/calculate-scores.sh +0 -5
  95. data/fixtures/scripts/distribute-wallet.sh +0 -88
  96. data/fixtures/scripts/print-helps.sh +0 -9
  97. data/fixtures/scripts/pull-on-start.sh +0 -35
  98. data/fixtures/scripts/push-and-pull.sh +0 -46
  99. data/fixtures/scripts/redeploy-on-upgrade.sh +0 -40
  100. data/fixtures/scripts/spread-wallets.sh +0 -56
  101. data/renovate.json +0 -6
  102. data/test/commands/routines/test_audit.rb +0 -23
  103. data/test/commands/routines/test_gc.rb +0 -52
  104. data/test/commands/routines/test_reconcile.rb +0 -33
  105. data/test/commands/routines/test_reconnect.rb +0 -28
  106. data/test/commands/routines/test_retire.rb +0 -22
  107. data/test/commands/test_alias.rb +0 -58
  108. data/test/commands/test_calculate.rb +0 -22
  109. data/test/commands/test_clean.rb +0 -55
  110. data/test/commands/test_create.rb +0 -32
  111. data/test/commands/test_diff.rb +0 -43
  112. data/test/commands/test_fetch.rb +0 -144
  113. data/test/commands/test_invoice.rb +0 -32
  114. data/test/commands/test_list.rb +0 -29
  115. data/test/commands/test_merge.rb +0 -106
  116. data/test/commands/test_node.rb +0 -50
  117. data/test/commands/test_pay.rb +0 -203
  118. data/test/commands/test_propagate.rb +0 -33
  119. data/test/commands/test_pull.rb +0 -52
  120. data/test/commands/test_push.rb +0 -75
  121. data/test/commands/test_remote.rb +0 -247
  122. data/test/commands/test_remove.rb +0 -48
  123. data/test/commands/test_show.rb +0 -30
  124. data/test/commands/test_taxes.rb +0 -58
  125. data/test/fake_home.rb +0 -87
  126. data/test/node/fake_entrance.rb +0 -26
  127. data/test/node/fake_node.rb +0 -88
  128. data/test/node/test_async_entrance.rb +0 -85
  129. data/test/node/test_entrance.rb +0 -64
  130. data/test/node/test_farm.rb +0 -159
  131. data/test/node/test_farmers.rb +0 -58
  132. data/test/node/test_front.rb +0 -379
  133. data/test/node/test_nodup_entrance.rb +0 -31
  134. data/test/node/test_nospam_entrance.rb +0 -31
  135. data/test/node/test_safe_entrance.rb +0 -41
  136. data/test/node/test_spread_entrance.rb +0 -49
  137. data/test/node/test_sync_entrance.rb +0 -23
  138. data/test/node/test_trace.rb +0 -18
  139. data/test/test__helper.rb +0 -113
  140. data/test/test_age.rb +0 -37
  141. data/test/test_amount.rb +0 -62
  142. data/test/test_cached_wallets.rb +0 -55
  143. data/test/test_copies.rb +0 -127
  144. data/test/test_dir_items.rb +0 -72
  145. data/test/test_gem.rb +0 -23
  146. data/test/test_hands.rb +0 -51
  147. data/test/test_hexnum.rb +0 -18
  148. data/test/test_http.rb +0 -207
  149. data/test/test_hungry_wallets.rb +0 -72
  150. data/test/test_id.rb +0 -61
  151. data/test/test_json_page.rb +0 -29
  152. data/test/test_key.rb +0 -81
  153. data/test/test_metronome.rb +0 -71
  154. data/test/test_patch.rb +0 -160
  155. data/test/test_prefixes.rb +0 -31
  156. data/test/test_remotes.rb +0 -301
  157. data/test/test_signature.rb +0 -31
  158. data/test/test_size.rb +0 -21
  159. data/test/test_sync_wallets.rb +0 -39
  160. data/test/test_tax.rb +0 -153
  161. data/test/test_thread_pool.rb +0 -71
  162. data/test/test_tree_wallets.rb +0 -65
  163. data/test/test_txn.rb +0 -71
  164. data/test/test_upgrades.rb +0 -81
  165. data/test/test_verbose_thread.rb +0 -37
  166. data/test/test_version.rb +0 -17
  167. data/test/test_wallet.rb +0 -300
  168. data/test/test_wallets.rb +0 -67
  169. data/test/test_zold.rb +0 -81
  170. data/test/upgrades/test_delete_banned_wallets.rb +0 -29
  171. data/test/upgrades/test_protocol_up.rb +0 -24
data/test/test_remotes.rb DELETED
@@ -1,301 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'tmpdir'
7
- require 'webmock/minitest'
8
- require 'threads'
9
- require_relative 'test__helper'
10
- require 'loog'
11
- require_relative '../lib/zold/age'
12
- require_relative '../lib/zold/remotes'
13
- require_relative '../lib/zold/verbose_thread'
14
-
15
- # Remotes test.
16
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
17
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
18
- # License:: MIT
19
- class TestRemotes < Zold::Test
20
- def test_adds_remotes
21
- Dir.mktmpdir do |dir|
22
- file = File.join(dir, 'remotes')
23
- FileUtils.touch(file)
24
- remotes = Zold::Remotes.new(file: file)
25
- remotes.add('127.0.0.1')
26
- assert_equal(1, remotes.all.count)
27
- end
28
- end
29
-
30
- def test_finds_masters
31
- Dir.mktmpdir do |dir|
32
- file = File.join(dir, 'remotes')
33
- FileUtils.touch(file)
34
- remotes = Zold::Remotes.new(file: file)
35
- assert(remotes.master?('b2.zold.io', 4096))
36
- end
37
- end
38
-
39
- def test_reads_broken_file
40
- Dir.mktmpdir do |dir|
41
- file = File.join(dir, 'remotes')
42
- [
43
- ',0,0,0',
44
- 'some garbage',
45
- '',
46
- "\n\n\n\n"
47
- ].each do |t|
48
- File.write(file, t)
49
- remotes = Zold::Remotes.new(file: file)
50
- assert_empty(remotes.all, remotes.all)
51
- end
52
- end
53
- end
54
-
55
- def test_iterates_and_fails
56
- Dir.mktmpdir do |dir|
57
- file = File.join(dir, 'remotes')
58
- FileUtils.touch(file)
59
- remotes = Zold::Remotes.new(file: file)
60
- ips = (0..50)
61
- ips.each { |i| remotes.add("0.0.0.#{i + 1}", 9999) }
62
- remotes.iterate(Loog::NULL) { raise 'Intended' }
63
- ips.each { |i| assert_equal(1, remotes.all[i][:errors]) }
64
- end
65
- end
66
-
67
- def test_iterates_all_failures
68
- Dir.mktmpdir do |dir|
69
- file = File.join(dir, 'remotes')
70
- FileUtils.touch(file)
71
- remotes = Zold::Remotes.new(file: file)
72
- 5.times { |i| remotes.add("0.0.0.#{i + 1}", 9999) }
73
- total = 0
74
- remotes.iterate(Loog::NULL) do
75
- total += 1
76
- raise 'Intended'
77
- end
78
- assert_equal(5, total)
79
- end
80
- end
81
-
82
- def test_closes_threads_carefully
83
- Dir.mktmpdir do |dir|
84
- file = File.join(dir, 'remotes')
85
- FileUtils.touch(file)
86
- remotes = Zold::Remotes.new(file: file)
87
- 5.times { |i| remotes.add("0.0.0.#{i + 1}", 9999) }
88
- total = 0
89
- remotes.iterate(Loog::NULL) do
90
- sleep 0.25
91
- total += 1
92
- end
93
- assert_equal(5, total)
94
- end
95
- end
96
-
97
- def test_iterates_them_all_even_with_delays
98
- Dir.mktmpdir do |dir|
99
- remotes = Zold::Remotes.new(file: File.join(dir, 'rrr.csv'))
100
- remotes.clean
101
- 5.times { |i| remotes.add("0.0.0.#{i + 1}", 8080) }
102
- total = 0
103
- remotes.iterate(fake_log) do
104
- sleep 0.25
105
- total += 1
106
- end
107
- assert_equal(5, total)
108
- end
109
- end
110
-
111
- def fake_log_msg_of_iterates_when_fail
112
- Dir.mktmpdir do |dir|
113
- file = File.join(dir, 'remotes')
114
- FileUtils.touch(file)
115
- remotes = Zold::Remotes.new(file: file)
116
- remotes.add('0.0.0.1', 9999)
117
- log = TestLogger.new
118
- remotes.iterate(log) { raise 'Intended' }
119
- assert(log.msgs.find { |m| m.include?(' in ') })
120
- end
121
- end
122
-
123
- def fake_log_msg_of_iterates_when_take_too_long
124
- Dir.mktmpdir do |dir|
125
- file = File.join(dir, 'remotes')
126
- FileUtils.touch(file)
127
- remotes = Zold::Remotes.new(file: file, timeout: 1)
128
- remotes.add('127.0.0.1')
129
- log = TestLogger.new
130
- remotes.iterate(log) { sleep(2) }
131
- assert(log.msgs.find { |m| m.include?('Took too long to execute') })
132
- end
133
- end
134
-
135
- def test_removes_remotes
136
- Dir.mktmpdir do |dir|
137
- file = File.join(dir, 'remotes')
138
- FileUtils.touch(file)
139
- remotes = Zold::Remotes.new(file: file)
140
- remotes.add('127.0.0.1')
141
- remotes.add('LOCALHOST', 433)
142
- remotes.remove('localhost', 433)
143
- assert_equal(1, remotes.all.count)
144
- end
145
- end
146
-
147
- def test_resets_remotes
148
- Dir.mktmpdir do |dir|
149
- remotes = Zold::Remotes.new(file: File.join(dir, 'remotes'))
150
- remotes.clean
151
- remotes.masters
152
- remotes.masters
153
- refute_empty(remotes.all)
154
- end
155
- end
156
-
157
- def test_modifies_score
158
- Dir.mktmpdir do |dir|
159
- file = File.join(dir, 'remotes')
160
- FileUtils.touch(file)
161
- remotes = Zold::Remotes.new(file: file)
162
- remotes.add('127.0.0.1', 1024)
163
- remotes.rescore('127.0.0.1', 1024, 15)
164
- remotes.all.each do |r|
165
- assert_equal(15, r[:score])
166
- assert_equal('http://127.0.0.1:1024/', r[:home].to_s)
167
- end
168
- end
169
- end
170
-
171
- def test_tolerates_invalid_requests
172
- Dir.mktmpdir do |dir|
173
- file = File.join(dir, 'remotes')
174
- remotes = Zold::Remotes.new(file: file)
175
- remotes.error('127.0.0.1', 1024)
176
- remotes.rescore('127.0.0.1', 1024, 15)
177
- end
178
- end
179
-
180
- def test_modifies_from_many_threads
181
- Dir.mktmpdir do |dir|
182
- remotes = Zold::Remotes.new(file: File.join(dir, 'a.csv'))
183
- remotes.clean
184
- host = '192.168.0.1'
185
- remotes.add(host)
186
- Threads.new(5).assert do
187
- remotes.error(host)
188
- end
189
- assert_equal(0, remotes.all.count { |r| r[:host] != host })
190
- end
191
- end
192
-
193
- def test_mtime
194
- Dir.mktmpdir 'test' do |dir|
195
- file = File.join(dir, 'remotes')
196
- FileUtils.touch(file)
197
- File.stub :mtime, Time.mktime(2018, 1, 1) do
198
- remotes = Zold::Remotes.new(file: file)
199
- remotes.add('127.0.0.1')
200
- assert_equal(Time.mktime(2018, 1, 1), remotes.mtime)
201
- end
202
- end
203
- end
204
-
205
- def test_read_mtime_from_file
206
- Dir.mktmpdir 'test' do |dir|
207
- file = File.join(dir, 'a/b/c/remotes')
208
- remotes = Zold::Remotes.new(file: file)
209
- remotes.clean
210
- assert_equal(File.mtime(file).to_i, remotes.mtime.to_i)
211
- end
212
- end
213
-
214
- def test_adds_from_many_threads
215
- Dir.mktmpdir do |dir|
216
- remotes = Zold::Remotes.new(file: File.join(dir, 'xx.csv'))
217
- remotes.clean
218
- host = '127.0.0.1'
219
- Threads.new(2).assert(100) do |_, r|
220
- port = 8080 + r
221
- remotes.add(host, port)
222
- remotes.error(host, port)
223
- assert(remotes.all.find { |x| x[:port] == port })
224
- end
225
- assert_equal(100, remotes.all.count)
226
- end
227
- end
228
-
229
- def test_quickly_ads_and_reads
230
- Dir.mktmpdir do |dir|
231
- remotes = Zold::Remotes.new(file: File.join(dir, 'uu-90.csv'))
232
- remotes.clean
233
- start = Time.now
234
- 100.times { |i| remotes.add('192.168.0.1', 8080 + i) }
235
- Threads.new(4).assert(10) do |t|
236
- remotes.add('127.0.0.1', 8080 + t)
237
- remotes.error('127.0.0.1', 8080 + t)
238
- remotes.all
239
- remotes.iterate(fake_log) { remotes.all }
240
- remotes.remove('127.0.0.1', 8080 + t)
241
- end
242
- fake_log.info("Total time: #{Zold::Age.new(start)}")
243
- end
244
- end
245
-
246
- def test_unerror_remote
247
- Dir.mktmpdir do |dir|
248
- remotes = Zold::Remotes.new(file: File.join(dir, 'uu-90.csv'))
249
- remotes.clean
250
- remotes.add('192.168.0.1', 8081)
251
- assert_equal 0, remotes.all.last[:errors]
252
- remotes.error('192.168.0.1', 8081)
253
- assert_equal 1, remotes.all.last[:errors]
254
- remotes.unerror('192.168.0.1', 8081)
255
- assert_equal 0, remotes.all.last[:errors]
256
- end
257
- end
258
-
259
- def test_empty_remotes
260
- Time.stub :now, Time.mktime(2018, 1, 1) do
261
- remotes = Zold::Remotes::Empty.new
262
- assert_equal(Time.mktime(2018, 1, 1), remotes.mtime)
263
- end
264
- end
265
-
266
- def test_reads_mtime_from_empty_file
267
- Dir.mktmpdir do |dir|
268
- refute_nil(Zold::Remotes.new(file: File.join(dir, 'file/is/absent')).mtime)
269
- end
270
- end
271
-
272
- def test_reports_zold_error_header
273
- Dir.mktmpdir do |dir|
274
- remotes = Zold::Remotes.new(file: File.join(dir, 'uu-90.csv'))
275
- remotes.clean
276
- remotes.add('11a-example.org', 8080)
277
- stub_request(:get, 'http://11a-example.org:8080/').to_return(
278
- status: 500,
279
- headers: {
280
- 'X-Zold-Error': 'hey you'
281
- }
282
- )
283
- remotes.iterate(fake_log) do |r|
284
- r.assert_code(200, r.http.get)
285
- end
286
- end
287
- end
288
-
289
- def test_manifests_correct_network_name
290
- Dir.mktmpdir do |dir|
291
- remotes = Zold::Remotes.new(file: File.join(dir, 'uu-083.csv'), network: 'x13')
292
- remotes.clean
293
- remotes.add('r5-example.org', 8080)
294
- stub_request(:get, 'http://r5-example.org:8080/').to_return(status: 200)
295
- remotes.iterate(fake_log) do |r|
296
- r.http.get
297
- end
298
- assert_requested(:get, 'http://r5-example.org:8080/', headers: { 'X-Zold-Network' => 'x13' })
299
- end
300
- end
301
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'tmpdir'
7
- require_relative 'test__helper'
8
- require_relative '../lib/zold/key'
9
- require_relative '../lib/zold/id'
10
- require_relative '../lib/zold/txn'
11
- require_relative '../lib/zold/amount'
12
- require_relative '../lib/zold/signature'
13
-
14
- # Signature test.
15
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
16
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
17
- # License:: MIT
18
- class TestSignature < Zold::Test
19
- def test_signs_and_validates
20
- pvt = Zold::Key.new(file: 'fixtures/id_rsa')
21
- pub = Zold::Key.new(file: 'fixtures/id_rsa.pub')
22
- txn = Zold::Txn.new(
23
- 123, Time.now, Zold::Amount.new(zld: 14.95),
24
- 'NOPREFIX', Zold::Id.new, 'hello, world!'
25
- )
26
- id = Zold::Id.new
27
- txn = txn.signed(pvt, id)
28
- assert_equal(684, txn.sign.length)
29
- assert(Zold::Signature.new.valid?(pub, id, txn))
30
- end
31
- end
data/test/test_size.rb DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require_relative 'test__helper'
7
- require_relative '../lib/zold/size'
8
-
9
- # Size test.
10
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
11
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
12
- # License:: MIT
13
- class TestSize < Zold::Test
14
- def test_prints_size
15
- assert_equal('?', Zold::Size.new(nil).to_s)
16
- assert_equal('10b', Zold::Size.new(10).to_s)
17
- assert_equal('2Kb', Zold::Size.new(2 * 1024).to_s)
18
- assert_equal('9Mb', Zold::Size.new(9 * 1024 * 1024).to_s)
19
- assert_equal('7Gb', Zold::Size.new(7 * 1024 * 1024 * 1024).to_s)
20
- end
21
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'concurrent'
7
- require 'threads'
8
- require_relative 'test__helper'
9
- require_relative 'fake_home'
10
- require_relative '../lib/zold/key'
11
- require_relative '../lib/zold/id'
12
- require_relative '../lib/zold/wallets'
13
- require_relative '../lib/zold/sync_wallets'
14
- require_relative '../lib/zold/amount'
15
-
16
- # SyncWallets test.
17
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
18
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
19
- # License:: MIT
20
- class TestSyncWallets < Zold::Test
21
- def test_adds_wallet
22
- FakeHome.new(log: fake_log).run do |home|
23
- wallets = home.wallets
24
- id = Zold::Id.new
25
- home.create_wallet(id)
26
- key = Zold::Key.new(file: 'fixtures/id_rsa')
27
- amount = Zold::Amount.new(zld: 5.0)
28
- Threads.new(5).assert(100) do
29
- wallets.acq(id, exclusive: true) do |wallet|
30
- wallet.sub(amount, "NOPREFIX@#{Zold::Id.new}", key)
31
- wallet.refurbish
32
- end
33
- end
34
- # assert_equal_wait(amount * -100, max: 4) do
35
- # wallets.acq(id, &:balance)
36
- # end
37
- end
38
- end
39
- end
data/test/test_tax.rb DELETED
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'zold/score'
7
- require 'time'
8
- require_relative 'test__helper'
9
- require_relative 'fake_home'
10
- require_relative '../lib/zold/id'
11
- require_relative '../lib/zold/txn'
12
- require_relative '../lib/zold/wallet'
13
- require_relative '../lib/zold/tax'
14
- require_relative '../lib/zold/key'
15
- require_relative '../lib/zold/amount'
16
- require_relative '../lib/zold/prefixes'
17
-
18
- # Tax test.
19
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
20
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
21
- # License:: MIT
22
- class TestTax < Zold::Test
23
- def test_print_fee
24
- fake_log.info("Fee in zents: #{Zold::Tax::FEE.to_i}")
25
- end
26
-
27
- def test_calculates_tax_for_one_year
28
- FakeHome.new(log: fake_log).run do |home|
29
- wallet = home.create_wallet
30
- a = 10_000
31
- wallet.add(
32
- Zold::Txn.new(
33
- 1,
34
- Time.now - (a * 60 * 60),
35
- Zold::Amount.new(zld: 19.99),
36
- 'NOPREFIX', Zold::Id.new, '-'
37
- )
38
- )
39
- tax = Zold::Tax.new(wallet)
40
- assert_equal(Zold::Tax::FEE * a, tax.debt, tax.to_text)
41
- end
42
- end
43
-
44
- def test_calculates_debt
45
- FakeHome.new(log: fake_log).run do |home|
46
- wallet = home.create_wallet
47
- (1..30).each do |i|
48
- wallet.add(
49
- Zold::Txn.new(
50
- i + 1,
51
- Time.now - (24 * 60 * 60 * 365 * 10),
52
- Zold::Amount.new(zld: i.to_f),
53
- 'NOPREFIX', Zold::Id.new, '-'
54
- )
55
- )
56
- end
57
- score = Zold::Score.new(
58
- host: 'localhost', port: 80, invoice: 'NOPREFIX@cccccccccccccccc',
59
- suffixes: %w[A B C D E F G H I J K L M N O P Q R S T U V]
60
- )
61
- tax = Zold::Tax.new(wallet)
62
- debt = tax.debt
63
- txn = tax.pay(Zold::Key.new(file: 'fixtures/id_rsa'), score)
64
- assert_equal(debt, txn.amount * -1)
65
- end
66
- end
67
-
68
- def test_prints_tax_formula
69
- FakeHome.new(log: fake_log).run do |home|
70
- wallet = home.create_wallet
71
- tax = Zold::Tax.new(wallet)
72
- refute_nil(tax.to_text)
73
- end
74
- end
75
-
76
- def test_takes_tax_payment_into_account
77
- FakeHome.new(log: fake_log).run do |home|
78
- wallet = home.create_wallet
79
- amount = Zold::Amount.new(zents: 95_596_800)
80
- wallet.add(
81
- Zold::Txn.new(
82
- 1,
83
- Time.now,
84
- amount * -1,
85
- 'NOPREFIX', Zold::Id.new('912ecc24b32dbe74'),
86
- "TAXES 6 5b5a21a9 b2.zold.io 1000 DCexx0hG 912ecc24b32dbe74 \
87
- 386d4a ec9eae 306e3d 119d073 1c00dba 1376703 203589 5b55f7"
88
- )
89
- )
90
- tax = Zold::Tax.new(wallet, strength: 6)
91
- assert_equal(amount, tax.paid)
92
- assert_operator(tax.debt, :<, Zold::Amount::ZERO, tax.debt)
93
- end
94
- end
95
-
96
- def test_filters_out_incoming_payments
97
- FakeHome.new(log: fake_log).run do |home|
98
- wallet = home.create_wallet
99
- amount = Zold::Amount.new(zents: 95_596_800)
100
- prefix = Zold::Prefixes.new(wallet).create(8)
101
- score = Zold::Score.new(
102
- time: Time.now, host: 'localhost', port: 4096,
103
- invoice: "#{prefix}@#{wallet.id}", strength: 1
104
- )
105
- wallet.add(
106
- Zold::Txn.new(
107
- 1,
108
- Time.now,
109
- amount,
110
- 'NOPREFIX', Zold::Id.new('0000111122223333'),
111
- "TAXES #{score}"
112
- )
113
- )
114
- wallet.add(
115
- Zold::Txn.new(
116
- 2,
117
- Time.now,
118
- amount * -1,
119
- 'NOPREFIX', Zold::Id.new('912ecc24b32dbe74'),
120
- "TAXES 6 5b5a21a9 b2.zold.io 1000 DCexx0hG 912ecc24b32dbe74 \
121
- 386d4a ec9eae 306e3d 119d073 1c00dba 1376703 203589 5b55f7"
122
- )
123
- )
124
- tax = Zold::Tax.new(wallet, strength: 6, ignore_score_weakness: true)
125
- assert_equal(amount, tax.paid)
126
- # assert(tax.debt < Zold::Amount::ZERO, tax.debt)
127
- end
128
- end
129
-
130
- def test_checks_existence_of_duplicates
131
- FakeHome.new(log: fake_log).run do |home|
132
- wallet = home.create_wallet
133
- wallet.add(
134
- Zold::Txn.new(
135
- 1,
136
- Time.now - (24 * 60 * 60 * 365),
137
- Zold::Amount.new(zld: 19.99),
138
- 'NOPREFIX', Zold::Id.new, '-'
139
- )
140
- )
141
- target = home.create_wallet
142
- invoice = "#{Zold::Prefixes.new(target).create}@#{target.id}"
143
- tax = Zold::Tax.new(wallet)
144
- score = Zold::Score.new(
145
- host: 'localhost', port: 80, invoice: invoice,
146
- suffixes: %w[A B C D E F G H I J K L M N O P Q R S T U V]
147
- )
148
- tax.pay(Zold::Key.new(file: 'fixtures/id_rsa'), score)
149
- assert(tax.exists?(tax.details(score)))
150
- refute(tax.exists?('-'))
151
- end
152
- end
153
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'concurrent'
7
- require_relative 'test__helper'
8
- require_relative '../lib/zold/thread_pool'
9
-
10
- # ThreadPool test.
11
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
12
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
13
- # License:: MIT
14
- class TestThreadPool < Zold::Test
15
- def test_closes_all_threads_right
16
- pool = Zold::ThreadPool.new('test', log: fake_log)
17
- idx = Concurrent::AtomicFixnum.new
18
- threads = 50
19
- threads.times do
20
- pool.add do
21
- idx.increment
22
- end
23
- end
24
- pool.kill
25
- assert_equal(threads, idx.value)
26
- end
27
-
28
- def test_adds_and_stops
29
- pool = Zold::ThreadPool.new('test', log: fake_log)
30
- pool.add do
31
- sleep 60 * 60
32
- end
33
- pool.kill
34
- end
35
-
36
- def test_stops_stuck_threads
37
- pool = Zold::ThreadPool.new('test', log: fake_log)
38
- pool.add do
39
- loop do
40
- # forever
41
- end
42
- end
43
- pool.kill
44
- end
45
-
46
- def test_stops_empty_pool
47
- pool = Zold::ThreadPool.new('test', log: fake_log)
48
- pool.kill
49
- end
50
-
51
- def test_prints_to_json
52
- pool = Zold::ThreadPool.new('test', log: fake_log)
53
- pool.add do
54
- Thread.current.thread_variable_set(:foo, 1)
55
- loop do
56
- # forever
57
- end
58
- end
59
- assert_kind_of(Array, pool.to_json)
60
- assert_equal('test', pool.to_json[0][:name])
61
- assert_equal('run', pool.to_json[0][:status])
62
- assert(pool.to_json[0][:alive])
63
- assert_equal(1, pool.to_json[0][:vars]['foo'])
64
- pool.kill
65
- end
66
-
67
- def test_prints_to_text
68
- pool = Zold::ThreadPool.new('test', log: fake_log)
69
- refute_nil(pool.to_s)
70
- end
71
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # SPDX-FileCopyrightText: Copyright (c) 2018-2025 Zerocracy
4
- # SPDX-License-Identifier: MIT
5
-
6
- require 'tmpdir'
7
- require_relative 'test__helper'
8
- require_relative '../lib/zold/wallet'
9
- require_relative '../lib/zold/key'
10
- require_relative '../lib/zold/id'
11
- require_relative '../lib/zold/tree_wallets'
12
-
13
- # TreeWallets test.
14
- # Author:: Yegor Bugayenko (yegor256@gmail.com)
15
- # Copyright:: Copyright (c) 2018-2025 Zerocracy
16
- # License:: MIT
17
- class TestTreeWallets < Zold::Test
18
- def test_adds_wallet
19
- Dir.mktmpdir do |dir|
20
- wallets = Zold::TreeWallets.new(dir)
21
- id = Zold::Id.new('abcd0123abcd0123')
22
- wallets.acq(id, exclusive: true) do |wallet|
23
- wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
24
- assert(wallet.path.end_with?('/a/b/c/d/abcd0123abcd0123.z'))
25
- end
26
- assert_equal(1, wallets.all.count)
27
- assert_equal(id, wallets.all[0])
28
- end
29
- end
30
-
31
- def test_adds_many_wallets
32
- Dir.mktmpdir do |dir|
33
- wallets = Zold::TreeWallets.new(dir)
34
- 10.times do
35
- id = Zold::Id.new
36
- wallets.acq(id, exclusive: true) do |wallet|
37
- wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
38
- end
39
- end
40
- assert_equal(10, wallets.all.count)
41
- end
42
- end
43
-
44
- def test_count_tree_wallets
45
- files = [
46
- "0000111122223333#{Zold::Wallet::EXT}",
47
- "a/b/d/e/0000111122223333#{Zold::Wallet::EXT}",
48
- "a/b/0000111122223333#{Zold::Wallet::EXT}"
49
- ]
50
- garbage = [
51
- '0000111122223333',
52
- '0000111122223333.lock',
53
- 'a/b/c-0000111122223333'
54
- ]
55
- Dir.mktmpdir do |dir|
56
- (files + garbage).each do |f|
57
- path = File.join(dir, f)
58
- FileUtils.mkdir_p(File.dirname(path))
59
- FileUtils.touch(path)
60
- end
61
- wallets = Zold::TreeWallets.new(dir)
62
- assert_equal(files.count, wallets.count)
63
- end
64
- end
65
- end