Merge branch '20257-http-import' refs #20257
[arvados.git] / apps / workbench / test / controllers / management_controller_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'test_helper'
6
7 class ManagementControllerTest < ActionController::TestCase
8   reset_api_fixtures :after_each_test, false
9   reset_api_fixtures :after_suite, false
10
11   [
12     [false, nil, 404, 'disabled'],
13     [true, nil, 401, 'authorization required'],
14     [true, 'badformatwithnoBearer', 403, 'authorization error'],
15     [true, 'Bearer wrongtoken', 403, 'authorization error'],
16     [true, 'Bearer configuredmanagementtoken', 200, '{"health":"OK"}'],
17   ].each do |enabled, header, error_code, error_msg|
18     test "health check ping when #{if enabled then 'enabled' else 'disabled' end} with header '#{header}'" do
19       if enabled
20         Rails.configuration.ManagementToken = 'configuredmanagementtoken'
21       else
22         Rails.configuration.ManagementToken = ""
23       end
24
25       @request.headers['Authorization'] = header
26       get(:health, params: {check: 'ping'})
27       assert_response error_code
28
29       resp = JSON.parse(@response.body)
30       if error_code == 200
31         assert_equal(JSON.load('{"health":"OK"}'), resp)
32       else
33         assert_equal(resp['errors'], error_msg)
34       end
35     end
36   end
37
38   test "metrics" do
39     mtime = File.mtime(ENV["ARVADOS_CONFIG"])
40     hash = Digest::SHA256.hexdigest(File.read(ENV["ARVADOS_CONFIG"]))
41     Rails.configuration.ManagementToken = "configuredmanagementtoken"
42     @request.headers['Authorization'] = "Bearer configuredmanagementtoken"
43     get :metrics
44     assert_response :success
45     assert_equal 'text/plain', @response.content_type
46
47     assert_match /\narvados_config_source_timestamp_seconds{sha256="#{hash}"} #{Regexp.escape mtime.utc.to_f.to_s}\n/, @response.body
48
49     # Expect mtime < loadtime < now
50     m = @response.body.match(/\narvados_config_load_timestamp_seconds{sha256="#{hash}"} (.*?)\n/)
51     assert_operator m[1].to_f, :>, mtime.utc.to_f
52     assert_operator m[1].to_f, :<, Time.now.utc.to_f
53
54     assert_match /\narvados_version_running{version="#{Regexp.escape AppVersion.package_version}"} 1\n/, @response.body
55   end
56
57   test "metrics disabled" do
58     Rails.configuration.ManagementToken = ""
59     @request.headers['Authorization'] = "Bearer configuredmanagementtoken"
60     get :metrics
61     assert_response 404
62   end
63
64   test "metrics bad token" do
65     Rails.configuration.ManagementToken = "configuredmanagementtoken"
66     @request.headers['Authorization'] = "Bearer asdf"
67     get :metrics
68     assert_response 403
69   end
70
71   test "metrics unauthorized" do
72     Rails.configuration.ManagementToken = "configuredmanagementtoken"
73     get :metrics
74     assert_response 401
75   end
76 end