From a97349bf22f5957f5a89eea236e273098f3de2bd Mon Sep 17 00:00:00 2001
From: Thiago Perrotta <tperrotta@chromium.org>
Date: Thu, 19 Oct 2023 17:19:50 +0200
Subject: [PATCH] test: add network interception fail request invalidation
 tests

---
 tools/webdriver/webdriver/bidi/error.py       |  4 +++
 .../webdriver/bidi/modules/network.py         |  5 +++
 .../bidi/network/fail_request/__init__.py     |  0
 .../bidi/network/fail_request/invalid.py      | 35 +++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 100644 webdriver/tests/bidi/network/fail_request/__init__.py
 create mode 100644 webdriver/tests/bidi/network/fail_request/invalid.py

diff --git a/tools/webdriver/webdriver/bidi/error.py b/tools/webdriver/webdriver/bidi/error.py
index d3e318d1705f07..7b688dd1a6cfa9 100644
--- a/tools/webdriver/webdriver/bidi/error.py
+++ b/tools/webdriver/webdriver/bidi/error.py
@@ -67,6 +67,10 @@ class NoSuchNodeException(BidiException):
     error_code = "no such node"
 
 
+class NoSuchRequestException(BidiException):
+    error_code = "no such request"
+
+
 class NoSuchScriptException(BidiException):
     error_code = "no such script"
 
diff --git a/tools/webdriver/webdriver/bidi/modules/network.py b/tools/webdriver/webdriver/bidi/modules/network.py
index 940aa7cffdd2ef..b82c8539e86ba5 100644
--- a/tools/webdriver/webdriver/bidi/modules/network.py
+++ b/tools/webdriver/webdriver/bidi/modules/network.py
@@ -57,6 +57,11 @@ def _add_intercept(self, result: Mapping[str, Any]) -> Any:
         assert result["intercept"] is not None
         return result["intercept"]
 
+    @command
+    def fail_request(self, request: str) -> Mapping[str, Any]:
+        params: MutableMapping[str, Any] = {"request": request}
+        return params
+
     @command
     def remove_intercept(self, intercept: str) -> Mapping[str, Any]:
         params: MutableMapping[str, Any] = {"intercept": intercept}
diff --git a/webdriver/tests/bidi/network/fail_request/__init__.py b/webdriver/tests/bidi/network/fail_request/__init__.py
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/webdriver/tests/bidi/network/fail_request/invalid.py b/webdriver/tests/bidi/network/fail_request/invalid.py
new file mode 100644
index 00000000000000..29b653c0923580
--- /dev/null
+++ b/webdriver/tests/bidi/network/fail_request/invalid.py
@@ -0,0 +1,35 @@
+import pytest
+import webdriver.bidi.error as error
+
+pytestmark = pytest.mark.asyncio
+
+PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
+
+
+@pytest.mark.parametrize("value", [None, False, 42, {}, []])
+async def test_params_request_invalid_type(bidi_session, value):
+    with pytest.raises(error.InvalidArgumentException):
+        await bidi_session.network.fail_request(request=value)
+
+
+@pytest.mark.parametrize("value", ["", "foo"])
+async def test_params_request_invalid_value(bidi_session, value):
+    with pytest.raises(error.NoSuchRequestException):
+        await bidi_session.network.fail_request(request=value)
+
+
+async def test_params_request_no_such_request(bidi_session, setup_network_test,
+                                              wait_for_event, fetch, url):
+    await setup_network_test(events=[
+        "network.responseCompleted",
+    ])
+    on_response_completed = wait_for_event("network.responseCompleted")
+
+    text_url = url(PAGE_EMPTY_TEXT)
+    await fetch(text_url)
+
+    response_completed_event = await on_response_completed
+    request = response_completed_event["request"]["request"]
+
+    with pytest.raises(error.NoSuchRequestException):
+        await bidi_session.network.fail_request(request=request)