Просмотр исходного кода

Fix HTTPServer resource leak in dumb HTTP tests

Jelmer Vernooij 2 недель назад
Родитель
Сommit
5e4d543928
2 измененных файлов с 28 добавлено и 24 удалено
  1. 26 24
      tests/compat/test_client.py
  2. 2 0
      tests/compat/test_dumb.py

+ 26 - 24
tests/compat/test_client.py

@@ -410,35 +410,37 @@ class DulwichClientTestBase:
 
     def test_repeat(self) -> None:
         c = self._client()
-        with repo.Repo(os.path.join(self.gitroot, "dest")) as dest:
-            result = c.fetch(self._build_path("/server_new.export"), dest)
-            for r in result.refs.items():
-                dest.refs.set_if_equals(r[0], None, r[1])
-            self.assertDestEqualsSrc()
-            result = c.fetch(self._build_path("/server_new.export"), dest)
-            for r in result.refs.items():
-                dest.refs.set_if_equals(r[0], None, r[1])
-            self.assertDestEqualsSrc()
+        dest = repo.Repo(os.path.join(self.gitroot, "dest"))
+        self.addCleanup(dest.close)
+        result = c.fetch(self._build_path("/server_new.export"), dest)
+        for r in result.refs.items():
+            dest.refs.set_if_equals(r[0], None, r[1])
+        self.assertDestEqualsSrc()
+        result = c.fetch(self._build_path("/server_new.export"), dest)
+        for r in result.refs.items():
+            dest.refs.set_if_equals(r[0], None, r[1])
+        self.assertDestEqualsSrc()
 
     def test_fetch_empty_pack(self) -> None:
         c = self._client()
-        with repo.Repo(os.path.join(self.gitroot, "dest")) as dest:
-            result = c.fetch(self._build_path("/server_new.export"), dest)
-            for r in result.refs.items():
-                dest.refs.set_if_equals(r[0], None, r[1])
-            self.assertDestEqualsSrc()
+        dest = repo.Repo(os.path.join(self.gitroot, "dest"))
+        self.addCleanup(dest.close)
+        result = c.fetch(self._build_path("/server_new.export"), dest)
+        for r in result.refs.items():
+            dest.refs.set_if_equals(r[0], None, r[1])
+        self.assertDestEqualsSrc()
 
-            def dw(refs, **kwargs):
-                return list(refs.values())
+        def dw(refs, **kwargs):
+            return list(refs.values())
 
-            result = c.fetch(
-                self._build_path("/server_new.export"),
-                dest,
-                determine_wants=dw,
-            )
-            for r in result.refs.items():
-                dest.refs.set_if_equals(r[0], None, r[1])
-            self.assertDestEqualsSrc()
+        result = c.fetch(
+            self._build_path("/server_new.export"),
+            dest,
+            determine_wants=dw,
+        )
+        for r in result.refs.items():
+            dest.refs.set_if_equals(r[0], None, r[1])
+        self.assertDestEqualsSrc()
 
     def test_incremental_fetch_pack(self) -> None:
         self.test_fetch_pack()

+ 2 - 0
tests/compat/test_dumb.py

@@ -97,6 +97,7 @@ class DumbHTTPGitServer:
     def stop(self):
         """Stop the HTTP server."""
         self.server.shutdown()
+        self.server.server_close()
         if self.thread:
             self.thread.join()
 
@@ -174,6 +175,7 @@ class DumbHTTPClientNoPackTests(CompatTestCase):
         dest_path = os.path.join(self.temp_dir, "cloned")
         # Use a dummy errstream to suppress progress output
         repo = clone(self.server.url, dest_path, errstream=io.BytesIO())
+        self.addCleanup(repo.close)
         assert b"HEAD" in repo
 
     def test_clone_from_dumb_http(self):