← Back to team overview

canonical-ubuntu-qa team mailing list archive

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

 

Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:fix_all_proposed_duplicate_requests 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/447893
-- 
Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:fix_all_proposed_duplicate_requests into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-web/webcontrol/request/submit.py b/charms/focal/autopkgtest-web/webcontrol/request/submit.py
index 1e31008..a4734e4 100644
--- a/charms/focal/autopkgtest-web/webcontrol/request/submit.py
+++ b/charms/focal/autopkgtest-web/webcontrol/request/submit.py
@@ -87,11 +87,9 @@ class Submit:
         Raise ValueError with error messsage if the request is invalid,
         otherwise return.
         """
-        not_needed, msg = self.is_request_queued_or_running(
-            release, arch, package, triggers
+        self.is_request_queued_or_running(
+            release, arch, package, triggers, kwargs
         )
-        if not_needed:
-            raise DuplicateRequestException(msg)
 
         can_upload_any_trigger = False
 
@@ -238,11 +236,9 @@ class Submit:
                 else:
                     triggers.append(env_var.split("=")[1])
 
-        not_needed, msg = self.is_request_queued_or_running(
-            release, arch, package, triggers
+        self.is_request_queued_or_running(
+            release, arch, package, triggers, kwargs
         )
-        if not_needed:
-            raise DuplicateRequestException(msg)
 
         if release not in self.releases:
             raise ValueError("Unknown release " + release)
@@ -541,7 +537,9 @@ class Submit:
         logging.debug("lp_request %s succeeded: %s", url, response)
         return (code, response)
 
-    def is_test_running(self, req_series, req_arch, req_package, req_triggers):
+    def is_test_running(
+        self, req_series, req_arch, req_package, req_triggers, kwargs
+    ):
         if not os.path.isfile(RUNNING_FP):
             return False
         data = {}
@@ -557,18 +555,27 @@ class Submit:
                     triggers = triggers[
                         triggers.find("[") + 1 : triggers.find("]")
                     ]
+                    all_proposed_same = False
+                    if (
+                        "all-proposed_1" in submitted
+                        and "all-proposed" in kwargs.keys()
+                        or "all-proposed_1" not in submitted
+                        and "all-proposed" not in kwargs.keys()
+                    ):
+                        all_proposed_same = True
                     triggers = triggers.replace("'", "").split(", ")
                     if (
                         req_arch in architectures
                         and req_series in releases
                         and req_package == pkg
                         and sorted(triggers) == sorted(req_triggers)
+                        and all_proposed_same
                     ):
                         return True
         return False
 
     def is_test_in_queue(
-        self, req_series, req_arch, req_package, req_triggers
+        self, req_series, req_arch, req_package, req_triggers, kwargs
     ):
         if not os.path.isfile(QUEUE_FP):
             return False
@@ -601,14 +608,28 @@ class Submit:
                                 "triggers": sorted(triggers),
                             }
                             if test == this_test:
-                                return True
+                                if (
+                                    "all-proposed"
+                                    in data[test_type][release][arch][
+                                        "requests"
+                                    ]
+                                    and "all-proposed" in kwargs.keys()
+                                    or "all-proposed"
+                                    not in data[test_type][release][arch][
+                                        "requests"
+                                    ]
+                                    and "all-proposed" not in kwargs.keys()
+                                ):
+                                    return True
+                                else:
+                                    return False
         return False
 
     def is_request_queued_or_running(
-        self, req_series, req_arch, req_package, req_triggers=[]
+        self, req_series, req_arch, req_package, req_triggers=[], kwargs={}
     ):
         if self.is_test_running(
-            req_series, req_arch, req_package, req_triggers
+            req_series, req_arch, req_package, req_triggers, kwargs
         ):
             o_msg = "Requested test is already running."
             o_msg += "\nRelease: " + req_series
@@ -618,7 +639,7 @@ class Submit:
             return True, o_msg
 
         if self.is_test_in_queue(
-            req_series, req_arch, req_package, req_triggers
+            req_series, req_arch, req_package, req_triggers, kwargs
         ):
             o_msg = "Requested test is already queued."
             o_msg += "\nRelease: " + req_series