]>
git.saurik.com Git - apt.git/blob - test/pre-upload-check.py
   9 from subprocess 
import call
, PIPE
 
  13 stdout 
= os
.open("/dev/null",0) #sys.stdout 
  14 stderr 
= os
.open("/dev/null",0) # sys.stderr 
  17 #apt_args = ["-o","Debug::pkgAcquire::Auth=true"] 
  19 class testAptAuthenticationReliability(unittest
.TestCase
): 
  21     test if the spec https://wiki.ubuntu.com/AptAuthenticationReliability  
  22     is properly implemented 
  24     #apt = "../bin/apt-get" 
  28         if os
.path
.exists("/tmp/autFailure"): 
  29             os
.unlink("/tmp/authFailure"); 
  30         if os
.path
.exists("/tmp/autFailure2"): 
  31             os
.unlink("/tmp/authFailure2"); 
  32     def testRepositorySigFailure(self
): 
  34         test if a repository that used to be authenticated and fails on 
  35         apt-get update refuses to update and uses the old state 
  37         # copy valid signatures into lists (those are ok, even 
  38         # if the name is "-broken-" ... 
  39         for f 
in glob
.glob("./authReliability/lists/*"): 
  40             shutil
.copy(f
,"/var/lib/apt/lists") 
  41             # ensure we do *not* get a I-M-S hit 
  42             os
.utime("/var/lib/apt/lists/%s" % os
.path
.basename(f
), (0,0)) 
  45                     "-o","Dir::Etc::sourcelist=./authReliability/sources.list.failure",  
  46                     "-o",'APT::Update::Auth-Failure::=touch /tmp/authFailure', 
  48                    stdout
=stdout
, stderr
=stderr
) 
  49         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-broken_Release.gpg"), 
  50                      "The gpg file disappeared, this should not happen") 
  51         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-broken_Packages"), 
  52                      "The Packages file disappeared, this should not happen") 
  53         self
.assert_(os
.path
.exists("/tmp/authFailure"), 
  54                      "The APT::Update::Auth-Failure script did not run (1)") 
  55         # the same with i-m-s hit this time 
  56         for f 
in glob
.glob("./authReliability/lists/*"): 
  57             shutil
.copy(f
,"/var/lib/apt/lists") 
  58             os
.utime("/var/lib/apt/lists/%s" % os
.path
.basename(f
), (time
.time(),time
.time())) 
  61                     "-o","Dir::Etc::sourcelist=./authReliability/sources.list.failure", 
  62                     "-o",'APT::Update::Auth-Failure::=touch /tmp/authFailure2', 
  64                    stdout
=stdout
, stderr
=stderr
) 
  65         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-broken_Release.gpg"), 
  66                      "The gpg file disappeared, this should not happen") 
  67         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-broken_Packages"), 
  68                      "The Packages file disappeared, this should not happen") 
  69         self
.assert_(os
.path
.exists("/tmp/authFailure2"), 
  70                      "The APT::Update::Auth-Failure script did not run (2)") 
  71     def testRepositorySigGood(self
): 
  73         test that a regular repository with good data stays good 
  77                     "-o","Dir::Etc::sourcelist=./authReliability/sources.list.good" 
  79                    stdout
=stdout
, stderr
=stderr
) 
  80         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Release.gpg"), 
  81                      "The gpg file disappeared after a regular download, this should not happen") 
  82         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Packages"), 
  83                      "The Packages file disappeared, this should not happen") 
  84         # test good is still good after non I-M-S hit and a previous files in lists/ 
  85         for f 
in glob
.glob("./authReliability/lists/*"): 
  86             shutil
.copy(f
,"/var/lib/apt/lists") 
  87             # ensure we do *not* get a I-M-S hit 
  88             os
.utime("/var/lib/apt/lists/%s" % os
.path
.basename(f
), (0,0)) 
  91                     "-o","Dir::Etc::sourcelist=./authReliability/sources.list.good" 
  93                    stdout
=stdout
, stderr
=stderr
) 
  94         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Release.gpg"), 
  95                      "The gpg file disappeared after a I-M-S hit, this should not happen") 
  96         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Packages"), 
  97                      "The Packages file disappeared, this should not happen") 
  98         # test good is still good after I-M-S hit 
  99         for f 
