zold 0.14.39 → 0.14.40

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13cff3999d82e0c3230da3fe717537fdef3337e4
4
- data.tar.gz: 307f20cb6d1cf11c963f94cae910540dac9f473a
3
+ metadata.gz: d7b45f4c26031db16e0648325a3bb697fd815f30
4
+ data.tar.gz: 4ef739093a92027005789d04be4b70e2607eed47
5
5
  SHA512:
6
- metadata.gz: bdcbe7adf732ea4aea112322a56420a1197aad5640dcd5f330ce3b0315be4021832aac1d5ed4e2d07642f141748b6e08ac7e52b1ad5085da2f5b12fabd7b0e56
7
- data.tar.gz: 379b7ec0f166019354cd3ea276edbd455baff582ea8ca3f024eb0b307d3a6e5485021a7cc3beea3eb6a59d13a0aa62bb6a4fd22e084bb654758f8bb1759b05fc
6
+ metadata.gz: aee52e4cd446e7c235f3edf8fbd4a0116772c02e0983e33f010424f286daa7fe6cfeae243d7d7d8cbef471c7a734bfb58464e9dc1a1a1d60196279885e891056
7
+ data.tar.gz: ad64f721708ac64e46ab64c3e3276cce4e429f6d98cf52b6d9d213f30f916060af9af49f85ffb000ec8c91797c34d731f4e78d8f29c23461c2ae7ba102ed3b6d
data/.rultor.yml CHANGED
@@ -3,6 +3,8 @@ assets:
3
3
  id_rsa: zerocracy/home#assets/heroku-key
4
4
  id_rsa.pub: zerocracy/home#assets/heroku-key.pub
5
5
  install: |
6
+ export GEM_HOME=~/.ruby
7
+ export GEM_PATH=$GEM_HOME:$GEM_PATH
6
8
  sudo apt-get -y update
7
9
  sudo gem install pdd
8
10
  release:
