示例#1
0
    def testSecureHTTPServer(self):
        # Checks that the secure SSL server works
        if not server.SSL:
            raise testhelp.SkipTestException("m2crypto not installed")

        cfg = server.ServerConfig()
        cfg.port = testhelp.findPorts(1)[0]
        cfg.tmpdir = os.path.join(self.workDir, 'proxyTmpDir')
        cfg.changesetCacheDir = os.path.join(self.workDir, 'changesetCacheDir')
        cfg.proxyContentsDir = os.path.join(self.workDir, 'proxyContentsDir')
        cfg.traceLog = (10, os.path.join(self.workDir, "proxy.debug"))

        cfg.useSSL = True
        cfg.sslCert = os.path.join(resources.get_archive(), 'ssl-cert.crt')
        cfg.sslKey = os.path.join(resources.get_archive(), 'ssl-cert.key')

        cfgfile = os.path.join(self.workDir, "proxy.conf")
        serverrc = open(cfgfile, "w+")
        cfg.store(serverrc, includeDocs=False)
        serverrc.close()
        util.mkdirChain(cfg.tmpdir)
        util.mkdirChain(cfg.changesetCacheDir)
        util.mkdirChain(cfg.proxyContentsDir)

        pid = os.fork()
        if pid == 0:
            # In the child
            try:
                errfd = os.open(os.path.join(self.workDir, "proxy.log"),
                    os.O_RDWR | os.O_CREAT)
                os.dup2(errfd, sys.stderr.fileno())
                os.close(errfd)
                srvpy = os.path.abspath(server.__file__).replace('.pyc', '.py')
                os.execv(srvpy, [ srvpy, '--config-file', cfgfile ])
                os._exit(0)
            except:
                os._exit(70)

        self.openRepository(2, useSSL=True)
        # In the parent
        try:
            # Set conary proxy
            self.cfg.configLine("conaryProxy https://localhost:%s" % cfg.port)

            client = conaryclient.ConaryClient(self.cfg)

            sock_utils.tryConnect("127.0.0.1", cfg.port)

            srvVers = client.repos.c['localhost2'].checkVersion()
            self.assertTrue(srvVers)
        finally:
            self.servers.stopServer(2)
            os.kill(pid, signal.SIGTERM)
            os.waitpid(pid, 0)
示例#2
0
 def testGetDeps(self):
     f = open(resources.get_archive() + "/gnome-main-menu-0.9.10-26.x86_64.rpm")
     h = rpmhelper.readHeader(f)
     req, prov = h.getDeps(enableRPMVersionDeps=False)
     self.assertEqual(
         req.freeze(),
         "3#/bin/sh|3#/sbin/ldconfig|3#/usr/bin/gconftool-2|16#coreutils|16#dbus-1-glib|16#eel|16#gnome-main-menu-lang|16#gnome-panel|16#hal|16#libICE.so.6[64bit]|16#libORBit-2.so.0[64bit]|16#libORBitCosNaming-2.so.0[64bit]|16#libSM.so.6[64bit]|16#libX11.so.6[64bit]|16#libXau.so.6[64bit]|16#libXrender.so.1[64bit]|16#libart_lgpl_2.so.2[64bit]|16#libasound.so.2[64bit]|16#libatk-1.0.so.0[64bit]|16#libaudiofile.so.0[64bit]|16#libavahi-client.so.3[64bit]|16#libavahi-common.so.3[64bit]|16#libavahi-glib.so.1[64bit]|16#libbonobo-2.so.0[64bit]|16#libbonobo-activation.so.4[64bit]|16#libbonoboui-2.so.0[64bit]|16#libc.so.6[64bit]:GLIBC_2.2.5:GLIBC_2.3.4:GLIBC_2.4|16#libcairo.so.2[64bit]|16#libcrypto.so.0.9.8[64bit]|16#libdbus-1.so.3[64bit]|16#libdbus-glib-1.so.2[64bit]|16#libdl.so.2[64bit]|16#libeel-2.so.2[64bit]|16#libesd.so.0[64bit]|16#libexpat.so.1[64bit]|16#libfontconfig.so.1[64bit]|16#libfreetype.so.6[64bit]|16#libgailutil.so.18[64bit]|16#libgconf-2.so.4[64bit]|16#libgdk-x11-2.0.so.0[64bit]|16#libgdk_pixbuf-2.0.so.0[64bit]|16#libgio-2.0.so.0[64bit]|16#libglade-2.0.so.0[64bit]|16#libglib-2.0.so.0[64bit]|16#libglitz.so.1[64bit]|16#libgmodule-2.0.so.0[64bit]|16#libgnome-2.so.0[64bit]|16#libgnome-desktop-2.so.2[64bit]|16#libgnome-keyring.so.0[64bit]|16#libgnome-menu.so.2[64bit]|16#libgnomecanvas-2.so.0[64bit]|16#libgnomeui-2.so.0[64bit]|16#libgnomevfs-2.so.0[64bit]|16#libgobject-2.0.so.0[64bit]|16#libgthread-2.0.so.0[64bit]|16#libgtk-x11-2.0.so.0[64bit]|16#libgtop-2.0.so.7[64bit]|16#libhal-storage.so.1[64bit]|16#libhal.so.1[64bit]|16#libiw.so.29[64bit]|16#libjpeg.so.62[64bit]|16#libm.so.6[64bit]|16#libnm-util.so.0[64bit]|16#libnm_glib.so.0[64bit]|16#libnsl.so.1[64bit]|16#libnspr4.so[64bit]|16#libnss3.so[64bit]|16#libnssutil3.so[64bit]|16#libpanel-applet-2.so.0[64bit]|16#libpango-1.0.so.0[64bit]|16#libpangocairo-1.0.so.0[64bit]|16#libpangoft2-1.0.so.0[64bit]|16#libpcre.so.0[64bit]|16#libplc4.so[64bit]|16#libplds4.so[64bit]|16#libpng12.so.0[64bit]|16#libpopt.so.0[64bit]|16#libpthread.so.0[64bit]:GLIBC_2.2.5|16#libresolv.so.2[64bit]|16#librsvg-2.so.2[64bit]|16#librt.so.1[64bit]|16#libslab.so.0[64bit]|16#libsmime3.so[64bit]|16#libssl.so.0.9.8[64bit]|16#libssl3.so[64bit]|16#libssui|16#libstartup-notification-1.so.0[64bit]|16#libutil.so.1[64bit]|16#libuuid.so.1[64bit]|16#libxcb-render-util.so.0[64bit]|16#libxcb-render.so.0[64bit]|16#libxcb-xlib.so.0[64bit]|16#libxcb.so.1[64bit]|16#libxml2.so.2[64bit]|16#libz.so.1[64bit]|16#tango-icon-theme|16#wireless-tools|17#CompressedFileNames|17#PayloadFilesHavePrefix|17#PayloadIsLzma",
     )
     self.assertEqual(prov.freeze(), "16#gnome-main-menu|16#libslab.so.0[64bit]")
     f = open(resources.get_archive() + "/popt-1.5-4x.i386.rpm")
     h = rpmhelper.readHeader(f)
     req, prov = h.getDeps()
     self.assertEqual(req.freeze(), "")
     self.assertEqual(prov.freeze(), "16#libpopt.so.0")
