13994: Merge branch 'master' into 13994-proxy-remote
[arvados.git] / services / api / test / unit / container_test.rb
index b1d35c55f0f1a8f011a24b0d15e2ed2a91887a26..b8acd4fd092b2cf788f3bc699fb9f9678a04f125 100644 (file)
@@ -131,11 +131,47 @@ class ContainerTest < ActiveSupport::TestCase
     end
   end
 
+  test "Container runtime_status data types" do
+    set_user_from_auth :active
+    attrs = {
+      environment: {},
+      mounts: {"BAR" => {"kind" => "FOO"}},
+      output_path: "/tmp",
+      priority: 1,
+      runtime_constraints: {"vcpus" => 1, "ram" => 1}
+    }
+    c, _ = minimal_new(attrs)
+    assert_equal c.runtime_status, {}
+    assert_equal Container::Queued, c.state
+
+    set_user_from_auth :dispatch1
+    c.update_attributes! state: Container::Locked
+    c.update_attributes! state: Container::Running
+
+    [
+      'error', 'errorDetail', 'warning', 'warningDetail', 'activity'
+    ].each do |k|
+      # String type is allowed
+      string_val = 'A string is accepted'
+      c.update_attributes! runtime_status: {k => string_val}
+      assert_equal string_val, c.runtime_status[k]
+
+      # Other types aren't allowed
+      [
+        42, false, [], {}, nil
+      ].each do |unallowed_val|
+        assert_raises ActiveRecord::RecordInvalid do
+          c.update_attributes! runtime_status: {k => unallowed_val}
+        end
+      end
+    end
+  end
+
   test "Container runtime_status updates" do
     set_user_from_auth :active
     attrs = {
       environment: {},
-      mounts: {"BAR" => "FOO"},
+      mounts: {"BAR" => {"kind" => "FOO"}},
       output_path: "/tmp",
       priority: 1,
       runtime_constraints: {"vcpus" => 1, "ram" => 1}
@@ -342,6 +378,7 @@ class ContainerTest < ActiveSupport::TestCase
                                  progress: 0.1})
     c_faster_started_first.update_attributes!({state: Container::Locked})
     c_faster_started_first.update_attributes!({state: Container::Running,
+                                               runtime_status: {'warning' => 'This is not an error'},
                                                progress: 0.15})
     c_faster_started_second.update_attributes!({state: Container::Locked})
     c_faster_started_second.update_attributes!({state: Container::Running,