in glob
.glob("./authReliability/lists/*"): 
 100             shutil
.copy(f
,"/var/lib/apt/lists") 
 101             # ensure we do get a I-M-S hit 
 102             os
.utime("/var/lib/apt/lists/%s" % os
.path
.basename(f
), (time
.time(),time
.time())) 
 103         res 
= call([self
.apt
, 
 105                     "-o","Dir::Etc::sourcelist=./authReliability/sources.list.good" 
 107                    stdout
=stdout
, stderr
=stderr
) 
 108         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Release.gpg"), 
 109                      "The gpg file disappeared, this should not happen") 
 110         self
.assert_(os
.path
.exists("/var/lib/apt/lists/people.ubuntu.com_%7emvo_apt_auth-test-suit_gpg-package-ok_Packages"), 
 111                      "The Packages file disappeared, this should not happen") 
 114 class testAuthentication(unittest
.TestCase
): 
 116     test if the authentication is working, the repository 
 117     of the test-data can be found here: 
 118     bzr get http://people.ubuntu.com/~mvo/bzr/apt/apt-auth-test-suit/ 
 121     # some class wide data 
 123     pkg 
= "libglib2.0-data" 
 124     pkgver 
= "2.13.6-1ubuntu1" 
 125     pkgpath 
= "/var/cache/apt/archives/libglib2.0-data_2.13.6-1ubuntu1_all.deb" 
 128         for f 
in glob
.glob("testkeys/*,key"): 
 129             call(["apt-key", "add", f
], stdout
=stdout
, stderr
=stderr
) 
 132         " make sure we get new lists and no i-m-s " 
 133         call(["rm","-f", "/var/lib/apt/lists/*"]) 
 134         if os
.path
.exists(self
.pkgpath
): 
 135             os
.unlink(self
.pkgpath
) 
 137     def _expectedRes(self
, resultstr
): 
 138         if resultstr 
== 'ok': 
 140         elif resultstr 
== 'broken': 
 144     def testPackages(self
): 
 145         for f 
in glob
.glob("testsources.list/sources.list*package*"): 
 147             (prefix
, testtype
, result
) = f
.split("-") 
 148             expected_res 
= self
._expectedRes
(result
) 
 150             call([self
.apt
,"update", 
 151                   "-o","Dir::Etc::sourcelist=./%s" % f
]+apt_args
, 
 152                  stdout
=stdout
, stderr
=stderr
) 
 154             cmd 
= ["install", "-y", "-d", "--reinstall", 
 155                    "%s=%s" % (self
.pkg
, self
.pkgver
), 
 156                    "-o","Dir::state::Status=./fake-status"] 
 157             res 
= call([self
.apt
, "-o","Dir::Etc::sourcelist=./%s" % f
]+cmd
+apt_args
, 
 158                        stdout
=stdout
, stderr
=stderr
) 
 159             self
.assert_(res 
== expected_res
, 
 160                          "test '%s' failed (got %s expected %s" % (f
,res
,expected_res
)) 
 164         for f 
in glob
.glob("testsources.list/sources.list*gpg*"): 
 166             (prefix
, testtype
, result
) = f
.split("-") 
 167             expected_res 
= self
._expectedRes
(result
) 
 169             call([self
.apt
,"update", 
 170                   "-o","Dir::Etc::sourcelist=./%s" % f
]+apt_args
, 
 171                  stdout
=stdout
, stderr
=stderr
) 
 172             cmd 
= ["install", "-y", "-d", "--reinstall", 
 173                    "%s=%s" % (self
.pkg
, self
.pkgver
), 
 174                    "-o","Dir::state::Status=./fake-status"] 
 175             res 
= call([self
.apt
, "-o","Dir::Etc::sourcelist=./%s" % f
]+ 
 177                        stdout
=stdout
, stderr
=stderr
) 
 178             self
.assert_(res 
== expected_res
, 
 179                          "test '%s' failed (got %s expected %s" % (f
,res
,expected_res
)) 
 181     def testRelease(self
): 
 182         for f 