示例#3
0
 def testRpmMagic(self):
     packages = [
         ('rpm-with-bzip-5.0.29-1.i386.rpm',
             ('rpm-with-bzip', None, '5.0.29', '1', 'i386', False,
             'RPM with a bzip payload', 'junk', 'GPL')),
         ('rpm-with-bzip-5.0.29-1.src.rpm',
             ('rpm-with-bzip', None, '5.0.29', '1', 'i386', True,
             'RPM with a bzip payload', 'junk', 'GPL')),
         ('fileless-0.1-1.noarch.rpm',
             ('fileless', None, '0.1', '1', 'noarch', False,
             'Foo', 'Foo', 'GPL')),
         ('fileless-0.1-1.src.rpm',
             ('fileless', None, '0.1', '1', 'noarch', True,
             'Foo', 'Foo', 'GPL')),
         ('tags-1.2-3.noarch.rpm',
             ('tags', 4, '1.2', '3', 'noarch', False,
             'Some Summary', 'Some Description', 'Some License')),
         ('tags-1.2-3.src.rpm',
             ('tags', 4, '1.2', '3', 'noarch', True,
             'Some Summary', 'Some Description', 'Some License')),
     ]
     for (pkg, data) in packages:
         pn, pe, pv, pr, pa, isSource, summary, description, license = data
         fpath = os.path.join(resources.get_archive(), pkg)
         m = magic.magic(fpath)
         self.assertEqual(m.contents['name'], pn)
         self.assertEqual(m.contents['version'], pv)
         self.assertEqual(m.contents['release'], pr)
         self.assertEqual(m.contents['arch'], pa)
         self.assertEqual(m.contents['epoch'], pe)
         self.assertEqual(m.contents['isSource'], isSource)
         self.assertEqual(m.contents['summary'], summary)
         self.assertEqual(m.contents['description'], description)
         self.assertEqual(m.contents['license'], license)
示例#4
0
文件: sqldbtest.py 项目: pombr/conary
    def testVersion11Migration(self):
        dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                              'conarydb-version-11')
        fd, fn = tempfile.mkstemp()
        os.close(fd)
        shutil.copyfile(dbfile, fn)
        db, str = self.captureOutput(sqldb.Database, fn)
        cu = db.db.cursor()

        # make sure there aren't any install buckets left
        cu.execute("select count(*) from troveinfo where infoType=?",
                   trove._TROVEINFO_TAG_INSTALLBUCKET)
        assert(cu.next()[0] == 0)
        
        # make sure the path hashs look right for libpng:lib
        cu.execute("select data from troveinfo, instances where "
                   "trovename='libpng:lib' and "
                   "troveinfo.instanceid=instances.instanceid "
                   "and infoType=?", trove._TROVEINFO_TAG_PATH_HASHES)
        ph = trove.PathHashes(cu.next()[0])

        cu.execute("select path from instances, dbtrovefiles where "
                   "instances.instanceid=dbtrovefiles.instanceid "
                   "and troveName='libpng:lib'")
        for path, in cu:
            hash = md5String(path)[:8]
            assert(hash in ph)
            ph.remove(hash)

        assert(not ph)

        db.close()
        os.unlink(fn)
示例#5
0
 def testCarArchive(self):
     # for now, just make sure we don't treat them as zip
     m = magic.magic(os.path.join(resources.get_archive(), 'Transmitter.car'))
     if sys.version_info[:2] == (2, 6):
         self.assertFalse(m is None)
     else:
         self.assertEqual(m, None)
示例#6
0
文件: magictest.py 项目: pombr/conary
 def testCarArchive(self):
     # for now, just make sure we don't treat them as zip
     m = magic.magic(os.path.join(resources.get_archive(), 'Transmitter.car'))
     if sys.version_info[:2] == (2, 6):
         self.assertFalse(m is None)
     else:
         self.assertEqual(m, None)
示例#7
0
 def testLoadInvocationInfo(self):
     # CNY-2580
     jobFile = os.path.join(resources.get_archive(), "job-invocation")
     uJob = database.UpdateJob(None)
     uJob.loadInvocationInfo(jobFile)
     self.assertEqual(uJob.getItemList(), [('group-appliance', (None, None),
                                            (None, None), True)])
示例#8
0
    def testDebHeader(self):
        fobj = file(os.path.join(resources.get_archive(), "bash.deb"))

        fields = [
            debhelper.NAME, debhelper.VERSION, debhelper.RELEASE,
            debhelper.SUMMARY, debhelper.DESCRIPTION
        ]

        expected = dict([
            (debhelper.NAME, 'bash'),
            (debhelper.VERSION, '3.1'),
            (debhelper.RELEASE, '2ubuntu10'),
            (debhelper.SUMMARY, 'The GNU Bourne Again SHell'),
            (debhelper.DESCRIPTION, '''\
Bash is an sh-compatible command language interpreter that executes
commands read from the standard input or from a file.  Bash also
incorporates useful features from the Korn and C shells (ksh and csh).

Bash is ultimately intended to be a conformant implementation of the
IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).

Included in the bash package is the Programmable Completion Code, by
Ian Macdonald.'''),
        ])

        h = debhelper.DebianPackageHeader(fobj)
        ret = dict((k, h[k]) for k in fields)
        self.assertEqual(ret, expected)
示例#9
0
    def testRPMSHA1SigTag(self):
        '''make sure that SHA1HEADER/SIG_SHA1 is represented in troveinfo'''

        recipestr = """
class TestRPMSHA1(CapsuleRecipe):
    name = 'simple'
    version = '1.0'

    clearBuildReqs()

    def setup(r):
        r.addCapsule('simple-1.0-1.i386.rpm')
"""
        pkgName = 'simple'
        rpmName = 'simple-1.0-1.i386.rpm'

        r = self._cookPkgs(recipestr, rpmName, pkgName, 'simple')
        trvCs = [
            x for x in r[2].iterNewTroveList() if x.getName() == 'simple:rpm'
        ][0]

        archivePath = resources.get_archive()

        trv = trove.Trove(trvCs)
        f = open(archivePath + '/' + rpmName, "r")
        h = rpmhelper.readHeader(f)

        sha1header = trv.troveInfo.capsule.rpm.sha1header()
        self.assertEqual(h.get(rpmhelper.SIG_SHA1),
                         sha1helper.sha1ToString(sha1header))
示例#10
0
 def testLoadInvocationInfo(self):
     # CNY-2580
     jobFile = os.path.join(resources.get_archive(), "job-invocation")
     uJob = database.UpdateJob(None)
     uJob.loadInvocationInfo(jobFile)
     self.assertEqual(uJob.getItemList(),
         [('group-appliance', (None, None), (None, None), True)])
示例#11
0
文件: magictest.py 项目: pombr/conary
 def testRpmMagic(self):
     packages = [
         ('rpm-with-bzip-5.0.29-1.i386.rpm',
             ('rpm-with-bzip', None, '5.0.29', '1', 'i386', False,
             'RPM with a bzip payload', 'junk', 'GPL')),
         ('rpm-with-bzip-5.0.29-1.src.rpm',
             ('rpm-with-bzip', None, '5.0.29', '1', 'i386', True,
             'RPM with a bzip payload', 'junk', 'GPL')),
         ('fileless-0.1-1.noarch.rpm',
             ('fileless', None, '0.1', '1', 'noarch', False,
             'Foo', 'Foo', 'GPL')),
         ('fileless-0.1-1.src.rpm',
             ('fileless', None, '0.1', '1', 'noarch', True,
             'Foo', 'Foo', 'GPL')),
         ('tags-1.2-3.noarch.rpm',
             ('tags', 4, '1.2', '3', 'noarch', False,
             'Some Summary', 'Some Description', 'Some License')),
         ('tags-1.2-3.src.rpm',
             ('tags', 4, '1.2', '3', 'noarch', True,
             'Some Summary', 'Some Description', 'Some License')),
     ]
     for (pkg, data) in packages:
         pn, pe, pv, pr, pa, isSource, summary, description, license = data
         fpath = os.path.join(resources.get_archive(), pkg)
         m = magic.magic(fpath)
         self.assertEqual(m.contents['name'], pn)
         self.assertEqual(m.contents['version'], pv)
         self.assertEqual(m.contents['release'], pr)
         self.assertEqual(m.contents['arch'], pa)
         self.assertEqual(m.contents['epoch'], pe)
         self.assertEqual(m.contents['isSource'], isSource)
         self.assertEqual(m.contents['summary'], summary)
         self.assertEqual(m.contents['description'], description)
         self.assertEqual(m.contents['license'], license)
