right_agent 1.0.1 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/README.rdoc +10 -8
  2. data/Rakefile +31 -5
  3. data/lib/right_agent.rb +6 -1
  4. data/lib/right_agent/actor.rb +4 -20
  5. data/lib/right_agent/actors/agent_manager.rb +1 -1
  6. data/lib/right_agent/agent.rb +357 -144
  7. data/lib/right_agent/agent_config.rb +7 -6
  8. data/lib/right_agent/agent_identity.rb +13 -11
  9. data/lib/right_agent/agent_tag_manager.rb +60 -64
  10. data/{spec/results_mock.rb → lib/right_agent/clients.rb} +10 -24
  11. data/lib/right_agent/clients/api_client.rb +383 -0
  12. data/lib/right_agent/clients/auth_client.rb +247 -0
  13. data/lib/right_agent/clients/balanced_http_client.rb +369 -0
  14. data/lib/right_agent/clients/base_retry_client.rb +495 -0
  15. data/lib/right_agent/clients/right_http_client.rb +279 -0
  16. data/lib/right_agent/clients/router_client.rb +493 -0
  17. data/lib/right_agent/command/command_io.rb +4 -4
  18. data/lib/right_agent/command/command_parser.rb +2 -2
  19. data/lib/right_agent/command/command_runner.rb +1 -1
  20. data/lib/right_agent/connectivity_checker.rb +179 -0
  21. data/lib/right_agent/core_payload_types/secure_document_location.rb +2 -2
  22. data/lib/right_agent/dispatcher.rb +12 -10
  23. data/lib/right_agent/enrollment_result.rb +16 -12
  24. data/lib/right_agent/exceptions.rb +34 -20
  25. data/lib/right_agent/history.rb +10 -5
  26. data/lib/right_agent/log.rb +5 -5
  27. data/lib/right_agent/minimal.rb +1 -0
  28. data/lib/right_agent/multiplexer.rb +1 -1
  29. data/lib/right_agent/offline_handler.rb +270 -0
  30. data/lib/right_agent/packets.rb +7 -7
  31. data/lib/right_agent/payload_formatter.rb +1 -1
  32. data/lib/right_agent/pending_requests.rb +128 -0
  33. data/lib/right_agent/platform.rb +1 -1
  34. data/lib/right_agent/protocol_version_mixin.rb +69 -0
  35. data/lib/right_agent/{idempotent_request.rb → retryable_request.rb} +7 -7
  36. data/lib/right_agent/scripts/agent_controller.rb +28 -26
  37. data/lib/right_agent/scripts/agent_deployer.rb +37 -22
  38. data/lib/right_agent/scripts/common_parser.rb +10 -3
  39. data/lib/right_agent/secure_identity.rb +1 -1
  40. data/lib/right_agent/sender.rb +299 -785
  41. data/lib/right_agent/serialize/secure_serializer.rb +3 -1
  42. data/lib/right_agent/serialize/secure_serializer_initializer.rb +2 -2
  43. data/lib/right_agent/serialize/serializable.rb +8 -3
  44. data/right_agent.gemspec +49 -18
  45. data/spec/agent_config_spec.rb +7 -7
  46. data/spec/agent_identity_spec.rb +7 -4
  47. data/spec/agent_spec.rb +43 -7
  48. data/spec/agent_tag_manager_spec.rb +72 -83
  49. data/spec/clients/api_client_spec.rb +423 -0
  50. data/spec/clients/auth_client_spec.rb +272 -0
  51. data/spec/clients/balanced_http_client_spec.rb +576 -0
  52. data/spec/clients/base_retry_client_spec.rb +635 -0
  53. data/spec/clients/router_client_spec.rb +594 -0
  54. data/spec/clients/spec_helper.rb +111 -0
  55. data/spec/command/command_io_spec.rb +1 -1
  56. data/spec/command/command_parser_spec.rb +1 -1
  57. data/spec/connectivity_checker_spec.rb +83 -0
  58. data/spec/dispatcher_spec.rb +3 -2
  59. data/spec/enrollment_result_spec.rb +2 -2
  60. data/spec/history_spec.rb +51 -39
  61. data/spec/offline_handler_spec.rb +340 -0
  62. data/spec/pending_requests_spec.rb +136 -0
  63. data/spec/{idempotent_request_spec.rb → retryable_request_spec.rb} +73 -73
  64. data/spec/sender_spec.rb +835 -1052
  65. data/spec/serialize/secure_serializer_spec.rb +3 -2
  66. data/spec/spec_helper.rb +54 -1
  67. metadata +71 -12
