コード例 #1
0
ファイル: pkgsinfo_test.py プロジェクト: tristansgray/simian
    def testPutWhenHashFail(self):
        """Test put() with valid input params, giving success."""
        filename = 'pkg name.dmg'
        filename_quoted = 'pkg%20name.dmg'
        body = '<fakexml>blabla</fakexml>'
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = ['manifest1', 'manifest2']
        install_types = ['type1', 'type2']

        self.request.get('hash').AndReturn('goodhash')
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests', None).AndReturn(','.join(manifests))
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name',
                                       filename)
        pkginfo.IsSafeToModify().AndReturn(True)
        self.mox.StubOutWithMock(self.c, '_Hash')
        pkginfo.plist = 'foo'
        self.c._Hash(pkginfo.plist).AndReturn('otherhash')
        self.response.set_status(httplib.CONFLICT).AndReturn(None)
        self.response.out.write('Update hash does not match').AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename_quoted)
        self.mox.VerifyAll()
コード例 #2
0
ファイル: pkgsinfo_test.py プロジェクト: zeroluck/simian
    def testPutOnNonexistentPackageInfo(self):
        """Test put() with valid input params, but non-existent pkginfo."""
        filename = 'pkgname.dmg'
        body = '<fakexml>blabla</fakexml>'
        pkgloc = '/package/location.pkg'
        pkgdict = {'installer_item_location': pkgloc}
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = ['manifest1', 'manifest2']
        install_types = ['type1', 'type2']

        self.request.get('hash').AndReturn(None)
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests', None).AndReturn(','.join(manifests))
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        self._MockObtainLock('pkgsinfo_%s' % filename, timeout=5.0)
        self.MockModelStaticBase('PackageInfo', 'get_by_key_name',
                                 filename).AndReturn(None)

        self.response.set_status(403).AndReturn(None)
        self.response.out.write('Only updates supported')
        self._MockReleaseLock('pkgsinfo_%s' % filename)

        self.mox.ReplayAll()
        self.c.put(filename)
        self.mox.VerifyAll()
コード例 #3
0
  def testPutWhenNotModifiableAndPkginfoChanged(self):
    """Test put() when pkginfo is not modifiable and pkginfo changed."""
    filename = 'pkg name.dmg'
    filename_quoted = 'pkg%20name.dmg'
    name = 'foo pkg name'
    body = '<fakexml>blabla</fakexml>'
    pkgloc = '/package/location.pkg'
    pkgdict = {'installer_item_location': pkgloc}
    self.request.body = body
    catalogs = ['catalog1', 'catalog2']
    manifests = ['manifest1', 'manifest2']
    install_types = ['type1', 'type2']

    self.request.get('hash').AndReturn('goodhash')
    self.request.get('catalogs', None).AndReturn(','.join(catalogs))
    self.request.get('manifests', None).AndReturn(','.join(manifests))
    self.request.get('install_types').AndReturn(','.join(install_types))
    mock_mpl = self.mox.CreateMockAnything()
    self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
    self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
    pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
    mock_mpl.Parse().AndReturn(None)
    pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name', filename)
    pkginfo.plist = 'foo'

    pkginfo.IsSafeToModify().AndReturn(False)
    mock_mpl.EqualIgnoringManifestsAndCatalogs(pkginfo.plist).AndReturn(
        False)
    self.response.set_status(httplib.FORBIDDEN).AndReturn(None)
    self.response.out.write('Changes to pkginfo not allowed').AndReturn(
        None)

    self.mox.ReplayAll()
    self.c.put(filename_quoted)
    self.mox.VerifyAll()
コード例 #4
0
ファイル: pkgsinfo_test.py プロジェクト: zeroluck/simian
    def testPutSuccessWhenHash(self):
        """Test put() with valid input params, giving success."""
        filename = 'pkg name.dmg'
        filename_quoted = 'pkg%20name.dmg'
        name = 'foo pkg name'
        body = '<fakexml>blabla</fakexml>'
        pkgloc = '/package/location.pkg'
        pkgdict = {'installer_item_location': pkgloc}
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = ['manifest1', 'manifest2']
        install_types = ['type1', 'type2']
        user = '******'

        self.request.get('hash').AndReturn('goodhash')
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests', None).AndReturn(','.join(manifests))
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        session = self.mox.CreateMockAnything()
        session.uuid = user
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG,
                             and_return=session)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        self._MockObtainLock('pkgsinfo_%s' % filename, timeout=5.0)
        pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name',
                                       filename)
        pkginfo.IsSafeToModify().AndReturn(True)
        self.mox.StubOutWithMock(self.c, '_Hash')
        self.c._Hash(pkginfo.plist).AndReturn('goodhash')
        pkginfo.name = mock_mpl.GetPackageName().AndReturn(name)
        pkginfo.put()
        self._MockReleaseLock('pkgsinfo_%s' % filename)

        self.mox.StubOutWithMock(pkgsinfo.models.Catalog, 'Generate')
        for catalog in catalogs:
            pkgsinfo.models.Catalog.Generate(catalog, delay=1).AndReturn(None)

        mock_mpl.GetXml().AndReturn(body)
        mock_log = self.MockModel('AdminPackageLog',
                                  user=user,
                                  action='pkginfo',
                                  filename=filename,
                                  catalogs=catalogs,
                                  manifests=manifests,
                                  install_types=install_types,
                                  plist=body)
        mock_log.put().AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename_quoted)
        self.assertEqual(pkginfo.plist, mock_mpl)
        self.assertEqual(pkginfo.name, name)
        self.assertEqual(pkginfo.catalogs, catalogs)
        self.assertEqual(pkginfo.manifests, manifests)
        self.assertEqual(pkginfo.install_types, install_types)
        self.mox.VerifyAll()