示例#12
0
    def testTroveDisplaySigs(self):
        # go through a lot of trouble to sign this trove.
        # copied from sigtest.
        self.addComponent('foo:runtime', '1.0')
        from conary.lib import openpgpfile, openpgpkey
        from conary.build import signtrove
        fingerprint = 'F7440D78FE813C882212C2BF8AC2828190B1E477'
        keyCache = openpgpkey.getKeyCache()
        keyCache.getPrivateKey(fingerprint, '111111')
        keyRing = open(resources.get_archive() + '/pubring.gpg')
        keyData = openpgpfile.exportKey(fingerprint, keyRing)
        keyData.seek(0)
        keyData = keyData.read()

        # upload the public key
        repos = self.openRepository()
        repos.addNewPGPKey(self.cfg.buildLabel, 'test', keyData)
        self.cfg.signatureKey = fingerprint
        self.cfg.quiet = True
        signtrove.signTroves(self.cfg, ["foo:runtime"])

        rs, txt = self.captureOutput(queryrep.displayTroves,
                                     self.cfg, ['foo:runtime'],
                                     digSigs=True)
        assert (txt.startswith('''\
foo:runtime=1.0-1-1
  Digital Signature:
      F7440D78FE813C882212C2BF8AC2828190B1E477:'''))
示例#13
0
    def testVersion11Migration(self):
        dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                              'conarydb-version-11')
        fd, fn = tempfile.mkstemp()
        os.close(fd)
        shutil.copyfile(dbfile, fn)
        db, str = self.captureOutput(sqldb.Database, fn)
        cu = db.db.cursor()

        # make sure there aren't any install buckets left
        cu.execute("select count(*) from troveinfo where infoType=?",
                   trove._TROVEINFO_TAG_INSTALLBUCKET)
        assert (cu.next()[0] == 0)

        # make sure the path hashs look right for libpng:lib
        cu.execute(
            "select data from troveinfo, instances where "
            "trovename='libpng:lib' and "
            "troveinfo.instanceid=instances.instanceid "
            "and infoType=?", trove._TROVEINFO_TAG_PATH_HASHES)
        ph = trove.PathHashes(cu.next()[0])

        cu.execute("select path from instances, dbtrovefiles where "
                   "instances.instanceid=dbtrovefiles.instanceid "
                   "and troveName='libpng:lib'")
        for path, in cu:
            hash = md5String(path)[:8]
            assert (hash in ph)
            ph.remove(hash)

        assert (not ph)

        db.close()
        os.unlink(fn)
示例#14
0
    def testTroveDisplaySigs(self):
        # go through a lot of trouble to sign this trove.
        # copied from sigtest.
        self.addComponent('foo:runtime', '1.0')
        from conary.lib import openpgpfile, openpgpkey
        from conary.build import signtrove
        fingerprint = 'F7440D78FE813C882212C2BF8AC2828190B1E477'
        keyCache = openpgpkey.getKeyCache()
        keyCache.getPrivateKey(fingerprint, '111111')
        keyRing = open(resources.get_archive() + '/pubring.gpg')
        keyData = openpgpfile.exportKey(fingerprint, keyRing)
        keyData.seek(0)
        keyData = keyData.read()

        # upload the public key
        repos = self.openRepository()
        repos.addNewPGPKey(self.cfg.buildLabel, 'test', keyData)
        self.cfg.signatureKey = fingerprint
        self.cfg.quiet = True
        signtrove.signTroves(self.cfg, [ "foo:runtime"])

        rs, txt = self.captureOutput(queryrep.displayTroves, self.cfg, 
                                     ['foo:runtime'],
                                     digSigs=True)
        assert(txt.startswith('''\
foo:runtime=1.0-1-1
  Digital Signature:
      F7440D78FE813C882212C2BF8AC2828190B1E477:'''))
示例#15
0
    def testRPMObsoletes(self):
        '''make sure that obsoletes is represented in troveinfo'''

        recipestr = """
class TestRPMObsoletes(CapsuleRecipe):
    name = 'obsolete'
    version = '1.0'

    clearBuildReqs()

    def setup(r):
        r.addCapsule('obsolete-1.0-1.i386.rpm')
"""
        pkgName = 'obsolete'
        rpmName = 'obsolete-1.0-1.i386.rpm'

        r1 = self._cookPkgs(recipestr, rpmName, pkgName, 'obsolete')
        trvCs = [
            x for x in r1[2].iterNewTroveList()
            if x.getName() == 'obsolete:rpm'
        ][0]

        archivePath = resources.get_archive()

        trv = trove.Trove(trvCs)
        f = open(archivePath + '/' + rpmName, "r")
        h = rpmhelper.readHeader(f)

        obs = [x[1] for x in trv.troveInfo.capsule.rpm.obsoletes.iterAll()]
        obl = [(x.name(), x.flags(), x.version()) for x in obs]
        obl.sort()

        reference = [('bar', 2L, '1.0'), ('baz', 4L, '2.0'), ('foo', 0L, '')]
        self.assertEqual(obl, reference)
示例#16
0
    def testRPMSHA1SigTag(self):
        """make sure that SHA1HEADER/SIG_SHA1 is represented in troveinfo"""

        recipestr = """
class TestRPMSHA1(CapsuleRecipe):
    name = 'simple'
    version = '1.0'

    clearBuildReqs()

    def setup(r):
        r.addCapsule('simple-1.0-1.i386.rpm')
"""
        pkgName = "simple"
        rpmName = "simple-1.0-1.i386.rpm"

        r = self._cookPkgs(recipestr, rpmName, pkgName, "simple")
        trvCs = [x for x in r[2].iterNewTroveList() if x.getName() == "simple:rpm"][0]

        archivePath = resources.get_archive()

        trv = trove.Trove(trvCs)
        f = open(archivePath + "/" + rpmName, "r")
        h = rpmhelper.readHeader(f)

        sha1header = trv.troveInfo.capsule.rpm.sha1header()
        self.assertEqual(h.get(rpmhelper.SIG_SHA1), sha1helper.sha1ToString(sha1header))
示例#17
0
    def testRPMObsoletes(self):
        """make sure that obsoletes is represented in troveinfo"""

        recipestr = """
class TestRPMObsoletes(CapsuleRecipe):
    name = 'obsolete'
    version = '1.0'

    clearBuildReqs()

    def setup(r):
        r.addCapsule('obsolete-1.0-1.i386.rpm')
"""
        pkgName = "obsolete"
        rpmName = "obsolete-1.0-1.i386.rpm"

        r1 = self._cookPkgs(recipestr, rpmName, pkgName, "obsolete")
        trvCs = [x for x in r1[2].iterNewTroveList() if x.getName() == "obsolete:rpm"][0]

        archivePath = resources.get_archive()

        trv = trove.Trove(trvCs)
        f = open(archivePath + "/" + rpmName, "r")
        h = rpmhelper.readHeader(f)

        obs = [x[1] for x in trv.troveInfo.capsule.rpm.obsoletes.iterAll()]
        obl = [(x.name(), x.flags(), x.version()) for x in obs]
        obl.sort()

        reference = [("bar", 2L, "1.0"), ("baz", 4L, "2.0"), ("foo", 0L, "")]
        self.assertEqual(obl, reference)
示例#18
0
    def testDebHeader(self):
        fobj = file(os.path.join(resources.get_archive(), "bash.deb"))

        fields = [debhelper.NAME, debhelper.VERSION, debhelper.RELEASE,
                      debhelper.SUMMARY, debhelper.DESCRIPTION]

        expected = dict([
            (debhelper.NAME, 'bash'),
            (debhelper.VERSION, '3.1'),
            (debhelper.RELEASE, '2ubuntu10'),
            (debhelper.SUMMARY, 'The GNU Bourne Again SHell'),
            (debhelper.DESCRIPTION, '''\
Bash is an sh-compatible command language interpreter that executes
commands read from the standard input or from a file.  Bash also
incorporates useful features from the Korn and C shells (ksh and csh).

Bash is ultimately intended to be a conformant implementation of the
IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).

Included in the bash package is the Programmable Completion Code, by
Ian Macdonald.'''),
        ])

        h = debhelper.DebianPackageHeader(fobj)
        ret = dict((k, h[k]) for k in fields)
        self.assertEqual(ret, expected)
