10865: Add test for check_enable_legacy_jobs_api
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 20 Sep 2018 16:57:40 +0000 (12:57 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 20 Sep 2018 16:59:02 +0000 (12:59 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

services/api/config/initializers/legacy_jobs_api.rb
services/api/lib/enable_jobs_api.rb [new file with mode: 0644]
services/api/test/unit/job_test.rb

index eecf337daaff7ff75e604f85f3abda828fcc0167..ae98a3d130d4cffe936961ab1acb04e15d8ae036 100644 (file)
@@ -7,38 +7,8 @@
 # classes.
 require_relative 'load_config.rb'
 
+require 'enable_jobs_api'
+
 Server::Application.configure do
-  # Use exec_query because the Job model isn't loaded yet
-  # it returns the string '0', not converted to integer.
-  if Rails.configuration.enable_legacy_jobs_api == false ||
-     (Rails.configuration.enable_legacy_jobs_api == "auto" &&
-      ActiveRecord::Base.connection.exec_query('select count(*) from jobs').first['count'] == '0')
-    Rails.configuration.disable_api_methods = ["jobs.create",
-                                               "pipeline_instances.create",
-                                               "pipeline_templates.create",
-                                               "jobs.get",
-                                               "pipeline_instances.get",
-                                               "pipeline_templates.get",
-                                               "jobs.list",
-                                               "pipeline_instances.list",
-                                               "pipeline_templates.list",
-                                               "jobs.index",
-                                               "pipeline_instances.index",
-                                               "pipeline_templates.index",
-                                               "jobs.update",
-                                               "pipeline_instances.update",
-                                               "pipeline_templates.update",
-                                               "jobs.queue",
-                                               "jobs.queue_size",
-                                               "job_tasks.create",
-                                               "job_tasks.get",
-                                               "job_tasks.list",
-                                               "job_tasks.index",
-                                               "job_tasks.update",
-                                               "jobs.show",
-                                               "pipeline_instances.show",
-                                               "pipeline_templates.show",
-                                               "jobs.show",
-                                               "job_tasks.show"]
-  end
+  check_enable_legacy_jobs_api
 end
diff --git a/services/api/lib/enable_jobs_api.rb b/services/api/lib/enable_jobs_api.rb
new file mode 100644 (file)
index 0000000..d99edd8
--- /dev/null
@@ -0,0 +1,39 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+Disable_jobs_api_method_list = ["jobs.create",
+                                               "pipeline_instances.create",
+                                               "pipeline_templates.create",
+                                               "jobs.get",
+                                               "pipeline_instances.get",
+                                               "pipeline_templates.get",
+                                               "jobs.list",
+                                               "pipeline_instances.list",
+                                               "pipeline_templates.list",
+                                               "jobs.index",
+                                               "pipeline_instances.index",
+                                               "pipeline_templates.index",
+                                               "jobs.update",
+                                               "pipeline_instances.update",
+                                               "pipeline_templates.update",
+                                               "jobs.queue",
+                                               "jobs.queue_size",
+                                               "job_tasks.create",
+                                               "job_tasks.get",
+                                               "job_tasks.list",
+                                               "job_tasks.index",
+                                               "job_tasks.update",
+                                               "jobs.show",
+                                               "pipeline_instances.show",
+                                               "pipeline_templates.show",
+                                               "jobs.show",
+                                               "job_tasks.show"]
+
+def check_enable_legacy_jobs_api
+  if Rails.configuration.enable_legacy_jobs_api == false ||
+     (Rails.configuration.enable_legacy_jobs_api == "auto" &&
+      ActiveRecord::Base.connection.exec_query("select count(*) from jobs").first["count"] == "0")
+    Rails.configuration.disable_api_methods = Disable_jobs_api_method_list
+  end
+end
index 5f389c2545fa20bafd7ace1736b740abb44f3538..fc6a97cf7480c645206c867e3449822bfcfa41a5 100644 (file)
@@ -645,4 +645,32 @@ class JobTest < ActiveSupport::TestCase
     child = Job.find_by_uuid job.components.collect{|_, uuid| uuid}[0]
     assert_equal Job::Cancelled, child.state
   end
+
+  test 'enable legacy api configuration option = true' do
+    Rails.configuration.enable_legacy_jobs_api = true
+    check_enable_legacy_jobs_api
+    assert_equal [], Rails.configuration.disable_api_methods
+  end
+
+  test 'enable legacy api configuration option = false' do
+    Rails.configuration.enable_legacy_jobs_api = false
+    check_enable_legacy_jobs_api
+    assert_equal Disable_jobs_api_method_list, Rails.configuration.disable_api_methods
+  end
+
+  test 'enable legacy api configuration option = auto, has jobs' do
+    Rails.configuration.enable_legacy_jobs_api = "auto"
+    check_enable_legacy_jobs_api
+    assert_equal [], Rails.configuration.disable_api_methods
+  end
+
+  test 'enable legacy api configuration option = auto, no jobs' do
+    Rails.configuration.enable_legacy_jobs_api = "auto"
+    act_as_system_user do
+      Job.destroy_all
+    end
+    puts "ZZZ #{Job.count}"
+    check_enable_legacy_jobs_api
+    assert_equal Disable_jobs_api_method_list, Rails.configuration.disable_api_methods
+  end
 end