13593: Moves & enhances group creation with async=true test.
authorLucas Di Pentima <ldipentima@veritasgenetics.com>
Tue, 12 Mar 2019 18:58:57 +0000 (15:58 -0300)
committerLucas Di Pentima <ldipentima@veritasgenetics.com>
Tue, 12 Mar 2019 18:58:57 +0000 (15:58 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

services/api/lib/refresh_permission_view.rb
services/api/test/functional/arvados/v1/groups_controller_test.rb
services/api/test/integration/groups_test.rb

index f3e1ed6a4575e44c78d707e55610e7f8a384b9ba..25be3c08d4d40d8f7dbc7307e76bc7d2423997a6 100644 (file)
@@ -14,7 +14,11 @@ end
 def refresh_permission_view(async=false)
   if async and Rails.configuration.async_permissions_update_interval > 0
     exp = Rails.configuration.async_permissions_update_interval.seconds
+    need = false
     Rails.cache.fetch('AsyncRefreshPermissionView', expires_in: exp) do
+      need = true
+    end
+    if need
       # Schedule a new permission update and return immediately
       Thread.new do
         Thread.current.abort_on_exception = false
index 564a94d51d2f1158636244f1bc4ae08a610784b1..55493046ed5f10fc2744ff911d1a53d683208321 100644 (file)
@@ -403,20 +403,6 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
                  new_project['name'])
   end
 
-  test "create request with async=true returns 202 Accepted" do
-    name = "Random group #{rand(1000)}"
-    assert_equal nil, Group.find_by_name(name)
-    authorize_with :active
-    post :create, {
-      group: {
-        name: name
-      },
-      async: true
-    }
-    assert_response :accepted
-    assert_not_equal nil, Group.find_by_name(name)
-  end
-
   test "unsharing a project results in hiding it from previously shared user" do
     # remove sharing link for project
     @controller = Arvados::V1::LinksController.new
index c4ab3cffc8877ffea777424b432122252f60440a..6b1bf795ed7eced1e872809358150c324e234239 100644 (file)
@@ -122,4 +122,36 @@ class GroupsTest < ActionDispatch::IntegrationTest
     assert_includes coll_uuids, collections(:foo_collection_in_aproject).uuid
     assert_not_includes coll_uuids, collections(:expired_collection).uuid
   end
+
+  test "create request with async=true defers permissions update" do
+    Rails.configuration.async_permissions_update_interval = 1 # seconds
+    name = "Random group #{rand(1000)}"
+    assert_equal nil, Group.find_by_name(name)
+    post "/arvados/v1/groups", {
+      group: {
+        name: name
+      },
+      async: true
+    }, auth(:active)
+    assert_response 202
+    g = Group.find_by_name(name)
+    assert_not_nil g
+    get "/arvados/v1/groups", {
+      filters: [["name", "=", name]].to_json,
+      limit: 10
+    }, auth(:active)
+    assert_response 200
+    assert_equal 0, json_response['items_available']
+
+    # Unblock the thread doing the permissions update
+    ActiveRecord::Base.clear_active_connections!
+
+    sleep(3)
+    get "/arvados/v1/groups", {
+      filters: [["name", "=", name]].to_json,
+      limit: 10
+    }, auth(:active)
+    assert_response 200
+    assert_equal 1, json_response['items_available']
+  end
 end