@@ -11,8 +13,8 @@ release:
11
13
  [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1
12
14
  rm -rf *.gem
13
15
  sed -i "s/0\.0\.0/${tag}/g" lib/zold/version.rb
14
- bundle install
15
- rake --quiet
16
+ bundle install --no-color
17
+ rake
16
18
  git add lib/zold/version.rb
17
19
  git commit -m "version set to ${tag}"
18
20
  gem build zold.gemspec
data/bin/zold CHANGED
@@ -176,6 +176,8 @@ Available options:"
176
176
  remotes = Zold::Remotes.new(file: File.join(zoldata, 'remotes'), network: opts['network'])
177
177
  copies = File.join(zoldata, 'copies')
178
178
 
179
+ log.debug("Network: #{opts['network']}")
180
+
179
181
  case command
180
182
  when 'node'
181
183
  require_relative '../lib/zold/commands/node'
@@ -104,10 +104,11 @@ Available options:"
104
104
  @log.debug("#{r} ignored because of --ignore-node")
105
105
  return 0
106
106
  end
107
- res = r.http("/wallet/#{id}").get
107
+ uri = "/wallet/#{id}"
108
+ res = r.http(uri).get
108
109
  raise "Wallet #{id} not found" if res.code == '404'
109
110
  r.assert_code(200, res)
110
- json = JsonPage.new(res.body).to_hash
111
+ json = JsonPage.new(res.body, uri).to_hash
111
112
  score = Score.parse_json(json['score'])
112
113
  r.assert_valid_score(score)
113
114
  r.assert_score_ownership(score)
@@ -78,7 +78,7 @@ Available options:"
78
78
  raise 'Amount is required (in ZLD) as the third argument' if mine[2].nil?
79
79
  amount = Amount.new(zld: mine[2].to_f)
80
80
  details = mine[3] || '-'
81
- taxes(id)
81
+ taxes(id, opts)
82
82
  @wallets.find(id) do |from|
83
83
  pay(from, invoice, amount, details, opts)
84
84
  end
@@ -89,7 +89,7 @@ Available options:"
89
89
 
90
90
  private
91
91
 
92
- def taxes(id)
92
+ def taxes(id, opts)
93
93
  debt = @wallets.find(id) do |wallet|
94
94
  raise "Wallet #{id} doesn't exist, do 'zold pull' first" unless wallet.exists?
95
95
  Tax.new(wallet).in_debt? && !opts['dont-pay-taxes']
@@ -91,7 +91,8 @@ total score for #{id} is #{total}")
91
91
  raise "The wallet #{id} is absent" unless wallet.exists?
92
92
  AtomicFile.new(wallet.path).read
93
93
  end
94
- response = r.http("/wallet/#{id}#{opts['sync'] ? '?sync=true' : ''}").put(content)
94
+ uri = "/wallet/#{id}"
95
+ response = r.http(uri).put(content)
95
96
  @wallets.find(id) do |wallet|
96
97
  if response.code == '304'
97
98
  @log.info("#{r}: same version #{content.length}b/#{wallet.txns.count}t \
@@ -99,7 +100,7 @@ of #{wallet.id} there, in #{(Time.now - start).round(2)}s")
99
100
  return 0
100
101
  end
101
102
  r.assert_code(200, response)
102
- json = JsonPage.new(response.body).to_hash
103
+ json = JsonPage.new(response.body, uri).to_hash
103
104
  score = Score.parse_json(json['score'])
104
105
  r.assert_valid_score(score)
105
106
  r.assert_score_ownership(score)
@@ -183,9 +183,10 @@ Available options:"
183
183
  def elect(opts)
184
184
  scores = []
185
185
  @remotes.iterate(@log, farm: @farm) do |r|
186
- res = r.http('/').get
186
+ uri = '/'
187
+ res = r.http(uri).get
187
188
  r.assert_code(200, res)
188
- json = JsonPage.new(res.body).to_hash
189
+ json = JsonPage.new(res.body, uri).to_hash
189
190
  score = Score.parse_json(json['score'])
190
191
  r.assert_valid_score(score)
191
192
  r.assert_score_ownership(score)
@@ -216,9 +217,10 @@ Available options:"
216
217
  capacity = []
217
218
  @remotes.iterate(@log, farm: @farm) do |r|
218
219
  start = Time.now
219
- res = r.http('/remotes').get
220
+ uri = '/remotes'
221
+ res = r.http(uri).get
220
222
  r.assert_code(200, res)
221
- json = JsonPage.new(res.body).to_hash
223
+ json = JsonPage.new(res.body, uri).to_hash
222
224
  score = Score.parse_json(json['score'])
223
225
  r.assert_valid_score(score)
224
226
  r.assert_score_ownership(score)
@@ -139,9 +139,10 @@ Available options:"
139
139
  def top_scores
140
140
  best = []
141
141
  @remotes.iterate(@log) do |r|
142
- res = r.http.get
142
+ uri = '/'
143
+ res = r.http(uri).get
143
144
  r.assert_code(200, res)
144
- json = JsonPage.new(res.body).to_hash
145
+ json = JsonPage.new(res.body, uri).to_hash
145
146
  score = Score.parse_json(json['score'])
146
147
  r.assert_valid_score(score)
147
148
  r.assert_score_strength(score)
data/lib/zold/gem.rb CHANGED
@@ -21,8 +21,9 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'uri'
24
- require 'net/http'
25
24
  require_relative 'json_page'
25
+ require_relative 'http'
26
+ require_relative 'score'
26
27
 
27
28
  # Class representing the Zold gem on Rubygems
28
29
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
@@ -31,16 +32,10 @@ require_relative 'json_page'
31
32
  module Zold
32
33
  # Gem
33
34
  class Gem
34
- BASE_URI = 'rubygems.org'
35
- API_VERSION = '/api/v1/'
36
-
37
35
  def last_version
38
- uri = URI(API_VERSION + 'versions/zold/latest.json')
39
- http = Net::HTTP.new(BASE_URI)
40
- path = uri.path
41
- path += '?' + uri.query if uri.query
42
- res = http.request_get(path)
43
- JsonPage.new(res.body).to_hash['version']
36
+ JsonPage.new(
37
+ Http.new(uri: 'https://rubygems.org/api/v1/versions/zold/latest.json', score: Score::ZERO).get.body
38
+ ).to_hash['version']
44
39
  end
45
40
  end
46
41
  end
data/lib/zold/http.rb CHANGED
@@ -25,7 +25,6 @@ require 'uri'
25
25
  require 'net/http'
26
26
  require_relative 'backtrace'
27
27
  require_relative 'version'
28
- require_relative 'score'
29
28
  require_relative 'type'
30
29
 
31
30
  # HTTP page.
@@ -72,6 +71,7 @@ module Zold
72
71
 
73
72
  def get
74
73
  http = Net::HTTP.new(uri.host, uri.port)
74
+ http.use_ssl = uri.scheme == 'https'
75
75
  http.read_timeout = Http::READ_TIMEOUT
76
76
  http.open_timeout = Http::CONNECT_TIMEOUT
77
77
  path = uri.path
@@ -83,6 +83,7 @@ module Zold
83
83
 
84
84
  def put(body)
85
85
  http = Net::HTTP.new(uri.host, uri.port)
86
+ http.use_ssl = uri.scheme == 'https'
86
87
  http.read_timeout = Http::READ_TIMEOUT
87
88
  http.open_timeout = Http::CONNECT_TIMEOUT
88
89
  path = uri.path
@@ -106,6 +107,10 @@ module Zold
106
107
  @ex = ex
107
108
  end
108
109
 
110
+ def to_s
111
+ "#{code}: #{message}\n#{body}"
112
+ end
113
+
109
114
  def body
110
115
  Backtrace.new(@ex).to_s
111
116
  end
@@ -29,17 +29,18 @@ require 'json'
29
29
  module Zold
30
30
  # JSON page
31
31
  class JsonPage
32
- def initialize(text)
32
+ def initialize(text, uri = '')
33
33
  raise 'JSON text can\'t be nil' if text.nil?
34
34
  raise 'JSON must be of type String' unless text.is_a?(String)
35
35
  @text = text
36
+ @uri = uri
36
37
  end
37
38
 
38
39
  def to_hash
39
- raise 'JSON is empty, can\'t parse' if @text.empty?
40
+ raise 'JSON is empty, can\'t parse' + (@uri.empty? ? '' : " at #{@uri}") if @text.empty?
40
41
  JSON.parse(@text)
41
42
  rescue JSON::ParserError => e
42
- raise "Failed to parse JSON (#{e.message}): #{@text}"
43
+ raise "Failed to parse JSON #{@uri.empty? ? '' : "at #{@uri}"} (#{e.message}): #{@text}"
43
44
  end
44
45
  end
45
46
  end
@@ -193,7 +193,7 @@ while #{settings.address} is in '#{settings.network}'"
193
193
  settings.wallets.find(id) do |wallet|
194
194
  error 404 unless wallet.exists?
195
195
  content_type 'application/json'
196
- {
196
+ JSON.pretty_generate(
197
197
  version: settings.version,
198
198
  alias: settings.node_alias,
199
199
  protocol: settings.protocol,
@@ -206,7 +206,7 @@ while #{settings.address} is in '#{settings.network}'"
206
206
  copies: Copies.new(File.join(settings.copies, id)).all.count,
207
207
  balance: wallet.balance.to_i,
208
208
  body: AtomicFile.new(wallet.path).read
209
- }.to_json
209
+ )
210
210
  end
211
211
  end
212
212
 
@@ -215,7 +215,7 @@ while #{settings.address} is in '#{settings.network}'"
215
215
  settings.wallets.find(id) do |wallet|
216
216
  error 404 unless wallet.exists?
217
217
  content_type 'application/json'
218
- {
218
+ JSON.pretty_generate(
219
219
  version: settings.version,
220
220
  alias: settings.node_alias,
221
221
  protocol: settings.protocol,
@@ -227,7 +227,7 @@ while #{settings.address} is in '#{settings.network}'"
227
227
  digest: wallet.digest,
228
228
  balance: wallet.balance.to_i,
229
229
  txns: wallet.txns.count
230
- }.to_json
230
+ )
231
231
  end
232
232
  end
233
233
 
@@ -350,7 +350,8 @@ while #{settings.address} is in '#{settings.network}'"
350
350
  version: settings.version,
351
351
  alias: settings.node_alias,
352
352
  score: score.to_h,
353
- all: settings.remotes.all
353
+ all: settings.remotes.all,
354
+ mtime: settings.remotes.mtime.utc.iso8601
354
355
  )