コード例 #5
0
    def testPutSuccessWhenNoManifestsValueSpecified(self):
        """Test put() with no manifest value specified, resulting in no change."""
        filename = 'pkg name.dmg'
        filename_quoted = 'pkg%20name.dmg'
        name = 'foo pkg name'
        body = '<fakexml>blabla</fakexml>'
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = None
        install_types = ['type1', 'type2']
        user = '******'

        self.request.get('hash').AndReturn(None)
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests',
                         None).AndReturn(None)  # == no value provided
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        session = self.mox.CreateMockAnything()
        session.uuid = user
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG,
                             and_return=session)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        self._MockObtainLock('pkgsinfo_%s' % filename, timeout=5.0)
        pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name',
                                       filename)

        pkginfo.IsSafeToModify().AndReturn(True)
        pkginfo.name = mock_mpl.GetPackageName().AndReturn(name)
        pkginfo.put()
        self._MockReleaseLock('pkgsinfo_%s' % filename)

        self.mox.StubOutWithMock(pkgsinfo.models.Catalog, 'Generate')
        for catalog in catalogs:
            pkgsinfo.models.Catalog.Generate(catalog, delay=1).AndReturn(None)

        mock_mpl.GetXml().AndReturn(body)
        mock_log = self.MockModel('AdminPackageLog',
                                  user=user,
                                  action='pkginfo',
                                  filename=filename,
                                  catalogs=catalogs,
                                  manifests=pkginfo.manifests,
                                  install_types=install_types,
                                  plist=body)
        mock_log.put().AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename_quoted)
        self.assertEqual(pkginfo.plist, mock_mpl)
        self.assertEqual(pkginfo.name, name)
        self.assertEqual(pkginfo.catalogs, catalogs)
        # since the tested function did not set a pkginfo.manifests value
        # then this value is still MockMethod since pkginfo is a mock.
        self.assertNotEqual(pkginfo.manifests, manifests)
        self.assertEqual(pkginfo.install_types, install_types)
        self.mox.VerifyAll()
コード例 #6
0
    def testPutSuccessWhenManifestsIsIntentionalEmptyList(self):
        """Test put() with a manifest value that sets the manifest list to []."""
        filename = 'pkg name.dmg'
        filename_quoted = 'pkg%20name.dmg'
        name = 'foo pkg name'
        body = '<fakexml>blabla</fakexml>'
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = []  # this pkg is in no manifests
        install_types = ['type1', 'type2']
        user = '******'

        self.request.get('hash').AndReturn(None)
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests', None).AndReturn('')  # == NO manifests
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        session = self.mox.CreateMockAnything()
        session.uuid = user
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG,
                             and_return=session)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        self._MockObtainLock('pkgsinfo_%s' % filename, timeout=5.0)
        pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name',
                                       filename)

        pkginfo.IsSafeToModify().AndReturn(True)
        pkginfo.name = mock_mpl.GetPackageName().AndReturn(name)
        pkginfo.put()
        self._MockReleaseLock('pkgsinfo_%s' % filename)

        self.mox.StubOutWithMock(pkgsinfo.models.Catalog, 'Generate')
        for catalog in catalogs:
            pkgsinfo.models.Catalog.Generate(catalog, delay=1).AndReturn(None)

        mock_mpl.GetXml().AndReturn(body)
        mock_log = self.MockModel('AdminPackageLog',
                                  user=user,
                                  action='pkginfo',
                                  filename=filename,
                                  catalogs=catalogs,
                                  manifests=manifests,
                                  install_types=install_types,
                                  plist=body)
        mock_log.put().AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename_quoted)
        self.assertEqual(pkginfo.plist, mock_mpl)
        self.assertEqual(pkginfo.name, name)
        self.assertEqual(pkginfo.catalogs, catalogs)
        self.assertEqual(pkginfo.manifests, manifests)
        self.assertEqual(pkginfo.install_types, install_types)
        self.mox.VerifyAll()
