10
10
11
11
12
12
async def override_get_token ():
13
- return {"access_token" : "token_123" , "token_type" : "bearer" }
13
+ return {"access_token" : "token_123" , "token_type" : "bearer" , "isUserAdmin" : False }
14
14
15
15
16
16
app .dependency_overrides [get_token ] = override_get_token
@@ -30,16 +30,22 @@ async def override_get_token():
30
30
}
31
31
32
32
33
+ @patch ("teuthology_api.services.kill.isAdmin" )
33
34
@patch ("subprocess.Popen" )
34
35
@patch ("teuthology_api.services.kill.get_run_details" )
35
36
@patch ("teuthology_api.services.kill.get_username" )
36
- def test_kill_run_success (m_get_username , m_get_run_details , m_popen ):
37
+ def test_kill_run_success (m_get_username , m_get_run_details , m_popen , m_isAdmin ):
37
38
m_get_username .return_value = "user1"
38
- m_get_run_details .return_value = {"id" : "7451978" , "user" : "user1" }
39
+ m_isAdmin .return_value = False
40
+ m_get_run_details .return_value = {
41
+ "id" : "7451978" ,
42
+ "user" : "user1" ,
43
+ "jobs" : [{"owner" : "user1" }],
44
+ }
39
45
mock_process = m_popen .return_value
40
46
mock_process .communicate .return_value = ("logs" , "" )
41
47
mock_process .wait .return_value = 0
42
- response = client .post ("/ kill" , data = json .dumps (mock_kill_args ))
48
+ response = client .post ("kill/ " , data = json .dumps (mock_kill_args ))
43
49
assert response .status_code == 200
44
50
assert response .json () == {"kill" : "success" }
45
51
@@ -48,3 +54,42 @@ def test_kill_run_fail():
48
54
response = client .post ("/kill" , data = json .dumps (mock_kill_args ))
49
55
assert response .status_code == 401
50
56
assert response .json () == {"detail" : "You need to be logged in" }
57
+
58
+
59
+ @patch ("teuthology_api.services.kill.isAdmin" )
60
+ @patch ("subprocess.Popen" )
61
+ @patch ("teuthology_api.services.kill.get_run_details" )
62
+ @patch ("teuthology_api.services.kill.get_username" )
63
+ def test_admin_kill_run_success (m_get_username , m_get_run_details , m_popen , m_isAdmin ):
64
+ m_get_username .return_value = "user1"
65
+ m_isAdmin .return_value = True
66
+ m_get_run_details .return_value = {
67
+ "id" : "7451978" ,
68
+ "user" : "user1" ,
69
+ "jobs" : [{"owner" : "someone_else" }],
70
+ }
71
+ mock_process = m_popen .return_value
72
+ mock_process .communicate .return_value = ("logs" , "" )
73
+ mock_process .wait .return_value = 0
74
+ response = client .post ("kill/" , data = json .dumps (mock_kill_args ))
75
+ assert response .status_code == 200
76
+ assert response .json () == {"kill" : "success" }
77
+
78
+
79
+ @patch ("teuthology_api.services.kill.isAdmin" )
80
+ @patch ("subprocess.Popen" )
81
+ @patch ("teuthology_api.services.kill.get_run_details" )
82
+ @patch ("teuthology_api.services.kill.get_username" )
83
+ def test_non_admin_kill_run_fail (m_get_username , m_get_run_details , m_popen , m_isAdmin ):
84
+ m_get_username .return_value = "user1"
85
+ m_isAdmin .return_value = False
86
+ m_get_run_details .return_value = {
87
+ "id" : "7451978" ,
88
+ "user" : "user1" ,
89
+ "jobs" : [{"owner" : "someone_else" }],
90
+ }
91
+ mock_process = m_popen .return_value
92
+ mock_process .communicate .return_value = ("logs" , "" )
93
+ mock_process .wait .return_value = 0
94
+ response = client .post ("kill/" , data = json .dumps (mock_kill_args ))
95
+ assert response .status_code == 401 # run doesn't belong to user + user is not admin
0 commit comments