@@ -74,8 +74,9 @@ describe RightScale::SecureSerializer do
74
74
  lambda { RightScale::SecureSerializer.load(YAML.dump(data)) }.should raise_error(RightScale::Serializer::SerializationError)
75
75
  end
76
76
 
77
- # Test with protocol version 11 and 12 since that is the boundary where msgpack was first supported
78
- [[:msgpack, 12, JSON], [:json, 11, MessagePack]].each do |type, version, other_class|
77
+ # Test with protocol versions on the boundary where msgpack was first supported
78
+ [[:msgpack, version_can_handle_msgpack_result, JSON],
79
+ [:json, version_cannot_handle_msgpack_result, MessagePack]].each do |type, version, other_class|
79
80
 
80
81
  context "using #{type.inspect}" do
81
82
 
@@ -29,7 +29,6 @@ require 'eventmachine'
29
29
  require 'fileutils'
30
30
 
31
31
  require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'right_agent'))
32
- require File.expand_path(File.join(File.dirname(__FILE__), 'results_mock'))
33
32
 
34
33
  RSpec.configure do |c|
35
34
  c.mock_with(:flexmock)
@@ -75,3 +74,57 @@ module RightScale
75
74
  end # Log
76
75
 
77
76
  end
77
+
78
+ # Mock RestClient exceptions since cannot create directly without a
79
+ # RestClient::Response, but need RestClient interface for error reporting
80
+ class RestExceptionMock < RestClient::Exception
81
+ class Response
82
+ attr_reader :headers
83
+
84
+ def initialize(headers)
85
+ @headers = headers || {}
86
+ end
87
+ end
88
+
89
+ attr_accessor :message
90
+ attr_reader :http_code, :http_body, :response
91
+
92
+ def initialize(http_code, http_body = nil, response_headers = nil)
93
+ @message = "#{http_code} #{RestClient::STATUSES[http_code]}"
94
+ @http_code = http_code
95
+ @http_body = http_body
96
+ @response = Response.new(response_headers)
97
+ end
98
+
99
+ def inspect
100
+ "#{@message}: #{@http_body}"
101
+ end
102
+ end
103
+
104
+ # Functions for setting version per ProtocolVersionMixin
105
+ def version_cannot_put_version_in_packet; RightScale::Packet::DEFAULT_VERSION end
106
+ def version_can_put_version_in_packet; 12 end
107
+
108
+ def version_cannot_use_mapper_query_tags; 7 end
109
+ def version_can_use_mapper_query_tags; 8 end
110
+
111
+ def version_cannot_handle_request_retries; 8 end
112
+ def version_can_handle_request_retries; 9 end
113
+
114
+ def version_cannot_route_to_response_queue; 9 end
115
+ def version_can_route_to_response_queue; 10 end
116
+
117
+ def version_cannot_handle_non_nanite_ids; 9 end
118
+ def version_can_handle_non_nanite_ids; 10 end
119
+
120
+ def version_cannot_handle_multicast_result; 9 end
121
+ def version_can_handle_multicast_result; 10 end
122
+
123
+ def version_cannot_handle_msgpack_result; 11 end
124
+ def version_can_handle_msgpack_result; 12 end
125
+
126
+ def version_cannot_handle_non_delivery_result; 12 end
127
+ def version_can_handle_non_delivery_result; 13 end
128
+
129
+ def version_cannot_handle_http_result; 22 end
130
+ def version_can_handle_http_result; 23 end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-10-29 00:00:00.000000000 Z
15
+ date: 2014-02-28 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: right_support
@@ -52,6 +52,38 @@ dependencies:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rest-client
57
+ requirement: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - '='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.7.0.alpha
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 1.7.0.alpha
71
+ - !ruby/object:Gem::Dependency
72
+ name: faye-websocket
73
+ requirement: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - '='
77
+ - !ruby/object:Gem::Version
78
+ version: 0.7.0
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - '='
85
+ - !ruby/object:Gem::Version
86
+ version: 0.7.0
55
87
  - !ruby/object:Gem::Dependency
