itrp-client 1.1.0 → 1.1.1

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
  SHA1:
3
- metadata.gz: 89081124a0ce058991107658acc89152c8d4118e
4
- data.tar.gz: b92af38225ebdbd0592f508b4e5ddd7fb6c6983c
3
+ metadata.gz: c3cc5dc93a1f84864b1550821fca09d2305b220e
4
+ data.tar.gz: 8586c686d6519573534a9991288bb7bfe3ac7bf8
5
5
  SHA512:
6
- metadata.gz: 232eeb5ef89f2e2f6c83266eb95a777ecccfa891e9b7fed8ea88c51c332183c7ffec3aaaed8eb259c66a540a0d86d0152fb65612aab779f463cd8ad7b24f6249
7
- data.tar.gz: acc1b94b7a6ea21c695a0f44ef3d332a601f0ac3c77af43499c79cb386424aa0958498a5d2cb62b4184f83eb96b04356b99129b3f693f81663767db02e257cf4
6
+ metadata.gz: 2e7b2e85e0ab75834e490f0917cb7dd7e1fbae1fe0126519771349d244bec66e2422f9c483cd813bfb648e7745dfe5fefc13d710ff8531268c4c45ef7cec1c06
7
+ data.tar.gz: e51bdaf000aca2f5b471428ca9575d488516766ea2626cfcc92400917b25b76468c53d3476023ae731bca7401c10699839d16efec78716019f14c2b3ff0207fa
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016 ITRP Inc.
1
+ Copyright (c) 2017 ITRP Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/lib/itrp/client.rb CHANGED
@@ -132,7 +132,11 @@ module Itrp
132
132
  token = response[:token]
133
133
  while true
134
134
  response = get("/import/#{token}")
135
- raise ::Itrp::Exception.new("Unable to monitor progress for #{type} import. #{response.message}") unless response.valid?
135
+ unless response.valid?
136
+ sleep(5)
137
+ response = get("/import/#{token}") # single retry to recover from a network error
138
+ raise ::Itrp::Exception.new("Unable to monitor progress for #{type} import. #{response.message}") unless response.valid?
139
+ end
136
140
  # wait 30 seconds while the response is OK and import is still busy
137
141
  break unless ['queued', 'processing'].include?(response[:state])
138
142
  @logger.debug { "Import of '#{csv.path}' is #{response[:state]}. Checking again in 30 seconds." }
@@ -165,7 +169,11 @@ module Itrp
165
169
  token = response[:token]
166
170
  while true
167
171
  response = get("/export/#{token}")
168
- raise ::Itrp::Exception.new("Unable to monitor progress for '#{data[:type]}' export. #{response.message}") unless response.valid?
172
+ unless response.valid?
173
+ sleep(5)
174
+ response = get("/export/#{token}") # single retry to recover from a network error
175
+ raise ::Itrp::Exception.new("Unable to monitor progress for '#{data[:type]}' export. #{response.message}") unless response.valid?
176
+ end
169
177
  # wait 30 seconds while the response is OK and export is still busy
170
178
  break unless ['queued', 'processing'].include?(response[:state])
171
179
  @logger.debug { "Export of '#{data[:type]}' is #{response[:state]}. Checking again in 30 seconds." }
@@ -1,5 +1,5 @@
1
1
  module Itrp
2
2
  class Client
3
- VERSION = '1.1.0'
3
+ VERSION = '1.1.1'
4
4
  end
5
5
  end
@@ -287,7 +287,6 @@ describe Itrp::Client do
287
287
  @import_processing_response = {body: {state: 'processing'}.to_json}
288
288
  @import_done_response = {body: {state: 'done', results: {errors: 0, updated: 1, created: 1, failures: 0, unchanged: 0, deleted: 0}}.to_json}
289
289
  @import_failed_response = {body: {state: 'error', message: 'Invalid byte sequence in UTF-8 on line 2', results: {errors: 1, updated: 1, created: 0, failures: 1, unchanged: 0, deleted: 0}}.to_json}
