CloudPolicy: Support public PPAs with fingerprints

Updates the _parse_ppas function to also allow public PPAs with
fingerprints to be provided (team/name:fingerprint).
sil2100/cloud-only-run-once
Aleksa Svitlica 2 years ago
parent 2bd1584c84
commit f21d94d3b2

@ -69,7 +69,7 @@ class CloudPolicy(BasePolicy):
self.failure_emails = getattr(self.options, "cloud_failure_emails", self.DEFAULT_EMAILS) self.failure_emails = getattr(self.options, "cloud_failure_emails", self.DEFAULT_EMAILS)
self.error_emails = getattr(self.options, "cloud_error_emails", self.DEFAULT_EMAILS) self.error_emails = getattr(self.options, "cloud_error_emails", self.DEFAULT_EMAILS)
adt_ppas = getattr(self.options, "adt_ppas", []) adt_ppas = getattr(self.options, "adt_ppas", "").split()
ppas = self._parse_ppas(adt_ppas) ppas = self._parse_ppas(adt_ppas)
if len(ppas) == 0: if len(ppas) == 0:
@ -402,13 +402,16 @@ class CloudPolicy(BasePolicy):
def _parse_ppas(self, ppas): def _parse_ppas(self, ppas):
"""Parse PPA list to store in format expected by cloud tests """Parse PPA list to store in format expected by cloud tests
Since currently only private PPAs in Britney are provided with fingerprints we will Only supports PPAs provided with a fingerprint
only use those.
Britney private PPA format: Britney private PPA format:
'user:token@team/name:fingerprint' 'user:token@team/name:fingerprint'
Britney public PPA format:
'team/name:fingerprint'
Cloud private PPA format: Cloud private PPA format:
'https://user:token@private-ppa.launchpadcontent.net/team/name/ubuntu=fingerprint 'https://user:token@private-ppa.launchpadcontent.net/team/name/ubuntu=fingerprint
Cloud public PPA format:
'https://ppa.launchpadcontent.net/team/name/ubuntu=fingerprint
:param ppas List of PPAs in Britney approved format :param ppas List of PPAs in Britney approved format
:return A list of PPAs in valid cloud test format. Can return an empty list if none found. :return A list of PPAs in valid cloud test format. Can return an empty list if none found.
@ -425,6 +428,15 @@ class CloudPolicy(BasePolicy):
match.group("auth"), match.group("name"), match.group("fingerprint") match.group("auth"), match.group("name"), match.group("fingerprint")
) )
cloud_ppas.append(formatted_ppa) cloud_ppas.append(formatted_ppa)
else:
match = re.match("^(?P<name>.+):(?P<fingerprint>.+$)", ppa)
if not match:
raise RuntimeError('Public PPA %s not following required format (team/name:fingerprint)', ppa)
formatted_ppa = "https://ppa.launchpadcontent.net/{}/ubuntu={}".format(
match.group("name"), match.group("fingerprint")
)
cloud_ppas.append(formatted_ppa)
return cloud_ppas return cloud_ppas

@ -201,11 +201,12 @@ class T(unittest.TestCase):
tests. tests.
""" """
input_ppas = [ input_ppas = [
"deadsnakes/ppa", "deadsnakes/ppa:fingerprint",
"user:token@team/name:fingerprint" "user:token@team/name:fingerprint"
] ]
expected_ppas = [ expected_ppas = [
"https://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu=fingerprint",
"https://user:token@private-ppa.launchpadcontent.net/team/name/ubuntu=fingerprint" "https://user:token@private-ppa.launchpadcontent.net/team/name/ubuntu=fingerprint"
] ]
@ -214,6 +215,10 @@ class T(unittest.TestCase):
def test_errors_raised_if_invalid_ppa_input(self): def test_errors_raised_if_invalid_ppa_input(self):
"""Test that error are raised if input PPAs don't match expected format""" """Test that error are raised if input PPAs don't match expected format"""
self.assertRaises(
RuntimeError, self.policy._parse_ppas, ["team/name"]
)
self.assertRaises( self.assertRaises(
RuntimeError, self.policy._parse_ppas, ["user:token@team/name"] RuntimeError, self.policy._parse_ppas, ["user:token@team/name"]
) )

Loading…
Cancel
Save