コード例 #7
0
ファイル: pkgsinfo_test.py プロジェクト: zeroluck/simian
    def testPutWhenNotModifiableButOnlyManifestsChanged(self):
        """Test put() when pkginfo is not modifiable but only manifests changed."""
        filename = 'pkg name.dmg'
        filename_quoted = 'pkg%20name.dmg'
        name = 'foo pkg name'
        body = '<fakexml>blabla</fakexml>'
        pkgloc = '/package/location.pkg'
        pkgdict = {'installer_item_location': pkgloc}
        self.request.body = body
        catalogs = ['catalog1', 'catalog2']
        manifests = ['manifest1', 'manifest2']
        install_types = ['type1', 'type2']

        self.request.get('hash').AndReturn('goodhash')
        self.request.get('catalogs', None).AndReturn(','.join(catalogs))
        self.request.get('manifests', None).AndReturn(','.join(manifests))
        self.request.get('install_types').AndReturn(','.join(install_types))
        mock_mpl = self.mox.CreateMockAnything()
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        mock_mpl.Parse().AndReturn(None)
        self._MockObtainLock('pkgsinfo_%s' % filename, timeout=5.0)
        pkginfo = self.MockModelStatic('PackageInfo', 'get_by_key_name',
                                       filename)
        pkginfo.plist = 'foo'

        pkginfo.IsSafeToModify().AndReturn(False)
        mock_mpl.EqualIgnoringManifestsAndCatalogs(
            pkginfo.plist).AndReturn(True)

        # we've previously tested past hash check, so bail there.
        self.mox.StubOutWithMock(self.c, '_Hash')
        self.c._Hash(pkginfo.plist).AndReturn('otherhash')
        self.response.set_status(409).AndReturn(None)
        self.response.out.write('Update hash does not match').AndReturn(None)
        self._MockReleaseLock('pkgsinfo_%s' % filename)

        self.mox.ReplayAll()
        self.c.put(filename_quoted)
        self.mox.VerifyAll()
コード例 #8
0
ファイル: pkgsinfo_test.py プロジェクト: zeroluck/simian
    def testPutFailInputNotParseable(self):
        """Test put() with input that isn't parseable as a plist."""
        filename = 'pkgname.dmg'
        body = 'junk'
        self.request.body = body

        self.request.get('hash').AndReturn(None)
        self.request.get('catalogs', None).AndReturn('anything')
        self.request.get('manifests', None).AndReturn('anything')
        self.request.get('install_types').AndReturn('anything')
        mock_mpl = self.mox.CreateMockAnything()
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        exc = pkgsinfo.plist.MalformedPlistError('foo error')
        mock_mpl.Parse().AndRaise(exc)
        self.response.set_status(400).AndReturn(None)
        self.response.out.write('foo error').AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename)
        self.mox.VerifyAll()
コード例 #9
0
ファイル: pkgsinfo_test.py プロジェクト: tristansgray/simian
    def testPutFailPackageNoExist(self):
        """Test put() with valid input params, but package does not exist."""
        filename = 'pkgname.dmg'
        body = '<fakexml>blabla</fakexml>'
        self.request.body = body

        self.request.get('hash').AndReturn(None)
        self.request.get('catalogs', None).AndReturn('anything')
        self.request.get('manifests', None).AndReturn('anything')
        self.request.get('install_types').AndReturn('anything')
        mock_mpl = self.mox.CreateMockAnything()
        self.MockDoMunkiAuth(require_level=pkgsinfo.gaeserver.LEVEL_UPLOADPKG)
        self.mox.StubOutWithMock(pkgsinfo, 'MunkiPackageInfoPlistStrict')
        pkgsinfo.MunkiPackageInfoPlistStrict(body).AndReturn(mock_mpl)
        exc = pkgsinfo.PackageDoesNotExistError('foo error')
        mock_mpl.Parse().AndRaise(exc)
        self.response.set_status(httplib.BAD_REQUEST).AndReturn(None)
        self.response.out.write('foo error').AndReturn(None)

        self.mox.ReplayAll()
        self.c.put(filename)
        self.mox.VerifyAll()
コード例 #10
0
ファイル: pkgsinfo_test.py プロジェクト: zeroluck/simian
 def setUp(self):
     mox.MoxTestBase.setUp(self)
     self.stubs = stubout.StubOutForTesting()
     self.mpl = pkgsinfo.MunkiPackageInfoPlistStrict()