1
1
# -*- coding: utf-8 -*-
2
+ import pytest
3
+
2
4
from rrmngmnt import Host , User
3
5
from .common import FakeExecutorFactory
4
6
import rrmngmnt .package_manager as pm
8
10
host_executor_factory = Host .executor_factory
9
11
10
12
11
- def extend_cmd (cmd , * args ):
13
+ def _extend_cmd (cmd , sudo , * args ):
12
14
cmd = list (cmd )
15
+ if sudo :
16
+ cmd .insert (0 , "sudo" )
17
+
13
18
cmd .extend (args )
14
19
return list2cmdline (cmd )
15
20
16
21
17
- def join_cmds (* args ):
22
+ def extend_cmd (cmd , * args ):
23
+ return _extend_cmd (cmd , False , * args )
24
+
25
+
26
+ def sudo_extend_cmd (cmd , * args ):
27
+ return _extend_cmd (cmd , True , * args )
28
+
29
+
30
+ def _join_cmd (sudo , * args ):
18
31
cmd = []
32
+ if sudo :
33
+ cmd .append ("sudo" )
34
+
19
35
for _cmd in args :
20
36
cmd += list (_cmd )
21
37
return list2cmdline (cmd )
22
38
23
39
40
+ def join_cmds (* args ):
41
+ return _join_cmd (False , * args )
42
+
43
+
44
+ def sudo_join_cmds (* args ):
45
+ return _join_cmd (True , * args )
46
+
47
+
24
48
def teardown_module ():
25
49
Host .executor_factory = host_executor_factory
26
50
@@ -29,6 +53,7 @@ def fake_cmd_data(cmd_to_data, files=None):
29
53
Host .executor_factory = FakeExecutorFactory (cmd_to_data , files )
30
54
31
55
56
+ @pytest .mark .parametrize ("sudo" , [False , True ])
32
57
class BasePackageManager (object ):
33
58
__test__ = False
34
59
@@ -43,7 +68,7 @@ class BasePackageManager(object):
43
68
'not_installed' : 'p-not-installed' ,
44
69
'non_existing' : 'p-non-existing' ,
45
70
'list' : 'p-installed-1\n p-installed-2\n p-installed-3\n ' ,
46
- 'pattern' : 'p-installed-(1|2)'
71
+ 'pattern' : 'p-installed-(1|2)' ,
47
72
}
48
73
rc1 = (1 , '' , '' )
49
74
rc0 = (0 , '' , '' )
@@ -63,7 +88,14 @@ def setup_class(cls):
63
88
grep_xargs_command ,
64
89
cls .managers [cls .manager ].remove_command_d
65
90
)
91
+ sudo_remove_pattern_cmd = sudo_join_cmds (
92
+ cls .managers [cls .manager ].list_command_d ,
93
+ grep_xargs_command ,
94
+ cls .managers [cls .manager ].remove_command_d
95
+ )
66
96
cls .data .update ({
97
+ remove_pattern_cmd : cls .rc0 ,
98
+ sudo_remove_pattern_cmd : cls .rc0 ,
67
99
extend_cmd (
68
100
cls .managers [cls .manager ].exist_command_d ,
69
101
cls .packages ['installed_1' ]
@@ -101,16 +133,63 @@ def setup_class(cls):
101
133
cls .managers [cls .manager ].remove_command_d ,
102
134
cls .packages ['installed_2' ]
103
135
): cls .rc0 ,
104
- remove_pattern_cmd : cls .rc0 ,
105
136
extend_cmd (
106
137
cls .managers [cls .manager ].update_command_d ,
107
138
cls .packages ['installed_1' ]
108
139
): cls .rc0 ,
109
- list2cmdline (
140
+ extend_cmd (
141
+ cls .managers [cls .manager ].update_command_d ,
142
+ ): cls .rc0 ,
143
+ extend_cmd (
144
+ cls .managers [cls .manager ].list_command_d ,
145
+ ): (0 , cls .packages ['list' ], '' ),
146
+ # For sudo tests.
147
+ sudo_extend_cmd (
148
+ cls .managers [cls .manager ].exist_command_d ,
149
+ cls .packages ['installed_1' ]
150
+ ): cls .rc0 ,
151
+ sudo_extend_cmd (
152
+ cls .managers [cls .manager ].exist_command_d ,
153
+ cls .packages ['installed_2' ]
154
+ ): cls .rc0 ,
155
+ sudo_extend_cmd (
156
+ cls .managers [cls .manager ].exist_command_d ,
157
+ cls .packages ['installed_3' ]
158
+ ): cls .rc0 ,
159
+ sudo_extend_cmd (
160
+ cls .managers [cls .manager ].exist_command_d ,
161
+ cls .packages ['not_installed' ]
162
+ ): cls .rc1 ,
163
+ sudo_extend_cmd (
164
+ cls .managers [cls .manager ].install_command_d ,
165
+ cls .packages ['not_installed' ]
166
+ ): cls .rc0 ,
167
+ # for negative install test
168
+ sudo_extend_cmd (
169
+ cls .managers [cls .manager ].exist_command_d ,
170
+ cls .packages ['non_existing' ]
171
+ ): cls .rc1 ,
172
+ sudo_extend_cmd (
173
+ cls .managers [cls .manager ].install_command_d ,
174
+ cls .packages ['non_existing' ]
175
+ ): cls .rc1 ,
176
+ sudo_extend_cmd (
177
+ cls .managers [cls .manager ].remove_command_d ,
178
+ cls .packages ['installed_1' ]
179
+ ): cls .rc0 ,
180
+ sudo_extend_cmd (
181
+ cls .managers [cls .manager ].remove_command_d ,
182
+ cls .packages ['installed_2' ]
183
+ ): cls .rc0 ,
184
+ sudo_extend_cmd (
185
+ cls .managers [cls .manager ].update_command_d ,
186
+ cls .packages ['installed_1' ]
187
+ ): cls .rc0 ,
188
+ sudo_extend_cmd (
110
189
cls .managers [cls .manager ].update_command_d ,
111
190
): cls .rc0 ,
112
- list2cmdline (
113
- cls .managers [cls .manager ].list_command_d
191
+ sudo_extend_cmd (
192
+ cls .managers [cls .manager ].list_command_d ,
114
193
): (0 , cls .packages ['list' ], '' ),
115
194
})
116
195
fake_cmd_data (cls .data )
@@ -121,55 +200,58 @@ def set_base_data(cls):
121
200
rc = cls .rc1
122
201
if manager_ == cls .manager :
123
202
rc = cls .rc0
124
- cls .data .update ({
125
- list2cmdline (['which' , manager_ ]): rc ,
126
- })
127
203
128
- def get_host (self , ip = '1.1.1.1' ):
204
+ for val in (['which' ], ['sudo' , 'which' ]):
205
+ cls .data .update ({
206
+ list2cmdline (val + [manager_ ]): rc ,
207
+ })
208
+
209
+ def get_host (self , ip = '1.1.1.1' , sudo = False ):
129
210
h = Host (ip )
130
211
h .add_user (User ('root' , '11111' ))
212
+ h .executor (sudo = sudo )
131
213
return h
132
214
133
- def get_pm (self ):
134
- return self .get_host ().package_manager
215
+ def get_pm (self , sudo = False ):
216
+ return self .get_host (sudo = sudo ).package_manager
135
217
136
- def test_info (self ):
137
- assert not self .get_pm ().info (self .packages ['installed_1' ])
218
+ def test_info (self , sudo ):
219
+ assert not self .get_pm (sudo ).info (self .packages ['installed_1' ])
138
220
139
- def test_info_negative (self ):
140
- assert not self .get_pm ().info (self .packages ['not_installed' ])
221
+ def test_info_negative (self , sudo ):
222
+ assert not self .get_pm (sudo ).info (self .packages ['not_installed' ])
141
223
142
- def test_exist (self ):
143
- assert self .get_pm ().exist (self .packages ['installed_1' ])
224
+ def test_exist (self , sudo ):
225
+ assert self .get_pm (sudo ).exist (self .packages ['installed_1' ])
144
226
145
- def test_exist_negative (self ):
146
- assert not self .get_pm ().exist (self .packages ['not_installed' ])
227
+ def test_exist_negative (self , sudo ):
228
+ assert not self .get_pm (sudo ).exist (self .packages ['not_installed' ])
147
229
148
- def test_install_installed (self ):
149
- assert self .get_pm ().install (self .packages ['installed_1' ])
230
+ def test_install_installed (self , sudo ):
231
+ assert self .get_pm (sudo ).install (self .packages ['installed_1' ])
150
232
151
- def test_install_new (self ):
152
- assert self .get_pm ().install (self .packages ['not_installed' ])
233
+ def test_install_new (self , sudo ):
234
+ assert self .get_pm (sudo ).install (self .packages ['not_installed' ])
153
235
154
- def test_install_negative (self ):
155
- assert not self .get_pm ().install (self .packages ['non_existing' ])
236
+ def test_install_negative (self , sudo ):
237
+ assert not self .get_pm (sudo ).install (self .packages ['non_existing' ])
156
238
157
- def test_remove (self ):
158
- assert self .get_pm ().remove (self .packages ['installed_1' ])
239
+ def test_remove (self , sudo ):
240
+ assert self .get_pm (sudo ).remove (self .packages ['installed_1' ])
159
241
160
- def test_remove_pattern (self ):
242
+ def test_remove_pattern (self , sudo ):
161
243
assert (
162
- self .get_pm ().remove (self .packages ['pattern' ], pattern = True )
244
+ self .get_pm (sudo ).remove (self .packages ['pattern' ], pattern = True )
163
245
)
164
246
165
- def test_update (self ):
166
- assert self .get_pm ().update ([self .packages ['installed_1' ]])
247
+ def test_update (self , sudo ):
248
+ assert self .get_pm (sudo ).update ([self .packages ['installed_1' ]])
167
249
168
- def test_update_all (self ):
169
- assert self .get_pm ().update ()
250
+ def test_update_all (self , sudo ):
251
+ assert self .get_pm (sudo ).update ()
170
252
171
- def test_list (self ):
172
- assert self .get_pm ().list_ () == self .packages ['list' ].split ('\n ' )
253
+ def test_list (self , sudo ):
254
+ assert self .get_pm (sudo ).list_ () == self .packages ['list' ].split ('\n ' )
173
255
174
256
175
257
class TestYumPM (BasePackageManager ):
0 commit comments