On Wed, Aug 26, 2015 at 11:44:04PM +0200, Christian Boltz wrote:
> Am Mittwoch, 26. August 2015 schrieb Steve Beattie:
> > The following patch creates a new time stamp equality assertion
> > function that detects if it's running on python 3.2 or earlier, and
> ...
> > +        if (int(major) <= 3) and (int(minor) <= 2):
> > +            self.assertAlmostEquals(time1, time2, places=5)
> > +        else:
> > +            self.assertEquals(time1, time2)
> 
> Just curious - what about Python 2.x? Python 2.7 will hit the "else" 
> branch (because minor is > 2), and I'm not sure if that's what you want.
> 
> (Assuming we still want to support py2 - I know we do this officially, 
> but some code already disagrees ;-) and nobody (except you) complained 
> yet.)

This particular set of code depends on some features that are
explicitly python3 only (the metaclass bits, the syntax for which
changed incompatibly between python2 and python3), and since this
script is not user visible, nor does it exercise any of the user
visible python code, it was deemed okay to be python3 only.

That said, the logic above was intended to fall back to the looser
equality assert under python2, and clearly would not. v2 of the patch
follows:

v2: change logic for python2.x versions.

Signed-off-by: Steve Beattie <[email protected]>
---
 parser/tst/caching.py |   21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

Index: b/parser/tst/caching.py
===================================================================
--- a/parser/tst/caching.py
+++ b/parser/tst/caching.py
@@ -17,6 +17,7 @@
 
 from argparse import ArgumentParser
 import os
+import platform
 import shutil
 import time
 import tempfile
@@ -232,10 +233,24 @@ class AAParserCachingTests(AAParserCachi
         self.run_cmd_check(cmd)
         self.assert_path_exists(self.cache_file)
 
+    def _assertTimeStampEquals(self, time1, time2):
+        '''Compare two timestamps to ensure equality'''
+
+        # python 3.2 and earlier don't support writing timestamps with
+        # nanosecond resolution, only microsecond. When comparing
+        # timestamps in such an environment, loosen the equality bounds
+        # to compensate
+        # Reference: https://bugs.python.org/issue12904
+        (major, minor, _) = platform.python_version_tuple()
+        if (int(major) < 3) or ((int(major) == 3) and (int(minor) <= 2)):
+            self.assertAlmostEquals(time1, time2, places=5)
+        else:
+            self.assertEquals(time1, time2)
+
     def _set_mtime(self, path, mtime):
         atime = os.stat(path).st_atime
         os.utime(path, (atime, mtime))
-        self.assertEquals(os.stat(path).st_mtime, mtime)
+        self._assertTimeStampEquals(os.stat(path).st_mtime, mtime)
 
     def test_cache_loaded_when_exists(self):
         '''test cache is loaded when it exists, is newer than profile,  and 
features match'''
@@ -414,7 +429,7 @@ class AAParserCachingTests(AAParserCachi
 
         stat = os.stat(self.cache_file)
         self.assertNotEquals(orig_stat.st_ino, stat.st_ino)
-        self.assertEquals(profile_mtime, stat.st_mtime)
+        self._assertTimeStampEquals(profile_mtime, stat.st_mtime)
 
     def test_abstraction_newer_rewrites_cache(self):
         '''test cache is rewritten if abstraction is newer'''
@@ -431,7 +446,7 @@ class AAParserCachingTests(AAParserCachi
 
         stat = os.stat(self.cache_file)
         self.assertNotEquals(orig_stat.st_ino, stat.st_ino)
-        self.assertEquals(abstraction_mtime, stat.st_mtime)
+        self._assertTimeStampEquals(abstraction_mtime, stat.st_mtime)
 
     def test_parser_newer_uses_cache(self):
         '''test cache is not skipped if parser is newer'''

-- 
Steve Beattie
<[email protected]>
http://NxNW.org/~steve/

Attachment: signature.asc
Description: Digital signature

-- 
AppArmor mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to