ws.on :open do |event|
opened = true
if timeout
- EM::Timer.new 3 do
- too_long = true
+ EM::Timer.new 4 do
+ too_long = true if close_status.nil?
EM.stop_event_loop
end
end
state = 3
when 3
human_ev_uuid = d["object_uuid"]
+ state = 4
ws.close
+ when 4
+ assert false, "Should not get any more events"
end
end
state = 2
when 2
human_ev_uuid = d["object_uuid"]
+ state = 3
ws.close
+ when 3
+ assert false, "Should not get any more events"
end
end
when 2
assert_equal 200, d["status"]
spec = Specimen.create
+ Trait.create # not part of filters, should not be received
human = Human.create
state = 3
when 3
state = 4
when 4
human_ev_uuid = d["object_uuid"]
+ state = 5
ws.close
+ when 5
+ assert false, "Should not get any more events"
end
end
when 3
l2 = d["object_uuid"]
assert_not_nil l2, "Unexpected message: #{d}"
+ state = 4
ws.close
+ when 4
+ assert false, "Should not get any more events"
end
end
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
EM::Timer.new 3 do
+ # Set a time limit on the test because after unsubscribing the server
+ # still has to process the next event (and then hopefully correctly
+ # decides not to send it because we unsubscribed.)
ws.close
end
end
case state
when 1
assert_equal 200, d["status"]
- filter_id = d["filter_id"]
spec = Specimen.create
state = 2
when 2
spec_ev_uuid = d["object_uuid"]
- ws.send ({method: 'unsubscribe', filter_id: filter_id}.to_json)
+ ws.send ({method: 'unsubscribe'}.to_json)
EM::Timer.new 1 do
- Human.create
+ Specimen.create
end
state = 3
assert_equal spec.uuid, spec_ev_uuid
end
-
- test "connect, subscribe, get event, try to unsubscribe with bogus filter_id" do
+ test "connect, subscribe, get event, unsubscribe with filter" do
state = 1
spec = nil
spec_ev_uuid = nil
- human = nil
- human_ev_uuid = nil
authorize_with :admin
- ws_helper :admin do |ws|
+ ws_helper :admin, false do |ws|
ws.on :open do |event|
- ws.send ({method: 'subscribe'}.to_json)
+ ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
+ EM::Timer.new 3 do
+ # Set a time limit on the test because after unsubscribing the server
+ # still has to process the next event (and then hopefully correctly
+ # decides not to send it because we unsubscribed.)
+ ws.close
+ end
end
ws.on :message do |event|
case state
when 1
assert_equal 200, d["status"]
- spec = Specimen.create
+ spec = Human.create
state = 2
when 2
spec_ev_uuid = d["object_uuid"]
- ws.send ({method: 'unsubscribe', filter_id: 100000}.to_json)
+ ws.send ({method: 'unsubscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
EM::Timer.new 1 do
- human = Human.create
+ Human.create
end
state = 3
when 3
- assert_equal 404, d["status"]
+ assert_equal 200, d["status"]
state = 4
when 4
- human_ev_uuid = d["object_uuid"]
- ws.close
+ assert false, "Should not get any more events"
end
end
end
assert_not_nil spec
- assert_not_nil human
assert_equal spec.uuid, spec_ev_uuid
- assert_equal human.uuid, human_ev_uuid
end
- test "connect, subscribe, get event, try to unsubscribe with missing filter_id" do
+
+ test "connect, subscribe, get event, try to unsubscribe with bogus filter" do
state = 1
spec = nil
spec_ev_uuid = nil
state = 2
when 2
spec_ev_uuid = d["object_uuid"]
- ws.send ({method: 'unsubscribe'}.to_json)
+ ws.send ({method: 'unsubscribe', filters: [['foo', 'bar', 'baz']]}.to_json)
EM::Timer.new 1 do
human = Human.create
state = 3
when 3
- assert_equal 400, d["status"]
+ assert_equal 404, d["status"]
state = 4
when 4
human_ev_uuid = d["object_uuid"]
+ state = 5
ws.close
+ when 5
+ assert false, "Should not get any more events"
end
end
end
+
test "connected, not subscribed, no event" do
authorize_with :admin
ws.on :message do |event|
d = Oj.load event.data
case state
- when (1..16)
+ when (1..EventBus::MAX_FILTERS)
assert_equal 200, d["status"]
state += 1
- when 17
+ when (EventBus::MAX_FILTERS+1)
assert_equal 403, d["status"]
ws.close
end