8460: Merge branch 'master' into 8460-websocket-go
[arvados.git] / services / api / test / unit / node_test.rb
index 96d31a8c4c679c2b508490c53f30d3bf7db23e87..6eb1df56d129f0279c2e86323b865d13fd09817c 100644 (file)
@@ -90,17 +90,12 @@ class NodeTest < ActiveSupport::TestCase
     assert_nil node.hostname
   end
 
-  [
-    'compute#{slot_number.to_s.rjust(4, "0")}',
-    'compute%<slot_number>04d',
-  ].each do |config|
-    test "ping new node with zero padding config #{config}" do
-      Rails.configuration.assign_node_hostname = config
-      node = ping_node(:new_with_no_hostname, {})
-      slot_number = node.slot_number
-      refute_nil slot_number
-      assert_equal("compute000#{slot_number}", node.hostname)
-    end
+  test "ping new node with zero padding config" do
+    Rails.configuration.assign_node_hostname = 'compute%<slot_number>04d'
+    node = ping_node(:new_with_no_hostname, {})
+    slot_number = node.slot_number
+    refute_nil slot_number
+    assert_equal("compute000#{slot_number}", node.hostname)
   end
 
   test "ping node with hostname and config and expect hostname unchanged" do
@@ -116,7 +111,7 @@ class NodeTest < ActiveSupport::TestCase
     assert_equal("custom1", node.hostname)
   end
 
-  # Ping two nodes: one with no hostname and the other with a hostname.
+  # Ping two nodes: one without a hostname and the other with a hostname.
   # Verify that the first one gets a hostname and second one is unchanged.
   test "ping two nodes one with no hostname and one with hostname and check hostnames" do
     # ping node with no hostname and expect it set with config format
@@ -131,10 +126,30 @@ class NodeTest < ActiveSupport::TestCase
     assert_equal "custom1", node2.hostname
   end
 
-  test "ping node with no hostname and malformed config and expect nil for hostname" do
-    Rails.configuration.assign_node_hostname = 'compute%<slot_number>04'  # should end with "04d"
-    node = ping_node(:new_with_no_hostname, {})
-    refute_nil node.slot_number
-    assert_equal(nil, node.hostname)
+  test "update dns when nodemanager clears hostname and ip_address" do
+    act_as_system_user do
+      node = ping_node(:new_with_custom_hostname, {})
+      Node.expects(:dns_server_update).with(node.hostname, Node::UNUSED_NODE_IP)
+      node.update_attributes(hostname: nil, ip_address: nil)
+    end
+  end
+
+  test "update dns when hostname changes" do
+    act_as_system_user do
+      node = ping_node(:new_with_custom_hostname, {})
+
+      Node.expects(:dns_server_update).with(node.hostname, Node::UNUSED_NODE_IP)
+      Node.expects(:dns_server_update).with('foo0', node.ip_address)
+      node.update_attributes!(hostname: 'foo0')
+
+      Node.expects(:dns_server_update).with('foo0', Node::UNUSED_NODE_IP)
+      node.update_attributes!(hostname: nil, ip_address: nil)
+
+      Node.expects(:dns_server_update).with('foo0', '10.11.12.13')
+      node.update_attributes!(hostname: 'foo0', ip_address: '10.11.12.13')
+
+      Node.expects(:dns_server_update).with('foo0', '10.11.12.14')
+      node.update_attributes!(hostname: 'foo0', ip_address: '10.11.12.14')
+    end
   end
 end