diff --git a/LibTest/io/HttpClient/findProxy_A01_t01.dart b/LibTest/io/HttpClient/findProxy_A01_t01.dart
index 1a124b4..7a53c77 100644
--- a/LibTest/io/HttpClient/findProxy_A01_t01.dart
+++ b/LibTest/io/HttpClient/findProxy_A01_t01.dart
@@ -30,7 +30,8 @@
 /// implement proxy server resolving based on environment variables.
 /// @description Checks that this setter sets the function used to resolve the
 /// proxy server to be used for opening a HTTP connection to the specified url.
-/// Test "DIRECT" connection and Basic authentication
+/// Test "DIRECT" connection and Basic authentication (no proxy is used in this
+/// case)
 /// @author sgrekhov@unipro.ru
 /// @issue 42870
 
@@ -54,11 +55,7 @@
       request.response.statusCode = HttpStatus.proxyAuthenticationRequired;
       request.response.close();
     } else {
-      Expect.isTrue(findProxyCalled);
-      Expect.isTrue(authenticateProxyCalled);
-      request.response.close();
-      server.close();
-      asyncEnd();
+      Expect.fail("Unexpected request");
     }
   });
   HttpClient client = new HttpClient();
@@ -69,10 +66,8 @@
 
   client.authenticateProxy =
       (String host, int port, String scheme, String realm) {
-        authenticateProxyCalled = true;
-        Completer<bool> completer = new Completer<bool>();
-        completer.complete(true);
-        return completer.future;
+    authenticateProxyCalled = true;
+    return Future<bool>.value(true);
   };
 
   client
@@ -80,7 +75,11 @@
           "http://${InternetAddress.loopbackIPv4.address}:${server.port}"))
       .then((HttpClientRequest request) => request.close())
       .then((HttpClientResponse response) {
+    Expect.isTrue(findProxyCalled);
+    Expect.isFalse(authenticateProxyCalled);
+    server.close();
     response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
+    asyncEnd();
   });
 }
 
diff --git a/LibTest/io/HttpClient/findProxy_A01_t02.dart b/LibTest/io/HttpClient/findProxy_A01_t02.dart
index 419569e..f864f3d 100644
--- a/LibTest/io/HttpClient/findProxy_A01_t02.dart
+++ b/LibTest/io/HttpClient/findProxy_A01_t02.dart
@@ -30,7 +30,8 @@
 /// implement proxy server resolving based on environment variables.
 /// @description Checks that this setter sets the function used to resolve the
 /// proxy server to be used for opening a HTTP connection to the specified url.
-/// Test "DIRECT" connection and Digest authentication
+/// Test "DIRECT" connection and Digest authentication (no proxy is used in this
+/// case)
 /// @author sgrekhov@unipro.ru
 /// @issue 42870
 
@@ -54,11 +55,7 @@
       request.response.statusCode = HttpStatus.proxyAuthenticationRequired;
       request.response.close();
     } else  {
-      Expect.isTrue(authenticateProxyCalled);
-      Expect.isTrue(findProxyCalled);
-      request.response.close();
-      server.close();
-      asyncEnd();
+      Expect.fail("Unexpected request");
     }
   });
   HttpClient client = new HttpClient();
@@ -70,9 +67,7 @@
   client.authenticateProxy =
       (String host, int port, String scheme, String realm) {
         authenticateProxyCalled = true;
-        Completer<bool> completer = new Completer<bool>();
-        completer.complete(true);
-        return completer.future;
+        return Future<bool>.value(true);
   };
 
   client
@@ -80,7 +75,11 @@
           "http://${InternetAddress.loopbackIPv4.address}:${server.port}"))
       .then((HttpClientRequest request) => request.close())
       .then((HttpClientResponse response) {
+    Expect.isTrue(findProxyCalled);
+    Expect.isFalse(authenticateProxyCalled);
+    server.close();
     response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
+    asyncEnd();
   });
 }
 
diff --git a/LibTest/io/HttpClient/findProxy_A02_t01.dart b/LibTest/io/HttpClient/findProxy_A02_t01.dart
index 32b9d5c..95255e9 100644
--- a/LibTest/io/HttpClient/findProxy_A02_t01.dart
+++ b/LibTest/io/HttpClient/findProxy_A02_t01.dart
@@ -39,6 +39,7 @@
 import "../../../Utils/expect.dart";
 
 test() async {
+  bool authenticateProxyCalled = false;
   int requestCounter = 0;
 
   HttpServer server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
@@ -50,19 +51,16 @@
           .set(HttpHeaders.proxyAuthenticateHeader, 'Basic, realm=realm');
       request.response.statusCode = HttpStatus.proxyAuthenticationRequired;
       request.response.close();
-    } else  {
-      request.response.close();
-      server.close();
-      asyncEnd();
+    } else {
+      Expect.fail("Unexpected request");
     }
   });
   HttpClient client = new HttpClient();
 
   client.authenticateProxy =
       (String host, int port, String scheme, String realm) {
-    Completer<bool> completer = new Completer<bool>();
-    completer.complete(true);
-    return completer.future;
+    authenticateProxyCalled = true;
+    return Future<bool>.value(true);
   };
 
   client
@@ -70,7 +68,10 @@
           "http://${InternetAddress.loopbackIPv4.address}:${server.port}"))
       .then((HttpClientRequest request) => request.close())
       .then((HttpClientResponse response) {
+    Expect.isFalse(authenticateProxyCalled);
+    server.close();
     response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
+    asyncEnd();
   });
 }
 
diff --git a/LibTest/io/HttpClient/findProxy_A02_t02.dart b/LibTest/io/HttpClient/findProxy_A02_t02.dart
index a0b0dd0..52d7a2c 100644
--- a/LibTest/io/HttpClient/findProxy_A02_t02.dart
+++ b/LibTest/io/HttpClient/findProxy_A02_t02.dart
@@ -39,6 +39,7 @@
 import "../../../Utils/expect.dart";
 
 test() async {
+  bool authenticateProxyCalled = false;
   int requestCounter = 0;
 
   HttpServer server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
@@ -51,18 +52,15 @@
       request.response.statusCode = HttpStatus.proxyAuthenticationRequired;
       request.response.close();
     } else  {
-      request.response.close();
-      server.close();
-      asyncEnd();
+      Expect.fail("Unexpected request");
     }
   });
   HttpClient client = new HttpClient();
 
   client.authenticateProxy =
       (String host, int port, String scheme, String realm) {
-    Completer<bool> completer = new Completer<bool>();
-    completer.complete(true);
-    return completer.future;
+    authenticateProxyCalled = true;
+    return Future<bool>.value(true);
   };
 
   client
@@ -70,7 +68,10 @@
           "http://${InternetAddress.loopbackIPv4.address}:${server.port}"))
       .then((HttpClientRequest request) => request.close())
       .then((HttpClientResponse response) {
+    Expect.isFalse(authenticateProxyCalled);
+    server.close();
     response.cast<List<int>>().transform(utf8.decoder).listen((content) {});
+    asyncEnd();
   });
 }
 