示例#19
0
文件: rpmtest.py 项目: tensor5/conary
 def testGetDeps(self):
     f = open(resources.get_archive() +
              '/gnome-main-menu-0.9.10-26.x86_64.rpm')
     h = rpmhelper.readHeader(f)
     req, prov = h.getDeps(enableRPMVersionDeps=False)
     self.assertEqual(
         req.freeze(),
         '3#/bin/sh|3#/sbin/ldconfig|3#/usr/bin/gconftool-2|16#coreutils|16#dbus-1-glib|16#eel|16#gnome-main-menu-lang|16#gnome-panel|16#hal|16#libICE.so.6[64bit]|16#libORBit-2.so.0[64bit]|16#libORBitCosNaming-2.so.0[64bit]|16#libSM.so.6[64bit]|16#libX11.so.6[64bit]|16#libXau.so.6[64bit]|16#libXrender.so.1[64bit]|16#libart_lgpl_2.so.2[64bit]|16#libasound.so.2[64bit]|16#libatk-1.0.so.0[64bit]|16#libaudiofile.so.0[64bit]|16#libavahi-client.so.3[64bit]|16#libavahi-common.so.3[64bit]|16#libavahi-glib.so.1[64bit]|16#libbonobo-2.so.0[64bit]|16#libbonobo-activation.so.4[64bit]|16#libbonoboui-2.so.0[64bit]|16#libc.so.6[64bit]:GLIBC_2.2.5:GLIBC_2.3.4:GLIBC_2.4|16#libcairo.so.2[64bit]|16#libcrypto.so.0.9.8[64bit]|16#libdbus-1.so.3[64bit]|16#libdbus-glib-1.so.2[64bit]|16#libdl.so.2[64bit]|16#libeel-2.so.2[64bit]|16#libesd.so.0[64bit]|16#libexpat.so.1[64bit]|16#libfontconfig.so.1[64bit]|16#libfreetype.so.6[64bit]|16#libgailutil.so.18[64bit]|16#libgconf-2.so.4[64bit]|16#libgdk-x11-2.0.so.0[64bit]|16#libgdk_pixbuf-2.0.so.0[64bit]|16#libgio-2.0.so.0[64bit]|16#libglade-2.0.so.0[64bit]|16#libglib-2.0.so.0[64bit]|16#libglitz.so.1[64bit]|16#libgmodule-2.0.so.0[64bit]|16#libgnome-2.so.0[64bit]|16#libgnome-desktop-2.so.2[64bit]|16#libgnome-keyring.so.0[64bit]|16#libgnome-menu.so.2[64bit]|16#libgnomecanvas-2.so.0[64bit]|16#libgnomeui-2.so.0[64bit]|16#libgnomevfs-2.so.0[64bit]|16#libgobject-2.0.so.0[64bit]|16#libgthread-2.0.so.0[64bit]|16#libgtk-x11-2.0.so.0[64bit]|16#libgtop-2.0.so.7[64bit]|16#libhal-storage.so.1[64bit]|16#libhal.so.1[64bit]|16#libiw.so.29[64bit]|16#libjpeg.so.62[64bit]|16#libm.so.6[64bit]|16#libnm-util.so.0[64bit]|16#libnm_glib.so.0[64bit]|16#libnsl.so.1[64bit]|16#libnspr4.so[64bit]|16#libnss3.so[64bit]|16#libnssutil3.so[64bit]|16#libpanel-applet-2.so.0[64bit]|16#libpango-1.0.so.0[64bit]|16#libpangocairo-1.0.so.0[64bit]|16#libpangoft2-1.0.so.0[64bit]|16#libpcre.so.0[64bit]|16#libplc4.so[64bit]|16#libplds4.so[64bit]|16#libpng12.so.0[64bit]|16#libpopt.so.0[64bit]|16#libpthread.so.0[64bit]:GLIBC_2.2.5|16#libresolv.so.2[64bit]|16#librsvg-2.so.2[64bit]|16#librt.so.1[64bit]|16#libslab.so.0[64bit]|16#libsmime3.so[64bit]|16#libssl.so.0.9.8[64bit]|16#libssl3.so[64bit]|16#libssui|16#libstartup-notification-1.so.0[64bit]|16#libutil.so.1[64bit]|16#libuuid.so.1[64bit]|16#libxcb-render-util.so.0[64bit]|16#libxcb-render.so.0[64bit]|16#libxcb-xlib.so.0[64bit]|16#libxcb.so.1[64bit]|16#libxml2.so.2[64bit]|16#libz.so.1[64bit]|16#tango-icon-theme|16#wireless-tools|17#CompressedFileNames|17#PayloadFilesHavePrefix|17#PayloadIsLzma'
     )
     self.assertEqual(prov.freeze(),
                      '16#gnome-main-menu|16#libslab.so.0[64bit]')
     f = open(resources.get_archive() + '/popt-1.5-4x.i386.rpm')
     h = rpmhelper.readHeader(f)
     req, prov = h.getDeps()
     self.assertEqual(req.freeze(), '')
     self.assertEqual(prov.freeze(), '16#libpopt.so.0')
示例#20
0
 def testRpmMagic(self):
     packages = [
         (
             "rpm-with-bzip-5.0.29-1.i386.rpm",
             ("rpm-with-bzip", None, "5.0.29", "1", "i386", False, "RPM with a bzip payload", "junk", "GPL"),
         ),
         (
             "rpm-with-bzip-5.0.29-1.src.rpm",
             ("rpm-with-bzip", None, "5.0.29", "1", "i386", True, "RPM with a bzip payload", "junk", "GPL"),
         ),
         ("fileless-0.1-1.noarch.rpm", ("fileless", None, "0.1", "1", "noarch", False, "Foo", "Foo", "GPL")),
         ("fileless-0.1-1.src.rpm", ("fileless", None, "0.1", "1", "noarch", True, "Foo", "Foo", "GPL")),
         (
             "tags-1.2-3.noarch.rpm",
             ("tags", 4, "1.2", "3", "noarch", False, "Some Summary", "Some Description", "Some License"),
         ),
         (
             "tags-1.2-3.src.rpm",
             ("tags", 4, "1.2", "3", "noarch", True, "Some Summary", "Some Description", "Some License"),
         ),
     ]
     for (pkg, data) in packages:
         pn, pe, pv, pr, pa, isSource, summary, description, license = data
         fpath = os.path.join(resources.get_archive(), pkg)
         m = magic.magic(fpath)
         self.assertEqual(m.contents["name"], pn)
         self.assertEqual(m.contents["version"], pv)
         self.assertEqual(m.contents["release"], pr)
         self.assertEqual(m.contents["arch"], pa)
         self.assertEqual(m.contents["epoch"], pe)
         self.assertEqual(m.contents["isSource"], isSource)
         self.assertEqual(m.contents["summary"], summary)
         self.assertEqual(m.contents["description"], description)
         self.assertEqual(m.contents["license"], license)
示例#21
0
文件: rpmtest.py 项目: tensor5/conary
    def testSeekToData(self):
        f = open(resources.get_archive() + "/basesystem-8.0-2.src.rpm")
        rpmhelper.seekToData(f)
        gz = gzip.GzipFile(fileobj=f)
        assert (gz.read(4) == "0707")
        gz.close()

        f = open("/bin/ls")
        self.assertRaises(IOError, rpmhelper.seekToData, f)
示例#22
0
    def testSeekToData(self):
        f = open(resources.get_archive() + "/basesystem-8.0-2.src.rpm")
        rpmhelper.seekToData(f)
        gz = gzip.GzipFile(fileobj=f)
        assert gz.read(4) == "0707"
        gz.close()

        f = open("/bin/ls")
        self.assertRaises(IOError, rpmhelper.seekToData, f)
示例#23
0
    def _testSSLCertCheck(self, keyPair=None):
        httpServer = rephelp.HTTPServerController(RequestHandler200, ssl=keyPair)
        try:
            caPath = os.path.join(resources.get_archive(), 'ssl-cert-authority.pem')
            opener = transport.URLOpener(caCerts=[caPath])
            opener.open("https://localhost:%s/someurl" % httpServer.port)

        finally:
            httpServer.kill()