in glob
.glob("testsources.list/sources.list*release*"): 
 184             (prefix
, testtype
, result
) = f
.split("-") 
 185             expected_res 
= self
._expectedRes
(result
) 
 187             res 
= call([self
.apt
,"-o","Dir::Etc::sourcelist=./%s" % f
]+cmd
+apt_args
, 
 188                        stdout
=stdout
, stderr
=stderr
) 
 189             self
.assert_(res 
== expected_res
, 
 190                          "test '%s' failed (got %s expected %s" % (f
,res
,expected_res
)) 
 191             if expected_res 
== 0: 
 192                 self
.assert_(len(glob
.glob("/var/lib/apt/lists/partial/*")) == 0, 
 193                              "partial/ dir has leftover files: %s" % glob
.glob("/var/lib/apt/lists/partial/*")) 
 196         for f 
in glob
.glob("testsources.list/sources.list*validuntil*"): 
 198             (prefix
, testtype
, result
) = f
.split("-") 
 199             expected_res 
= self
._expectedRes
(result
) 
 201             res 
= call([self
.apt
,"-o","Dir::Etc::sourcelist=./%s" % f
]+cmd
+apt_args
, 
 202                        stdout
=stdout
, stderr
=stderr
) 
 203             self
.assert_(res 
== expected_res
, 
 204                          "test '%s' failed (got %s expected %s" % (f
,res
,expected_res
)) 
 205             if expected_res 
== 0: 
 206                 self
.assert_(len(glob
.glob("/var/lib/apt/lists/partial/*")) == 0, 
 207                              "partial/ dir has leftover files: %s" % glob
.glob("/var/lib/apt/lists/partial/*")) 
 210 class testLocalRepositories(unittest
.TestCase
): 
 211     " test local repository regressions " 
 213     repo_dir 
= "local-repo" 
 218         self
.repo 
= os
.path
.abspath(os
.path
.join(os
.getcwd(), self
.repo_dir
)) 
 219         self
.sources 
= os
.path
.join(self
.repo
, "sources.list") 
 220         s 
= open(self
.sources
,"w") 
 221         s
.write("deb file://%s/ /\n" % self
.repo
) 
 224     def testLocalRepoAuth(self
): 
 225         # two times to get at least one i-m-s hit 
 227             self
.assert_(os
.path
.exists(self
.sources
)) 
 228             cmd 
= [self
.apt
,"update","-o", "Dir::Etc::sourcelist=%s" % self
.sources
]+apt_args
 
 229             res 
= call(cmd
, stdout
=stdout
, stderr
=stderr
) 
 230             self
.assertEqual(res
, 0, "local repo test failed") 
 231             self
.assert_(os
.path
.exists(os
.path
.join(self
.repo
,"Packages.gz")), 
 232                          "Packages.gz vanished from local repo") 
 234     def testInstallFromLocalRepo(self
): 
 235         apt 
= [self
.apt
,"-o", "Dir::Etc::sourcelist=%s"% self
.sources
]+apt_args
 
 237         res 
= call(cmd
, stdout
=stdout
, stderr
=stderr
) 
 238         self
.assertEqual(res
, 0) 
 239         res 
= call(apt
+["-y","install","--reinstall",self
.pkg
], 
 240                    stdout
=stdout
, stderr
=stderr
) 
 241         self
.assert_(res 
== 0, 
 242                      "installing %s failed (got %s)" % (self
.pkg
, res
)) 
 243         res 
= call(apt
+["-y","remove",self
.pkg
], 
 244                    stdout
=stdout
, stderr
=stderr
) 
 245         self
.assert_(res 
== 0, 
 246                      "removing %s failed (got %s)" % (self
.pkg
, res
)) 
 248     def testPythonAptInLocalRepo(self
): 
 250         apt_pkg
.Config
.Set("Dir::Etc::sourcelist",self
.sources
) 
 254         self
.assert_(pkg
.name 
== 'apt') 
 258 if __name__ 
== "__main__": 
 259     print "Runing simple testsuit on current apt-get and libapt" 
 260     if len(sys
.argv
) > 1 and sys
.argv
[1] == "-v": 
 264     # run only one for now 
 265     #unittest.main(defaultTest="testAptAuthenticationReliability")