355
356
  end
356
357
 
data/lib/zold/remotes.rb CHANGED
@@ -39,7 +39,7 @@ require_relative 'type'
39
39
  # License:: MIT
40
40
  module Zold
41
41
  # All remotes
42
- class Remotes
42
+ class Remotes < Dry::Struct
43
43
  # The default TCP port all nodes are supposed to use.
44
44
  PORT = 4096
45
45
 
@@ -49,6 +49,13 @@ module Zold
49
49
  # Default number of nodes to fetch.
50
50
  MAX_NODES = 16
51
51
 
52
+ # Mutex object
53
+ MUTEX = Mutex.new
54
+
55
+ attribute :file, Types::Strict::String
56
+ attribute :network, Types::Strict::String.optional.default('test')
57
+ attribute :timeout, Types::Strict::Integer.optional.default(16)
58
+
52
59
  # Empty, for standalone mode
53
60
  class Empty < Remotes
54
61
  def all
@@ -58,13 +65,17 @@ module Zold
58
65
  def iterate(_)
59
66
  # Nothing to do here
60
67
  end
68
+
69
+ def mtime
70
+ Time.now
71
+ end
61
72
  end
62
73
 
63
74
  # One remote.
64
75
  class Remote < Dry::Struct
65
76
  attribute :host, Types::Strict::String
