23
23
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
24
24
# Boston, MA 02110-1301, USA.
25
25
26
+ import sys
27
+
28
+ import pytest
29
+
26
30
import pygit2
27
31
from pygit2 import option
28
32
from pygit2 .enums import ConfigLevel , ObjectType , Option
@@ -133,31 +137,25 @@ def test_owner_validation() -> None:
133
137
134
138
135
139
def test_template_path () -> None :
136
- # Get the initial template path
137
140
original_path = option (Option .GET_TEMPLATE_PATH )
138
141
139
- # Set a new template path
140
142
test_path = '/tmp/test_templates'
141
143
option (Option .SET_TEMPLATE_PATH , test_path )
142
144
assert option (Option .GET_TEMPLATE_PATH ) == test_path
143
145
144
- # Reset to original path
145
146
if original_path :
146
147
option (Option .SET_TEMPLATE_PATH , original_path )
147
148
else :
148
149
option (Option .SET_TEMPLATE_PATH , None )
149
150
150
151
151
152
def test_user_agent () -> None :
152
- # Get the initial user agent
153
153
original_agent = option (Option .GET_USER_AGENT )
154
154
155
- # Set a new user agent
156
155
test_agent = 'test-agent/1.0'
157
156
option (Option .SET_USER_AGENT , test_agent )
158
157
assert option (Option .GET_USER_AGENT ) == test_agent
159
158
160
- # Reset to original agent
161
159
if original_agent :
162
160
option (Option .SET_USER_AGENT , original_agent )
163
161
@@ -166,142 +164,99 @@ def test_pack_max_objects() -> None:
166
164
__option (Option .GET_PACK_MAX_OBJECTS , Option .SET_PACK_MAX_OBJECTS , 100000 )
167
165
168
166
167
+ @pytest .mark .skipif (sys .platform != 'win32' , reason = 'Windows-specific feature' )
169
168
def test_windows_sharemode () -> None :
170
- # This test might not work on non-Windows platforms
171
- try :
172
- __option (Option .GET_WINDOWS_SHAREMODE , Option .SET_WINDOWS_SHAREMODE , 1 )
173
- except Exception :
174
- # May fail on non-Windows platforms
175
- pass
169
+ __option (Option .GET_WINDOWS_SHAREMODE , Option .SET_WINDOWS_SHAREMODE , 1 )
176
170
177
171
178
172
def test_ssl_ciphers () -> None :
179
173
# Setting SSL ciphers (no getter available)
180
174
try :
181
175
option (Option .SET_SSL_CIPHERS , 'DEFAULT' )
182
176
except pygit2 .GitError as e :
183
- # May fail if TLS backend doesn't support custom ciphers
184
- if "TLS backend doesn't support custom ciphers" not in str (e ):
185
- raise
177
+ if " TLS backend doesn't support custom ciphers" in str ( e ):
178
+ pytest . skip ( str (e ))
179
+ raise
186
180
187
181
188
182
def test_enable_http_expect_continue () -> None :
189
- # Enable and disable HTTP expect continue
190
183
option (Option .ENABLE_HTTP_EXPECT_CONTINUE , True )
191
184
option (Option .ENABLE_HTTP_EXPECT_CONTINUE , False )
192
185
193
186
194
187
def test_odb_priorities () -> None :
195
- # Set ODB priorities
196
188
option (Option .SET_ODB_PACKED_PRIORITY , 1 )
197
189
option (Option .SET_ODB_LOOSE_PRIORITY , 2 )
198
190
199
191
200
192
def test_extensions () -> None :
201
- # Get initial extensions list
202
193
original_extensions = option (Option .GET_EXTENSIONS )
203
194
assert isinstance (original_extensions , list )
204
195
205
- # Set extensions
206
196
test_extensions = ['objectformat' , 'worktreeconfig' ]
207
197
option (Option .SET_EXTENSIONS , test_extensions , len (test_extensions ))
208
198
209
- # Verify they were set
210
199
new_extensions = option (Option .GET_EXTENSIONS )
211
200
assert isinstance (new_extensions , list )
212
201
213
- # Check that our extensions are present
214
202
# Note: libgit2 may add its own built-in extensions and sort them
215
203
for ext in test_extensions :
216
204
assert ext in new_extensions , f"Extension '{ ext } ' not found in { new_extensions } "
217
205
218
- # Test with empty list
219
206
option (Option .SET_EXTENSIONS , [], 0 )
220
207
empty_extensions = option (Option .GET_EXTENSIONS )
221
208
assert isinstance (empty_extensions , list )
222
- # Even with empty input, libgit2 may have built-in extensions
223
209
224
- # Test with a custom extension
225
210
custom_extensions = ['myextension' , 'objectformat' ]
226
211
option (Option .SET_EXTENSIONS , custom_extensions , len (custom_extensions ))
227
212
custom_result = option (Option .GET_EXTENSIONS )
228
213
assert 'myextension' in custom_result
229
214
assert 'objectformat' in custom_result
230
215
231
- # Restore original extensions
232
216
if original_extensions :
233
217
option (Option .SET_EXTENSIONS , original_extensions , len (original_extensions ))
234
218
else :
235
- # Reset to empty list if there were no extensions
236
219
option (Option .SET_EXTENSIONS , [], 0 )
237
220
238
- # Verify restoration
239
221
final_extensions = option (Option .GET_EXTENSIONS )
240
222
assert set (final_extensions ) == set (original_extensions )
241
223
242
224
243
225
def test_homedir () -> None :
244
- # Get the initial home directory
245
226
original_homedir = option (Option .GET_HOMEDIR )
246
227
247
- # Set a new home directory
248
228
test_homedir = '/tmp/test_home'
249
229
option (Option .SET_HOMEDIR , test_homedir )
250
230
assert option (Option .GET_HOMEDIR ) == test_homedir
251
231
252
- # Reset to original home directory
253
232
if original_homedir :
254
233
option (Option .SET_HOMEDIR , original_homedir )
255
234
else :
256
235
option (Option .SET_HOMEDIR , None )
257
236
258
237
259
238
def test_server_timeouts () -> None :
260
- # Test connect timeout
261
239
original_connect = option (Option .GET_SERVER_CONNECT_TIMEOUT )
262
240
option (Option .SET_SERVER_CONNECT_TIMEOUT , 5000 )
263
241
assert option (Option .GET_SERVER_CONNECT_TIMEOUT ) == 5000
264
242
option (Option .SET_SERVER_CONNECT_TIMEOUT , original_connect )
265
243
266
- # Test server timeout
267
244
original_timeout = option (Option .GET_SERVER_TIMEOUT )
268
245
option (Option .SET_SERVER_TIMEOUT , 10000 )
269
246
assert option (Option .GET_SERVER_TIMEOUT ) == 10000
270
247
option (Option .SET_SERVER_TIMEOUT , original_timeout )
271
248
272
249
273
250
def test_user_agent_product () -> None :
274
- # Get the initial user agent product
275
251
original_product = option (Option .GET_USER_AGENT_PRODUCT )
276
252
277
- # Set a new user agent product
278
253
test_product = 'test-product'
279
254
option (Option .SET_USER_AGENT_PRODUCT , test_product )
280
255
assert option (Option .GET_USER_AGENT_PRODUCT ) == test_product
281
256
282
- # Reset to original product
283
257
if original_product :
284
258
option (Option .SET_USER_AGENT_PRODUCT , original_product )
285
259
286
260
287
- def test_add_ssl_x509_cert () -> None :
288
- # Test adding an SSL certificate
289
- # This is a minimal test certificate (not valid, but tests the API)
290
- test_cert = '-----BEGIN CERTIFICATE-----\n MIIB...\n -----END CERTIFICATE-----'
291
-
292
- try :
293
- option (Option .ADD_SSL_X509_CERT , test_cert )
294
- except pygit2 .GitError as e :
295
- # May fail if TLS backend doesn't support adding raw certs
296
- # or if the certificate format is invalid
297
- msg = str (e ).lower ()
298
- if (
299
- "tls backend doesn't support" not in msg
300
- and 'invalid' not in msg
301
- and 'failed to add raw x509 certificate' not in msg
302
- ):
303
- raise
304
-
305
-
306
261
def test_mwindow_file_limit () -> None :
307
262
__option (Option .GET_MWINDOW_FILE_LIMIT , Option .SET_MWINDOW_FILE_LIMIT , 100 )
0 commit comments