290
- @server_failed_response = {body: {state: 'error', message: 'Invalid byte sequence in UTF-8 on line 2', results: {errors: 1, updated: 1, created: 0, failures: 1, unchanged: 0, deleted: 0}}.to_json}
291
290
  allow(@client).to receive(:sleep)
292
291
  end
293
292
 
@@ -307,7 +306,10 @@ describe Itrp::Client do
307
306
 
308
307
  it 'should wait for the import to complete' do
309
308
  stub_request(:post, 'https://api.itrp.com/v1/import').with(basic_auth: ['secret', 'x']).with(body: @multi_part_body, headers: @multi_part_headers).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
310
- progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@import_queued_response, @import_processing_response, @import_done_response)
309
+ progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
310
+ .to_return(@import_queued_response, @import_processing_response)
311
+ .then.to_raise(StandardError.new('network error'))
312
+ .then.to_return(@import_done_response)
311
313
 
312
314
  # verify the correct log statement are made
313
315
  expect_log('Sending POST request to api.itrp.com:443/v1/import', :debug)
@@ -320,12 +322,14 @@ describe Itrp::Client do
320
322
  expect_log("Response:\n{\n \"state\": \"processing\"\n}", :debug)
321
323
  expect_log("Import of '#{@fixture_dir}/people.csv' is processing. Checking again in 30 seconds.", :debug)
322
324
  expect_log('Sending GET request to api.itrp.com:443/v1/import/68ef5ef0f64c0', :debug)
325
+ expect_log("Request failed: 500: No Response from Server - network error for 'api.itrp.com:443/v1/import/68ef5ef0f64c0'", :error)
326
+ expect_log('Sending GET request to api.itrp.com:443/v1/import/68ef5ef0f64c0', :debug)
323
327
  expect_log("Response:\n{\n \"state\": \"done\",\n \"results\": {\n \"errors\": 0,\n \"updated\": 1,\n \"created\": 1,\n \"failures\": 0,\n \"unchanged\": 0,\n \"deleted\": 0\n }\n}", :debug)
324
328
 
325
329
  response = @client.import("#{@fixture_dir}/people.csv", 'people', true)
326
330
  expect(response[:state]).to eq('done')
327
331
  expect(response[:results][:updated]).to eq(1)
328
- expect(progress_stub).to have_been_requested.times(3)
332
+ expect(progress_stub).to have_been_requested.times(4)
329
333
  end
330
334
 
331
335
  it 'should wait for the import to fail' do
@@ -333,15 +337,17 @@ describe Itrp::Client do
333
337
  progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@import_queued_response, @import_processing_response, @import_failed_response)
334
338
 
