mirror of
https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
synced 2025-05-23 16:31:32 +00:00
autopkgtest: Include triggering packages in AMQP requests
With this, tests can do special things when they get triggered by a particular package. E. g. "linux" or "gcc" could skip their "rebuild myself" test if they were triggered by a new version of themselves (as opposed to a new binutils). This is particularly aimed at DKMS tests which need to install the triggering kernel (e. g. -generic vs. -generic-lts-backport-XXX).
This commit is contained in:
parent
c195f87ba5
commit
90596ff8b0
@ -464,10 +464,18 @@ class AutoPackageTest(object):
|
|||||||
|
|
||||||
def _arches(verinfo):
|
def _arches(verinfo):
|
||||||
res = set()
|
res = set()
|
||||||
for v, archinfo in verinfo.items():
|
for archinfo in verinfo.values():
|
||||||
res.update(archinfo.keys())
|
res.update(archinfo.keys())
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def _trigsources(verinfo):
|
||||||
|
res = set()
|
||||||
|
for archinfo in verinfo.values():
|
||||||
|
for triggers in archinfo.values():
|
||||||
|
for (t, v) in triggers:
|
||||||
|
res.add(t)
|
||||||
|
return res
|
||||||
|
|
||||||
if amqp_url.startswith('amqp://'):
|
if amqp_url.startswith('amqp://'):
|
||||||
with kombu.Connection(amqp_url) as conn:
|
with kombu.Connection(amqp_url) as conn:
|
||||||
for arch in arch_queues:
|
for arch in arch_queues:
|
||||||
@ -476,13 +484,15 @@ class AutoPackageTest(object):
|
|||||||
with kombu.Producer(conn, routing_key=arch_queues[arch], auto_declare=False) as p:
|
with kombu.Producer(conn, routing_key=arch_queues[arch], auto_declare=False) as p:
|
||||||
for pkg, verinfo in self.requested_tests.items():
|
for pkg, verinfo in self.requested_tests.items():
|
||||||
if arch in _arches(verinfo):
|
if arch in _arches(verinfo):
|
||||||
p.publish(pkg)
|
params = {'triggers': sorted(_trigsources(verinfo))}
|
||||||
|
p.publish(pkg + '\n' + json.dumps(params))
|
||||||
elif amqp_url.startswith('file://'):
|
elif amqp_url.startswith('file://'):
|
||||||
# in testing mode, adt_amqp will be a file:// URL
|
# in testing mode, adt_amqp will be a file:// URL
|
||||||
with open(amqp_url[7:], 'a') as f:
|
with open(amqp_url[7:], 'a') as f:
|
||||||
for pkg, verinfo in self.requested_tests.items():
|
for pkg, verinfo in self.requested_tests.items():
|
||||||
for arch in _arches(verinfo):
|
for arch in _arches(verinfo):
|
||||||
f.write('%s:%s\n' % (arch_queues[arch], pkg))
|
params = {'triggers': sorted(_trigsources(verinfo))}
|
||||||
|
f.write('%s:%s %s\n' % (arch_queues[arch], pkg, json.dumps(params)))
|
||||||
else:
|
else:
|
||||||
self.log_error('Unknown ADT_AMQP schema in %s' %
|
self.log_error('Unknown ADT_AMQP schema in %s' %
|
||||||
self.britney.options.adt_amqp)
|
self.britney.options.adt_amqp)
|
||||||
|
@ -171,9 +171,12 @@ class TestAutoPkgTest(TestBase):
|
|||||||
# triggered
|
# triggered
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.amqp_requests,
|
self.amqp_requests,
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
set(['debci-series-i386:green {"triggers": ["green"]}',
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
'debci-series-amd64:green {"triggers": ["green"]}',
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
'debci-series-i386:lightgreen {"triggers": ["green"]}',
|
||||||
|
'debci-series-amd64:lightgreen {"triggers": ["green"]}',
|
||||||
|
'debci-series-i386:darkgreen {"triggers": ["green"]}',
|
||||||
|
'debci-series-amd64:darkgreen {"triggers": ["green"]}']))
|
||||||
|
|
||||||
# ... and that they get recorded as pending
|
# ... and that they get recorded as pending
|
||||||
expected_pending = '''darkgreen 1 amd64 green 2
|
expected_pending = '''darkgreen 1 amd64 green 2
|
||||||
@ -435,11 +438,7 @@ lightgreen 1 i386 green 2
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
|
|
||||||
# next run should not trigger any new requests
|
# next run should not trigger any new requests
|
||||||
@ -468,7 +467,8 @@ lightgreen 1 i386 green 2
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.assertEqual(self.amqp_requests,
|
self.assertEqual(self.amqp_requests,
|
||||||
set(['debci-series-amd64:lightgreen', 'debci-series-i386:lightgreen']))
|
set(['debci-series-amd64:lightgreen {"triggers": ["lightgreen"]}',
|
||||||
|
'debci-series-i386:lightgreen {"triggers": ["lightgreen"]}']))
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
|
|
||||||
def test_rdepends_unbuilt_unstable_only(self):
|
def test_rdepends_unbuilt_unstable_only(self):
|
||||||
@ -542,11 +542,7 @@ lightgreen 1 i386 green 2
|
|||||||
('excuses', 'lightgreen has no up-to-date binaries on any arch')]
|
('excuses', 'lightgreen has no up-to-date binaries on any arch')]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
|
|
||||||
# lightgreen 2 stays unbuilt in britney, but we get a test result for it
|
# lightgreen 2 stays unbuilt in britney, but we get a test result for it
|
||||||
@ -593,11 +589,7 @@ lightgreen 1 i386 green 2
|
|||||||
('excuses', 'lightgreen has no up-to-date binaries on any arch')]
|
('excuses', 'lightgreen has no up-to-date binaries on any arch')]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
|
|
||||||
# we only get a result for lightgreen 2, not for the requested 1
|
# we only get a result for lightgreen 2, not for the requested 1
|
||||||
self.swift.set_results({'autopkgtest-series': {
|
self.swift.set_results({'autopkgtest-series': {
|
||||||
@ -738,9 +730,12 @@ lightgreen 1 i386 green 2
|
|||||||
# triggered; lightgreen should be triggered only once
|
# triggered; lightgreen should be triggered only once
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.amqp_requests,
|
self.amqp_requests,
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
set(['debci-series-i386:green {"triggers": ["green"]}',
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
'debci-series-amd64:green {"triggers": ["green"]}',
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
'debci-series-i386:lightgreen {"triggers": ["green", "lightgreen"]}',
|
||||||
|
'debci-series-amd64:lightgreen {"triggers": ["green", "lightgreen"]}',
|
||||||
|
'debci-series-i386:darkgreen {"triggers": ["green"]}',
|
||||||
|
'debci-series-amd64:darkgreen {"triggers": ["green"]}']))
|
||||||
|
|
||||||
# ... and that they get recorded as pending
|
# ... and that they get recorded as pending
|
||||||
expected_pending = '''darkgreen 1 amd64 green 2
|
expected_pending = '''darkgreen 1 amd64 green 2
|
||||||
@ -766,11 +761,7 @@ lightgreen 2 i386 lightgreen 2
|
|||||||
},
|
},
|
||||||
{'newgreen': [('old-version', '-'), ('new-version', '2')]})
|
{'newgreen': [('old-version', '-'), ('new-version', '2')]})
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:newgreen', 'debci-series-amd64:newgreen',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
expected_pending = '''darkgreen 1 amd64 newgreen 2
|
expected_pending = '''darkgreen 1 amd64 newgreen 2
|
||||||
darkgreen 1 i386 newgreen 2
|
darkgreen 1 i386 newgreen 2
|
||||||
lightgreen 1 amd64 newgreen 2
|
lightgreen 1 amd64 newgreen 2
|
||||||
@ -801,11 +792,7 @@ newgreen 2 i386 newgreen 2
|
|||||||
},
|
},
|
||||||
{'newgreen': [('old-version', '-'), ('new-version', '2')]})
|
{'newgreen': [('old-version', '-'), ('new-version', '2')]})
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:newgreen', 'debci-series-amd64:newgreen',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
|
|
||||||
def test_result_from_older_version(self):
|
def test_result_from_older_version(self):
|
||||||
@ -822,7 +809,8 @@ newgreen 2 i386 newgreen 2
|
|||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.amqp_requests,
|
self.amqp_requests,
|
||||||
set(['debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
set(['debci-series-i386:darkgreen {"triggers": ["darkgreen"]}',
|
||||||
|
'debci-series-amd64:darkgreen {"triggers": ["darkgreen"]}']))
|
||||||
self.assertEqual(self.pending_requests,
|
self.assertEqual(self.pending_requests,
|
||||||
'darkgreen 2 amd64 darkgreen 2\ndarkgreen 2 i386 darkgreen 2\n')
|
'darkgreen 2 amd64 darkgreen 2\ndarkgreen 2 i386 darkgreen 2\n')
|
||||||
|
|
||||||
@ -846,7 +834,8 @@ newgreen 2 i386 newgreen 2
|
|||||||
{'darkgreen': (False, {'darkgreen 3': {'amd64': 'RUNNING', 'i386': 'RUNNING'}})})
|
{'darkgreen': (False, {'darkgreen 3': {'amd64': 'RUNNING', 'i386': 'RUNNING'}})})
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.amqp_requests,
|
self.amqp_requests,
|
||||||
set(['debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
set(['debci-series-i386:darkgreen {"triggers": ["darkgreen"]}',
|
||||||
|
'debci-series-amd64:darkgreen {"triggers": ["darkgreen"]}']))
|
||||||
self.assertEqual(self.pending_requests,
|
self.assertEqual(self.pending_requests,
|
||||||
'darkgreen 3 amd64 darkgreen 3\ndarkgreen 3 i386 darkgreen 3\n')
|
'darkgreen 3 amd64 darkgreen 3\ndarkgreen 3 i386 darkgreen 3\n')
|
||||||
|
|
||||||
@ -872,11 +861,7 @@ newgreen 2 i386 newgreen 2
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
self.data.remove_all(True)
|
self.data.remove_all(True)
|
||||||
|
|
||||||
@ -889,11 +874,7 @@ newgreen 2 i386 newgreen 2
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(len(self.amqp_requests), 6)
|
||||||
self.amqp_requests,
|
|
||||||
set(['debci-series-i386:green', 'debci-series-amd64:green',
|
|
||||||
'debci-series-i386:lightgreen', 'debci-series-amd64:lightgreen',
|
|
||||||
'debci-series-i386:darkgreen', 'debci-series-amd64:darkgreen']))
|
|
||||||
|
|
||||||
expected_pending = '''darkgreen 1 amd64 green 3
|
expected_pending = '''darkgreen 1 amd64 green 3
|
||||||
darkgreen 1 i386 green 3
|
darkgreen 1 i386 green 3
|
||||||
@ -1077,7 +1058,8 @@ lightgreen 1 i386 green 3
|
|||||||
# should not trigger new requests
|
# should not trigger new requests
|
||||||
self.assertEqual(self.pending_requests, '')
|
self.assertEqual(self.pending_requests, '')
|
||||||
self.assertEqual(self.amqp_requests,
|
self.assertEqual(self.amqp_requests,
|
||||||
set(['debci-series-amd64:lightgreen', 'debci-series-i386:lightgreen']))
|
set(['debci-series-amd64:lightgreen {"triggers": ["green"]}',
|
||||||
|
'debci-series-i386:lightgreen {"triggers": ["green"]}']))
|
||||||
|
|
||||||
# but the next run should not trigger anything new
|
# but the next run should not trigger anything new
|
||||||
self.do_test(
|
self.do_test(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user