[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