zold-score 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68392cfa1c2e06dd6c73d634175ee5b9be791022bfe1aa1a4a8cbad3162473d2
4
- data.tar.gz: f28d302d34fe57cf1aa6012e5e7a3af4f275f383118aa993196b3a5b19e95d81
3
+ metadata.gz: 3e8e3611ae87c09e55eb4f6ca4d9f2480d8247bae57009ec55cf4d3cdc44f097
4
+ data.tar.gz: 785e1f097278534c39d6bfad528138f0b16ee84041c27962dfdaebf81ef9b6b7
5
5
  SHA512:
6
- metadata.gz: dfd692c492b853c62786c0a88a8bbca50cd32e61ed544e877689c5b62ac61a2d3f01f1ce1d0690a32a7ecde3ebcd6f18827db92f6411e55d7e574b4dc485f0bc
7
- data.tar.gz: f6cef47b4f15809ee287a9a8097dd2a8999eba7fa13e7187da060f1e1cf610737394c1eb01b8a276625a256cf98abd9590cc99983ef4c1d58ae112a72ab29480
6
+ metadata.gz: 0b1e6c40f46bdcb1149ebca1b95e30806535d25257410ca6d98ed30d2d8d1ae2a73e079d4c5960f9d3bced6058b4c7d890f80d2297d848afc2865ac44ff082ff
7
+ data.tar.gz: 12822784b61069fbec36a2258658e4fb5536a67878eeb31b3e555aeac8a8a80b149c94bc275a9df6d6338d4ef3c4efe34711486eb85b6412d3a17ded0565357b
data/.rubocop.yml CHANGED
@@ -2,12 +2,16 @@ AllCops:
2
2
  DisplayCopNames: true
3
3
  TargetRubyVersion: 2.3.3
4
4
 
5
+ Layout/EmptyLineAfterGuardClause:
6
+ Enabled: false
5
7
  Layout/EndOfLine:
6
8
  EnforcedStyle: lf
7
9
  Metrics/LineLength:
8
10
  Max: 120
9
11
  Metrics/AbcSize:
10
12
  Max: 25
13
+ Metrics/BlockLength:
14
+ Max: 30
11
15
  Metrics/MethodLength:
12
16
  Max: 25
13
17
  Metrics/ClassLength:
@@ -23,9 +23,17 @@
23
23
  #include <vector>
24
24
  #include <openssl/sha.h>
25
25
  #include <ruby.h>
26
+ #include <ruby/thread.h>
26
27
 
27
28
  using namespace std;
28
29
 
30
+ struct index_params {
31
+ string prefix;
32
+ int strength;
33
+ string nonce;
34
+ bool keep_going;
35
+ };
36
+
29
37
  static
30
38
  array<uint8_t, SHA256_DIGEST_LENGTH> sha256(const string &string)
