openagent 0.9.2 → 0.9.3
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.
- data/lib/openagent/client.rb +33 -46
- data/lib/openagent/version.rb +1 -1
- data/lib/sif/representations/infra/common/query.rb +1 -1
- data/spec/client_spec.rb +37 -1
- data/spec/fixtures/messages/get_message.xml +12 -0
- data/spec/fixtures/messages/response.xml +1 -1
- data/spec/fixtures/messages/response_done.xml +16 -0
- data/spec/spec_helper.rb +9 -1
- metadata +6 -2
data/lib/openagent/client.rb
CHANGED
@@ -5,6 +5,7 @@ require "openagent/xml_helpers"
|
|
5
5
|
require "openagent/errors"
|
6
6
|
require "openagent/message_builder"
|
7
7
|
require "logger"
|
8
|
+
require "active_support/hash_with_indifferent_access"
|
8
9
|
|
9
10
|
module OpenAgent
|
10
11
|
class Client
|
@@ -28,23 +29,25 @@ module OpenAgent
|
|
28
29
|
|
29
30
|
def initialize(opts={})
|
30
31
|
@callbacks = {
|
31
|
-
|
32
|
-
|
32
|
+
:receive_message => [],
|
33
|
+
:each_loop => []
|
33
34
|
}
|
34
35
|
|
36
|
+
opts = ActiveSupport::HashWithIndifferentAccess.new(opts)
|
37
|
+
|
35
38
|
@name = opts.delete(:name)
|
36
39
|
@url = opts.delete(:url)
|
37
40
|
@pretty_print = opts.has_key?(:pretty_print) ? opts.delete(:pretty_print) : true
|
38
41
|
|
39
|
-
@agent_opts = opts[
|
42
|
+
@agent_opts = opts[:agent_opts] || {}
|
40
43
|
@agent_opts[:name] = @name if @name
|
41
44
|
|
42
|
-
@zone_opts = opts[
|
45
|
+
@zone_opts = opts[:zone_opts] || {}
|
43
46
|
@zone_opts[:uri] = @url if @url
|
44
47
|
|
45
|
-
@log = Logger.new(opts[
|
46
|
-
@agent = opts[
|
47
|
-
@zone = opts[
|
48
|
+
@log = opts[:logger] || Logger.new(opts[:logfile] || STDOUT, 'daily')
|
49
|
+
@agent = opts[:agent] || OpenAgent::Agent.new(@agent_opts)
|
50
|
+
@zone = opts[:zone] || OpenAgent::Zone.new(@zone_opts)
|
48
51
|
|
49
52
|
@builder = OpenAgent::MessageBuilder.new(@agent, @zone)
|
50
53
|
end
|
@@ -83,49 +86,33 @@ module OpenAgent
|
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
|
-
def
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
if inner = message.inner_message
|
98
|
-
trigger(:receive_message, message, outgoing, xml)
|
99
|
-
|
100
|
-
if inner.response
|
101
|
-
case message.status_code
|
102
|
-
when ZIS_SUCCESS then
|
103
|
-
if inner.response.more_packets?
|
104
|
-
wait_period = wait_short
|
105
|
-
else
|
106
|
-
wait_period = wait_long
|
107
|
-
end
|
108
|
-
when ZIS_NO_MESSAGES then
|
109
|
-
if not inner.more_packets?
|
110
|
-
wait_period = wait_long
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# We send an Ack for both an Event and a Response
|
116
|
-
if message.status_code == ZIS_SUCCESS
|
117
|
-
ack(inner.source_id, inner.msg_id)
|
118
|
-
end
|
119
|
-
else
|
120
|
-
if message.status_code == ZIS_NO_MESSAGES
|
121
|
-
messages_in_queue = false
|
122
|
-
end
|
123
|
-
end
|
89
|
+
def run_once
|
90
|
+
trigger(:each_loop)
|
91
|
+
message = nil
|
92
|
+
begin
|
93
|
+
get_message do |message, outgoing, xml|
|
94
|
+
if inner = message.inner_message
|
95
|
+
trigger(:receive_message, message, outgoing, xml)
|
96
|
+
|
97
|
+
# We send an Ack for both an Event and a Response
|
98
|
+
if message.status_code == ZIS_SUCCESS
|
99
|
+
ack(inner.source_id, inner.msg_id)
|
124
100
|
end
|
125
101
|
end
|
102
|
+
end
|
103
|
+
end while message && message.status_code == ZIS_SUCCESS
|
104
|
+
end
|
105
|
+
|
106
|
+
def run(wait_period=30)
|
107
|
+
loop do
|
108
|
+
begin
|
109
|
+
run_once
|
126
110
|
sleep wait_period
|
127
111
|
rescue ResponseError => e
|
128
112
|
@log.error e
|
113
|
+
rescue Net::OpenTimeout => e
|
114
|
+
@log.error e
|
115
|
+
sleep(5)
|
129
116
|
end
|
130
117
|
end
|
131
118
|
end
|
@@ -151,7 +138,7 @@ module OpenAgent
|
|
151
138
|
@zone.send_request(req).tap do |response|
|
152
139
|
log "Response", formatted_xml(response.body, @pretty_print)
|
153
140
|
|
154
|
-
if response.body.empty?
|
141
|
+
if response.body.nil? or response.body.empty?
|
155
142
|
raise ResponseError, "Response is empty"
|
156
143
|
else
|
157
144
|
incoming = Message.new
|
data/lib/openagent/version.rb
CHANGED
@@ -15,7 +15,7 @@ module SIF
|
|
15
15
|
property :condition_group, :as => 'SIF_ConditionGroup',
|
16
16
|
:class => SIF::Infra::Common::ConditionGroup,
|
17
17
|
:decorator => ConditionGroup,
|
18
|
-
:if => lambda { !condition_group.empty? }
|
18
|
+
:if => lambda { !(condition_group || []).empty? }
|
19
19
|
|
20
20
|
property :example, :as => 'SIF_Example'
|
21
21
|
end
|
data/spec/client_spec.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
require_relative "spec_helper"
|
2
2
|
require "openagent/client"
|
3
3
|
|
4
|
+
def stub_rr(request, response)
|
5
|
+
stub_request(:post, "http://localhost:8765/").
|
6
|
+
with(:body => request,
|
7
|
+
:headers => {'Accept'=>'*/*', 'Content-Type'=>'application/xml', 'User-Agent'=>'Ruby'}).
|
8
|
+
to_return(:status => 200, :body => response, :headers => {})
|
9
|
+
end
|
10
|
+
|
4
11
|
describe OpenAgent::Client do
|
5
12
|
|
6
13
|
context "agent options" do
|
@@ -8,7 +15,16 @@ describe OpenAgent::Client do
|
|
8
15
|
let(:zone) { OpenAgent::Zone.new(YAML::load(File.read(fixture('zone.yaml')))) }
|
9
16
|
end
|
10
17
|
|
11
|
-
subject(:client) {
|
18
|
+
subject(:client) {
|
19
|
+
OpenAgent::Client.new(
|
20
|
+
:name => "canvas",
|
21
|
+
:url => "http://localhost:8765",
|
22
|
+
:logger => Logger.new(EmptyLogger.new)
|
23
|
+
).tap do |client|
|
24
|
+
client.builder.guuid = "MSG_ID"
|
25
|
+
client.builder.timestamp = "TIMESTAMP"
|
26
|
+
end
|
27
|
+
}
|
12
28
|
|
13
29
|
it "initializes" do
|
14
30
|
client.name.should == "canvas"
|
@@ -29,6 +45,26 @@ describe OpenAgent::Client do
|
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
48
|
+
context "run loop" do
|
49
|
+
it "no message exits loop" do
|
50
|
+
client.stub(:get_message) { nil }
|
51
|
+
client.run_once
|
52
|
+
end
|
53
|
+
|
54
|
+
it "ZIS_NO_MESSAGES exits loop" do
|
55
|
+
stub_rr(File.read(fixture("messages/get_message.xml")),
|
56
|
+
File.read(fixture("messages/response.xml")))
|
57
|
+
stub_rr(File.read(fixture("messages/get_message.xml")),
|
58
|
+
File.read(fixture("messages/response_done.xml")))
|
59
|
+
client.run_once
|
60
|
+
end
|
61
|
+
|
62
|
+
it "empty body raises ResponseError" do
|
63
|
+
stub_rr(File.read(fixture("messages/get_message.xml")), "")
|
64
|
+
lambda { client.run_once }.should raise_error(OpenAgent::ResponseError)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
32
68
|
context "given a response message" do
|
33
69
|
let(:message) do
|
34
70
|
SIF::Infra::Common::Message.new(
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<SIF_Message xmlns="http://www.sifinfo.org/infrastructure/2.x" Version="2.0r1">
|
2
|
+
<SIF_SystemControl>
|
3
|
+
<SIF_Header>
|
4
|
+
<SIF_MsgId>MSG_ID</SIF_MsgId>
|
5
|
+
<SIF_Timestamp>TIMESTAMP</SIF_Timestamp>
|
6
|
+
<SIF_SourceId>canvas</SIF_SourceId>
|
7
|
+
</SIF_Header>
|
8
|
+
<SIF_SystemControlData>
|
9
|
+
<SIF_GetMessage/>
|
10
|
+
</SIF_SystemControlData>
|
11
|
+
</SIF_SystemControl>
|
12
|
+
</SIF_Message>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
</SIF_Header>
|
29
29
|
<SIF_RequestMsgId>6B05EF70132C01319D9348E0EB1826A1</SIF_RequestMsgId>
|
30
30
|
<SIF_PacketNumber>209</SIF_PacketNumber>
|
31
|
-
<SIF_MorePackets>
|
31
|
+
<SIF_MorePackets>No</SIF_MorePackets>
|
32
32
|
<SIF_ObjectData>
|
33
33
|
<StudentPersonal RefId="140A051A0D2B360A1E1F0E251FBA175A">
|
34
34
|
<LocalId>24939</LocalId>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-1"?>
|
2
|
+
|
3
|
+
<SIF_Message xmlns="http://www.sifinfo.org/infrastructure/2.x" Version="2.0r1">
|
4
|
+
<SIF_Ack>
|
5
|
+
<SIF_Header>
|
6
|
+
<SIF_MsgId>D72C57D4EE0D4E0AB68BD2393B12E51D</SIF_MsgId>
|
7
|
+
<SIF_Timestamp>2013-10-09T10:42:16-06:00</SIF_Timestamp>
|
8
|
+
<SIF_SourceId>canvas</SIF_SourceId>
|
9
|
+
</SIF_Header>
|
10
|
+
<SIF_OriginalSourceId>canvas</SIF_OriginalSourceId>
|
11
|
+
<SIF_OriginalMsgId>088E6810133001313D9314109FD501C1</SIF_OriginalMsgId>
|
12
|
+
<SIF_Status>
|
13
|
+
<SIF_Code>9</SIF_Code>
|
14
|
+
</SIF_Status>
|
15
|
+
</SIF_Ack>
|
16
|
+
</SIF_Message>
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
require "webmock/rspec"
|
2
|
+
require "logger"
|
3
|
+
require "stringio"
|
2
4
|
|
3
5
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
6
|
|
5
7
|
def fixture(file)
|
6
8
|
File.join(File.dirname(__FILE__), 'fixtures', file)
|
7
|
-
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class EmptyLogger < StringIO
|
12
|
+
def write(input)
|
13
|
+
# do nothing
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openagent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-02-
|
14
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -379,7 +379,9 @@ files:
|
|
379
379
|
- spec/event_spec.rb
|
380
380
|
- spec/fixtures/agent.yaml
|
381
381
|
- spec/fixtures/messages/event.xml
|
382
|
+
- spec/fixtures/messages/get_message.xml
|
382
383
|
- spec/fixtures/messages/response.xml
|
384
|
+
- spec/fixtures/messages/response_done.xml
|
383
385
|
- spec/fixtures/sif/attendance_code_info.xml
|
384
386
|
- spec/fixtures/sif/calendar_date.xml
|
385
387
|
- spec/fixtures/sif/calendar_summary.xml
|
@@ -461,7 +463,9 @@ test_files:
|
|
461
463
|
- spec/event_spec.rb
|
462
464
|
- spec/fixtures/agent.yaml
|
463
465
|
- spec/fixtures/messages/event.xml
|
466
|
+
- spec/fixtures/messages/get_message.xml
|
464
467
|
- spec/fixtures/messages/response.xml
|
468
|
+
- spec/fixtures/messages/response_done.xml
|
465
469
|
- spec/fixtures/sif/attendance_code_info.xml
|
466
470
|
- spec/fixtures/sif/calendar_date.xml
|
467
471
|
- spec/fixtures/sif/calendar_summary.xml
|