66
77
  attribute :port, Types::Strict::Integer.constrained(gteq: 0, lt: 65_535)
67
- attribute :score, Object
78
+ attribute :score, Score
68
79
  attribute :idx, Types::Strict::Integer
69
80
  attribute :network, Types::Strict::String.optional.default('test')
70
81
  attribute :log, (Types::Class.constructor do |value|
@@ -106,24 +117,15 @@ module Zold
106
117
  end
107
118
  end
108
119
 
109
- def initialize(file:, network: 'test', mutex: Mutex.new, timeout: 16)
110
- @file = file
111
- @network = network
112
- @mutex = mutex
113
- @timeout = timeout
114
- end
115
-
116
120
  def all
117
- @mutex.synchronize do
118
- list = load
119
- max_score = list.map { |r| r[:score] }.max || 0
120
- max_score = 1 if max_score.zero?
121
- max_errors = list.map { |r| r[:errors] }.max || 0
122
- max_errors = 1 if max_errors.zero?
123
- list.sort_by do |r|
124
- (1 - r[:errors] / max_errors) * 5 + (r[:score] / max_score)
125
- end.reverse
126
- end
121
+ list = load
122
+ max_score = list.map { |r| r[:score] }.max || 0
123
+ max_score = 1 if max_score.zero?
124
+ max_errors = list.map { |r| r[:errors] }.max || 0
125
+ max_errors = 1 if max_errors.zero?
126
+ list.sort_by do |r|
127
+ (1 - r[:errors] / max_errors) * 5 + (r[:score] / max_score)
128
+ end.reverse
127
129
  end
128
130
 
129
131
  def clean
@@ -131,10 +133,10 @@ module Zold
131
133
  end
132
134
 
133
135
  def reset
134
- FileUtils.mkdir_p(File.dirname(@file))
136
+ FileUtils.mkdir_p(File.dirname(file))
135
137
  FileUtils.copy(
136
138
  File.join(File.dirname(__FILE__), '../../resources/remotes'),
137
- @file
139
+ file
138
140
  )
139
141
  end
140
142
 
@@ -154,7 +156,7 @@ module Zold
154
156
  raise 'Port can\'t be negative' if port.negative?
155
157
  raise 'Port can\'t be over 65536' if port > 0xffff
156
158
  modify do |list|
157
- list + [{ host: host.downcase, port: port, score: 0 }]
159
+ list + [{ host: host.downcase, port: port, score: 0, errors: 0 }]
158
160
  end
159
161
  end
160
162
 
@@ -189,10 +191,10 @@ module Zold
189
191
  score: score,
190
192
  idx: idx,
191
193
  log: log,
192
- network: @network
194
+ network: network
193
195
  )
194
196
  idx += 1
195
- raise 'Took too long to execute' if (Time.now - start).round > @timeout
197
+ raise 'Took too long to execute' if (Time.now - start).round > timeout
196
198
  rescue StandardError => e
197
199
  error(r[:host], r[:port])