31
39
  {
@@ -61,7 +69,6 @@ string create_nonce(uint64_t i)
61
69
  "0123456789"
62
70
  "abcdefghijklmnopqrstuvwxyz"
63
71
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
64
-
65
72
  string rv;
66
73
  for (int l = 0; l < 6; l++) { // Cut to 6 sym
67
74
  rv += chars[i % chars.size()];
@@ -74,16 +81,25 @@ string create_nonce(uint64_t i)
74
81
  }
75
82
 
76
83
  static
77
- string index(const string &prefix, int strength)
84
+ void *index(void *arg)
78
85
  {
86
+ index_params *params = static_cast<index_params *>(arg);
79
87
  mt19937_64 random(uint64_t(time(nullptr)));
80
-
81
- for (uint64_t i = random(); ; i++) {
82
- const auto hash = sha256(prefix + " " + create_nonce(i));
83
- if (check_hash(hash, strength)) {
84
- return create_nonce(i);
88
+ for (uint64_t i = random(); params->keep_going; i++) {
89
+ const auto hash = sha256(params->prefix + " " + create_nonce(i));
90
+ if (check_hash(hash, params->strength)) {
91
+ params->nonce = create_nonce(i);
92
+ break;
85
93
  }
86
94
  }
95
+ return nullptr;
96
+ }
97
+
98
+ static
99
+ void unblocking_func(void *arg)
100
+ {
101
+ index_params *params = static_cast<index_params *>(arg);
102
+ params->keep_going = false;
87
103
  }
88
104
 
89
105
  static
@@ -98,10 +114,14 @@ static
98
114
  VALUE ScoreSuffix_value(VALUE self)
99
115
  {
100
116
  auto prefix_value = rb_iv_get(self, "@prefix");
101
- const string prefix = StringValuePtr(prefix_value);
102
- const int strength = NUM2INT(rb_iv_get(self, "@strength"));
103
- const auto nonce = index(prefix, strength);
104
- return rb_str_new2(nonce.c_str());
117
+ index_params params = {
118
+ StringValuePtr(prefix_value),
119
+ NUM2INT(rb_iv_get(self, "@strength")),
120
+ "",
121
+ true
122
+ };
123
+ rb_thread_call_without_gvl(index, &params, unblocking_func, &params);
124
+ return rb_str_new2(params.nonce.c_str());
105
125
  }
106
126
 
107
127
  extern "C"
@@ -21,7 +21,9 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'minitest/autorun'
24
+ require 'minitest/hooks/test'
24
25
  require 'tmpdir'
26
+ require 'timeout'
25
27
  require 'time'
26
28
  require_relative '../../lib/zold/score'
27
29
 
@@ -30,6 +32,18 @@ require_relative '../../lib/zold/score'
30
32
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
31
33
  # License:: MIT
32
34
  class TestScore < Minitest::Test
35
+ include Minitest::Hooks
36
+
37
+ # We need this in order to make sure any test is faster than a minute. This
38
+ # should help spotting tests that hang out sometimes. The number of seconds
39
+ # to wait can be increased, but try to make it as little as possible,
40
+ # in order to catch problems ealier.
41
+ def around
42
+ Timeout.timeout(10) do
43
+ super
44
+ end
45
+ end
46
+
33
47
  def test_reduces_itself
34
48
  score = Zold::Score.new(
35
49
  time: Time.parse('2017-07-19T21:24:51Z'),
@@ -164,4 +178,14 @@ class TestScore < Minitest::Test
164
178
  )
165
179
  assert_equal('e04ab4e69f86aa17be1316a52148e7bc3187c6d3df581d885a862d8850000000', score.hash)
166
180
  end
181
+
182
+ def test_lets_the_thread_to_die
183
+ score = Zold::Score.new(host: 'localhost', invoice: 'NOPREFIX@ffffffffffffffff', strength: 30)
184
+ thread = Thread.start do
185
+ score.next
186
+ end
187
+ sleep(0.1)
188
+ thread.kill
189
+ thread.join
190
+ end
167
191
  end
data/zold-score.gemspec CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.rubygems_version = '2.2'
28
28
  s.required_ruby_version = '>=2.3'
29
29
  s.name = 'zold-score'
30
- s.version = '0.3.2'
30
+ s.version = '0.3.3'
31
31
  s.license = 'MIT'
32
32
  s.summary = 'Zold score'
33
33
  s.description = 'Score calculating Ruby Gem for Zold'
@@ -42,9 +42,10 @@ Gem::Specification.new do |s|
42
42
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
43
43
  s.add_development_dependency 'codecov', '0.1.14'
44
44
  s.add_development_dependency 'minitest', '5.11.3'
45
+ s.add_development_dependency 'minitest-hooks', '1.5.0'
45
46
  s.add_development_dependency 'rake-compiler', '1.0.4'
46
47
  s.add_development_dependency 'rdoc', '4.3.0'
47
48
  s.add_development_dependency 'rspec-rails', '3.8.1'
48
- s.add_development_dependency 'rubocop', '0.58.1'
49
+ s.add_development_dependency 'rubocop', '0.60.0'
49
50
  s.add_development_dependency 'rubocop-rspec', '1.30.0'
50
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold-score
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-21 00:00:00.000000000 Z
11
+ date: 2018-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.11.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-hooks
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.5.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.5.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake-compiler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +100,14 @@ dependencies:
86
100
  requirements:
87
101
  - - '='
88
102
  - !ruby/object:Gem::Version
89
- version: 0.58.1
103
+ version: 0.60.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - '='
95
109
  - !ruby/object:Gem::Version
96
- version: 0.58.1
110
+ version: 0.60.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-rspec
99
113
  requirement: !ruby/object:Gem::Requirement