3 class Arvados::V1::ApiClientAuthorizationsControllerTest < ActionController::TestCase
4 test "should get index" do
5 authorize_with :active_trustedclient
7 assert_response :success
10 test "should not get index with expired auth" do
11 authorize_with :expired
12 get :index, format: :json
16 test "should not get index from untrusted client" do
17 authorize_with :active
22 test "create system auth" do
23 authorize_with :admin_trustedclient
24 post :create_system_auth, scopes: '["test"]'
25 assert_response :success
26 assert_not_nil JSON.parse(@response.body)['uuid']
29 test "prohibit create system auth with token from non-trusted client" do
31 post :create_system_auth, scopes: '["test"]'
35 test "prohibit create system auth by non-admin" do
36 authorize_with :active
37 post :create_system_auth, scopes: '["test"]'
41 def assert_found_tokens(auth, search_params, expected)
43 expected_tokens = expected.map do |name|
44 api_client_authorizations(name).api_token
46 get :index, search_params
47 assert_response :success
48 got_tokens = JSON.parse(@response.body)['items']
49 .map { |auth| auth['api_token'] }
50 assert_equal(expected_tokens.sort, got_tokens.sort,
51 "wrong results for #{search_params.inspect}")
54 # Three-tuples with auth to use, scopes to find, and expected tokens.
55 # Make two tests for each tuple, one searching with where and the other
57 [[:admin_trustedclient, [], [:admin_noscope]],
58 [:active_trustedclient, ["GET /arvados/v1/users"], [:active_userlist]],
59 [:active_trustedclient,
60 ["POST /arvados/v1/api_client_authorizations",
61 "GET /arvados/v1/api_client_authorizations"],
63 ].each do |auth, scopes, expected|
64 test "#{auth.to_s} can find auths where scopes=#{scopes.inspect}" do
65 assert_found_tokens(auth, {where: {scopes: scopes}}, expected)
68 test "#{auth.to_s} can find auths filtered with scopes=#{scopes.inspect}" do
69 assert_found_tokens(auth, {filters: [['scopes', '=', scopes]]}, expected)
72 test "#{auth.to_s} offset works with filter scopes=#{scopes.inspect}" do
73 assert_found_tokens(auth, {
74 offset: expected.length,
75 filters: [['scopes', '=', scopes]]
80 [# anyone can look up the token they're currently using
81 [:admin, :admin, 200, 200, 1],
82 [:active, :active, 200, 200, 1],
83 # cannot look up other tokens (even for same user) if not trustedclient
84 [:admin, :active, 403, 403],
85 [:admin, :admin_vm, 403, 403],
86 [:active, :admin, 403, 403],
87 # cannot look up other tokens for other users, regardless of trustedclient
88 [:admin_trustedclient, :active, 404, 200, 0],
89 [:active_trustedclient, :admin, 404, 200, 0],
90 ].each do |user, token, expect_get_response, expect_list_response, expect_list_items|
91 test "using '#{user}', get '#{token}' by uuid" do
94 id: api_client_authorizations(token).uuid,
96 assert_response expect_get_response
99 test "using '#{user}', update '#{token}' by uuid" do
102 id: api_client_authorizations(token).uuid,
103 api_client_authorization: {},
105 assert_response expect_get_response
108 test "using '#{user}', delete '#{token}' by uuid" do
111 id: api_client_authorizations(token).uuid,
113 assert_response expect_get_response
116 test "using '#{user}', list '#{token}' by uuid" do
119 filters: [['uuid','=',api_client_authorizations(token).uuid]],
121 assert_response expect_list_response
123 assert_equal assigns(:objects).length, expect_list_items
124 assert_equal json_response['items_available'], expect_list_items
129 test "using '#{user}', list '#{token}' by uuid with offset" do
132 filters: [['uuid','=',api_client_authorizations(token).uuid]],
133 offset: expect_list_items,
135 assert_response expect_list_response
136 assert_equal json_response['items_available'], expect_list_items
137 assert_equal json_response['items'].length, 0
141 test "using '#{user}', list '#{token}' by token" do
144 filters: [['api_token','=',api_client_authorizations(token).api_token]],
146 assert_response expect_list_response
148 assert_equal assigns(:objects).length, expect_list_items
149 assert_equal json_response['items_available'], expect_list_items
154 test "scoped token cannot change its own scopes" do
155 authorize_with :admin_vm
157 id: api_client_authorizations(:admin_vm).uuid,
158 api_client_authorization: {scopes: ['all']},
163 test "token cannot change its own uuid" do
164 authorize_with :admin
166 id: api_client_authorizations(:admin).uuid,
167 api_client_authorization: {uuid: 'zzzzz-gj3su-zzzzzzzzzzzzzzz'},