def testNewFileOwnership(self): # make sure files found with --new-files get assigned to the right # troves user, group = self._getUserGroup() self.addComponent('foo:bin=0', fileContents = [ ('/bin', rephelp.Directory(owner = user, group = group,)) ]) self.addComponent('foo:lib=1', fileContents = [ ('/lib', rephelp.Directory(owner = user, group = group,)) ]) self.updatePkg([ 'foo:bin', 'foo:lib' ]) db = self.openDatabase() self.writeFile(self.rootDir + '/bin/new', 'newtext\n') self.writeFile(self.rootDir + '/lib/new', 'newtext\n') self.writeFile(self.rootDir + '/rootfile', 'newtext\n') os.chdir(self.workDir) verify.verify([], db, self.cfg, all = True, newFiles = True, changesetPath = 'foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') trvCsByName = dict((x.getName(), x) for x in cs.iterNewTroveList()) self.assertEquals( [ x[1] for x in trvCsByName['foo:bin'].getNewFileList() ], [ '/bin/new'] ) self.assertEquals( [ x[1] for x in trvCsByName['foo:lib'].getNewFileList() ], [ '/lib/new'] ) self.assertEquals( [ x[1] for x in trvCsByName['@new:files'].getNewFileList() ], [ '/rootfile'] )
def testHashCheck(self): # by default, we trust the size/date timestamps repos = self.openRepository() db = database.Database(self.rootDir, self.cfg.dbPath) os.chdir(self.workDir) user, group = self._getUserGroup() trv = self.addComponent('foo:runtime', fileContents = [ ( '/a', rephelp.RegularFile(contents = '1234', owner = user, group = group)) ] ) fileInfo = trv.iterFileList().next() self.updatePkg('foo:runtime') f = open(self.rootDir + '/a', "w") f.write('abcd') f.close() f = repos.getFileVersions([(fileInfo[0], fileInfo[2], fileInfo[3])])[0] st = os.stat(self.rootDir + '/a') os.utime(self.rootDir + '/a', (f.inode.mtime(), f.inode.mtime())) s = self.captureOutput(verify.verify, ['foo:runtime'], db, self.cfg, changesetPath = 'foo.ccs') assert(not s[1]) verify.verify(['foo:runtime'], db, self.cfg, forceHashCheck = True, changesetPath = 'foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert(cs.files)
def testVerifyAll(self): os.chdir(self.workDir) self.addComponent('foo:runtime', '1.0', fileContents=['/bin/b']) self.addComponent('bar:lib', '1.0', fileContents=['/lib/l']) self.addCollection('foo', [':runtime']) self.addCollection('bar', [':lib']) db = database.Database(self.rootDir, self.cfg.dbPath) self.updatePkg('foo') self.updatePkg('bar') verify.verify([], db, self.cfg, all=True, changesetPath='foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert (sorted([x.getName() for x in cs.iterNewTroveList() ]) == ['bar:lib', 'foo:runtime'])
def testVerifyAll(self): os.chdir(self.workDir) self.addComponent('foo:runtime', '1.0', fileContents = ['/bin/b']) self.addComponent('bar:lib', '1.0', fileContents = ['/lib/l']) self.addCollection('foo', [ ':runtime' ]) self.addCollection('bar', [ ':lib' ]) db = database.Database(self.rootDir, self.cfg.dbPath) self.updatePkg('foo') self.updatePkg('bar') verify.verify([], db, self.cfg, all = True, changesetPath = 'foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert(sorted([ x.getName() for x in cs.iterNewTroveList() ]) == [ 'bar:lib', 'foo:runtime' ] )
def testVerifyToFile(self): db = database.Database(self.rootDir, self.cfg.dbPath) os.chdir(self.workDir) user, group = self._getUserGroup() self.addComponent('foo:runtime', '1.0', fileContents=[('/foo', rephelp.RegularFile(owner=user, group=group))]) self.updatePkg('foo:runtime') s = verify.verify(['foo:runtime'], db, self.cfg, changesetPath='foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert (list(cs.iterNewTroveList()) == []) f = open(self.rootDir + '/foo', "a") f.write("mod") f.close() s = self.captureOutput(verify.verify, ['foo:runtime'], db, self.cfg, changesetPath='foo.ccs') assert (not s[1]) cs = changeset.ChangeSetFromFile('foo.ccs') assert (list(cs.iterNewTroveList())[0].getName() == 'foo:runtime')
def testVerifyToFile(self): db = database.Database(self.rootDir, self.cfg.dbPath) os.chdir(self.workDir) user, group = self._getUserGroup() self.addComponent('foo:runtime', '1.0', fileContents = [('/foo', rephelp.RegularFile(owner = user, group = group))]) self.updatePkg('foo:runtime') s = verify.verify(['foo:runtime'], db, self.cfg, changesetPath = 'foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert(list(cs.iterNewTroveList()) == []) f = open(self.rootDir + '/foo', "a") f.write("mod") f.close() s = self.captureOutput(verify.verify, ['foo:runtime'], db, self.cfg, changesetPath = 'foo.ccs') assert(not s[1]) cs = changeset.ChangeSetFromFile('foo.ccs') assert(list(cs.iterNewTroveList())[0].getName() == 'foo:runtime')
def testNewFileOwnership(self): # make sure files found with --new-files get assigned to the right # troves user, group = self._getUserGroup() self.addComponent('foo:bin=0', fileContents=[('/bin', rephelp.Directory( owner=user, group=group, ))]) self.addComponent('foo:lib=1', fileContents=[('/lib', rephelp.Directory( owner=user, group=group, ))]) self.updatePkg(['foo:bin', 'foo:lib']) db = self.openDatabase() self.writeFile(self.rootDir + '/bin/new', 'newtext\n') self.writeFile(self.rootDir + '/lib/new', 'newtext\n') self.writeFile(self.rootDir + '/rootfile', 'newtext\n') os.chdir(self.workDir) verify.verify([], db, self.cfg, all=True, newFiles=True, changesetPath='foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') trvCsByName = dict((x.getName(), x) for x in cs.iterNewTroveList()) self.assertEquals( [x[1] for x in trvCsByName['foo:bin'].getNewFileList()], ['/bin/new']) self.assertEquals( [x[1] for x in trvCsByName['foo:lib'].getNewFileList()], ['/lib/new']) self.assertEquals( [x[1] for x in trvCsByName['@new:files'].getNewFileList()], ['/rootfile'])
def testHashCheck(self): # by default, we trust the size/date timestamps repos = self.openRepository() db = database.Database(self.rootDir, self.cfg.dbPath) os.chdir(self.workDir) user, group = self._getUserGroup() trv = self.addComponent('foo:runtime', fileContents=[ ('/a', rephelp.RegularFile(contents='1234', owner=user, group=group)) ]) fileInfo = trv.iterFileList().next() self.updatePkg('foo:runtime') f = open(self.rootDir + '/a', "w") f.write('abcd') f.close() f = repos.getFileVersions([(fileInfo[0], fileInfo[2], fileInfo[3])])[0] st = os.stat(self.rootDir + '/a') os.utime(self.rootDir + '/a', (f.inode.mtime(), f.inode.mtime())) s = self.captureOutput(verify.verify, ['foo:runtime'], db, self.cfg, changesetPath='foo.ccs') assert (not s[1]) verify.verify(['foo:runtime'], db, self.cfg, forceHashCheck=True, changesetPath='foo.ccs') cs = changeset.ChangeSetFromFile('foo.ccs') assert (cs.files)
def testDisplay(self): userDict = {} userDict['user'], userDict['group'] = self._getUserGroup() self.resetRepository() self.resetRoot() (built, d) = self.buildRecipe(recipes.testRecipe1, "TestRecipe1") pkgname, version = built[0][:2] self.updatePkg(self.rootDir, 'testcase', version) self.writeFile(self.rootDir + '/usr/bin/hello', 'newtext') sb = os.stat(self.rootDir + '/usr/bin/hello') # we need the time to change; conary ignores size changes on # executables to allow it to handle prelink sanely os.utime(self.rootDir + '/usr/bin/hello', (sb.st_mtime + 1, sb.st_mtime + 1)) db = database.Database(self.rootDir, self.cfg.dbPath) rc, str = self.captureOutput(verify.verify, ['testcase'], db, self.cfg) # XXX verify that output is correct here...will have to ignore # uid/gid information, as localcs expects everything to be owned # by root. Can share parsing code with showchangesettest rc, str2 = self.captureOutput(verify.verify, [], db, self.cfg, all=True) assert (str == str2) assert ('testcase:runtime' in str) assert ('/usr/bin/hello' in str) assert (' 7 ' in str) assert (' 20 ' in str) # make sure original size of file is displayed assert (' -rwxr-xr-x ' in str) # make sure original mode of file is # display (Even though that wasn't changed) rc, str = self.captureOutput(verify.verify, ['testcase:runtime'], db, self.cfg, diffBinaries=True) self.assertEquals( str, 'diff --git a/etc/changedconfig b/etc/changedconfig\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/etc/unchangedconfig b/etc/unchangedconfig\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/share/changed b/usr/share/changed\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/share/unchanged b/usr/share/unchanged\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/bin/hello b/usr/bin/hello\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'GIT binary patch\n' 'literal 7\n' 'Oc$~{iEiXx}C;<Qr9Rm;m\n' '\n' % userDict) self.logFilter.add() verify.verify(['unknownpkg'], db, self.cfg) verify.verify(['unknownpkg=@rpl:linux'], db, self.cfg) self.logFilter.remove() self.logFilter.compare( ('error: trove unknownpkg is not installed', 'error: version @rpl:linux of trove unknownpkg is not installed'))
def testDisplay(self): userDict = {} userDict['user'], userDict['group'] = self._getUserGroup() self.resetRepository() self.resetRoot() (built, d) = self.buildRecipe(recipes.testRecipe1, "TestRecipe1") pkgname, version = built[0][:2] self.updatePkg(self.rootDir, 'testcase', version) self.writeFile(self.rootDir + '/usr/bin/hello', 'newtext') sb = os.stat(self.rootDir + '/usr/bin/hello') # we need the time to change; conary ignores size changes on # executables to allow it to handle prelink sanely os.utime(self.rootDir + '/usr/bin/hello', (sb.st_mtime + 1, sb.st_mtime + 1)) db = database.Database(self.rootDir, self.cfg.dbPath) rc, str = self.captureOutput(verify.verify, ['testcase'], db, self.cfg) # XXX verify that output is correct here...will have to ignore # uid/gid information, as localcs expects everything to be owned # by root. Can share parsing code with showchangesettest rc, str2 = self.captureOutput(verify.verify, [], db, self.cfg, all=True) assert(str == str2) assert('testcase:runtime' in str) assert('/usr/bin/hello' in str) assert(' 7 ' in str) assert(' 20 ' in str) # make sure original size of file is displayed assert(' -rwxr-xr-x ' in str) # make sure original mode of file is # display (Even though that wasn't changed) rc, str = self.captureOutput(verify.verify, ['testcase:runtime'], db, self.cfg, diffBinaries=True) self.assertEquals(str, 'diff --git a/etc/changedconfig b/etc/changedconfig\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/etc/unchangedconfig b/etc/unchangedconfig\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/share/changed b/usr/share/changed\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/share/unchanged b/usr/share/unchanged\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'diff --git a/usr/bin/hello b/usr/bin/hello\n' 'old user root\n' 'new user %(user)s\n' 'old group root\n' 'new group %(group)s\n' 'GIT binary patch\n' 'literal 7\n' 'Oc$~{iEiXx}C;<Qr9Rm;m\n' '\n' % userDict) self.logFilter.add() verify.verify(['unknownpkg'], db, self.cfg) verify.verify(['unknownpkg=@rpl:linux'], db, self.cfg) self.logFilter.remove() self.logFilter.compare(('error: trove unknownpkg is not installed', 'error: version @rpl:linux of trove unknownpkg is not installed'))