198
200
  log.info("#{Rainbow("#{r[:host]}:#{r[:port]}").red}: #{e.message} \
@@ -221,10 +223,14 @@ in #{(Time.now - start).round}s")
221
223
  if_present(host, port) { |r| r[:score] = score }
222
224
  end
223
225
 
226
+ def mtime
227
+ File.mtime(file)
228
+ end
229
+
224
230
  private
225
231
 
226
232
  def modify
227
- @mutex.synchronize do
233
+ Remotes::MUTEX.synchronize do
228
234
  save(yield(load))
229
235
  end
230
236
  end
@@ -239,13 +245,13 @@ in #{(Time.now - start).round}s")
239
245
  end
240
246
 
241
247
  def load
242
- reset unless File.exist?(@file)
243
- raw = CSV.read(@file).map do |r|
248
+ reset unless File.exist?(file)
249
+ raw = CSV.read(file).map do |row|
244
250
  {
245
- host: r[0],
246
- port: r[1].to_i,
247
- score: r[2].to_i,
248
- errors: r[3].to_i
251
+ host: row[0],
252
+ port: row[1].to_i,
253
+ score: row[2].to_i,
254
+ errors: row[3].to_i
249
255
  }
250
256
  end
251
257
  raw.reject { |r| !r[:host] || r[:port].zero? }.map do |r|
@@ -255,7 +261,7 @@ in #{(Time.now - start).round}s")
255
261
  end
256
262
 
257
263
  def save(list)
258
- AtomicFile.new(@file).write(
264
+ AtomicFile.new(file).write(
259
265
  list.uniq { |r| "#{r[:host]}:#{r[:port]}" }.map do |r|
260
266
  [
261
267
  r[:host],
data/lib/zold/score.rb CHANGED
@@ -22,7 +22,6 @@
22
22
 
23
23
  require 'openssl'
24
24
  require 'time'
25
- require_relative 'remotes'
26
25
  require_relative 'type'
27
26
 
28
27
  # The score.
data/lib/zold/version.rb CHANGED
@@ -25,6 +25,6 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.14.39'
28
+ VERSION = '0.14.40'
29
29
  PROTOCOL = 2
30
30
  end
data/resources/remotes CHANGED
File without changes
@@ -61,7 +61,7 @@ class TestRemote < Minitest::Test
61
61
  stub_request(:get, 'http://localhost:999/remotes').to_return(
62
62
  status: 404
63
63
  )
64
- stub_request(:get, 'http://rubygems.org/api/v1/versions/zold/latest.json').to_return(
64
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
65
65
  status: 200,
66
66
  body: '{"version": "0.0.0"}'
67
67
  )
@@ -90,7 +90,7 @@ class TestRemote < Minitest::Test
90
90
  ]
91
91
  }.to_json
92
92
  )
93
- stub_request(:get, 'http://rubygems.org/api/v1/versions/zold/latest.json').to_return(
93
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
94
94
  status: 200,
95
95
  body: '{"version": "9.9.9"}'
96
96
  )
@@ -101,7 +101,7 @@ class TestRemote < Minitest::Test
101
101
  cmd.run(['remote', 'update', '--ignore-score-weakness', '--skip-ping', '--reboot'])
102
102
  assert(log.msg.to_s.include?(', reboot!'))
103
103
  log.msg = []
104
- stub_request(:get, 'http://rubygems.org/api/v1/versions/zold/latest.json').to_return(
104
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
105
105
  status: 200,
106
106
  body: "{\"version\": \"#{Zold::VERSION}\"}"
107
107
  )
@@ -149,7 +149,7 @@ class TestRemote < Minitest::Test
149
149
  ]
150
150
  }.to_json
151
151
  )
152
- stub_request(:get, 'http://rubygems.org/api/v1/versions/zold/latest.json').to_return(
152
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
153
153
  status: 200,
154
154
  body: '{"version": "0.0.0"}'
155
155
  )
@@ -87,6 +87,11 @@ class FrontTest < Minitest::Test
87
87
  response = Zold::Http.new(uri: "http://localhost:#{port}/remotes", score: score).get
88
88
  assert_equal('200', response.code, response.body)
89
89
  assert_equal(1, Zold::JsonPage.new(response.body).to_hash['all'].count, response.body)
90
+ assert_match(
91
+ /(\d{4})-(\d{2})-(\d{2})T(\d{2})\:(\d{2})\:(\d{2})Z/,
92
+ Zold::JsonPage.new(response.body).to_hash['mtime'].to_s,
93
+ response.body
94
+ )
90
95
  end
