def testUpdatePromoteToStable(self): """Test Update() when promoting a package to stable.""" p = models.PackageInfo() p.plist = self._GetTestPackageInfoPlist({'desc': 'foodesc'}) p.catalogs = ['unstable', 'testing'] p.manifests = ['unstable', 'testing'] catalogs = ['unstable', 'testing', 'stable'] manifests = ['unstable', 'testing', 'stable'] m = mock.Mock() with mock.patch.object(datastore_locks, 'DatastoreLock', return_value=m) as lock_mock: pkginfo = self._UpdateTestHelper('fooname.dmg', p, catalogs=catalogs, manifests=manifests) self.assertEqual(pkginfo.catalogs, catalogs) self.mox.VerifyAll() lock_mock.assert_called_once_with('pkgsinfo_fooname.dmg') m.assert_has_calls([ mock.call.Acquire(timeout=600, max_acquire_attempts=5), mock.call.Release() ])
def testUpdateWithNewPlistProperties(self): """Test Update() when passing params that change plist XML properties.""" p = models.PackageInfo() orig_version = '9.0.0.0.1' p.plist = self._GetTestPackageInfoPlist( {'desc': 'foodesc', 'version': orig_version}) p.catalogs = ['unstable'] description = 'zomg new description!!!' install_types = ['managed_updates', 'optional_installs'] manifests = ['unstable'] version = '10.0.0.0.1-gg1' minimum_os_version = '10.5.8' maximum_os_version = '' force_install_after_date = datetime.datetime(2012, 2, 23, 13, 0, 0) pkginfo = self._UpdateTestHelper( 'foo.dmg', p, install_types=install_types, manifests=manifests, description=description, version=version, minimum_os_version=minimum_os_version, maximum_os_version=maximum_os_version, force_install_after_date=force_install_after_date) self.assertEqual(description, pkginfo.plist['description']) self.assertEqual(install_types, pkginfo.install_types) self.assertEqual(manifests, pkginfo.manifests) self.assertEqual(version, pkginfo.plist['version']) self.assertEqual(minimum_os_version, pkginfo.plist['minimum_os_version']) self.assertTrue('maximum_os_version' not in pkginfo.plist) self.assertEqual( force_install_after_date, pkginfo.plist['force_install_after_date']) self.mox.VerifyAll()
def testUpdateWithNewPropertiesButIsNotSafeToModifyFailure(self): """Test Update() when IsSafeToModify() is False and Update fails.""" p = models.PackageInfo() orig_desc = 'orig_desc' orig_name = 'fooname' p.plist = self._GetTestPackageInfoPlist({ 'desc': orig_desc, 'name': orig_name }) p.catalogs = ['unstable', 'testing', 'stable'] p.manifests = ['unstable', 'testing', 'stable'] p.name = orig_name description = 'zomg new description!!!' manifests = ['unstable'] catalogs = ['unstable'] self.assertRaises(models.PackageInfoUpdateError, self._UpdateTestHelper, 'foo.dmg', p, catalogs=catalogs, manifests=manifests, name='NEWWW', description=description, safe_to_modify=False, unsafe_properties_changed=True) self.mox.VerifyAll()
def testUpdateFromPlist(self): """Test UpdateFromPlist() with new plist values.""" p = models.PackageInfo() p.plist = self._GetTestPackageInfoPlist({'desc': 'OLD', 'name': 'OLD'}) new_desc = 'NEW DESC!!!' new_name = 'newname' new_hash = 'zomgHASH' new_catalogs = ['unstable', 'testing', 'stable'] xml = self._GetTestPackageInfoPlist({ 'desc': new_desc, 'name': new_name, 'installer_item_hash': new_hash, 'catalogs': new_catalogs }) pkginfo = self._UpdateTestHelper('filename.dmg', p, plist_xml=xml) self.assertEqual(new_name, pkginfo.name) self.assertEqual(new_name, pkginfo.plist['name']) self.assertEqual(new_desc, pkginfo.plist['description']) self.assertEqual(new_hash, pkginfo.plist['installer_item_hash']) self.assertEqual(new_hash, pkginfo.pkgdata_sha256) self.assertEqual(new_catalogs, pkginfo.catalogs) self.assertEqual(new_catalogs, pkginfo.plist['catalogs']) self.mox.VerifyAll()
def testUpdateWithNewPropertiesButIsNotSafeToModifySuccess(self): """Test Update() when IsSafeToModify() is False, but only cats changed.""" p = models.PackageInfo() orig_desc = 'orig_desc' orig_install_types = ['managed_updates', 'managed_installs'] p.plist = self._GetTestPackageInfoPlist({'desc': orig_desc}) p.catalogs = ['unstable', 'testing', 'stable'] p.manifests = ['unstable', 'testing', 'stable'] p.plist['unattended_install'] = True p.plist['install_types'] = orig_install_types manifests = ['unstable'] catalogs = ['unstable'] pkginfo = self._UpdateTestHelper('foo.dmg', p, catalogs=catalogs, manifests=manifests, safe_to_modify=False, unsafe_properties_changed=False) self.assertEqual(catalogs, pkginfo.catalogs) self.assertEqual(manifests, pkginfo.manifests) self.assertEqual(orig_desc, pkginfo.description) self.assertEqual(True, pkginfo.plist['unattended_install']) self.assertEqual(orig_install_types, pkginfo.plist['install_types']) self.mox.VerifyAll()
def testGetDescriptionEmptyStr(self): """Tests getting PackageInfo.description property, when desc is empty.""" p = models.PackageInfo() desc = '' p.plist = self._GetTestPackageInfoPlist({'desc': desc}) self.mox.ReplayAll() self.assertEqual('', p._GetDescription()) self.mox.VerifyAll()
def testGetDescription(self): """Tests getting PackageInfo.description property.""" p = models.PackageInfo() desc = 'basic' p.plist = self._GetTestPackageInfoPlist({'desc': desc}) self.mox.ReplayAll() self.assertEqual(desc, p._GetDescription()) self.mox.VerifyAll()
def testUpdateWithObtainLockFailure(self): """Test Update() with a failure obtaining the lock.""" p = models.PackageInfo() p.filename = 'foofile.dmg' self._MockObtainLock('pkgsinfo_%s' % p.filename, obtain=False, timeout=5.0) self.mox.ReplayAll() self.assertRaises(models.PackageInfoLockError, p.Update) self.mox.VerifyAll()
def testUpdateWithObtainLockFailure(self): """Test Update() with a failure obtaining the lock.""" p = models.PackageInfo() p.filename = 'foofile.dmg' datastore_locks.DatastoreLock('pkgsinfo_%s' % p.filename).Acquire() self.mox.ReplayAll() self.assertRaises(models.PackageInfoLockError, p.Update) self.mox.VerifyAll()
def testSetDescription(self): """Set PackageInfo.description property, sans avg duration text.""" p = models.PackageInfo() desc = 'basic' p.plist = self._GetTestPackageInfoPlist({'desc': desc}) self.mox.ReplayAll() p._SetDescription(desc) self.assertEqual(desc, p.description) self.mox.VerifyAll()
def testUpdateFromPlistWithPkginfoNotSafeToModify(self): """Test UpdateFromPlist() when pkginfo is not safe to mod.""" p = models.PackageInfo() p.plist = self._GetTestPackageInfoPlist({'desc': 'OLD', 'name': 'OLD'}) xml = self._GetTestPackageInfoPlist({'desc': 'NEW', 'name': 'NEW'}) self.assertRaises( models.PackageInfoUpdateError, self._UpdateTestHelper, 'filename.dmg', p, plist_xml=xml, safe_to_modify=False)
def testGetDescriptionWithAvgDurationText(self): """Tests PackageInfo.description property with avg duration text.""" p = models.PackageInfo() basic_desc = 'basic' avg_duration_text = models.PackageInfo.AVG_DURATION_TEXT % (25000, 41) full_desc = '%s\n\n%s' % (basic_desc, avg_duration_text) p.plist = self._GetTestPackageInfoPlist({'desc': full_desc}) self.mox.ReplayAll() self.assertEqual(basic_desc, p._GetDescription()) self.mox.VerifyAll()
def testUpdateDemoteFromStable(self): """Test Update() when demoting a package from stable.""" p = models.PackageInfo() p.plist = self._GetTestPackageInfoPlist({'desc': 'foodesc'}) p.catalogs = ['unstable', 'testing', 'stable'] p.manifests = ['unstable', 'testing', 'stable'] catalogs = ['unstable', 'testing'] manifests = ['unstable', 'testing'] pkginfo = self._UpdateTestHelper( 'zooooo.dmg', p, catalogs=catalogs, manifests=manifests) self.assertEqual(pkginfo.catalogs, catalogs) self.mox.VerifyAll()
def testSetDescriptionPreservingExistingAvgDurationText(self): """Set PackageInfo.description property, preserving avg duration text.""" p = models.PackageInfo() basic_desc = 'basic' avg_duration_text = models.PackageInfo.AVG_DURATION_TEXT % (25000, 41) full_desc = 'ANYTHING_HERE\n\n%s' % avg_duration_text p.plist = self._GetTestPackageInfoPlist({'desc': full_desc}) expected_new_desc = full_desc.replace('ANYTHING_HERE', basic_desc) self.mox.ReplayAll() p._SetDescription(basic_desc) self.assertEqual(basic_desc, p.description) self.assertEqual(expected_new_desc, p.plist['description']) self.mox.VerifyAll()
def testMakeSafeToModifyWithoutProposals(self): """Test MakeSafeToModify() with out proposals and package in catalogs.""" p = models.PackageInfo() p.catalogs = ['unstable', 'testing', 'stable'] p.manifests = ['unstable', 'testing', 'stable'] self.mox.StubOutWithMock(models.PackageInfo, 'approval_required') models.PackageInfo.approval_required = False self.mox.StubOutWithMock(models.PackageInfo, 'Update') models.PackageInfo.Update(catalogs=[], manifests=[]) self.mox.ReplayAll() p.MakeSafeToModify() self.mox.VerifyAll()
def testSetDescriptionWithUpdatedAvgDurationText(self): """Set PackageInfo.description property, preserving avg duration text.""" p = models.PackageInfo() avg_duration_text = models.PackageInfo.AVG_DURATION_TEXT % (25000, 41) old_full_desc = 'NOT_BASIC\n\n%s' % avg_duration_text p.plist = self._GetTestPackageInfoPlist({'desc': old_full_desc}) basic_desc = 'basic' avg_duration_text = models.PackageInfo.AVG_DURATION_TEXT % (25555, 45) new_full_desc = '%s\n\n%s' % (basic_desc, avg_duration_text) self.mox.ReplayAll() p._SetDescription(new_full_desc) self.assertEqual(basic_desc, p.description) self.assertEqual(new_full_desc, p.plist['description']) self.mox.VerifyAll()
def testUpdateWithMultipleNewProperties(self): """Tests Update() with several some new and some updated properties.""" p = models.PackageInfo() p.plist = self._GetTestPackageInfoPlist({'desc': 'foodesc'}) p.catalogs = ['unstable'] p.install_types = ['should be changed'] # pkginfo.manifests purposefully not set. # pkginfo.manifest_mod_access purposefully not set. install_types = ['managed_updates', 'optional_installs'] manifests = ['unstable'] manifest_mod_access = ['support'] pkginfo = self._UpdateTestHelper( 'foo.dmg', p, install_types=install_types, manifests=manifests, manifest_mod_access=manifest_mod_access) self.assertEqual(install_types, pkginfo.install_types) self.assertEqual(manifests, pkginfo.manifests) self.assertEqual(manifest_mod_access, pkginfo.manifest_mod_access) self.mox.VerifyAll()
def testBuildProposalBodyUrlEncodesFileName(self): p = models.PackageInfo() pip = models.PackageInfoProposal._New(p) body = pip._BuildProposalBody('foo.com', 'file name.dmg') self.assertTrue( 'https://foo.com/admin/package/file%20name.dmg' in body)