From fc4f842bfa62b4ab5e6a9d233eb88cc78758f376 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Thu, 5 May 2022 14:14:57 -0400 Subject: [PATCH] 18794: Fix wb1 health-check tests, add metrics tests. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- .../healthcheck_controller_test.rb | 37 --------- .../controllers/management_controller_test.rb | 76 +++++++++++++++++++ 2 files changed, 76 insertions(+), 37 deletions(-) delete mode 100644 apps/workbench/test/controllers/healthcheck_controller_test.rb create mode 100644 apps/workbench/test/controllers/management_controller_test.rb diff --git a/apps/workbench/test/controllers/healthcheck_controller_test.rb b/apps/workbench/test/controllers/healthcheck_controller_test.rb deleted file mode 100644 index c3a0ddea90..0000000000 --- a/apps/workbench/test/controllers/healthcheck_controller_test.rb +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) The Arvados Authors. All rights reserved. -# -# SPDX-License-Identifier: AGPL-3.0 - -require 'test_helper' - -class HealthcheckControllerTest < ActionController::TestCase - reset_api_fixtures :after_each_test, false - reset_api_fixtures :after_suite, false - - [ - [false, nil, 404, 'disabled'], - [true, nil, 401, 'authorization required'], - [true, 'badformatwithnoBearer', 403, 'authorization error'], - [true, 'Bearer wrongtoken', 403, 'authorization error'], - [true, 'Bearer configuredmanagementtoken', 200, '{"health":"OK"}'], - ].each do |enabled, header, error_code, error_msg| - test "ping when #{if enabled then 'enabled' else 'disabled' end} with header '#{header}'" do - if enabled - Rails.configuration.ManagementToken = 'configuredmanagementtoken' - else - Rails.configuration.ManagementToken = "" - end - - @request.headers['Authorization'] = header - get :ping - assert_response error_code - - resp = JSON.parse(@response.body) - if error_code == 200 - assert_equal(JSON.load('{"health":"OK"}'), resp) - else - assert_equal(resp['errors'], error_msg) - end - end - end -end diff --git a/apps/workbench/test/controllers/management_controller_test.rb b/apps/workbench/test/controllers/management_controller_test.rb new file mode 100644 index 0000000000..80dc944349 --- /dev/null +++ b/apps/workbench/test/controllers/management_controller_test.rb @@ -0,0 +1,76 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +require 'test_helper' + +class ManagementControllerTest < ActionController::TestCase + reset_api_fixtures :after_each_test, false + reset_api_fixtures :after_suite, false + + [ + [false, nil, 404, 'disabled'], + [true, nil, 401, 'authorization required'], + [true, 'badformatwithnoBearer', 403, 'authorization error'], + [true, 'Bearer wrongtoken', 403, 'authorization error'], + [true, 'Bearer configuredmanagementtoken', 200, '{"health":"OK"}'], + ].each do |enabled, header, error_code, error_msg| + test "health check ping when #{if enabled then 'enabled' else 'disabled' end} with header '#{header}'" do + if enabled + Rails.configuration.ManagementToken = 'configuredmanagementtoken' + else + Rails.configuration.ManagementToken = "" + end + + @request.headers['Authorization'] = header + get(:health, params: {check: 'ping'}) + assert_response error_code + + resp = JSON.parse(@response.body) + if error_code == 200 + assert_equal(JSON.load('{"health":"OK"}'), resp) + else + assert_equal(resp['errors'], error_msg) + end + end + end + + test "metrics" do + mtime = File.mtime(ENV["ARVADOS_CONFIG"]) + hash = Digest::SHA256.hexdigest(File.read(ENV["ARVADOS_CONFIG"])) + Rails.configuration.ManagementToken = "configuredmanagementtoken" + @request.headers['Authorization'] = "Bearer configuredmanagementtoken" + get :metrics + assert_response :success + assert_equal 'text/plain', @response.content_type + + assert_match /\narvados_config_source_timestamp_seconds{sha256="#{hash}"} #{Regexp.escape mtime.utc.to_f.to_s}\n/, @response.body + + # Expect mtime < loadtime < now + m = @response.body.match(/\narvados_config_load_timestamp_seconds{sha256="#{hash}"} (.*?)\n/) + assert_operator m[1].to_f, :>, mtime.utc.to_f + assert_operator m[1].to_f, :<, Time.now.utc.to_f + + assert_match /\narvados_version_running{version="#{Regexp.escape AppVersion.package_version}"} 1\n/, @response.body + end + + test "metrics disabled" do + Rails.configuration.ManagementToken = "" + @request.headers['Authorization'] = "Bearer configuredmanagementtoken" + get :metrics + assert_response 404 + end + + test "metrics bad token" do + Rails.configuration.ManagementToken = "configuredmanagementtoken" + @request.headers['Authorization'] = "Bearer asdf" + get :metrics + assert_response 403 + end + + test "metrics unauthorized" do + Rails.configuration.ManagementToken = "configuredmanagementtoken" + get :metrics + assert_response 401 + end +end -- 2.30.2