コード例 #1
0
ファイル: munki_test.py プロジェクト: tristansgray/simian
    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()
        ])
コード例 #2
0
  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()
コード例 #3
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #4
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #5
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #6
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #7
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #8
0
  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()
コード例 #9
0
ファイル: munki_test.py プロジェクト: tristansgray/simian
    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()
コード例 #10
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #11
0
  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)
コード例 #12
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #13
0
  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()
コード例 #14
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #15
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #16
0
ファイル: munki_test.py プロジェクト: leux9/simian
    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()
コード例 #17
0
  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()
コード例 #18
0
ファイル: munki_test.py プロジェクト: leux9/simian
 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)