[apt-proxy-devel] r636 - in trunk: . apt_proxy apt_proxy/test

Chris Halls halls at costa.debian.org
Thu Sep 28 19:16:20 UTC 2006


Author: halls
Date: Thu Sep 28 19:16:20 2006
New Revision: 636

Modified:
   trunk/apt_proxy/cache.py
   trunk/apt_proxy/clients.py
   trunk/apt_proxy/test/test_cache.py
   trunk/apt_proxy/test/test_requests.py
   trunk/runtests

Log:
* Merge patches from Mark Sheppard:
  * Generate an error if a client attempts to retrieve http://server:9999/  (Closes: #386546)
  * When returning an error, generate an HTML page containing the error
* Add test for tilde in URLs
* Add tests for new min_refresh_delay behaviour


Modified: trunk/apt_proxy/cache.py
==============================================================================
--- trunk/apt_proxy/cache.py	(original)
+++ trunk/apt_proxy/cache.py	Thu Sep 28 19:16:20 2006
@@ -225,14 +225,15 @@
         else:
             last_access = self.file_mtime
 
-
+        refresh_delay = self.backend.config.min_refresh_delay
         cur_time = time.time()
         min_time = cur_time - self.factory.config.min_refresh_delay
 
+        #print 'del:%s mtime:%s time:%s' % (refresh_delay,self.file_mtime,time.time())
         if not self.filetype.mutable:
             log.debug("file is immutable: "+self.file_path, 'CacheEntry')
             return True
-        elif last_access < min_time:
+        elif refresh_delay and time.time() >= self.file_mtime + refresh_delay:
             log.debug("file is too old: "+self.file_path, 'CacheEntry')
             return False
         else:

Modified: trunk/apt_proxy/clients.py
==============================================================================
--- trunk/apt_proxy/clients.py	(original)
+++ trunk/apt_proxy/clients.py	Thu Sep 28 19:16:20 2006
@@ -87,7 +87,13 @@
 
         log.debug("backend: %s %s" % (self.backend.base, self.backend.uris), 'HttpRequestClient')
 
-        backend_path = self.uri.split('/',2)[2]
+        elements = self.uri.split('/', 2)
+        if len(elements) < 3:
+            log.debug("abort - too few slashes in URI %s" % (self.uri), 'Request')
+            self.finishCode(http.FORBIDDEN, 'too few slashes in URI %s' % (self.uri))
+            return
+
+        backend_path = elements[2]
         self.cacheEntry = self.backend.get_cache_entry(backend_path)
 
         if not self.cacheEntry.filetype:
@@ -138,7 +144,8 @@
         "Finish the request with a status code and no streamed data"
         log.debug("finishCode: %s, %s" % (responseCode, message), 'HttpRequestClient')
         self.setResponseCode(responseCode, message)
-        self.write("")
+        self.setHeader("content-type", "text/html")
+        self.write("<html><head><title>ERROR %d</title></head><body>ERROR %d - %s</body></html>\n" % (responseCode, responseCode, message))
         self.finish()
 
     def finish(self):

Modified: trunk/apt_proxy/test/test_cache.py
==============================================================================
--- trunk/apt_proxy/test/test_cache.py	(original)
+++ trunk/apt_proxy/test/test_cache.py	Thu Sep 28 19:16:20 2006
@@ -166,7 +166,7 @@
         return self.testResult
     testVerifyFail.timeout = 2
     def VerifyFail2(self, x):
-        reactor.iterate(0.1) # Allow process to be reaped
+        #reactor.iterate(0.1) # Allow process to be reaped
         self.testResult.callback(None)
 
     def testCheckAgeImmutable(self):
@@ -177,17 +177,35 @@
         self.entry.file_mtime = time.time()+1000
         self.failUnless(self.entry.check_age())
 
-    def testCheckAgeMutable(self):
+    def immutableEntry(self):
         # pretend that testfile.deb is immutable, i.e.
         # it will be updated like Packages, Release
         self.entry.filetype = copy.deepcopy(self.entry.filetype) # Take a copy of the filetype object
         self.entry.filetype.mutable = True
+
+    def testCheckAgeMutable(self):
+        self.immutableEntry()
         self.entry.file_mtime = 0
         self.failIf(self.entry.check_age())
 
         self.entry.file_mtime = time.time()+1000
         self.failUnless(self.entry.check_age())
 
+    def testMinRefresh(self):
+        self.immutableEntry()
+        min_refresh_delay = 60
+        self.backend.config.min_refresh_delay = min_refresh_delay
+
+        self.entry.file_mtime = 0
+        self.failIf(self.entry.check_age())
+
+        self.entry.file_mtime = time.time() - min_refresh_delay - 60
+        self.failIf(self.entry.check_age())
+
+        self.entry.file_mtime = time.time()
+        self.failUnless(self.entry.check_age())
+
+        
     def testCreateDirectory(self):
         dirname = self.cache_dir+"/files/testdir"
         self.assertRaises(OSError, os.stat, dirname) # Will return exception if directory does not exist

Modified: trunk/apt_proxy/test/test_requests.py
==============================================================================
--- trunk/apt_proxy/test/test_requests.py	(original)
+++ trunk/apt_proxy/test/test_requests.py	Thu Sep 28 19:16:20 2006
@@ -513,6 +513,10 @@
         return self.downloadFiles('/packages/empty.txt')
     testEmpty.timeout = 2
 
+    def testTilde(self):
+        return self.downloadFiles('/packages/tilde~test.txt')
+    testTilde.timeout = 10
+
     #def testTimeout(self):
         #pass
     #testTimeout.todo = True

Modified: trunk/runtests
==============================================================================
--- trunk/runtests	(original)
+++ trunk/runtests	Thu Sep 28 19:16:20 2006
@@ -4,7 +4,7 @@
 
 testfiles="packages/Packages packages/Packages.gz packages/Packages.bz2
            verify/invalid-gzip.gz 
-	   packages/apt_0.0.1_test.deb packages/empty.txt
+	   packages/apt_0.0.1_test.deb packages/empty.txt packages/tilde~test.txt
 	   apt/apt_0.0.1_test.deb apt/apt_0.0.2_test.deb apt/apt_0.0.3_test.deb"
 rootdir="$(cd $(dirname $0); pwd)"
 testdir="$rootdir/test_data"
@@ -61,6 +61,7 @@
   dpkg-scanpackages . /dev/null | tee Packages | gzip -c > Packages.gz
   bzip2 -c < Packages > Packages.bz2
   touch empty.txt
+  touch 'tilde~test.txt'
   cd ..
 
   mkdir -p $testdir/verify



More information about the apt-proxy-devel mailing list