Merge ppa-dev-tools:job-class into ppa-dev-tools:main

Proposed by Bryce Harrington
Status: Merged
Merge reported by: Bryce Harrington
Merged at revision: 29e2c6593124656083bcfa933f30ba81ac15caa6
Proposed branch: ppa-dev-tools:job-class
Merge into: ppa-dev-tools:main
Diff against target: 713 lines (+683/-0)
5 files modified
.flake8 (+2/-0)
ppa/job.py (+183/-0)
tests/data/queues-20220822.json (+385/-0)
tests/data/running-20220822.json (+1/-0)
tests/test_job.py (+112/-0)
Reviewer Review Type Date Requested Status
Athos Ribeiro (community) Approve
Canonical Server Reporter Pending
Review via email: mp+428760@code.launchpad.net

Description of the change

Imports the Job class from lp-test-ppa into ppa-dev-tools, adds docs, tests, and a bit more refactoring.

This is not hooked up to any commands in the ppa cli itself, but there's a smoke test using snapshot data you can run:

    $ python3 ./ppa/job.py

The tests can be run as well:

    $ pytest-3 ./tests/test_job.py

To post a comment you must log in.
Revision history for this message
Athos Ribeiro (athos-ribeiro) wrote :

Nice work, Bryce :)

I left a couple inline comments, but this LGTM as is.

I am also wondering if instead of including the complete samples of the json files, including hand-crafted minimal samples of those would be enough. The reason for the question is that this change alone increased the project root size from <200kb to 1.9Mb (not counting git data here). While this shouldn't matter much ATM, I was wondering if there's any chance this could pile up in the future with new test additions.

review: Approve
Revision history for this message
Bryce Harrington (bryce) wrote :

> Nice work, Bryce :)
>
> I left a couple inline comments, but this LGTM as is.

Thanks!

> I am also wondering if instead of including the complete samples of the json
> files, including hand-crafted minimal samples of those would be enough. The
> reason for the question is that this change alone increased the project root
> size from <200kb to 1.9Mb (not counting git data here). While this shouldn't
> matter much ATM, I was wondering if there's any chance this could pile up in
> the future with new test additions.

Good point. Ironically I had started with hand-crafted snippets but switched to snapshots as being easier to add and more closely representative of actual usage. However, it may be better to just go ahead and add the code to download live data, and keep the local data snapshots trimmed to specific examples. You're right that over time this could pile up.

Revision history for this message
Bryce Harrington (bryce) wrote :

I've made the suggested changes, and trimmed down the data files. Will go ahead and land the branch.

Revision history for this message
Bryce Harrington (bryce) wrote :

