Skip to content

Commit

Permalink
bug 1311730: Gracefully handle missing addons section (#162). r=rail
Browse files Browse the repository at this point in the history
  • Loading branch information
bhearsum committed Oct 25, 2016
1 parent 2b4eab7 commit 351dfa3
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 10 deletions.
18 changes: 8 additions & 10 deletions auslib/blobs/systemaddons.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,23 @@ def __init__(self, **kwargs):
self["schema_version"] = 5000

def getAddonsForPlatform(self, platform):
for v in self["addons"]:
if platform in self["addons"][v]["platforms"] or "default" in self["addons"][v]["platforms"]:
for v in self.get("addons", {}):
platforms = self["addons"].get(v, {}).get("platforms", {})
if platform in platforms or "default" in platforms:
yield v

def getResolvedPlatform(self, addon, platform):
if platform in self['addons'][addon]['platforms']:
return self['addons'][addon]['platforms'][platform].get('alias', platform)
if "default" in self['addons'][addon]['platforms']:
platforms = self.get("addons", {}).get(addon, {}).get("platforms", {})
if platform in platforms:
return self.get('addons', {}).get(addon, {}).get('platforms', {}).get(platform, {}).get('alias', platform)
if "default" in platforms:
return "default"
raise BadDataError("No platform '%s' or default in addon '%s'",
platform, addon)

def getPlatformData(self, addon, platform):
platform = self.getResolvedPlatform(addon, platform)
try:
return self['addons'][addon]['platforms'][platform]
except KeyError:
raise BadDataError("No platform '%s' in addon '%s'", platform,
addon)
return self.get("addons", {}).get(addon, {}).get("platforms", {}).get(platform)

def shouldServeUpdate(self, updateQuery):
# SystemAddon updates should always be returned. It is the responsibility
Expand Down
31 changes: 31 additions & 0 deletions auslib/test/blobs/test_systemaddons.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,15 @@ def setUp(self):
"hashFunction": "SHA512",
"uninstall": true
}
""")
self.blob3 = SystemAddonsBlob()
self.blob3.loadJSON("""
{
"name": "fake",
"schema_version": 5000,
"hashFunction": "SHA512",
"uninstall": false
}
""")
self.empty_blob = SystemAddonsBlob()
self.empty_blob.loadJSON("""
Expand Down Expand Up @@ -144,6 +153,28 @@ def testXMLWhenUninstall(self):
self.assertEqual(returned_footer.strip(), expected_footer.strip())
self.assertEqual(returned_footer, expected_footer)

def testXMLNoAddonsNoUninstallBlob(self):
updateQuery = {
"product": "gg", "version": "3", "buildID": "1",
"buildTarget": "p", "locale": "l", "channel": "a",
"osVersion": "a", "distribution": "a", "distVersion": "a",
"force": 0
}
returned_header = self.blob3.getInnerHeaderXML(updateQuery, "minor", self.whitelistedDomains, self.specialForceHosts)
returned = self.blob3.getInnerXML(updateQuery, "minor", self.whitelistedDomains, self.specialForceHosts)
returned_footer = self.blob3.getInnerFooterXML(updateQuery, "minor",
self.whitelistedDomains,
self.specialForceHosts)
returned = [x.strip() for x in returned]
expected_header = ""
expected = []
expected = [x.strip() for x in expected]
expected_footer = ""
self.assertEqual(returned_header.strip(), expected_header.strip())
self.assertItemsEqual(returned, expected)
self.assertEqual(returned_footer.strip(), expected_footer.strip())
self.assertEqual(returned_footer, expected_footer)

def testContainsForbiddenDomain(self):
blob = SystemAddonsBlob()
blob.loadJSON("""
Expand Down

0 comments on commit 351dfa3

Please sign in to comment.