335
339
  expect{ @client.import("#{@fixture_dir}/people.csv", 'people', true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for people import. Invalid byte sequence in UTF-8 on line 2")
336
- expect(progress_stub).to have_been_requested.times(3)
340
+ expect(progress_stub).to have_been_requested.times(4)
337
341
  end
338
342
 
339
343
  it 'should not continue when there is an error connecting to ITRP' do
340
344
  stub_request(:post, 'https://api.itrp.com/v1/import').with(basic_auth: ['secret', 'x']).with(body: @multi_part_body, headers: @multi_part_headers).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
341
- progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@import_queued_response, @import_processing_response).then.to_raise(StandardError.new('network error'))
345
+ progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
346
+ .to_return(@import_queued_response, @import_processing_response)
347
+ .then.to_raise(StandardError.new('network error')) # twice
342
348
 
343
349
  expect{ @client.import("#{@fixture_dir}/people.csv", 'people', true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for people import. 500: No Response from Server - network error for 'api.itrp.com:443/v1/import/68ef5ef0f64c0'")
344
- expect(progress_stub).to have_been_requested.times(3)
350
+ expect(progress_stub).to have_been_requested.times(4)
345
351
  end
346
352
 
347
353
  it 'should return an invalid response in case waiting for progress is false' do
@@ -395,7 +401,10 @@ describe Itrp::Client do
395
401
 
396
402
  it 'should wait for the export to complete' do
397
403
  stub_request(:post, 'https://api.itrp.com/v1/export').with(basic_auth: ['secret', 'x']).with(body: {type: 'people'}).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
398
- progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@export_queued_response, @export_processing_response, @export_done_response)
404
+ progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
405
+ .to_return(@export_queued_response, @export_processing_response)
406
+ .then.to_raise(StandardError.new('network error'))
407
+ .then.to_return(@export_done_response)
399
408
 
400
409
  # verify the correct log statement are made
401
410
  expect_log('Sending POST request to api.itrp.com:443/v1/export', :debug)
@@ -408,20 +417,24 @@ describe Itrp::Client do
408
417
  expect_log(%(Response:\n{\n "state": "processing"\n}), :debug)
409
418
  expect_log("Export of 'people' is processing. Checking again in 30 seconds.", :debug)
410
419
  expect_log('Sending GET request to api.itrp.com:443/v1/export/68ef5ef0f64c0', :debug)
420
+ expect_log("Request failed: 500: No Response from Server - network error for 'api.itrp.com:443/v1/export/68ef5ef0f64c0'", :error)
421
+ expect_log('Sending GET request to api.itrp.com:443/v1/export/68ef5ef0f64c0', :debug)
411
422
  expect_log(%(Response:\n{\n "state": "done",\n "url": "https://download.example.com/export.zip?AWSAccessKeyId=12345"\n}), :debug)
412
423
 
413
424
  response = @client.export('people', nil, true)
414
425
  expect(response[:state]).to eq('done')
415
426
  expect(response[:url]).to eq('https://download.example.com/export.zip?AWSAccessKeyId=12345')
416
- expect(progress_stub).to have_been_requested.times(3)
427
+ expect(progress_stub).to have_been_requested.times(4)
417
428
  end
418
429
 
419
430
  it 'should not continue when there is an error connecting to ITRP' do
420
431
  stub_request(:post, 'https://api.itrp.com/v1/export').with(basic_auth: ['secret', 'x']).with(body: {type: 'people'}).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
421
- progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@export_queued_response, @export_processing_response).then.to_raise(StandardError.new('network error'))
432
+ progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
433
+ .to_return(@export_queued_response, @export_processing_response)
434
+ .then.to_raise(StandardError.new('network error')) # twice
422
435
 
423
436
  expect{ @client.export('people', nil, true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for 'people' export. 500: No Response from Server - network error for 'api.itrp.com:443/v1/export/68ef5ef0f64c0'")
424
- expect(progress_stub).to have_been_requested.times(3)
437
+ expect(progress_stub).to have_been_requested.times(4)
425
438
  end
426
439
 
427
440
  it 'should return an invalid response in case waiting for progress is false' do
metadata CHANGED
@@ -1,125 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itrp-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ITRP
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-25 00:00:00.000000000 Z
11
+ date: 2017-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mime-types
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 3.3.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.3.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: webmock
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: '2'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '2'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  description: Client for accessing the ITRP REST API
@@ -156,22 +156,22 @@ licenses:
156
156
  metadata: {}
157
157
  post_install_message:
158
158
  rdoc_options:
159
- - --charset=UTF-8
159
+ - "--charset=UTF-8"
160
160
  require_paths:
161
161
  - lib
162
162
  required_ruby_version: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: 2.0.0
167
167
  required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - '>='
169
+ - - ">="
170
170
  - !ruby/object:Gem::Version
171
171
  version: '0'
172
172
  requirements: []
173
173
  rubyforge_project:
174
- rubygems_version: 2.4.8
174
+ rubygems_version: 2.4.6
175
175
  signing_key:
176
176
  specification_version: 4
177
177
  summary: Client for accessing the ITRP REST API