56
88
  name: eventmachine
57
89
  requirement: !ruby/object:Gem::Requirement
@@ -147,17 +179,25 @@ dependencies:
147
179
  description: ! 'RightAgent provides a foundation for running an agent on a server
148
180
  to interface
149
181
 
150
- in a secure fashion with other agents in the RightScale system. A RightAgent
182
+ in a secure fashion with other agents in the RightScale system using RightNet,
183
+
184
+ which operates in either HTTP or AMQP mode. When using HTTP, RightAgent
185
+
186
+ makes requests to RightApi servers and receives requests using long-polling or
187
+
188
+ WebSockets via the RightNet router. To respond to requests it posts to the
189
+
190
+ HTTP router. When using AMQP, RightAgent uses RabbitMQ as the message bus and
151
191
 
152
- uses RabbitMQ as the message bus and the RightScale mapper as the routing node.
192
+ the RightNet router as the routing node to make requests; to receives requests
153
193
 
154
- Servers running a RightAgent establish a queue on startup for receiving packets
194
+ routed to it by the RightNet router, it establishes a queue on startup. The
155
195
 
156
- routed to it via the mapper. The packets are structured to invoke services in
196
+ packets are structured to invoke services in the agent represented by actors
157
197
 
158
- the agent represented by actors and methods. The RightAgent may respond to these
198
+ and methods. The RightAgent may respond to these requests with a result packet
159
199
 
160
- requests with a result packet that the mapper then routes to the originator.
200
+ that the router then routes to the originator.
161
201
 
162
202
  '
163
203
  email: lee@rightscale.com
@@ -178,6 +218,13 @@ files:
178
218
  - lib/right_agent/agent_identity.rb
179
219
  - lib/right_agent/agent_tag_manager.rb
180
220
  - lib/right_agent/audit_formatter.rb
221
+ - lib/right_agent/clients.rb
222
+ - lib/right_agent/clients/api_client.rb
223
+ - lib/right_agent/clients/auth_client.rb
224
+ - lib/right_agent/clients/balanced_http_client.rb
225
+ - lib/right_agent/clients/base_retry_client.rb
226
+ - lib/right_agent/clients/right_http_client.rb
227
+ - lib/right_agent/clients/router_client.rb
181
228
  - lib/right_agent/command.rb
182
229
  - lib/right_agent/command/agent_manager_commands.rb
183
230
  - lib/right_agent/command/command_client.rb
@@ -186,6 +233,7 @@ files:
186
233
  - lib/right_agent/command/command_parser.rb
187
234
  - lib/right_agent/command/command_runner.rb
188
235
  - lib/right_agent/command/command_serializer.rb
236
+ - lib/right_agent/connectivity_checker.rb
189
237
  - lib/right_agent/console.rb
190
238
  - lib/right_agent/core_payload_types.rb
191
239
  - lib/right_agent/core_payload_types/cookbook.rb
@@ -213,7 +261,6 @@ files:
213
261
  - lib/right_agent/enrollment_result.rb
214
262
  - lib/right_agent/exceptions.rb
215
263
  - lib/right_agent/history.rb
216
- - lib/right_agent/idempotent_request.rb
217
264
  - lib/right_agent/log.rb
218
265
  - lib/right_agent/minimal.rb
219
266
  - lib/right_agent/monkey_patches.rb
@@ -230,9 +277,11 @@ files:
230
277
  - lib/right_agent/monkey_patches/ruby_patch/windows_patch/time_patch.rb
