td-client 0.8.77 → 0.8.78
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/lib/td/client/api.rb +6 -1
- data/lib/td/client/model.rb +20 -3
- data/lib/td/client/version.rb +1 -1
- data/spec/td/client/api_ssl_connection_spec.rb +24 -1
- data/spec/td/client/model_job_spec.rb +68 -0
- metadata +8 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7b08bc82aed5007cc2f9b0500847ca78520cc78
|
4
|
+
data.tar.gz: 1fa61539241cce5a9152f23629f46c5c95a7ec01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cd680197fab594cf321145804b06b99d9070cecb97115625b7a489d94b4baae685f47744a866172f20baf6d50b7e9c9eca0287b20ab0d4692cfeec38aa5e9448
|
7
|
+
data.tar.gz: 64fc10d47a765efc4bab85fb24fa12b0cbc459336467f21765007057807117c6177f936f642c84da608d15fa09ddb9dacf5e08a3b50fcb96f900860f78c9c02e
|
data/lib/td/client/api.rb
CHANGED
data/lib/td/client/model.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
+
require 'timeout'
|
1
2
|
|
2
3
|
module TreasureData
|
3
4
|
|
4
|
-
|
5
5
|
class Model
|
6
6
|
# @param [TreasureData::Client] client
|
7
7
|
def initialize(client)
|
@@ -403,8 +403,25 @@ class Job < Model
|
|
403
403
|
attr_reader :priority, :retry_limit, :org_name, :db_name
|
404
404
|
attr_reader :duration
|
405
405
|
|
406
|
-
def wait(timeout=nil)
|
407
|
-
#
|
406
|
+
def wait(timeout=nil, wait_interval=2)
|
407
|
+
# this should use monotonic clock but td-client-ruby supports Ruby 1.8.7 now.
|
408
|
+
# therefore add workaround to initializing clock on each delta
|
409
|
+
if timeout
|
410
|
+
orig_timeout = timeout
|
411
|
+
t1 = Time.now.to_f
|
412
|
+
end
|
413
|
+
until finished?
|
414
|
+
if timeout
|
415
|
+
t = Time.now.to_f
|
416
|
+
d = t - t1
|
417
|
+
t1 = t
|
418
|
+
timeout -= d if d > 0
|
419
|
+
raise ::TimeoutError, "timeout=#{orig_timeout} wait_interval=#{wait_interval}" if timeout <= 0
|
420
|
+
end
|
421
|
+
sleep wait_interval
|
422
|
+
yield self if block_given?
|
423
|
+
update_progress!
|
424
|
+
end
|
408
425
|
end
|
409
426
|
|
410
427
|
def kill!
|
data/lib/td/client/version.rb
CHANGED
@@ -4,11 +4,34 @@ require 'logger'
|
|
4
4
|
require 'webrick'
|
5
5
|
require 'webrick/https'
|
6
6
|
|
7
|
+
# Workaround for https://github.com/jruby/jruby-openssl/issues/78
|
8
|
+
# With recent JRuby + jruby-openssl, X509CRL#extentions_to_text causes
|
9
|
+
# StringIndexOOBException when we try to dump SSL Server Certificate.
|
10
|
+
# when one of extensions has "" as value.
|
11
|
+
# This hack is from httpclient https://github.com/nahi/httpclient/blob/master/lib/httpclient/util.rb#L27-L46
|
12
|
+
if defined? JRUBY_VERSION
|
13
|
+
require 'openssl'
|
14
|
+
require 'java'
|
15
|
+
module OpenSSL
|
16
|
+
module X509
|
17
|
+
class Certificate
|
18
|
+
java_import 'java.security.cert.Certificate'
|
19
|
+
java_import 'java.security.cert.CertificateFactory'
|
20
|
+
java_import 'java.io.ByteArrayInputStream'
|
21
|
+
def to_text
|
22
|
+
cf = CertificateFactory.getInstance('X.509')
|
23
|
+
cf.generateCertificate(ByteArrayInputStream.new(self.to_der.to_java_bytes)).toString
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
7
30
|
describe 'API SSL connection' do
|
8
31
|
DIR = File.dirname(File.expand_path(__FILE__))
|
9
32
|
|
10
33
|
after :each do
|
11
|
-
@server.shutdown
|
34
|
+
@server.shutdown if @server
|
12
35
|
end
|
13
36
|
|
14
37
|
it 'should fail to connect SSLv3 only server' do
|
@@ -62,4 +62,72 @@ describe 'Job Model' do
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
describe '#wait' do
|
67
|
+
let(:client) { Client.authenticate('user', 'password') }
|
68
|
+
let(:job_id) { 12345678 }
|
69
|
+
let(:job) { Job.new(client, job_id, nil, nil) }
|
70
|
+
|
71
|
+
def change_job_status(status)
|
72
|
+
allow(client).to receive(:job_status).with(job_id).and_return(status)
|
73
|
+
end
|
74
|
+
|
75
|
+
before do
|
76
|
+
change_job_status(Job::STATUS_QUEUED)
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'without timeout' do
|
80
|
+
it 'waits the job to be finished' do
|
81
|
+
begin
|
82
|
+
thread = Thread.start { job.wait }
|
83
|
+
expect(thread).to be_alive
|
84
|
+
change_job_status(Job::STATUS_SUCCESS)
|
85
|
+
thread.join(1)
|
86
|
+
expect(thread).to be_stop
|
87
|
+
ensure
|
88
|
+
thread.kill # just in case
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'calls a given block in every wait_interval second' do
|
93
|
+
expect { |b|
|
94
|
+
begin
|
95
|
+
thread = Thread.start {
|
96
|
+
job.wait(nil, 0.1, &b)
|
97
|
+
}
|
98
|
+
sleep 0.3
|
99
|
+
change_job_status(Job::STATUS_SUCCESS)
|
100
|
+
thread.join(0.5)
|
101
|
+
expect(thread).to be_stop
|
102
|
+
ensure
|
103
|
+
thread.kill # just in case
|
104
|
+
end
|
105
|
+
}.to yield_control.at_least(2).at_most(3).times
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'with timeout' do
|
110
|
+
context 'the job running time is too long' do
|
111
|
+
it 'raise ::TimeoutError' do
|
112
|
+
expect {
|
113
|
+
job.wait(0.1)
|
114
|
+
}.to raise_error(::TimeoutError)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'calls a given block in every wait_interval second, and timeout' do
|
119
|
+
expect { |b|
|
120
|
+
begin
|
121
|
+
thread = Thread.start {
|
122
|
+
job.wait(0.3, 0.1, &b)
|
123
|
+
}
|
124
|
+
expect{ thread.value }.to raise_error(::TimeoutError)
|
125
|
+
expect(thread).to be_stop
|
126
|
+
ensure
|
127
|
+
thread.kill # just in case
|
128
|
+
end
|
129
|
+
}.to yield_control.at_least(2).times
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
65
133
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.78
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Treasure Data, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
version: 0.5.3
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 0.8.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
version: 0.5.3
|
54
54
|
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.
|
56
|
+
version: 0.8.0
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
58
|
name: json
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,22 +72,16 @@ dependencies:
|
|
72
72
|
name: httpclient
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
|
-
- - "
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 2.5.2
|
78
|
-
- - "<"
|
75
|
+
- - "~>"
|
79
76
|
- !ruby/object:Gem::Version
|
80
|
-
version: 2.
|
77
|
+
version: '2.7'
|
81
78
|
type: :runtime
|
82
79
|
prerelease: false
|
83
80
|
version_requirements: !ruby/object:Gem::Requirement
|
84
81
|
requirements:
|
85
|
-
- - "
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version: 2.5.2
|
88
|
-
- - "<"
|
82
|
+
- - "~>"
|
89
83
|
- !ruby/object:Gem::Version
|
90
|
-
version: 2.
|
84
|
+
version: '2.7'
|
91
85
|
- !ruby/object:Gem::Dependency
|
92
86
|
name: rspec
|
93
87
|
requirement: !ruby/object:Gem::Requirement
|