示例#24
0
 def testVersion3Migration(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-3')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db, str = self.captureOutput(sqldb.Database, fn)
     cu = db.db.cursor()
     db.close()
     os.unlink(fn)
示例#25
0
    def testFetchFreshmeat(self):
        """Tests metadata.fetchFreshmeat"""
        filename = os.path.join(resources.get_archive(), 'tora.xml')
        f = open(filename)

        try:
            m = metadata_mod.fetchFreshmeat('tora', xmlDocStream=f)
        except socket.gaierror:
            raise testhelp.SkipTestException('requires network access')
        self.assertEqual(m.getShortDesc(), "A tool for administrating or developing for Oracle databases.")
示例#26
0
文件: sqldbtest.py 项目: pombr/conary
 def testVersion3Migration(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-3')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db, str = self.captureOutput(sqldb.Database, fn)
     cu = db.db.cursor()
     db.close()
     os.unlink(fn)
示例#27
0
    def testPrelink(self):
        user = pwd.getpwuid(os.getuid()).pw_name
        group = grp.getgrgid(os.getgid()).gr_name
        archivePath = resources.get_archive()
        self.addComponent('test:foo=1',
                          fileContents=[
                              ('/prelinktest',
                               rephelp.RegularFile(
                                   contents=open(archivePath + '/prelinktest'),
                                   owner=user,
                                   group=group,
                                   mode=0755)),
                              ('/prelinktest-orig',
                               rephelp.RegularFile(
                                   contents=open(archivePath + '/prelinktest'),
                                   owner=user,
                                   group=group,
                                   mode=0755))
                          ])
        self.updatePkg('test:foo=1')

        db = database.Database(self.rootDir, self.cfg.dbPath)
        rc, str = self.captureOutput(verify.verify, ['test:foo'], db, self.cfg)
        self.assertEquals(str, '')

        binary = self.rootDir + '/prelinktest'
        # the test suite can't set the mtime on the file; we'll preserve
        # it ourself
        sb = os.stat(binary)
        os.system("cp %s/prelinktest-prelinked %s" % (archivePath, binary))
        os.utime(binary, (sb.st_atime, sb.st_mtime))

        self.assertEquals(files.PRELINK_CMD, ('/usr/sbin/prelink', ))
        oldCmd = files.PRELINK_CMD
        try:
            files.PRELINK_CMD = (archivePath + '/prelink', )
            files._havePrelink = None
            rc, str = self.captureOutput(verify.verify, ['test:foo'],
                                         db,
                                         self.cfg,
                                         forceHashCheck=True)
            self.assertEquals(str, '')

            # Also verify a path used by addCapsule
            f, nlinks, devino = files.FileFromFilesystem(binary,
                                                         pathId='\0' * 16,
                                                         inodeInfo=True)
            self.assertEquals(
                digestlib.sha1(open(binary).read()).hexdigest(),
                '1114f3a978b60d76d7618dc43aaf207bc999f997')
            self.assertEquals(f.contents.sha1().encode('hex'),
                              '23ad3a2c940a30809b68a5b8a13392196004efab')
        finally:
            files.PRELINK_CMD = oldCmd
            files._havePrelink = None
示例#28
0
    def testMirror(self):
        sourceRepos, targetRepos = self.createRepositories()
        mirrorFile = self.createConfigurationFile()
        # this is really ugly, but needed to ensure test consistency
        db = self.servers.getServer(0).reposDB.connect()
        cu = db.cursor()

        # test simple trove mirroring
        self.createTroves(sourceRepos, 1, 2, "1.0")
        self.createTroves(sourceRepos, 1, 2, "2.0")
        self.sleep(1.2)
        self.createTroves(sourceRepos, 1, 2, "3.0")
        # the following is just to get the trigger to fire
        cu.execute("update Instances set changed=1")
        db.commit()
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # simulate multiple trove versions with the same mark
        self.createTroves(sourceRepos, 10, 2, "1.0", "~foo")
        self.createTroves(sourceRepos, 10, 2, "1.0", "~!foo")
        self.createTroves(sourceRepos, 10, 2, "1.1")
        # the following is just to get the trigger to fire
        cu.execute("update Instances set changed=1")
        db.commit()
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # test mirroring of ascii keys
        sourceRepos.addNewAsciiPGPKey(self.cfg.buildLabel, 'test',
                                      sigtest.unexpiredKey)
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # test mirroring of new trove signatures
        self.createTroves(sourceRepos, 20, 2)
        self.cfg.signatureKey = '7CCD34B5C5D9CD1F637F6743D4F8F127C267B79D'
        signtrove.signTroves(self.cfg, ["test10:runtime", "test20:runtime"])
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        fprint = 'F7440D78FE813C882212C2BF8AC2828190B1E477'
        keyCache = openpgpkey.getKeyCache()
        keyCache.getPrivateKey(fprint, '111111')
        self.cfg.signatureKey = fprint

        keyRing = open(resources.get_archive() + '/pubring.gpg')
        keyData = openpgpfile.exportKey(fprint, keyRing)
        keyData.seek(0)
        keyData = keyData.read()
        sourceRepos.addNewPGPKey(self.cfg.buildLabel, 'test', keyData)
        signtrove.signTroves(self.cfg, ["test11:runtime", "test21:runtime"])
        self.createTroves(sourceRepos, 30, 2)
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)
示例#29
0
    def testMirror(self):
        sourceRepos, targetRepos = self.createRepositories()
        mirrorFile = self.createConfigurationFile()
        # this is really ugly, but needed to ensure test consistency
        db = self.servers.getServer(0).reposDB.connect()
        cu = db.cursor()

        # test simple trove mirroring
        self.createTroves(sourceRepos, 1, 2, "1.0")
        self.createTroves(sourceRepos, 1, 2, "2.0")
        self.sleep(1.2)
        self.createTroves(sourceRepos, 1, 2, "3.0")
        # the following is just to get the trigger to fire
        cu.execute("update Instances set changed=1")
        db.commit()
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # simulate multiple trove versions with the same mark
        self.createTroves(sourceRepos, 10, 2, "1.0", "~foo")
        self.createTroves(sourceRepos, 10, 2, "1.0", "~!foo")
        self.createTroves(sourceRepos, 10, 2, "1.1")
        # the following is just to get the trigger to fire
        cu.execute("update Instances set changed=1")
        db.commit()
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # test mirroring of ascii keys
        sourceRepos.addNewAsciiPGPKey(self.cfg.buildLabel, 'test', sigtest.unexpiredKey)
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        # test mirroring of new trove signatures
        self.createTroves(sourceRepos, 20, 2)
        self.cfg.signatureKey = '7CCD34B5C5D9CD1F637F6743D4F8F127C267B79D'
        signtrove.signTroves(self.cfg, [ "test10:runtime", "test20:runtime" ])
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)

        fprint='F7440D78FE813C882212C2BF8AC2828190B1E477'
        keyCache = openpgpkey.getKeyCache()
        keyCache.getPrivateKey(fprint, '111111')
        self.cfg.signatureKey = fprint

        keyRing = open(resources.get_archive() + '/pubring.gpg')
        keyData = openpgpfile.exportKey(fprint, keyRing)
        keyData.seek(0)
        keyData = keyData.read()
        sourceRepos.addNewPGPKey(self.cfg.buildLabel, 'test', keyData)
        signtrove.signTroves(self.cfg, [ "test11:runtime", "test21:runtime" ])
        self.createTroves(sourceRepos, 30, 2)
        self.runMirror(mirrorFile)
        self.compareRepositories(sourceRepos, targetRepos)
示例#30
0
    def _testSSLCertCheck(self, keyPair=None):
        httpServer = rephelp.HTTPServerController(RequestHandler200,
                                                  ssl=keyPair)
        try:
            caPath = os.path.join(resources.get_archive(),
                                  'ssl-cert-authority.pem')
            opener = transport.URLOpener(caCerts=[caPath])
            opener.open("https://localhost:%s/someurl" % httpServer.port)

        finally:
            httpServer.kill()
示例#31
0
    def testFetchFreshmeat(self):
        """Tests metadata.fetchFreshmeat"""
        filename = os.path.join(resources.get_archive(), 'tora.xml')
        f = open(filename)

        try:
            m = metadata_mod.fetchFreshmeat('tora', xmlDocStream=f)
        except socket.gaierror:
            raise testhelp.SkipTestException('requires network access')
        self.assertEqual(
            m.getShortDesc(),
            "A tool for administrating or developing for Oracle databases.")
