projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
5737: Merge branch 'master' into 5737-ruby231
[arvados.git]
/
services
/
api
/
test
/
integration
/
websocket_test.rb
diff --git
a/services/api/test/integration/websocket_test.rb
b/services/api/test/integration/websocket_test.rb
index 198ea71c00b5acf099b632e592f4e835df7c18ff..a9993b2fc318b4abe6ca0669f64a614250608733 100644
(file)
--- a/
services/api/test/integration/websocket_test.rb
+++ b/
services/api/test/integration/websocket_test.rb
@@
-19,16
+19,20
@@
class WebsocketTest < ActionDispatch::IntegrationTest
s = TCPServer.new('0.0.0.0', 0)
@@port = s.addr[1]
s.close
s = TCPServer.new('0.0.0.0', 0)
@@port = s.addr[1]
s.close
- pidfile = "tmp/pids/passenger.#{@@port}.pid"
+ @@pidfile = "tmp/pids/passenger.#{@@port}.pid"
+ DatabaseCleaner.start
Dir.chdir(Rails.root) do |apidir|
# Only passenger seems to be able to run the websockets server
# successfully.
Dir.chdir(Rails.root) do |apidir|
# Only passenger seems to be able to run the websockets server
# successfully.
- _system('passenger', 'start', '-d', "-p#{@@port}")
+ _system('passenger', 'start', '-d',
+ "-p#{@@port}",
+ "--log-file", "/dev/stderr",
+ "--pid-file", @@pidfile)
timeout = Time.now.tv_sec + 10
begin
sleep 0.2
begin
timeout = Time.now.tv_sec + 10
begin
sleep 0.2
begin
- server_pid = IO.read(pidfile).to_i
+ server_pid = IO.read(
@@
pidfile).to_i
good_pid = (server_pid > 0) and (Process.kill(0, pid) rescue false)
rescue Errno::ENOENT
good_pid = false
good_pid = (server_pid > 0) and (Process.kill(0, pid) rescue false)
rescue Errno::ENOENT
good_pid = false
@@
-37,13
+41,14
@@
class WebsocketTest < ActionDispatch::IntegrationTest
if not good_pid
raise RuntimeError, "could not find API server Rails pid"
end
if not good_pid
raise RuntimeError, "could not find API server Rails pid"
end
- STDERR.puts "Started websocket server on
@@
port #{@@port} with pid #{server_pid}"
+ STDERR.puts "Started websocket server on port #{@@port} with pid #{server_pid}"
end
end
def self.shutdown
Dir.chdir(Rails.root) do
end
end
def self.shutdown
Dir.chdir(Rails.root) do
- _system('passenger', 'stop', "-p#{@@port}")
+ _system('passenger', 'stop', "-p#{@@port}",
+ "--pid-file", @@pidfile)
end
# DatabaseCleaner leaves the database empty. Prefer to leave it full.
dc = DatabaseController.new
end
# DatabaseCleaner leaves the database empty. Prefer to leave it full.
dc = DatabaseController.new
@@
-63,7
+68,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
end
end
end
end
- def ws_helper
(token = nil, timeout = true
)
+ def ws_helper
(token: nil, timeout: 8
)
opened = false
close_status = nil
too_long = false
opened = false
close_status = nil
too_long = false
@@
-78,13
+83,17
@@
class WebsocketTest < ActionDispatch::IntegrationTest
ws.on :open do |event|
opened = true
if timeout
ws.on :open do |event|
opened = true
if timeout
- EM::Timer.new
8
do
+ EM::Timer.new
(timeout)
do
too_long = true if close_status.nil?
EM.stop_event_loop
end
end
end
too_long = true if close_status.nil?
EM.stop_event_loop
end
end
end
+ ws.on :error do |event|
+ STDERR.puts "websocket client error: #{event.inspect}"
+ end
+
ws.on :close do |event|
close_status = [:close, event.code, event.reason]
EM.stop_event_loop
ws.on :close do |event|
close_status = [:close, event.code, event.reason]
EM.stop_event_loop
@@
-112,11
+121,10
@@
class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal 401, status
end
assert_equal 401, status
end
-
test "connect, subscribe and get response" do
status = nil
test "connect, subscribe and get response" do
status = nil
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
@@
-138,7
+146,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
@@
-175,7
+183,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
@@
-215,7
+223,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
end
@@
-253,7
+261,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#specimen']]}.to_json)
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#specimen']]}.to_json)
@@
-298,7
+306,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#trait'], ['event_type', '=', 'update']]}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#trait'], ['event_type', '=', 'update']]}.to_json)
end
@@
-329,8
+337,6
@@
class WebsocketTest < ActionDispatch::IntegrationTest
test "connect, subscribe, ask events starting at seq num" do
state = 1
test "connect, subscribe, ask events starting at seq num" do
state = 1
- human = nil
- human_ev_uuid = nil
authorize_with :active
authorize_with :active
@@
-338,7
+344,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
l1 = nil
l2 = nil
l1 = nil
l2 = nil
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe', last_log_id: lastid}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe', last_log_id: lastid}.to_json)
end
@@
-369,16
+375,14
@@
class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal expect_next_logs[1].object_uuid, l2
end
assert_equal expect_next_logs[1].object_uuid, l2
end
- test "connect, subscribe, get event, unsubscribe" do
- slow_test
+ slow_test "connect, subscribe, get event, unsubscribe" do
state = 1
spec = nil
spec_ev_uuid = nil
state = 1
spec = nil
spec_ev_uuid = nil
- filter_id = nil
authorize_with :active
authorize_with :active
- ws_helper
:active, false
do |ws|
+ ws_helper
(token: :active, timeout: false)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
EM::Timer.new 3 do
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
EM::Timer.new 3 do
@@
-419,15
+423,14
@@
class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal spec.uuid, spec_ev_uuid
end
assert_equal spec.uuid, spec_ev_uuid
end
- test "connect, subscribe, get event, unsubscribe with filter" do
- slow_test
+ slow_test "connect, subscribe, get event, unsubscribe with filter" do
state = 1
spec = nil
spec_ev_uuid = nil
authorize_with :active
state = 1
spec = nil
spec_ev_uuid = nil
authorize_with :active
- ws_helper
:active, false
do |ws|
+ ws_helper
(token: :active, timeout: false)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
EM::Timer.new 6 do
ws.on :open do |event|
ws.send ({method: 'subscribe', filters: [['object_uuid', 'is_a', 'arvados#human']]}.to_json)
EM::Timer.new 6 do
@@
-469,8
+472,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
end
end
- test "connect, subscribe, get event, try to unsubscribe with bogus filter" do
- slow_test
+ slow_test "connect, subscribe, get event, try to unsubscribe with bogus filter" do
state = 1
spec = nil
spec_ev_uuid = nil
state = 1
spec = nil
spec_ev_uuid = nil
@@
-479,7
+481,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
end
@@
-520,13
+522,10
@@
class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal human.uuid, human_ev_uuid
end
assert_equal human.uuid, human_ev_uuid
end
-
-
- test "connected, not subscribed, no event" do
- slow_test
+ slow_test "connected, not subscribed, no event" do
authorize_with :active
authorize_with :active
- ws_helper
:active, false
do |ws|
+ ws_helper
(token: :active, timeout: false)
do |ws|
ws.on :open do |event|
EM::Timer.new 1 do
Specimen.create
ws.on :open do |event|
EM::Timer.new 1 do
Specimen.create
@@
-543,13
+542,12
@@
class WebsocketTest < ActionDispatch::IntegrationTest
end
end
end
end
- test "connected, not authorized to see event" do
- slow_test
+ slow_test "connected, not authorized to see event" do
state = 1
authorize_with :admin
state = 1
authorize_with :admin
- ws_helper
:active, false
do |ws|
+ ws_helper
(token: :active, timeout: false)
do |ws|
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
ws.on :open do |event|
ws.send ({method: 'subscribe'}.to_json)
@@
-577,7
+575,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
test "connect, try bogus method" do
status = nil
test "connect, try bogus method" do
status = nil
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({method: 'frobnabble'}.to_json)
end
ws.on :open do |event|
ws.send ({method: 'frobnabble'}.to_json)
end
@@
-595,7
+593,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
test "connect, missing method" do
status = nil
test "connect, missing method" do
status = nil
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send ({fizzbuzz: 'frobnabble'}.to_json)
end
ws.on :open do |event|
ws.send ({fizzbuzz: 'frobnabble'}.to_json)
end
@@
-613,7
+611,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
test "connect, send malformed request" do
status = nil
test "connect, send malformed request" do
status = nil
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
ws.send '<XML4EVER></XML4EVER>'
end
ws.on :open do |event|
ws.send '<XML4EVER></XML4EVER>'
end
@@
-634,7
+632,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
(1..17).each do |i|
ws.send ({method: 'subscribe', filters: [['object_uuid', '=', i]]}.to_json)
ws.on :open do |event|
(1..17).each do |i|
ws.send ({method: 'subscribe', filters: [['object_uuid', '=', i]]}.to_json)
@@
-659,15
+657,14
@@
class WebsocketTest < ActionDispatch::IntegrationTest
end
end
- test "connect, subscribe, lots of events" do
- slow_test
+ slow_test "connect, subscribe, lots of events" do
state = 1
event_count = 0
log_start = Log.order(:id).last.id
authorize_with :active
state = 1
event_count = 0
log_start = Log.order(:id).last.id
authorize_with :active
- ws_helper
:active, false
do |ws|
+ ws_helper
(token: :active, timeout: false)
do |ws|
EM::Timer.new 45 do
# Needs a longer timeout than the default
ws.close
EM::Timer.new 45 do
# Needs a longer timeout than the default
ws.close
@@
-684,7
+681,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal 200, d["status"]
ActiveRecord::Base.transaction do
(1..202).each do
assert_equal 200, d["status"]
ActiveRecord::Base.transaction do
(1..202).each do
-
spec =
Specimen.create
+ Specimen.create
end
end
state = 2
end
end
state = 2
@@
-705,12
+702,10
@@
class WebsocketTest < ActionDispatch::IntegrationTest
test "connect, subscribe with invalid filter" do
state = 1
test "connect, subscribe with invalid filter" do
state = 1
- human = nil
- human_ev_uuid = nil
authorize_with :active
authorize_with :active
- ws_helper
:active
do |ws|
+ ws_helper
(token: :active)
do |ws|
ws.on :open do |event|
# test that #6451 is fixed (invalid filter crashes websockets)
ws.send ({method: 'subscribe', filters: [['object_blarg', 'is_a', 'arvados#human']]}.to_json)
ws.on :open do |event|
# test that #6451 is fixed (invalid filter crashes websockets)
ws.send ({method: 'subscribe', filters: [['object_blarg', 'is_a', 'arvados#human']]}.to_json)
@@
-722,7
+717,7
@@
class WebsocketTest < ActionDispatch::IntegrationTest
when 1
assert_equal 200, d["status"]
Specimen.create
when 1
assert_equal 200, d["status"]
Specimen.create
-
human =
Human.create
+ Human.create
state = 2
when 2
assert_equal 500, d["status"]
state = 2
when 2
assert_equal 500, d["status"]