1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
9 class AuthEventTest(mocker.Mocker):
11 return arvados_pam.auth_event.AuthEvent(config=self.config, service='test_service', **self.request).can_login()
13 def test_success(self):
14 self.assertTrue(self.attempt())
16 self.api_client.virtual_machines().list.assert_called_with(
17 filters=[['hostname','=',self.config['virtual_machine_hostname']]])
18 self.api.assert_called_with(
20 host=self.config['arvados_api_host'], token=self.request['token'],
23 self.assertEqual(1, len(self.syslogged))
24 for i in ['test_service',
25 self.request['username'],
26 self.config['arvados_api_host'],
27 self.response['virtual_machines']['items'][0]['uuid']]:
28 self.assertRegexpMatches(self.syslogged[0], re.escape(i))
29 self.assertRegexpMatches(self.syslogged[0], re.escape(self.request['token'][0:15]), 'token prefix not logged')
30 self.assertNotRegexpMatches(self.syslogged[0], re.escape(self.request['token'][15:30]), 'too much token logged')
32 def test_fail_vm_lookup(self):
33 self.api_client.virtual_machines().list().execute.side_effect = Exception("Test-induced failure")
34 self.assertFalse(self.attempt())
35 self.assertRegexpMatches(self.syslogged[0], 'Test-induced failure')
37 def test_vm_hostname_not_found(self):
38 self.response['virtual_machines'] = {
42 self.assertFalse(self.attempt())
44 def test_vm_hostname_ambiguous(self):
45 self.response['virtual_machines'] = {
48 'uuid': 'zzzzz-2x53u-382brsig8rp3065',
49 'hostname': 'testvm2.shell',
52 'uuid': 'zzzzz-2x53u-382brsig8rp3065',
53 'hostname': 'testvm2.shell',
58 self.assertFalse(self.attempt())
60 def test_server_ignores_vm_filters(self):
61 self.response['virtual_machines'] = {
64 'uuid': 'zzzzz-2x53u-382brsig8rp3065',
65 'hostname': 'testvm22.shell', # <-----
70 self.assertFalse(self.attempt())
72 def test_fail_user_lookup(self):
73 self.api_client.users().current().execute.side_effect = Exception("Test-induced failure")
74 self.assertFalse(self.attempt())
76 def test_fail_permission_check(self):
77 self.api_client.links().list().execute.side_effect = Exception("Test-induced failure")
78 self.assertFalse(self.attempt())
80 def test_no_login_permission(self):
81 self.response['links'] = {
84 self.assertFalse(self.attempt())
86 def test_server_ignores_permission_filters(self):
87 self.response['links'] = {
89 'uuid': 'zzzzz-o0j2j-rah2ya1ohx9xaev',
90 'tail_uuid': 'zzzzz-tpzed-xurymjxw79nv3jz',
91 'head_uuid': 'zzzzz-2x53u-382brsig8rp3065',
92 'link_class': 'permission',
93 'name': 'CANT_login', # <-----
99 self.assertFalse(self.attempt())