#!/usr/bin/env python # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. import os import tempfile import unittest import zipfile import mozfile from mozversion import get_version, errors class SourcesTest(unittest.TestCase): """test getting version information from a sources xml""" def setUp(self): self.tempdir = tempfile.mkdtemp() self.binary = os.path.join(self.tempdir, 'binary') with open(self.binary, 'w') as f: f.write('foobar') with open(os.path.join(self.tempdir, 'application.ini'), 'w') as f: f.writelines("""[App]\nName = B2G\n""") with open(os.path.join(self.tempdir, 'platform.ini'), 'w') as f: f.write('[Build]\nBuildID = PlatformBuildID\n') def tearDown(self): mozfile.remove(self.tempdir) def _create_zip(self, revision=None, date=None): zip_path = os.path.join( self.tempdir, 'gaia', 'profile', 'webapps', 'settings.gaiamobile.org', 'application.zip') os.makedirs(os.path.dirname(zip_path)) app_zip = zipfile.ZipFile(zip_path, 'w') if revision or date: app_zip.writestr('resources/gaia_commit.txt', '%s\n%s' % (revision, date)) app_zip.close() def test_gaia_commit(self): revision, date = ('a' * 40, 'date') self._create_zip(revision, date) v = get_version(self.binary) self.assertEqual(v.get('gaia_changeset'), revision) self.assertEqual(v.get('gaia_date'), date) def test_invalid_gaia_commit(self): revision, date = ('a' * 41, 'date') self._create_zip(revision, date) v = get_version(self.binary) self.assertIsNone(v.get('gaia_changeset')) self.assertEqual(v.get('gaia_date'), date) def test_missing_zip_file(self): v = get_version(self.binary) self.assertIsNone(v.get('gaia_changeset')) self.assertIsNone(v.get('gaia_date')) def test_missing_gaia_commit(self): self._create_zip() v = get_version(self.binary) self.assertIsNone(v.get('gaia_changeset')) self.assertIsNone(v.get('gaia_date')) def test_b2g_fallback_when_no_binary(self): self.assertRaises(errors.RemoteAppNotFoundError, get_version) if __name__ == '__main__': unittest.main()