91
96
  end
92
97
 
data/test/test_gem.rb CHANGED
@@ -6,12 +6,16 @@ require 'minitest/autorun'
6
6
 
7
7
  class TestGem < Minitest::Test
8
8
  def test_last_version
9
- gem = Zold::Gem.new
10
9
  version = (1..3).map { rand(9).to_s } .join('.')
11
- stub_request(:get, 'http://rubygems.org/api/v1/versions/zold/latest.json').to_return(
10
+ stub_request(:get, 'https://rubygems.org/api/v1/versions/zold/latest.json').to_return(
12
11
  status: 200,
13
12
  body: "{\"version\": \"#{version}\"}"
14
13
  )
15
- assert_equal(version, gem.last_version)
14
+ assert_equal(version, Zold::Gem.new.last_version)
15
+ end
16
+
17
+ def test_last_version_live
18
+ WebMock.allow_net_connect!
19
+ assert(!Zold::Gem.new.last_version.nil?)
16
20
  end
17
21
  end
data/test/test_remotes.rb CHANGED
@@ -173,6 +173,27 @@ class TestRemotes < Minitest::Test
173
173
  end
174
174
  end
175
175
 
176
+ def test_mtime
177
+ Dir.mktmpdir 'test' do |dir|
178
+ file = File.join(dir, 'remotes')
179
+ FileUtils.touch(file)
180
+ File.stub :mtime, Time.mktime(2018, 1, 1) do
181
+ remotes = Zold::Remotes.new(file: file)
182
+ remotes.add('127.0.0.1')
183
+ assert_equal(Time.mktime(2018, 1, 1), remotes.mtime)
184
+ end
185
+ end
186
+ end
187
+
188
+ def test_read_mtime_from_file
189
+ Dir.mktmpdir 'test' do |dir|
190
+ file = File.join(dir, 'remotes')
191
+ remotes = Zold::Remotes.new(file: file)
192
+ remotes.all
193
+ assert_equal(File.mtime(file).to_i, remotes.mtime.to_i)
194
+ end
195
+ end
196
+
176
197
  def test_adds_from_many_threads
177
198
  Dir.mktmpdir do |dir|
178
199
  remotes = Zold::Remotes.new(file: File.join(dir, 'xx.csv'))
@@ -202,8 +223,11 @@ class TestRemotes < Minitest::Test
202
223
  end
203
224
 
204
225
  def test_empty_remotes
205
- remotes = Zold::Remotes::Empty.new(file: '/tmp/empty')
206
- assert(remotes.is_a?(Zold::Remotes))
226
+ Time.stub :now, Time.mktime(2018, 1, 1) do
227
+ remotes = Zold::Remotes::Empty.new(file: '/tmp/empty')
228
+ assert_equal(Time.mktime(2018, 1, 1), remotes.mtime)
229
+ assert(remotes.is_a?(Zold::Remotes))
230
+ end
207
231
  end
208
232
 
209
233
  def test_reports_zold_error_header
@@ -222,4 +246,17 @@ class TestRemotes < Minitest::Test
222
246
  end
223
247
  end
224
248
  end
249
+
250
+ def test_manifests_correct_network_name
251
+ Dir.mktmpdir do |dir|
252
+ remotes = Zold::Remotes.new(file: File.join(dir, 'uu-083.csv'), network: 'x13')
253
+ remotes.clean
254
+ remotes.add('r5-example.org', 8080)
255
+ stub_request(:get, 'http://r5-example.org:8080/').to_return(status: 200)
256
+ remotes.iterate(test_log) do |r|
257
+ r.http.get
258
+ end
259
+ assert_requested(:get, 'http://r5-example.org:8080/', headers: { 'X-Zold-Network' => 'x13' })
260
+ end
261
+ end
225
262
  end
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.14.39
4
+ version: 0.14.40
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-09-18 00:00:00.000000000 Z
11
+ date: 2018-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cachy
@@ -606,7 +606,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
606
606
  version: '0'
607
607
  requirements: []
608
608
  rubyforge_project:
609
- rubygems_version: 2.6.8
609
+ rubygems_version: 2.5.2
610
610
  signing_key:
611
611
  specification_version: 2
612
612
  summary: A fast cryptocurrency for micro payments