← Back to team overview

canonical-ubuntu-qa team mailing list archive

[Merge] ~andersson123/autopkgtest-cloud:unit_test_duplicate_request into autopkgtest-cloud:master

 

Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:unit_test_duplicate_request into autopkgtest-cloud:master.

Requested reviews:
  Canonical's Ubuntu QA (canonical-ubuntu-qa)

For more details, see:
https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/451369
-- 
Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:unit_test_duplicate_request into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-web/webcontrol/request/tests/test_submit.py b/charms/focal/autopkgtest-web/webcontrol/request/tests/test_submit.py
index 8d93d43..faa50d6 100644
--- a/charms/focal/autopkgtest-web/webcontrol/request/tests/test_submit.py
+++ b/charms/focal/autopkgtest-web/webcontrol/request/tests/test_submit.py
@@ -10,7 +10,11 @@ from unittest.mock import MagicMock, patch
 
 import request.submit
 from distro_info import UbuntuDistroInfo
-from helpers.exceptions import WebControlException
+from helpers.exceptions import (
+    RequestInQueue,
+    RequestRunning,
+    WebControlException,
+)
 
 
 class SubmitTestBase(TestCase):
@@ -40,13 +44,13 @@ class SubmitTestBase(TestCase):
         mock_sqlite.connect.return_value = test_db
 
         # mock config values
-        cfg = {
+        self.cfg = {
             "amqp": {"uri": "amqp://user:s3kr1t@1.2.3.4"},
             "web": {"database": "/ignored", "database_ro": "/ignored"},
             "autopkgtest": {"releases": "testy grumpy"},
         }
         mock_configparser.return_value = MagicMock()
-        mock_configparser.return_value.__getitem__.side_effect = cfg.get
+        mock_configparser.return_value.__getitem__.side_effect = self.cfg.get
 
         self.submit = request.submit.Submit()
         self.submit.releases.add("testy")
@@ -438,6 +442,46 @@ class DistroRequestValidationTests(SubmitTestBase):
         )
         self.assertEqual(mock_urlopen.call_count, 6)
 
+    @patch("request.submit.Submit.is_test_in_queue")
+    def test_already_queued(self, mock_is_test_in_queue):
+        """Valid distro request is accepted"""
+
+        is_test_in_queue_cm = MagicMock()
+        is_test_in_queue_cm.__enter__.return_value = is_test_in_queue_cm
+        is_test_in_queue_cm.is_request_queued.side_effect = RequestInQueue(
+            "testy", "blue", "C51", "ab/1.2"
+        )
+        mock_is_test_in_queue.return_value = is_test_in_queue_cm
+
+        with self.assertRaises(WebControlException) as cme:
+            self.submit.validate_distro_request(
+                "testy", "C51", "blue", ["ab/1.2"], "joe"
+            )
+        self.assertEqual(
+            "Test already queued:\nrelease: testy\npkg: blue\narch: C51\ntriggers: ab/1.2",
+            str(cme.exception),
+        )
+
+    @patch("request.submit.Submit.is_test_running")
+    def test_already_running(self, mock_is_test_running):
+        """Test request is rejected if already running"""
+
+        is_test_running_cm = MagicMock()
+        is_test_running_cm.__enter__.return_value = is_test_running_cm
+        is_test_running_cm.is_request_queued.side_effect = RequestRunning(
+            "testy", "blue", "C51", "ab/1.2"
+        )
+        mock_is_test_running.return_value = is_test_running_cm
+
+        with self.assertRaises(WebControlException) as cme:
+            self.submit.validate_distro_request(
+                "testy", "C51", "blue", ["ab/1.2"], "joe"
+            )
+        self.assertEqual(
+            "Test already running:\nrelease: testy\npkg: blue\narch: C51\ntriggers: ab/1.2",
+            str(cme.exception),
+        )
+
 
 class GitRequestValidationTests(SubmitTestBase):
     """Test verification of git branch test requests"""