[ARVADOS] updated: 87f17f28080eef37ad940a039fd1623e72e3058e
git at public.curoverse.com
git at public.curoverse.com
Thu Apr 24 16:03:27 EDT 2014
Summary of changes:
services/api/Gemfile | 1 +
services/api/Gemfile.lock | 2 +
services/api/lib/eventbus.rb | 10 ++-
services/api/test/integration/websocket_test.rb | 90 +++++++++++++----------
4 files changed, 63 insertions(+), 40 deletions(-)
via 87f17f28080eef37ad940a039fd1623e72e3058e (commit)
from c72f1de32f688690d1161a1852e471e88919e057 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 87f17f28080eef37ad940a039fd1623e72e3058e
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date: Thu Apr 24 16:03:21 2014 -0400
Websocket tests now use database cleaner instead of ActiveRecord's
transactional fixtures because the transaction needs to commit in order for
NOTIFY/LISTEN to work. Fixed 'log' -> 'logs' table names in eventbus.rb.
First test for publishing an actual database change works.
diff --git a/services/api/Gemfile b/services/api/Gemfile
index 8e4aa18..3b715d3 100644
--- a/services/api/Gemfile
+++ b/services/api/Gemfile
@@ -63,6 +63,7 @@ gem 'test_after_commit', :group => :test
gem 'google-api-client', '~> 0.6.3'
gem 'trollop'
gem 'faye-websocket'
+gem 'database_cleaner'
gem 'themes_for_rails'
diff --git a/services/api/Gemfile.lock b/services/api/Gemfile.lock
index c87acc6..d00e681 100644
--- a/services/api/Gemfile.lock
+++ b/services/api/Gemfile.lock
@@ -69,6 +69,7 @@ GEM
coffee-script-source (1.7.0)
curb (0.8.5)
daemon_controller (1.2.0)
+ database_cleaner (1.2.0)
erubis (2.7.0)
eventmachine (1.0.3)
execjs (2.0.2)
@@ -207,6 +208,7 @@ DEPENDENCIES
andand
arvados-cli (>= 0.1.20140328152103)
coffee-rails (~> 3.2.0)
+ database_cleaner
faye-websocket
google-api-client (~> 0.6.3)
jquery-rails
diff --git a/services/api/lib/eventbus.rb b/services/api/lib/eventbus.rb
index c2a6c6d..c93f2e5 100644
--- a/services/api/lib/eventbus.rb
+++ b/services/api/lib/eventbus.rb
@@ -51,6 +51,9 @@ class EventBus
ws.last_log_id = nil
sub = @channel.subscribe do |msg|
+ begin
+ puts "Waking up"
+
# Must have at least one filter set up to receive events
if ws.filters.length > 0
@@ -59,10 +62,10 @@ class EventBus
if ws.last_log_id
# Only get log rows that are new
- logs = logs.where("log.id > ? and log.id <= ?", ws.last_log_id, msg.to_i)
+ logs = logs.where("logs.id > ? and logs.id <= ?", ws.last_log_id, msg.to_i)
else
# No last log id, so only look at the most recently changed row
- logs = logs.where("log.id = ?", msg.to_i)
+ logs = logs.where("logs.id = ?", msg.to_i)
end
# Record the most recent row
@@ -90,6 +93,9 @@ class EventBus
# No filters set up, so just record the sequence number
ws.last_log_id.nil = msg.to_i
end
+ rescue Exception => e
+ puts "#{e}"
+ end
end
ws.on :message do |event|
diff --git a/services/api/test/integration/websocket_test.rb b/services/api/test/integration/websocket_test.rb
index bafab66..8f28fc8 100644
--- a/services/api/test/integration/websocket_test.rb
+++ b/services/api/test/integration/websocket_test.rb
@@ -1,10 +1,24 @@
require 'test_helper'
require 'websocket_runner'
require 'oj'
+require 'database_cleaner'
+
+DatabaseCleaner.strategy = :deletion
class WebsocketTest < ActionDispatch::IntegrationTest
+ self.use_transactional_fixtures = false
+
+ setup do
+ DatabaseCleaner.start
+ end
+
+ teardown do
+ DatabaseCleaner.clean
+ end
def ws_helper (token = nil)
+ close_status = nil
+
EM.run {
if token
ws = Faye::WebSocket::Client.new("ws://localhost:3002/websocket?api_token=#{api_client_authorizations(token).api_token}")
@@ -13,16 +27,19 @@ class WebsocketTest < ActionDispatch::IntegrationTest
end
ws.on :close do |event|
+ close_status = [:close, event.code, event.reason]
EM.stop_event_loop
end
EM::Timer.new 3 do
- puts "\nTest took too long"
EM.stop_event_loop
end
yield ws
}
+
+ assert_not_nil close_status, "Test took too long"
+ assert_equal 1000, close_status[1], "Server closed the connection unexpectedly (check server log for errors)"
end
test "connect with no token" do
@@ -67,43 +84,40 @@ class WebsocketTest < ActionDispatch::IntegrationTest
assert_equal 200, status
end
+ test "connect, subscribe, get event" do
+ opened = false
+ state = 1
+ spec_uuid = nil
+ ev_uuid = nil
+
+ authorize_with :admin
- # test "connect, subscribe, get event" do
- # opened = false
- # state = 1
- # spec_uuid = nil
- # ev_uuid = nil
-
- # puts "user #{Thread.current[:user]}"
- # authorize_with :admin
- # puts "user #{Thread.current[:user]}"
-
- # ws_helper :admin do |ws|
- # ws.on :open do |event|
- # puts "XXX"
- # opened = true
- # ws.send ({method: 'subscribe'}.to_json)
- # end
-
- # ws.on :message do |event|
- # d = Oj.load event.data
- # puts d
- # case state
- # when 1
- # assert_equal 200, d["status"]
- # spec_uuid = Specimen.create.save.uuid
- # state = 2
- # when 2
- # ev_uuid = d["uuid"]
- # ws.close
- # end
- # end
-
- # end
-
- # assert opened, "Should have opened web socket"
- # assert_not spec_uuid.nil?
- # assert_equal spec_uuid, ev_uuid
- # end
+ ws_helper :admin do |ws|
+ ws.on :open do |event|
+ opened = true
+ ws.send ({method: 'subscribe'}.to_json)
+ end
+
+ ws.on :message do |event|
+ d = Oj.load event.data
+ case state
+ when 1
+ assert_equal 200, d["status"]
+ spec = Specimen.create
+ spec.save
+ spec_uuid = spec.uuid
+ state = 2
+ when 2
+ ev_uuid = d["object_uuid"]
+ ws.close
+ end
+ end
+
+ end
+
+ assert opened, "Should have opened web socket"
+ assert_not_nil spec_uuid
+ assert_equal spec_uuid, ev_uuid
+ end
end
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list