1+ import logging
12import tempfile
23import time
34import uuid
910import gitlab
1011import gitlab .base
1112
12- SLEEP_INTERVAL = 0.1
13+ SLEEP_INTERVAL = 0.5
1314TIMEOUT = 60 # seconds before timeout will occur
1415
1516
@@ -21,47 +22,69 @@ def fixture_dir(test_dir):
2122def reset_gitlab (gl ):
2223 # previously tools/reset_gitlab.py
2324 for project in gl .projects .list ():
25+ logging .info (f"Marking for deletion project: { project .path_with_namespace !r} " )
2426 for deploy_token in project .deploytokens .list ():
27+ logging .info (
28+ f"Marking for deletion token: { deploy_token .username !r} in "
29+ f"project: { project .path_with_namespace !r} "
30+ )
2531 deploy_token .delete ()
2632 project .delete ()
2733 for group in gl .groups .list ():
34+ logging .info (f"Marking for deletion group: { group .full_path !r} " )
2835 for deploy_token in group .deploytokens .list ():
36+ logging .info (
37+ f"Marking for deletion token: { deploy_token .username !r} in "
38+ f"group: { group .path_with_namespace !r} "
39+ )
2940 deploy_token .delete ()
3041 group .delete ()
3142 for variable in gl .variables .list ():
43+ logging .info (f"Marking for deletion variable: { variable .key !r} " )
3244 variable .delete ()
3345 for user in gl .users .list ():
3446 if user .username != "root" :
47+ logging .info (f"Marking for deletion user: { user .username !r} " )
3548 user .delete (hard_delete = True )
3649
3750 max_iterations = int (TIMEOUT / SLEEP_INTERVAL )
3851
3952 # Ensure everything has been reset
4053 start_time = time .perf_counter ()
4154
42- def wait_for_maximum_list_length (
55+ def wait_for_list_size (
4356 rest_manager : gitlab .base .RESTManager , description : str , max_length : int = 0
4457 ) -> None :
4558 """Wait for the list() length to be no greater than expected maximum or fail
4659 test if timeout is exceeded"""
47- for _ in range (max_iterations ):
48- if len (rest_manager .list ()) <= max_length :
60+ logging .info (f"Checking { description !r} has no more than { max_length } items" )
61+ for count in range (max_iterations ):
62+ items = rest_manager .list ()
63+ if len (items ) <= max_length :
4964 break
65+ logging .info (
66+ f"Iteration: { count } Waiting for { description !r} items to be deleted: "
67+ f"{ [x .name for x in items ]} "
68+ )
5069 time .sleep (SLEEP_INTERVAL )
51- assert len (rest_manager .list ()) <= max_length , (
52- f"Did not delete required items for { description } . "
53- f"Elapsed_time: { time .perf_counter () - start_time } "
70+
71+ elapsed_time = time .perf_counter () - start_time
72+ error_message = (
73+ f"More than { max_length } { description !r} items still remaining and timeout "
74+ f"({ elapsed_time } ) exceeded: { [x .name for x in items ]} "
5475 )
76+ if len (items ) > max_length :
77+ logging .error (error_message )
78+ assert len (items ) <= max_length , error_message
5579
56- wait_for_maximum_list_length (rest_manager = gl .projects , description = "projects" )
57- wait_for_maximum_list_length (rest_manager = gl .groups , description = "groups" )
58- wait_for_maximum_list_length (rest_manager = gl .variables , description = "variables" )
59- wait_for_maximum_list_length (
60- rest_manager = gl .users , description = "users" , max_length = 1
61- )
80+ wait_for_list_size (rest_manager = gl .projects , description = "projects" )
81+ wait_for_list_size (rest_manager = gl .groups , description = "groups" )
82+ wait_for_list_size (rest_manager = gl .variables , description = "variables" )
83+ wait_for_list_size (rest_manager = gl .users , description = "users" , max_length = 1 )
6284
6385
6486def set_token (container , fixture_dir ):
87+ logging .info ("Creating API token." )
6588 set_token_rb = fixture_dir / "set_token.rb"
6689
6790 with open (set_token_rb , "r" ) as f :
@@ -76,6 +99,7 @@ def set_token(container, fixture_dir):
7699 set_token_command ,
77100 ]
78101 output = check_output (rails_command ).decode ().strip ()
102+ logging .info ("Finished creating API token." )
79103
80104 return output
81105
@@ -85,7 +109,7 @@ def pytest_report_collectionfinish(config, startdir, items):
85109 "" ,
86110 "Starting GitLab container." ,
87111 "Waiting for GitLab to reconfigure." ,
88- "This may take a few minutes." ,
112+ "This will take a few minutes." ,
89113 ]
90114
91115
@@ -129,6 +153,7 @@ def check_is_alive():
129153 """
130154
131155 def _check (container ):
156+ logging .info ("Checking if GitLab container is up..." )
132157 logs = ["docker" , "logs" , container ]
133158 return "gitlab Reconfigured!" in check_output (logs ).decode ()
134159
@@ -144,7 +169,7 @@ def wait_for_sidekiq(gl):
144169 """
145170
146171 def _wait (timeout = 30 , step = 0.5 ):
147- for _ in range (timeout ):
172+ for count in range (timeout ):
148173 time .sleep (step )
149174 busy = False
150175 processes = gl .sidekiq .process_metrics ()["processes" ]
@@ -153,6 +178,7 @@ def _wait(timeout=30, step=0.5):
153178 busy = True
154179 if not busy :
155180 return True
181+ logging .info (f"sidekiq busy { count } of { timeout } " )
156182 return False
157183
158184 return _wait
@@ -163,9 +189,11 @@ def gitlab_config(check_is_alive, docker_ip, docker_services, temp_dir, fixture_
163189 config_file = temp_dir / "python-gitlab.cfg"
164190 port = docker_services .port_for ("gitlab" , 80 )
165191
192+ logging .info ("Waiting for GitLab container to become ready." )
166193 docker_services .wait_until_responsive (
167- timeout = 200 , pause = 5 , check = lambda : check_is_alive ("gitlab-test" )
194+ timeout = 200 , pause = 10 , check = lambda : check_is_alive ("gitlab-test" )
168195 )
196+ logging .info ("GitLab container is now ready." )
169197
170198 token = set_token ("gitlab-test" , fixture_dir = fixture_dir )
171199
@@ -188,7 +216,9 @@ def gitlab_config(check_is_alive, docker_ip, docker_services, temp_dir, fixture_
188216def gl (gitlab_config ):
189217 """Helper instance to make fixtures and asserts directly via the API."""
190218
219+ logging .info ("Instantiating python-gitlab gitlab.Gitlab instance" )
191220 instance = gitlab .Gitlab .from_config ("local" , [gitlab_config ])
221+
192222 reset_gitlab (instance )
193223
194224 return instance
0 commit comments