示例#32
0
文件: sqldbtest.py 项目: pombr/conary
 def testVersion2Migration(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-2')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db, str = self.captureOutput(sqldb.Database, fn)
     cu = db.db.cursor()
     # make sure that the -*none*- entry has been added
     cu.execute('select count(*) from provides join dependencies on provides.depid=dependencies.depid and name="sqlite:lib" and flag="-*none*-"')
     assert(cu.next() == (1,))
     db.close()
     os.unlink(fn)
示例#33
0
 def testVersion20DeAnalyze(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-20-with-analyze')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db = sqldb.Database(fn)
     cu = db.db.cursor()
     cu.execute('select count(*) from sqlite_stat1')
     count = cu.fetchall()[0][0]
     self.assertEqual(count, 0)
     db.close()
     os.unlink(fn)
示例#34
0
文件: sqldbtest.py 项目: pombr/conary
 def testVersion20DeAnalyze(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-20-with-analyze')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db = sqldb.Database(fn)
     cu = db.db.cursor()
     cu.execute('select count(*) from sqlite_stat1')
     count = cu.fetchall()[0][0]
     self.assertEqual(count, 0)
     db.close()
     os.unlink(fn)
示例#35
0
    def testPrelink(self):
        user = pwd.getpwuid(os.getuid()).pw_name
        group = grp.getgrgid(os.getgid()).gr_name
        archivePath = resources.get_archive()
        self.addComponent(
            "test:foo=1",
            fileContents=[
                (
                    "/prelinktest",
                    rephelp.RegularFile(
                        contents=open(archivePath + "/prelinktest"), owner=user, group=group, mode=0755
                    ),
                ),
                (
                    "/prelinktest-orig",
                    rephelp.RegularFile(
                        contents=open(archivePath + "/prelinktest"), owner=user, group=group, mode=0755
                    ),
                ),
            ],
        )
        self.updatePkg("test:foo=1")

        db = database.Database(self.rootDir, self.cfg.dbPath)
        rc, str = self.captureOutput(verify.verify, ["test:foo"], db, self.cfg)
        self.assertEquals(str, "")

        binary = self.rootDir + "/prelinktest"
        # the test suite can't set the mtime on the file; we'll preserve
        # it ourself
        sb = os.stat(binary)
        os.system("cp %s/prelinktest-prelinked %s" % (archivePath, binary))
        os.utime(binary, (sb.st_atime, sb.st_mtime))

        self.assertEquals(files.PRELINK_CMD, ("/usr/sbin/prelink",))
        oldCmd = files.PRELINK_CMD
        try:
            files.PRELINK_CMD = (archivePath + "/prelink",)
            files._havePrelink = None
            rc, str = self.captureOutput(verify.verify, ["test:foo"], db, self.cfg, forceHashCheck=True)
            self.assertEquals(str, "")

            # Also verify a path used by addCapsule
            f, nlinks, devino = files.FileFromFilesystem(binary, pathId="\0" * 16, inodeInfo=True)
            self.assertEquals(
                digestlib.sha1(open(binary).read()).hexdigest(), "1114f3a978b60d76d7618dc43aaf207bc999f997"
            )
            self.assertEquals(f.contents.sha1().encode("hex"), "23ad3a2c940a30809b68a5b8a13392196004efab")
        finally:
            files.PRELINK_CMD = oldCmd
            files._havePrelink = None
示例#36
0
        def checkMtimes(trvCs, rpmPath):
            archivePath = resources.get_archive()

            trv = trove.Trove(trvCs)
            f = open(archivePath + '/' + rpmPath, "r")
            h = rpmhelper.readHeader(f)

            rpmMtimes = dict((path, mtime) for path, mtime in itertools.izip(
                h[rpmhelper.OLDFILENAMES], h[rpmhelper.FILEMTIMES]))
            conaryMtimes = dict(
                (path, mtime)
                for ((pathId, path, fileId, version), mtime) in itertools.izip(
                    sorted(trv.iterFileList()), trv.troveInfo.mtimes))
            self.assertEquals(rpmMtimes, conaryMtimes)
示例#37
0
 def go(root):
     ts = rpm.TransactionSet(root)
     ts.setVSFlags(~(rpm.RPMVSF_NORSA | rpm.RPMVSF_NODSA))
     ts.initDB()
     rpmloc = resources.get_archive() + "/epoch-1.0-1.i386.rpm"
     fdno = os.open(rpmloc, os.O_RDONLY)
     hdr = ts.hdrFromFdno(fdno)
     os.close(fdno)
     ts.addInstall(hdr, (hdr, rpmloc), "u")
     ts.check()
     ts.order()
     cb = simpleCallback()
     ts.run(cb.callback, "")
     ts.closeDB()
示例#38
0
文件: sqldbtest.py 项目: pombr/conary
 def testMigrationReadOnly(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-2')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     os.chmod(fn, 0444)
     try:
         db = sqldb.Database(fn)
     except sqldb.OldDatabaseSchema:
         pass
     else:
         raise
     os.unlink(fn)
示例#39
0
 def testMigrationReadOnly(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-2')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     os.chmod(fn, 0444)
     try:
         db = sqldb.Database(fn)
     except sqldb.OldDatabaseSchema:
         pass
     else:
         raise
     os.unlink(fn)
示例#40
0
文件: rpmtest.py 项目: tensor5/conary
 def go(root):
     ts = rpm.TransactionSet(root)
     ts.setVSFlags(~(rpm.RPMVSF_NORSA | rpm.RPMVSF_NODSA))
     ts.initDB()
     rpmloc = resources.get_archive() + '/epoch-1.0-1.i386.rpm'
     fdno = os.open(rpmloc, os.O_RDONLY)
     hdr = ts.hdrFromFdno(fdno)
     os.close(fdno)
     ts.addInstall(hdr, (hdr, rpmloc), 'u')
     ts.check()
     ts.order()
     cb = simpleCallback()
     ts.run(cb.callback, '')
     ts.closeDB()
示例#41
0
 def __init__(
         self,
         reposDir,
         sslCertAndKey=None,
         withCache=True,
         singleWorker=False,
         configValues=(),
 ):
     self.reposDir = os.path.abspath(reposDir)
     self.reposLog = os.path.join(self.reposDir, 'repos.log')
     self.traceLog = os.path.join(self.reposDir, 'trace.log')
     self.configPath = os.path.join(self.reposDir, 'repository.cnr')
     self.contents = ContentStore(os.path.join(self.reposDir, 'contents'))
     if withCache:
         self.cache = ContentStore(os.path.join(self.reposDir, 'cscache'))
         self.cache.reset()
     self.sslCertAndKey = sslCertAndKey
     if sslCertAndKey is True:
         self.sslCertAndKey = (resources.get_archive('ssl-cert.crt'),
                               resources.get_archive('ssl-cert.key'))
     name = os.environ.get('CONARY_APP_SERVER', 'gunicorn')
     appServerClass = self.appServerClasses[name]
     self.appServer = appServerClass(
         serverDir=os.path.join(self.reposDir, 'appserver'),
         workers=(1 if singleWorker else 2),
         application='conary.server.wsgi_hooks',
         environ={
             'CONARY_SERVER_CONFIG': self.configPath,
         },
     )
     self.rpServer = NginxServer(
         serverDir=os.path.join(self.reposDir, 'revproxy'),
         proxyTo=self.appServer.getProxyTo(),
         sslCertAndKey=self.sslCertAndKey,
     )
     self.configValues = configValues
     self.needsReset = True
示例#42
0
 def testVersion2Migration(self):
     dbfile = os.path.join(resources.get_archive(), 'conarydbs',
                           'conarydb-version-2')
     fd, fn = tempfile.mkstemp()
     os.close(fd)
     shutil.copyfile(dbfile, fn)
     db, str = self.captureOutput(sqldb.Database, fn)
     cu = db.db.cursor()
     # make sure that the -*none*- entry has been added
     cu.execute(
         'select count(*) from provides join dependencies on provides.depid=dependencies.depid and name="sqlite:lib" and flag="-*none*-"'
     )
     assert (cu.next() == (1, ))
     db.close()
     os.unlink(fn)
示例#43
0
文件: rpmtest.py 项目: tensor5/conary
 def testFilelessRpm(self):
     # Test that reading the paths for an rpm that has no files still works
     f = open(resources.get_archive() + "/fileless-0.1-1.noarch.rpm")
     h = rpmhelper.readHeader(f)
     self.assertEqual(list(h.paths()), [])
     tags = [
         rpmhelper.DIRINDEXES,
         rpmhelper.BASENAMES,
         rpmhelper.DIRNAMES,
         rpmhelper.FILEUSERNAME,
         rpmhelper.FILEGROUPNAME,
         rpmhelper.OLDFILENAMES,
     ]
     for t in tags:
         self.assertEqual(h[t], [])
示例#44
0
 def testFilelessRpm(self):
     # Test that reading the paths for an rpm that has no files still works
     f = open(resources.get_archive() + "/fileless-0.1-1.noarch.rpm")
     h = rpmhelper.readHeader(f)
     self.assertEqual(list(h.paths()), [])
     tags = [
         rpmhelper.DIRINDEXES,
         rpmhelper.BASENAMES,
         rpmhelper.DIRNAMES,
         rpmhelper.FILEUSERNAME,
         rpmhelper.FILEGROUPNAME,
         rpmhelper.OLDFILENAMES,
     ]
     for t in tags:
         self.assertEqual(h[t], [])
示例#45
0
文件: repserver.py 项目: pombr/conary
 def __init__(self, reposDir,
         sslCertAndKey=None,
         withCache=True,
         singleWorker=False,
         configValues=(),
         ):
     self.reposDir = os.path.abspath(reposDir)
     self.reposLog = os.path.join(self.reposDir, 'repos.log')
     self.traceLog = os.path.join(self.reposDir, 'trace.log')
     self.configPath = os.path.join(self.reposDir, 'repository.cnr')
     self.contents = ContentStore(os.path.join(self.reposDir, 'contents'))
     if withCache:
         self.cache = ContentStore(os.path.join(self.reposDir, 'cscache'))
         self.cache.reset()
     self.sslCertAndKey = sslCertAndKey
     if sslCertAndKey is True:
         self.sslCertAndKey = (
                 resources.get_archive('ssl-cert.crt'),
                 resources.get_archive('ssl-cert.key'))
     name = os.environ.get('CONARY_APP_SERVER', 'gunicorn')
     appServerClass = self.appServerClasses[name]
     self.appServer = appServerClass(
             serverDir=os.path.join(self.reposDir, 'appserver'),
             workers=(1 if singleWorker else 2),
             application='conary.server.wsgi_hooks',
             environ={
                 'CONARY_SERVER_CONFIG': self.configPath,
                 },
             )
     self.rpServer = NginxServer(
             serverDir=os.path.join(self.reposDir, 'revproxy'),
             proxyTo=self.appServer.getProxyTo(),
             sslCertAndKey=self.sslCertAndKey,
             )
     self.configValues = configValues
     self.needsReset = True
示例#46
0
文件: utiltest.py 项目: sweptr/conary
    def testBz2File(self):
        fobj = file(os.path.join(resources.get_archive(),
                                 'distcc-2.9.tar.bz2'))
        b = util.BZ2File(fobj)
        s = 'distcc-2.9'
        out = b.read(len(s))
        self.assertEqual(out,s)

        out = b.read(100000)
        self.assertEqual(len(out),100000)

        out = b.read(10000000)
        self.assertEqual(len(out),1169750)

        out = b.read(1)
        self.assertEqual(out,None)
示例#47
0
文件: utiltest.py 项目: pombr/conary
    def testBz2File(self):
        fobj = file(os.path.join(resources.get_archive(),
                                 'distcc-2.9.tar.bz2'))
        b = util.BZ2File(fobj)
        s = 'distcc-2.9'
        out = b.read(len(s))
        self.assertEqual(out,s)

        out = b.read(100000)
        self.assertEqual(len(out),100000)

        out = b.read(10000000)
        self.assertEqual(len(out),1169750)

        out = b.read(1)
        self.assertEqual(out,None)
示例#48
0
    def testCorruptedRpm(self):
        # test enforcement of size and sha1 fields from rpm signature block
        f = open(resources.get_archive() + "/basesystem-8.0-2.src.rpm")
        rpmhelper.readHeader(f)
        f.seek(0)

        # change the size
        tmp = tempfile.TemporaryFile()
        util.copyfileobj(f, tmp)
        f.seek(0)
        tmp.write(" ")
        tmp.seek(0)
        try:
            rpmhelper.readHeader(tmp)
        except IOError, e:
            assert str(e) == "file size does not match size specified by " "header"
示例#49
0
    def _cookPkgs(self,
                  recipestr,
                  filename,
                  pkgname,
                  builtpkgnames=None,
                  macros={},
                  updatePackage=False):
        repos = self.openRepository()
        recipename = pkgname + '.recipe'
        ccsname = pkgname + '.ccs'

        if builtpkgnames is None:
            builtpkgnames = [pkgname]

        origDir = os.getcwd()
        try:
            os.chdir(self.workDir)
            if updatePackage:
                self.checkout(pkgname)
            else:
                self.newpkg(pkgname)
            os.chdir(pkgname)
            self.writeFile(recipename, recipestr)
            if not updatePackage:
                self.addfile(recipename)

            if isinstance(filename, types.StringType):
                filenames = [filename]
            else:
                filenames = filename

            for filename in filenames:
                shutil.copyfile(resources.get_archive() + '/' + filename,
                                filename)
                self.addfile(filename)

            self.commit()

            built, out = self.cookItem(repos, self.cfg, pkgname, macros=macros)

            self.changeset(repos, builtpkgnames, ccsname)
            cs = changeset.ChangeSetFromFile(ccsname)
        finally:
            os.chdir(origDir)

        return (sorted([x.getName()
                        for x in cs.iterNewTroveList()]), built, cs)
示例#50
0
文件: rpmtest.py 项目: tensor5/conary
    def testCorruptedRpm(self):
        # test enforcement of size and sha1 fields from rpm signature block
        f = open(resources.get_archive() + "/basesystem-8.0-2.src.rpm")
        rpmhelper.readHeader(f)
        f.seek(0)

        # change the size
        tmp = tempfile.TemporaryFile()
        util.copyfileobj(f, tmp)
        f.seek(0)
        tmp.write(' ')
        tmp.seek(0)
        try:
            rpmhelper.readHeader(tmp)
        except IOError, e:
            assert (str(e) == 'file size does not match size specified by '
                    'header')
示例#51
0
        def checkMtimes(trvCs, rpmPath):
            archivePath = resources.get_archive()

            trv = trove.Trove(trvCs)
            f = open(archivePath + "/" + rpmPath, "r")
            h = rpmhelper.readHeader(f)

            rpmMtimes = dict(
                (path, mtime) for path, mtime in itertools.izip(h[rpmhelper.OLDFILENAMES], h[rpmhelper.FILEMTIMES])
            )
            conaryMtimes = dict(
                (path, mtime)
                for ((pathId, path, fileId, version), mtime) in itertools.izip(
                    sorted(trv.iterFileList()), trv.troveInfo.mtimes
                )
            )
            self.assertEquals(rpmMtimes, conaryMtimes)
示例#52
0
文件: utiltest.py 项目: sweptr/conary
    def testCompressDecompressStream(self):
        # Test that compressing and uncompressing streams produces the same
        # data
        fd, tempf = tempfile.mkstemp()
        os.unlink(tempf)
        sio = os.fdopen(fd, "w+")

        # Some data we will compress
        for fn in ['distcache-1.4.5-2.src.rpm', 'distcc-2.9.tar.bz2',
                      'initscripts-10-11.src.rpm', 'jcd.iso']:
            util.copyStream(file(os.path.join(resources.get_archive(), fn)), sio)
        sio.seek(0)

        cstr = util.compressStream(sio)
        cstr.seek(0)
        dstr = util.decompressStream(cstr)
        dstr.seek(0)
        sio.seek(0)
        self.assertEqual(sio.read(), dstr.read())
示例#53
0
文件: elftest.py 项目: pombr/conary
    def testGetDynSym(self):
        # Get the path to our lib directory
        libPath = os.path.dirname(elf.__file__)
        for soPrefix in ['elf', 'ext/streams', 'ext/file_utils']:
            fname = os.path.join(libPath, soPrefix + '.so')
            syms = elf.getDynSym(fname)
            initfunc = 'init' + os.path.basename(soPrefix)
            self.assertTrue(initfunc in syms,
                            "%s not in %s" % (initfunc, syms))

        # Not a python module
        fname = os.path.join(libPath, 'filename_wrapper.so')
        if os.path.exists(fname):
            syms = elf.getDynSym(fname)
            self.assertTrue('chdir' in syms)

        # Grab a random, non-.so file, expect an error
        fname = os.path.join(resources.get_archive(), 'basesystem-8.0-2.src.rpm')
        self.assertRaises(elf.error, elf.getDynSym, fname)
示例#54
0
文件: utiltest.py 项目: pombr/conary
    def testCompressDecompressStream(self):
        # Test that compressing and uncompressing streams produces the same
        # data
        fd, tempf = tempfile.mkstemp()
        os.unlink(tempf)
        sio = os.fdopen(fd, "w+")

        # Some data we will compress
        for fn in ['distcache-1.4.5-2.src.rpm', 'distcc-2.9.tar.bz2',
                      'initscripts-10-11.src.rpm', 'jcd.iso']:
            util.copyStream(file(os.path.join(resources.get_archive(), fn)), sio)
        sio.seek(0)

        cstr = util.compressStream(sio)
        cstr.seek(0)
        dstr = util.decompressStream(cstr)
        dstr.seek(0)
        sio.seek(0)
        self.assertEqual(sio.read(), dstr.read())
示例#55
0
文件: rpmtest.py 项目: tensor5/conary
    def testRpmToCpioXz(self):
        # ensure that we are testing the /usr/bin/xz path here
        realExists = os.path.exists

        def access_xz(*args):
            if args[0].endswith('/unlzma'):
                return False
            return realExists(*args)

        mock.mock(os.path, 'exists', access_xz)

        f = os.popen(
            "%s %s/gnome-main-menu-0.9.10-26.x86_64.rpm | cpio -t --quiet" %
            (self.rpm2cpio, resources.get_archive()))
        l = f.readlines()
        assert (len(l) > 0)
        self.assertEqual(l[0],
                         './etc/gconf/schemas/application-browser.schemas\n')
        mock.unmockAll()
示例#56
0
    def testGetDynSym(self):
        # Get the path to our lib directory
        libPath = os.path.dirname(elf.__file__)
        for soPrefix in ['elf', 'ext/streams', 'ext/file_utils']:
            fname = os.path.join(libPath, soPrefix + '.so')
            syms = elf.getDynSym(fname)
            initfunc = 'init' + os.path.basename(soPrefix)
            self.assertTrue(initfunc in syms,
                            "%s not in %s" % (initfunc, syms))

        # Not a python module
        fname = os.path.join(libPath, 'filename_wrapper.so')
        if os.path.exists(fname):
            syms = elf.getDynSym(fname)
            self.assertTrue('chdir' in syms)

        # Grab a random, non-.so file, expect an error
        fname = os.path.join(resources.get_archive(),
                             'basesystem-8.0-2.src.rpm')
        self.assertRaises(elf.error, elf.getDynSym, fname)
示例#57
0
    def testRPMCapsuleKernelDeps(self):
        '''make sure that rpm kernel deps include symbol set hashes'''
        fPath = os.path.join(resources.get_archive(),
                             'tmpwatch-2.9.1-1.i386.rpm')

        def mockGet(self, item, default):
            if item == rpmhelper.PROVIDENAME or item == rpmhelper.REQUIRENAME:
                return [
                    'kernel(goodVer)', 'ksym(goodVer2)', 'kernel(badver)',
                    'ksym(badver2)'
                ]
            if item == rpmhelper.PROVIDEVERSION or \
                    item == rpmhelper.REQUIREVERSION:
                return [
                    '0123456789ABCDEF', 'FEDCBA9876543210', '3.2.1', 'ABCDE'
                ]

        self.mock(rpmhelper._RpmHeader, 'get', mockGet)
        h = rpmhelper.readHeader(file(fPath))
        (req, prov), output = self.captureOutput(h.getDeps)
        expected = '\n'.join((
            "rpm: kernel[badver]",
            "rpm: kernel[goodVer:0123456789ABCDEF]",
            "rpm: ksym[badver2]",
            "rpm: ksym[goodVer2:FEDCBA9876543210]",
        ))
        self.assertEqual(str(req), expected)
        self.assertEqual(str(prov), expected)
        # assert that the two bad versions were each seen twice; once
        # in provides and once in requires
        self.assertEqual(len(output.strip().split('\n')), 4)

        (req, prov), output = self.captureOutput(h.getDeps,
                                                 mergeKmodSymbols=True)
        expected = '\n'.join((
            "rpm: kernel(badver goodVer:0123456789ABCDEF)",
            "rpm: ksym(badver2 goodVer2:FEDCBA9876543210)",
        ))
        self.assertEqual(str(req), expected)
        self.assertEqual(str(prov), expected)
        self.assertEqual(len(output.strip().split('\n')), 4)
示例#58
0
    def testRPMCapsuleKernelDeps(self):
        '''make sure that rpm kernel deps include symbol set hashes'''
        fPath = os.path.join(resources.get_archive(),
                             'tmpwatch-2.9.1-1.i386.rpm')

        def mockGet(self, item, default):
            if item == rpmhelper.PROVIDENAME or item == rpmhelper.REQUIRENAME:
                return ['kernel(goodVer)', 'ksym(goodVer2)', 'kernel(badver)',
                        'ksym(badver2)']
            if item == rpmhelper.PROVIDEVERSION or \
                    item == rpmhelper.REQUIREVERSION:
                return ['0123456789ABCDEF',
                        'FEDCBA9876543210',
                        '3.2.1',
                        'ABCDE']

        self.mock(rpmhelper._RpmHeader, 'get', mockGet)
        h = rpmhelper.readHeader(file(fPath))
        (req, prov), output = self.captureOutput(h.getDeps)
        expected = '\n'.join((
        "rpm: kernel[badver]",
        "rpm: kernel[goodVer:0123456789ABCDEF]",
        "rpm: ksym[badver2]",
        "rpm: ksym[goodVer2:FEDCBA9876543210]",
        ))
        self.assertEqual(str(req), expected)
        self.assertEqual(str(prov), expected)
        # assert that the two bad versions were each seen twice; once
        # in provides and once in requires
        self.assertEqual(len(output.strip().split('\n')), 4)

        (req, prov), output = self.captureOutput(h.getDeps,
                                                 mergeKmodSymbols=True)
        expected = '\n'.join((
        "rpm: kernel(badver goodVer:0123456789ABCDEF)",
        "rpm: ksym(badver2 goodVer2:FEDCBA9876543210)",
        ))
        self.assertEqual(str(req), expected)
        self.assertEqual(str(prov), expected)
        self.assertEqual(len(output.strip().split('\n')), 4)
示例#59
0
    def _cookPkgs(self, recipestr, filename, pkgname, builtpkgnames=None, macros={}, updatePackage=False):
        repos = self.openRepository()
        recipename = pkgname + '.recipe'
        ccsname = pkgname + '.ccs'

        if builtpkgnames is None:
            builtpkgnames = [pkgname]

        origDir = os.getcwd()
        try:
            os.chdir(self.workDir)
            if updatePackage:
                self.checkout(pkgname)
            else:
                self.newpkg(pkgname)
            os.chdir(pkgname)
            self.writeFile(recipename, recipestr)
            if not updatePackage:
                self.addfile(recipename)

            if isinstance(filename, types.StringType):
                filenames = [filename]
            else:
                filenames = filename

            for filename in filenames:
                shutil.copyfile(
                    resources.get_archive() + '/' + filename,
                    filename)
                self.addfile(filename) 

            self.commit()
            built, out = self.cookItem(repos, self.cfg, pkgname, macros=macros)

            self.changeset(repos, builtpkgnames, ccsname)
            cs = changeset.ChangeSetFromFile(ccsname)
        finally:
            os.chdir(origDir)

        return (sorted([x.getName() for x in cs.iterNewTroveList()]), built, cs)