231
278
  - lib/right_agent/monkey_patches/ruby_patch/windows_patch/win32ole_patch.rb
232
279
  - lib/right_agent/multiplexer.rb
280
+ - lib/right_agent/offline_handler.rb
233
281
  - lib/right_agent/operation_result.rb
234
282
  - lib/right_agent/packets.rb
235
283
  - lib/right_agent/payload_formatter.rb
284
+ - lib/right_agent/pending_requests.rb
236
285
  - lib/right_agent/pid_file.rb
237
286
  - lib/right_agent/platform.rb
238
287
  - lib/right_agent/platform/unix/darwin/platform.rb
@@ -241,6 +290,8 @@ files:
241
290
  - lib/right_agent/platform/windows/mingw/platform.rb
242
291
  - lib/right_agent/platform/windows/mswin/platform.rb
243
292
  - lib/right_agent/platform/windows/platform.rb
293
+ - lib/right_agent/protocol_version_mixin.rb
294
+ - lib/right_agent/retryable_request.rb
244
295
  - lib/right_agent/scripts/agent_controller.rb
245
296
  - lib/right_agent/scripts/agent_deployer.rb
246
297
  - lib/right_agent/scripts/common_parser.rb
@@ -273,11 +324,18 @@ files:
273
324
  - spec/agent_identity_spec.rb
274
325
  - spec/agent_spec.rb
275
326
  - spec/agent_tag_manager_spec.rb
327
+ - spec/clients/api_client_spec.rb
328
+ - spec/clients/auth_client_spec.rb
329
+ - spec/clients/balanced_http_client_spec.rb
330
+ - spec/clients/base_retry_client_spec.rb
331
+ - spec/clients/router_client_spec.rb
332
+ - spec/clients/spec_helper.rb
276
333
  - spec/command/agent_manager_commands_spec.rb
277
334
  - spec/command/command_io_spec.rb
278
335
  - spec/command/command_parser_spec.rb
279
336
  - spec/command/command_runner_spec.rb
280
337
  - spec/command/command_serializer_spec.rb
338
+ - spec/connectivity_checker_spec.rb
281
339
  - spec/core_payload_types/dev_repositories_spec.rb
282
340
  - spec/core_payload_types/dev_repository_spec.rb
283
341
  - spec/core_payload_types/executable_bundle_spec.rb
@@ -290,12 +348,13 @@ files:
290
348
  - spec/dispatcher_spec.rb
291
349
  - spec/enrollment_result_spec.rb
292
350
  - spec/history_spec.rb
293
- - spec/idempotent_request_spec.rb
294
351
  - spec/log_spec.rb
295
352
  - spec/monkey_patches/eventmachine_spec.rb
296
353
  - spec/multiplexer_spec.rb
354
+ - spec/offline_handler_spec.rb
297
355
  - spec/operation_result_spec.rb
298
356
  - spec/packets_spec.rb
357
+ - spec/pending_requests_spec.rb
299
358
  - spec/platform/spec_helper.rb
300
359
  - spec/platform/unix/darwin/platform_spec.rb
301
360
  - spec/platform/unix/linux/platform_spec.rb
@@ -303,7 +362,7 @@ files:
303
362
  - spec/platform/windows/mingw/platform_spec.rb
304
363
  - spec/platform/windows/mswin/platform_spec.rb
305
364
  - spec/platform/windows/spec_helper.rb
306
- - spec/results_mock.rb
365
+ - spec/retryable_request_spec.rb
307
366
  - spec/secure_identity_spec.rb
308
367
  - spec/security/cached_certificate_store_proxy_spec.rb
309
368
  - spec/security/certificate_cache_spec.rb
@@ -346,7 +405,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
405
  version: '0'
347
406
  segments:
348
407
  - 0
349
- hash: -614048147788141961
408
+ hash: -1817530941733034469
350
409
  requirements: []
351
410
  rubyforge_project:
352
411
  rubygems_version: 1.8.26