Total 0 (delta 0), reused 0 (delta 0)
To git+ssh://git.launchpad.net/ppa-dev-tools
   6c1e1a8..8fcdc4f main -> main

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.flake8 b/.flake8
2new file mode 100644
3index 0000000..7da1f96
4--- /dev/null
5+++ b/.flake8
6@@ -0,0 +1,2 @@
7+[flake8]
8+max-line-length = 100
9diff --git a/ppa/job.py b/ppa/job.py
10new file mode 100755
11index 0000000..61d6fb2
12--- /dev/null
13+++ b/ppa/job.py
14@@ -0,0 +1,183 @@
15+#!/usr/bin/env python3
16+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
17+
18+# Copyright (C) 2022 Authors
19+#
20+# Released under GNU GPLv2 or later, read the file 'LICENSE.GPLv2+' for
21+# more information.
22+#
23+# Authors:
24+# Bryce Harrington <bryce@canonical.com>
25+
26+"""An individual autopkgtest run"""
27+
28+from typing import Iterator
29+import json
30+
31+# Global constants
32+ARCHES = ["amd64", "s390x", "ppc64el", "arm64", "armhf", "riscv64"]
33+URL_LPAPI = "https://api.launchpad.net/devel"
34+URL_AUTOPKGTEST = "https://autopkgtest.ubuntu.com"
35+
36+
37+class Job:
38+ """An individual autopkgtest run that has not yet completed.
39+
40+ A Job will correspond to one Result object once it has completed.
41+ """
42+ def __init__(self, number, submit_time, source_package, series, arch,
43+ triggers=None, ppas=None):
44+ """Initializes a new Job object.
45+
46+ :param str number: Position within the waiting queue.
47+ :param str submit_time: Timestamp when job was submitted.
48+ :param str source_package: Source package containing the DEP8 tests to run.
49+ :param str series: Codename of the Ubuntu release to run tests on.
50+ :param str arch: Hardware architecture type to run tests on.
51+ :param list[str] triggers: List of package/version triggers for the job.
52+ :param list[str] ppas: List of PPAs to enable.
53+ """
54+ self.number = number
55+ self.submit_time = submit_time
56+ self.source_package = source_package
57+ self.series = series
58+ self.arch = arch
59+ self.triggers = triggers or []
60+ self.ppas = ppas or []
61+
62+ def __repr__(self) -> str:
63+ """Machine-parsable unique representation of object.
64+
65+ :rtype: str
66+ :returns: Official string representation of the object.
67+ """
68+ return (f'{self.__class__.__name__}('
69+ f'source_package={self.source_package!r}, '
70+ f'series={self.series!r}, '
71+ f'arch={self.arch!r}'
72+ f')')
73+
74+ def __str__(self) -> str:
75+ """Human-readable summary of the object.
76+
77+ :rtype: str
78+ :returns: Printable summary of the object.
79+ """
80+ return f"{self.source_package} {self.series} ({self.arch})"
81+
82+ @property
83+ def request_url(self) -> str:
84+ """Renders URL for requesting the testing run be started
85+
86+ :rtype: str
87+ :returns: Full URL for invoking the test.
88+ """
89+ rel_str = f"release={self.series}"
90+ arch_str = f"&arch={self.arch}"
91+ pkg_str = f"&package={self.source_package}"
92+ trigger_str = ''
93+ for trigger in self.triggers:
94+ trigger_str += f"&trigger={trigger}"
95+ return f"{URL_AUTOPKGTEST}/request.cgi?{rel_str}{arch_str}{pkg_str}{trigger_str}"
96+
97+
98+def get_running(response, series=None, ppa=None) -> Iterator[Job]:
99+ """Returns iterator currently running autopkgtests for given criteria
100+
101+ Filters the list of running autopkgtest jobs by the given series
102+ and/or ppa names, returning an iterator with matching results as Job
103+ objects. If series and ppa are not provided, then returns all
104+ results; if one or the other is provided, provides all available
105+ results for that series or ppa.
106+
107+ :param HTTPResponse response: Context manager; the response from urlopen()
108+ :param str series: The Ubuntu release codename criteria, or None.
109+ :param str ppa: The PPA address criteria, or None.
110+ :rtype: Iterator[Job]
111+ :returns: Currently running jobs, if any, or an empty list on error
112+ """
113+ for pkg, jobs in json.loads(response.read().decode('utf-8')).items():
114+ for handle in jobs:
115+ for codename in jobs[handle]:
116+ for arch, jobinfo in jobs[handle][codename].items():
117+ triggers = jobinfo[0].get('triggers', None)
118+ ppas = jobinfo[0].get('ppas', None)
119+ submit_time = jobinfo[1]
120+ job = Job(0, submit_time, pkg, codename, arch, triggers, ppas)
121+ if (series and (series != job.series)) or (ppa and (ppa not in job.ppas)):
122+ continue
123+ yield job
124+
125+
126+def get_waiting(response, series=None, ppa=None) -> Iterator[Job]:
127+ """Returns iterator of queued autopkgtests for given criteria
128+
129+ Filters the list of autopkgtest jobs waiting for execution by the
130+ given series and/or ppa names, returning an iterator with matching
131+ results as Job objects. If series and ppa are not provided, then
132+ returns all results; if one or the other is provided, provides all
133+ available results for that series or ppa.
134+
135+ :param HTTPResponse response: Context manager; the response from urlopen()
136+ :param str series: The Ubuntu release codename criteria, or None.
137+ :param str ppa: The PPA address criteria, or None.
138+ :rtype: Iterator[Job]
139+ :returns: Currently waiting jobs, if any, or an empty list on error
140+ """
141+ for _, queue in json.loads(response.read().decode('utf-8')).items():
142+ for codename in queue:
143+ for arch in queue[codename]:
144+ n = 0
145+ for key in queue[codename][arch]:
146+ if key == 'private job':
147+ continue
148+ (pkg, json_data) = key.split(maxsplit=1)
149+ jobinfo = json.loads(json_data)
150+ n += 1
151+ triggers = jobinfo.get('triggers', None)
152+ ppas = jobinfo.get('ppas', None)
153+ job = Job(n, None, pkg, codename, arch, triggers, ppas)
154+ if (series and (series != job.series)) or (ppa and (ppa not in job.ppas)):
155+ continue
156+ yield job
157+
158+
159+if __name__ == "__main__":
160+ import os
161+ from urllib.request import urlopen
162+
163+ print("### Job class smoke test ###")
164+
165+ root_dir = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
166+ jobinfo = {
167+ 'triggers': ['a/1', 'b/2.1', 'c/3.2.1'],
168+ 'ppas': ['ppa:me/myppa'],
169+ }
170+ job_1 = Job(
171+ number=0,
172+ submit_time='time',
173+ source_package='my-package',
174+ series='kinetic',
175+ arch='amd64',
176+ triggers=jobinfo.get('triggers', None),
177+ ppas=jobinfo.get('ppas', None)
178+ )
179+ print(job_1)
180+ print(f"triggers: {job_1.triggers}")
181+ print(f"ppas: {job_1.ppas}")
182+ print(f"request_url: {job_1.request_url}")
183+ print()
184+
185+ ppa = "bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"
186+
187+ print("running:")
188+ response = urlopen(f"file://{root_dir}/tests/data/running-20220822.json")
189+ for job in get_running(response, 'kinetic', ppa):
190+ print(job)
191+ print()
192+
193+ print("waiting:")
194+ response = urlopen(f"file://{root_dir}/tests/data/queues-20220822.json")
195+ for job in get_waiting(response, 'kinetic', ppa):
196+ print(job)
197+
198diff --git a/tests/data/queues-20220822.json b/tests/data/queues-20220822.json
199new file mode 100644
200index 0000000..7844a74
201--- /dev/null
202+++ b/tests/data/queues-20220822.json
203@@ -0,0 +1,385 @@
204+{
205+ "ubuntu": {
206+ "trusty": {
207+ "amd64": [],
208+ "arm64": [],
209+ "armhf": [],
210+ "i386": [],
211+ "ppc64el": []
212+ },
213+ "xenial": {
214+ "amd64": [],
215+ "arm64": [],
216+ "armhf": [],
217+ "i386": [],
218+ "ppc64el": [],
219+ "s390x": []
220+ },
221+ "bionic": {
222+ "amd64": [],
223+ "arm64": [],
224+ "armhf": [],
225+ "i386": [],
226+ "ppc64el": [],
227+ "s390x": []
228+ },
229+ "focal": {
230+ "amd64": [],
231+ "arm64": [],
232+ "armhf": [],
233+ "i386": [],
234+ "ppc64el": [],
235+ "s390x": []
236+ },
237+ "hirsute": {
238+ "amd64": [],
239+ "arm64": [],
240+ "armhf": [],
241+ "i386": [],
242+ "ppc64el": [],
243+ "s390x": []
244+ },
245+ "impish": {
246+ "amd64": [],
247+ "ppc64el": [],
248+ "i386": [],
249+ "armhf": [],
250+ "arm64": [],
251+ "s390x": []
252+ },
253+ "jammy": {
254+ "amd64": [],
255+ "arm64": [],
256+ "i386": [],
257+ "s390x": [],
258+ "ppc64el": [],
259+ "armhf": []
260+ },
261+ "kinetic": {
262+ "ppc64el": [],
263+ "arm64": [],
264+ "s390x": [],
265+ "armhf": [],
266+ "i386": [],
267+ "amd64": []
268+ }
269+ },
270+ "huge": {
271+ "trusty": {
272+ "amd64": [],
273+ "arm64": [],
274+ "armhf": [],
275+ "i386": [],
276+ "ppc64el": []
277+ },
278+ "xenial": {
279+ "amd64": [],
280+ "arm64": [],
281+ "armhf": [],
282+ "i386": [],
283+ "ppc64el": [],
284+ "s390x": []
285+ },
286+ "bionic": {
287+ "amd64": [],
288+ "arm64": [],
289+ "armhf": [],
290+ "i386": [],
291+ "ppc64el": [],
292+ "s390x": []
293+ },
294+ "focal": {
295+ "amd64": [],
296+ "arm64": [],
297+ "armhf": [],
298+ "i386": [],
299+ "ppc64el": [],
300+ "s390x": []
301+ },
302+ "hirsute": {
303+ "amd64": [],
304+ "arm64": [],
305+ "armhf": [],
306+ "i386": [],
307+ "ppc64el": [],
308+ "s390x": []
309+ },
310+ "impish": {
311+ "amd64": [],
312+ "ppc64el": [],
313+ "i386": [],
314+ "armhf": [],
315+ "arm64": [],
316+ "s390x": []
317+ },
318+ "jammy": {
319+ "amd64": [],
320+ "arm64": [],
321+ "i386": [],
322+ "s390x": [],
323+ "ppc64el": [],
324+ "armhf": []
325+ },
326+ "kinetic": {
327+ "ppc64el": [
328+ "x11iraf\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
329+ "x11vnc\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
330+ "x264\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
331+ "x265\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
332+ "x42-plugins\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
333+ "xapian-core\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
334+ "xapian-omega\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
335+ "xautolock\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
336+ "xbrzscale\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
337+ "xchain\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
338+ "xcolorsel\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
339+ "xdelta3\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
340+ "xdemorse\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
341+ "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
342+ "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
343+ "xdp-tools\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
344+ "xerces-c\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
345+ "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
346+ "xeus-python\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
347+ "xfig\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
348+ "xflip\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
349+ "xgboost\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
350+ "xilinx-runtime\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
351+ "xlbiff\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
352+ "xml-security-c\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
353+ "xmltooling\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
354+ "xmobar\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
355+ "xmpp-dns\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
356+ "xorgxrdp\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
357+ "xpad\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
358+ "xpra\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
359+ "xq\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
360+ "xrayutilities\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
361+ "xrootconsole\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
362+ "xsel\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
363+ "xsnow\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
364+ "xtables-addons\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
365+ "xtail\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
366+ "xterm\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
367+ "xtermcontrol\n{\"submit-time\": \"2022-08-22 07:50:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
368+ "xtrlock\n{\"submit-time\": \"2022-08-22 07:50:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
369+ "x11vnc\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
370+ "x264\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
371+ "x265\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
372+ "x42-plugins\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
373+ "xapian-bindings\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
374+ "xapian-core\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
375+ "xapian-omega\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
376+ "xautolock\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
377+ "xautomation\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
378+ "xbrzscale\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
379+ "xchain\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
380+ "xdelta3\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
381+ "xdemorse\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
382+ "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
383+ "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
384+ "xdp-tools\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
385+ "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
386+ "xeus-python\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
387+ "xfig\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
388+ "xflip\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
389+ "xfrisk\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
390+ "xgboost\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
391+ "xlbiff\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
392+ "xli\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
393+ "xml-security-c\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
394+ "xmltooling\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
395+ "xmobar\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
396+ "xmoto\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
397+ "xorgxrdp\n{\"submit-time\": \"2022-08-22 05:32:24\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
398+ "xpa\n{\"submit-time\": \"2022-08-22 05:32:24\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
399+ "xpad\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
400+ "xpra\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
401+ "xq\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
402+ "xrayutilities\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
403+ "xrootconsole\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
404+ "xsel\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
405+ "xsnow\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
406+ "xtables-addons\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
407+ "xtail\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
408+ "xterm\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
409+ "xtermcontrol\n{\"submit-time\": \"2022-08-22 05:32:28\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
410+ "xtrlock\n{\"submit-time\": \"2022-08-22 05:32:28\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
411+ "x11iraf\n{\"submit-time\": \"2022-08-22 07:25:42\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
412+ "x264\n{\"submit-time\": \"2022-08-22 07:25:43\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
413+ "x265\n{\"submit-time\": \"2022-08-22 07:25:44\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
414+ "x42-plugins\n{\"submit-time\": \"2022-08-22 07:25:45\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
415+ "xapian-bindings\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
416+ "xapian-core\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
417+ "xapian-omega\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
418+ "xautomation\n{\"submit-time\": \"2022-08-22 07:25:47\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
419+ "xbrzscale\n{\"submit-time\": \"2022-08-22 07:25:47\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
420+ "xchain\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
421+ "xcolorsel\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
422+ "xdelta3\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
423+ "xdemorse\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
424+ "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
425+ "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
426+ "xdp-tools\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
427+ "xerces-c\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
428+ "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
429+ "xfig\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
430+ "xflip\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
431+ "xfrisk\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
432+ "xgboost\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
433+ "xlbiff\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
434+ "xli\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
435+ "xml-security-c\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
436+ "xmltooling\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
437+ "xmobar\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
438+ "xmoto\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
439+ "xorgxrdp\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
440+ "xpa\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
441+ "xpad\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
442+ "xpra\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
443+ "xq\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
444+ "xrayutilities\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
445+ "xrootconsole\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
446+ "xsel\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
447+ "xsnow\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
448+ "xtables-addons\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
449+ "xtail\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
450+ "xterm\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
451+ "xtermcontrol\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
452+ "xtrlock\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}"
453+ ]
454+ }
455+ },
456+ "ppa": {
457+ "trusty": {
458+ "amd64": [],
459+ "arm64": [],
460+ "armhf": [],
461+ "i386": [],
462+ "ppc64el": []
463+ },
464+ "xenial": {
465+ "amd64": [],
466+ "arm64": [],
467+ "armhf": [],
468+ "i386": [],
469+ "ppc64el": [],
470+ "s390x": []
471+ },
472+ "bionic": {
473+ "amd64": [],
474+ "arm64": [],
475+ "armhf": [],
476+ "i386": [],
477+ "ppc64el": [],
478+ "s390x": []
479+ },
480+ "focal": {
481+ "amd64": [],
482+ "arm64": [],
483+ "armhf": [],
484+ "i386": [],
485+ "ppc64el": [],
486+ "s390x": []
487+ },
488+ "hirsute": {
489+ "amd64": [],
490+ "arm64": [],
491+ "armhf": [],
492+ "i386": [],
493+ "ppc64el": [],
494+ "s390x": []
495+ },
496+ "impish": {
497+ "amd64": [],
498+ "ppc64el": [],
499+ "i386": [],
500+ "armhf": [],
501+ "arm64": [],
502+ "s390x": []
503+ },
504+ "jammy": {
505+ "amd64": [],
506+ "arm64": [],
507+ "i386": [],
508+ "s390x": [],
509+ "ppc64el": [],
510+ "armhf": []
511+ },
512+ "kinetic": {
513+ "ppc64el": [],
514+ "arm64": [],
515+ "s390x": [],
516+ "armhf": [
517+ "dovecot {\"all-proposed\": \"1\", \"ppas\": [\"bryce/dovecot-merge-v1e2.3.19.1adfsg1-2\"], \"requester\": \"bryce\", \"submit-time\": \"2022-08-23 05:02:46\", \"triggers\": [\"dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1\"]}"
518+ ],
519+ "i386": [],
520+ "amd64": []
521+ }
522+ },
523+ "upstream": {
524+ "trusty": {
525+ "amd64": [],
526+ "arm64": [],
527+ "armhf": [],
528+ "i386": [],
529+ "ppc64el": []
530+ },
531+ "xenial": {
532+ "amd64": [],
533+ "arm64": [],
534+ "armhf": [],
535+ "i386": [],
536+ "ppc64el": [],
537+ "s390x": []
538+ },
539+ "bionic": {
540+ "amd64": [],
541+ "arm64": [],
542+ "armhf": [],
543+ "i386": [],
544+ "ppc64el": [],
545+ "s390x": []
546+ },
547+ "focal": {
548+ "amd64": [],
549+ "arm64": [],
550+ "armhf": [],
551+ "i386": [],
552+ "ppc64el": [],
553+ "s390x": []
554+ },
555+ "hirsute": {
556+ "amd64": [],
557+ "arm64": [],
558+ "armhf": [],
559+ "i386": [],
560+ "ppc64el": [],
561+ "s390x": []
562+ },
563+ "impish": {
564+ "amd64": [],
565+ "ppc64el": [],
566+ "i386": [],
567+ "armhf": [],
568+ "arm64": [],
569+ "s390x": []
570+ },
571+ "jammy": {
572+ "amd64": [],
573+ "arm64": [],
574+ "i386": [],
575+ "s390x": [],
576+ "ppc64el": [],
577+ "armhf": []
578+ },
579+ "kinetic": {
580+ "ppc64el": [],
581+ "arm64": [],
582+ "s390x": [],
583+ "armhf": [],
584+ "i386": [],
585+ "amd64": []
586+ }
587+ }
588+}
589diff --git a/tests/data/running-20220822.json b/tests/data/running-20220822.json
590new file mode 100644
591index 0000000..76d677f
592--- /dev/null
593+++ b/tests/data/running-20220822.json
594@@ -0,0 +1 @@
595+{"systemd-upstream": {"build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:19;": {"focal": {"arm64": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:19"}, 5219, "\tRenaming libudev1-dbgsym_251.1398.gf315d476c6.0_arm64.deb to libudev1-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'libudev-dev' in '../libudev-dev_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-sysusers' in '../systemd-standalone-sysusers_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-sysusers-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-standalone-sysusers/systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'systemd-standalone-tmpfiles' in '../systemd-standalone-tmpfiles_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-tmpfiles-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-standalone-tmpfiles/systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'systemd-oomd' in '../systemd-oomd_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-oomd-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-oomd/systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\n dpkg-genbuildinfo --build=binary\n dpkg-genchanges --build=binary >../systemd_251.2-1_arm64.changes\ndpkg-genchanges: info: binary-only upload (no source code included)\n dpkg-source --after-build .\ndpkg-buildpackage: info: binary-only upload (no source included)\nautopkgtest [04:59:39]: test timedated: preparing testbed\n"], "s390x": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:19"}, 5249, "[860/2304] cc -o systemd-user-runtime-dir 'systemd-user-runtime-dir@exe/src_login_user-runtime-dir.c.o' -flto -Wl,--as-needed -Wl,--no-undefined -pie -Wl,--fatal-warnings -Wl,-z,now -Wl,-z,relro -fstack-protector -Wl,--warn-common -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/tmp/autopkgtest.UNl3GD/build.uT0/systemd=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--start-group src/shared/libsystemd-shared-251.so -Wl,--end-group '-Wl,-rpath,$ORIGIN/src/shared:XXXXXXXXXXXXXX' -Wl,-rpath-link,/tmp/autopkgtest.UNl3GD/build.uT0/systemd/build-deb/src/shared\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:12;": {"focal": {"ppc64el": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:12"}, 5156, "+ timeout --foreground 300 /bin/qemu-system-ppc64 -smp 4 -net none -m 512M -nographic -kernel /boot/vmlinux-5.4.0-124-generic -drive format=raw,cache=unsafe,file=/var/tmp/systemd-test.NKw8hr/default.img -device virtio-rng-pci,max-bytes=1024,period=1000 -initrd /boot/initrd.img-5.4.0-124-generic -append 'root=LABEL=systemd_boot rw raid=noautodetect rd.luks=0 loglevel=2 init=/lib/systemd/systemd console=hvc0 SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/testsuite-09.units:/usr/lib/systemd/tests/testdata/units: systemd.unit=testsuite.target systemd.wants=testsuite-09.service systemd.wants=end.service'\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-cfpc=workaround\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-sbbc=workaround\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-ibs=workaround\n\n\r\nSLOF\u001b[0m\u001b[?25l **********************************************************************\r\n\u001b[1mQEMU Starting\r\n\u001b[0m Build Date = Jan 31 2020 20:27:09\r\n FW Version = buildd@ release 20191209\r\n Press \"s\" to enter Open Firmware.\r\r\n\r\r\n\u001b[0m\u001b[?25hC0000\rC0100\rC0120\rC0140\rC0200\rC0240\rC0260\rC02E0\rC0300\rC0320\rC0340\rC0360\rC0370\rC0380\rC0371\rC0373\rC0374\rC03F0\rC0400\rC0480\rC04C0\rC04D0\rC0500\rPopulating /vdevice methods\r\nPopulating /vdevice/vty@71000000\r\nPopulating /vdevice/nvram@71000001\r\nPopulating /vdevice/v-scsi@71000002\r\n SCSI: Looking for devices\r\n 8000000000000000 DISK : \"QEMU QEMU HARDDISK 2.5+\"\r\n 8200000000000000 CD-ROM : \"QEMU QEMU CD-ROM 2.5+\"\r\nC05A0\rPopulating /pci@800000020000000\r\n 00 0000 (D) : 1234 1111 qemu vga\r\n 00 0800 (D) : 1033 0194 serial bus [ usb-xhci ]\r\n 00 1000 (D) : 1af4 1005 legacy-device*\r\nC0600\rC06C0\rC0700\rC0800\rC0880\rNo NVRAM common partition, re-initializing...\r\nC0890\rC08A0\rC08A8\rInstalling QEMU fb\r\n\r\n\r\n\r\nC08B0\rScanning USB \r\n XHCI: Initializing\r\n USB Keyboard \r\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:12;": {"focal": {"amd64": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:12"}, 5137, "[ 263.470842] testsuite-02.sh[33]: test-conf-files OK\r\n[ 263.479534] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-hmac'\r\n[ 263.491161] testsuite-02.sh[33]: test-hmac OK\r\n[ 263.500096] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-set-disable-mempool'\r\n[ 263.511745] testsuite-02.sh[33]: test-set-disable-mempool OK\r\n[ 263.520582] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-libudev-sym'\r\n[ 263.532425] testsuite-02.sh[33]: test-libudev-sym OK\r\n[ 263.542344] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-udev-util'\r\n[ 263.554598] testsuite-02.sh[33]: test-udev-util OK\r\n[ 263.564466] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-network-generator-conversion.sh'\r\n[ 263.598931] testsuite-02.sh[33]: test-network-generator-conversion.sh OK\r\n[ 263.608357] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-lldp-rx'\r\n[ 263.620026] testsuite-02.sh[33]: test-lldp-rx OK\r\n[ 263.629083] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-ether-addr-util'\r\n[ 263.640881] testsuite-02.sh[33]: test-ether-addr-util OK\r\n[ 263.649836] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-watch-pid'\r\n[ 263.682230] testsuite-02.sh[33]: test-watch-pid OK\r\n[ 263.706128] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-libsystemd-sym'\r\n[ 263.718171] testsuite-02.sh[33]: test-libsystemd-sym OK\r\n[ 263.728677] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-fido-id-desc'\r\n[ 263.740393] testsuite-02.sh[33]: test-fido-id-desc OK\r\n[ 263.749484] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-sigbus'\r\n[ 263.761337] testsuite-02.sh[33]: test-sigbus OK\r\n[ 263.770099] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-env-util'\r\n[ 263.781948] testsuite-02.sh[33]: test-env-util OK\r\n[ 263.791839] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-random-util'\r\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24351', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/02c2f7ea526b414f0e83903d9cb77b364340cd22'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-22 21:56:53;": {"focal": {"s390x": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24351", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/02c2f7ea526b414f0e83903d9cb77b364340cd22"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-22 21:56:53"}, 5255, "[847/2304] cc -Isystemd-resolved@exe -I. -I.. -Isrc/basic -I../src/basic -Isrc/fundamental -I../src/fundamental -Isrc/systemd -I../src/systemd -I../ -I../src/libsystemd/sd-bus -I../src/libsystemd/sd-device -I../src/libsystemd/sd-event -I../src/libsystemd/sd-hwdb -I../src/libsystemd/sd-id128 -I../src/libsystemd/sd-journal -I../src/libsystemd/sd-netlink -I../src/libsystemd/sd-network -I../src/libsystemd/sd-resolve -Isrc/shared -I../src/shared -Isrc/resolve -I../src/resolve -flto -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Werror -std=gnu11 -Wno-format-signedness -Wno-missing-field-initializers -Wno-unused-parameter -Wdate-time -Wendif-labels -Werror=format=2 -Werror=implicit-function-declaration -Werror=incompatible-pointer-types -Werror=int-conversion -Werror=overflow -Werror=override-init -Werror=return-type -Werror=shift-count-overflow -Werror=shift-overflow=2 -Werror=undef -Wfloat-equal -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wnested-externs -Wold-style-definition -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-aliasing=2 -Wstrict-prototypes -Wsuggest-attribute=noreturn -Wunused-function -Wwrite-strings -Wno-maybe-uninitialized -Wno-unused-result -Werror=missing-declarations -Werror=missing-prototypes -fdiagnostics-show-option -fno-common -fno-strict-aliasing -fstack-protector -fstack-protector-strong -fvisibility=hidden --param=ssp-buffer-size=4 -ffunction-sections -fdata-sections -Werror=shadow -include config.h -g -O2 -fdebug-prefix-map=/tmp/autopkgtest.b8jMMa/build.QI1/systemd=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIE -pthread -MD -MQ 'systemd-resolved@exe/src_resolve_resolved.c.o' -MF 'systemd-resolved@exe/src_resolve_resolved.c.o.d' -o 'systemd-resolved@exe/src_resolve_resolved.c.o' -c ../src/resolve/resolved.c\n"]}}}, "dovecot": {"ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:56:40;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"amd64": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:56:40", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 270, "Unpacking mokutil (0.6.0-2) over (0.4.0-1ubuntu2) ...\r\nPreparing to unpack .../18-python3-distutils_3.10.6-1_all.deb ...\r\nUnpacking python3-distutils (3.10.6-1) over (3.10.5-2ubuntu2) ...\r\nPreparing to unpack .../19-python3-lib2to3_3.10.6-1_all.deb ...\r\nUnpacking python3-lib2to3 (3.10.6-1) over (3.10.5-2ubuntu2) ...\r\nSetting up libkeyutils1:amd64 (1.6.3-1) ...\r\nSetting up libtirpc-common (1.3.3+ds-1) ...\r\nSetting up libssl3:amd64 (3.0.5-2ubuntu1) ...\r\nSetting up ubuntu-standard (1.489) ...\r\nSetting up libappstream4:amd64 (0.15.5-1) ...\r\nSetting up libsasl2-modules-db:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up libsigsegv2:amd64 (2.14-1ubuntu1) ...\r\nSetting up usrmerge (29ubuntu1) ...\r\nSetting up libsasl2-2:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up openssl (3.0.5-2ubuntu1) ...\r\nInstalling new version of config file /etc/ssl/openssl.cnf ...\r\nSetting up libpython3-stdlib:amd64 (3.10.6-1) ...\r\nSetting up initramfs-tools-bin (0.140ubuntu16) ...\r\nSetting up libtirpc3:amd64 (1.3.3+ds-1) ...\r\nSetting up mokutil (0.6.0-2) ...\r\nSetting up libsasl2-modules:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up python3 (3.10.6-1) ...\r\nSetting up initramfs-tools-core (0.140ubuntu16) ...\r\nSetting up python3-lib2to3 (3.10.6-1) ...\r\nSetting up python3-distutils (3.10.6-1) ...\r\nSetting up initramfs-tools (0.140ubuntu16) ...\r\nupdate-initramfs: deferring update (trigger activated)\r\nSetting up ubuntu-minimal (1.489) ...\r\nSetting up python3-gdbm:amd64 (3.10.6-1) ...\r\nProcessing triggers for man-db (2.10.2-2) ...\r\nProcessing triggers for libc-bin (2.35-0ubuntu3) ...\r\nProcessing triggers for initramfs-tools (0.140ubuntu16) ...\r\nupdate-initramfs: Generating /boot/initrd.img-5.15.0-27-generic\r\nNo lz4 in /usr/bin:/sbin:/bin, using gzip\r\nReading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\nautopkgtest [05:01:10]: rebooting testbed after setup commands that affected boot\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:59:38;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"s390x": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:59:38", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 130, "autopkgtest [04:59:44]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [04:59:44]: host juju-4d1272-prod-proposed-migration-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.0mwj_par/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-9@bos01-s390x-4.secgroup --name adt-kinetic-s390x-dovecot-20220823-045944-juju-4d1272-prod-proposed-migration-9 --image adt/ubuntu-kinetic-s390x-server --keyname testbed-juju-4d1272-prod-proposed-migration-9 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:23;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"armhf": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:23", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 80, "autopkgtest [05:00:26]: starting date: 2022-08-23\nautopkgtest [05:00:26]: git checkout: 167b209 lxd: Increase various timeouts\nautopkgtest [05:00:26]: host juju-4d1272-prod-proposed-migration-5; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.70eb48qe/out --timeout-copy=6000 --setup-commands 'sed -i \"s/ports.ubuntu.com/ftpmaster.internal/; s/ubuntu-ports/ubuntu/\" /etc/apt/sources.list `ls /etc/apt/sources.list.d/*.list 2>/dev/null || true`; ln -s /dev/null /etc/systemd/system/bluetooth.service; printf \"http_proxy=http://squid.internal:3128\\nhttps_proxy=http://squid.internal:3128\\nno_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24\\n\" >> /etc/environment' --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- lxd -r lxd-armhf-10.44.124.77 lxd-armhf-10.44.124.77:autopkgtest/ubuntu/kinetic/armhf\nautopkgtest [05:01:35]: @@@@@@@@@@@@@@@@@@@@ test bed setup\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:59:40;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"ppc64el": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:59:40", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 80, "autopkgtest [05:00:31]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:00:31]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.0gq45tvi/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@bos02-ppc64el-9.secgroup --name adt-kinetic-ppc64el-dovecot-20220823-050031-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-ppc64el-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "all-proposed_1;ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:18;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"s390x": [{"all-proposed": "1", "ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:18", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 70, "autopkgtest [05:00:39]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.dkxt87g0/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-pocket=proposed --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@bos01-s390x-7.secgroup --name adt-kinetic-s390x-dovecot-20220823-050039-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-s390x-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "all-proposed_1;ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:17;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"amd64": [{"all-proposed": "1", "ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:17", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 50, "autopkgtest [05:00:56]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.7yvknlf_/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-pocket=proposed --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@lgw01-5.secgroup --name adt-kinetic-amd64-dovecot-20220823-050056-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}, "r-cran-pheatmap": {"submit-time_2022-08-23 00:34:17;triggers_['r-cran-scales/1.2.1-1'];": {"kinetic": {"amd64": [{"submit-time": "2022-08-23 00:34:17", "triggers": ["r-cran-scales/1.2.1-1"]}, 10, "autopkgtest [05:01:42]: starting date: 2022-08-23\nautopkgtest [05:01:43]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:01:43]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.8654qrvj/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --apt-pocket=proposed=src:r-cran-scales --apt-upgrade r-cran-pheatmap --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=r-cran-scales/1.2.1-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@lgw01-29.secgroup --name adt-kinetic-amd64-r-cran-pheatmap-20220823-050142-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}, "r-cran-plotly": {"submit-time_2022-08-23 00:34:17;triggers_['r-cran-scales/1.2.1-1'];": {"kinetic": {"amd64": [{"submit-time": "2022-08-23 00:34:17", "triggers": ["r-cran-scales/1.2.1-1"]}, 10, "autopkgtest [05:01:45]: starting date: 2022-08-23\nautopkgtest [05:01:45]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:01:45]: host juju-4d1272-prod-proposed-migration-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.mrd6nrdp/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --apt-pocket=proposed=src:r-cran-scales --apt-upgrade r-cran-plotly --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=r-cran-scales/1.2.1-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-9@lgw01-2.secgroup --name adt-kinetic-amd64-r-cran-plotly-20220823-050145-juju-4d1272-prod-proposed-migration-9 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-9 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}}
596diff --git a/tests/test_job.py b/tests/test_job.py
597new file mode 100644
598index 0000000..d9a9967
599--- /dev/null
600+++ b/tests/test_job.py
601@@ -0,0 +1,112 @@
602+#!/usr/bin/env python3
603+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
604+
605+# Author: Bryce Harrington <bryce@canonical.com>
606+#
607+# Copyright (C) 2022 Bryce W. Harrington
608+#
609+# Released under GNU GPLv2 or later, read the file 'LICENSE.GPLv2+' for
610+# more information.
611+
612+"""Job class tests"""
613+
614+import os
615+import sys
616+
617+sys.path.insert(0, os.path.realpath(
618+ os.path.join(os.path.dirname(__file__), "..")))
619+
620+from ppa.job import Job, get_running, get_waiting
621+
622+
623+class ResponseMock:
624+ def __init__(self, text):
625+ self._text = text.encode('utf-8')
626+
627+ def read(self):
628+ return self._text
629+
630+
631+def test_object():
632+ """Checks that Job objects can be instantiated."""
633+ job = Job(0, '', '', '', '')
634+ assert job
635+
636+
637+def test_init():
638+ job = Job(0, 'a', 'b', 'c', 'd')
639+ assert job.number == 0
640+ assert job.submit_time == 'a'
641+ assert job.source_package == 'b'
642+ assert job.series == 'c'
643+ assert job.arch == 'd'
644+
645+
646+def test_repr():
647+ """Checks Job object machine-parsable representation."""
648+ job = Job(0, 'a', 'b', 'c', 'd')
649+ assert repr(job) == "Job(source_package='b', series='c', arch='d')"
650+
651+
652+def test_str():
653+ """Checks Job object textual presentation."""
654+ job = Job(0, 'a', 'b', 'c', 'd')
655+ assert f"{job}" == 'b c (d)'
656+
657+
658+def test_triggers():
659+ """Checks Job object's triggers."""
660+ job = Job(0, '', '', '', '', triggers=['a/1', 'b/2'])
661+ assert job.triggers == ['a/1', 'b/2']
662+
663+
664+def test_ppas():
665+ """Checks Job object textual presentation."""
666+ job = Job(0, '', '', '', '', ppas=['ppa:a/b', 'ppa:c/d'])
667+ assert job.ppas == ['ppa:a/b', 'ppa:c/d']
668+
669+
670+def test_request_url():
671+ """Checks Job object textual presentation."""
672+ jobinfo = {
673+ 'triggers': ['t/1'],
674+ 'ppas': ['ppa:a/b', 'ppa:c/d']
675+ }
676+ job = Job(0, 'a', 'b', 'c', 'd', jobinfo['triggers'], jobinfo['ppas'])
677+ assert job.request_url == "https://autopkgtest.ubuntu.com/request.cgi?release=c&arch=d&package=b&trigger=t/1"
678+
679+
680+def test_get_running():
681+ """Checks output from the get_running() command"""
682+ json_text = ('{"mypackage": {"my-job-id": {"focal": { "arm64": ['
683+ '{"submit-time": "2022-08-19 20:59:01", '
684+ '"triggers": ["yourpackage/1.2.3"], '
685+ '"ppas": ["ppa:me/myppa"]}, '
686+ '1234, '
687+ '"Log Output Here"'
688+ '] } } } }')
689+ fake_response = ResponseMock(json_text)
690+ job = next(get_running(fake_response, series='focal', ppa='ppa:me/myppa'))
691+ assert repr(job) == "Job(source_package='mypackage', series='focal', arch='arm64')"
692+ assert job.triggers == ["yourpackage/1.2.3"]
693+ assert job.ppas == ["ppa:me/myppa"]
694+
695+
696+def test_get_waiting():
697+ """Checks output from the get_waiting() command"""
698+ # TODO: I think ppas need to be in "ppa" instead of under "ubuntu" but need to doublecheck.
699+ json_text = ('{ "ubuntu": { "focal": { "amd64": ['
700+ ' "a\\n{\\"requester\\": \\"you\\",'
701+ ' \\"submit-time\\": \\"2022-08-19 07:37:56\\",'
702+ ' \\"triggers\\": [ \\"a/1.2-3\\", \\"b/1-1\\" ] }",'
703+ ' "b\\n{\\"requester\\": \\"you\\",'
704+ ' \\"submit-time\\": \\"2022-08-19 07:37:57\\",'
705+ ' \\"ppas\\": [ \\"ppa:me/myppa\\" ],'
706+ ' \\"triggers\\": [ \\"c/3.2-1\\", \\"d/2-2\\" ] }"'
707+ '] } } }')
708+ fake_response = ResponseMock(json_text)
709+ job = next(get_waiting(fake_response, series='focal', ppa='ppa:me/myppa'))
710+ assert job
711+ assert job.source_package == "b"
712+ assert job.ppas == ['ppa:me/myppa']
713+ assert job.triggers == ['c/3.2-1', 'd/2-2']

Subscribers

People subscribed via source and target branches

to all changes: