qubes/tests: fix testrunner dependency on being run in specific directory
This commit is contained in:
		
							parent
							
								
									e5d2b49fd6
								
							
						
					
					
						commit
						a13a41fbaf
					
				| @ -1,6 +1,8 @@ | |||||||
| #!/usr/bin/python -O | #!/usr/bin/python -O | ||||||
| 
 | 
 | ||||||
| import collections | import collections | ||||||
|  | import os | ||||||
|  | import subprocess | ||||||
| import unittest | import unittest | ||||||
| 
 | 
 | ||||||
| import lxml.etree | import lxml.etree | ||||||
| @ -12,6 +14,9 @@ import qubes.events | |||||||
| #: :py:obj:`True` if running in dom0, :py:obj:`False` otherwise | #: :py:obj:`True` if running in dom0, :py:obj:`False` otherwise | ||||||
| in_dom0 = False | in_dom0 = False | ||||||
| 
 | 
 | ||||||
|  | #: :py:obj:`False` if outside of git repo, path to root of the directory otherwise | ||||||
|  | in_git = False | ||||||
|  | 
 | ||||||
| try: | try: | ||||||
|     import libvirt |     import libvirt | ||||||
|     libvirt.openReadOnly(qubes.config.defaults['libvirt_uri']).close() |     libvirt.openReadOnly(qubes.config.defaults['libvirt_uri']).close() | ||||||
| @ -20,6 +25,15 @@ try: | |||||||
| except libvirt.libvirtError: | except libvirt.libvirtError: | ||||||
|     pass |     pass | ||||||
| 
 | 
 | ||||||
|  | try: | ||||||
|  |     in_git = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).strip() | ||||||
|  | except subprocess.CalledProcessError: | ||||||
|  |     # git returned nonzero, we are outside git repo | ||||||
|  |     pass | ||||||
|  | except OSError: | ||||||
|  |     # command not found; let's assume we're outside | ||||||
|  |     pass | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def skipUnlessDom0(test_item): | def skipUnlessDom0(test_item): | ||||||
|     '''Decorator that skips test outside dom0. |     '''Decorator that skips test outside dom0. | ||||||
| @ -31,6 +45,16 @@ def skipUnlessDom0(test_item): | |||||||
|     return unittest.skipUnless(in_dom0, 'outside dom0')(test_item) |     return unittest.skipUnless(in_dom0, 'outside dom0')(test_item) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def skipUnlessGit(test_item): | ||||||
|  |     '''Decorator that skips test outside git repo. | ||||||
|  | 
 | ||||||
|  |     There are very few tests that an be run only in git. One example is | ||||||
|  |     correctness of example code that won't get included in RPM. | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|  |     return unittest.skipUnless(in_git, 'outside git tree')(test_item) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class TestEmitter(qubes.events.Emitter): | class TestEmitter(qubes.events.Emitter): | ||||||
|     '''Dummy event emitter which records events fired on it. |     '''Dummy event emitter which records events fired on it. | ||||||
| 
 | 
 | ||||||
| @ -160,6 +184,15 @@ class QubesTestCase(unittest.TestCase): | |||||||
|                 relaxng = lxml.etree.RelaxNG(relaxng) |                 relaxng = lxml.etree.RelaxNG(relaxng) | ||||||
| 
 | 
 | ||||||
|         elif file is not None and schema is None: |         elif file is not None and schema is None: | ||||||
|  |             if not os.path.isabs(file): | ||||||
|  |                 basedirs = ['/usr/share/doc/qubes/relaxng'] | ||||||
|  |                 if in_git: | ||||||
|  |                     basedirs.insert(0, os.path.join(in_git, 'relaxng')) | ||||||
|  |                 for basedir in basedirs: | ||||||
|  |                     abspath = os.path.join(basedir, file) | ||||||
|  |                     if os.path.exists(abspath): | ||||||
|  |                         file = abspath | ||||||
|  |                         break | ||||||
|             relaxng = lxml.etree.RelaxNG(file=file) |             relaxng = lxml.etree.RelaxNG(file=file) | ||||||
| 
 | 
 | ||||||
|         else: |         else: | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| #!/usr/bin/python2 -O | #!/usr/bin/python2 -O | ||||||
| 
 | 
 | ||||||
|  | import os | ||||||
| import sys | import sys | ||||||
| import unittest | import unittest | ||||||
| 
 | 
 | ||||||
| @ -321,7 +322,9 @@ class TC_30_VMCollection(qubes.tests.QubesTestCase): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class TC_90_Qubes(qubes.tests.QubesTestCase): | class TC_90_Qubes(qubes.tests.QubesTestCase): | ||||||
|  |     @qubes.tests.skipUnlessGit | ||||||
|     def test_900_example_xml_in_doc(self): |     def test_900_example_xml_in_doc(self): | ||||||
|         self.assertXMLIsValid( |         self.assertXMLIsValid( | ||||||
|             lxml.etree.parse(open('../../doc/example.xml', 'rb')), |             lxml.etree.parse(open( | ||||||
|             '../../relaxng/qubes.rng') |                 os.path.join(qubes.tests.in_git, 'doc/example.xml'), 'rb')), | ||||||
|  |             'qubes.rng') | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ test_order = [ | |||||||
|     'qubes.tests.init' |     'qubes.tests.init' | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| sys.path.insert(0, '../../') | sys.path.insert(1, '../../') | ||||||
| 
 | 
 | ||||||
| class ANSIColor(dict): | class ANSIColor(dict): | ||||||
|     def __init__(self): |     def __init__(self): | ||||||
|  | |||||||
| @ -131,7 +131,7 @@ class TC_10_BaseVM(qubes.tests.QubesTestCase): | |||||||
|             'disabledservice': False, |             'disabledservice': False, | ||||||
|         }) |         }) | ||||||
| 
 | 
 | ||||||
|         self.assertXMLIsValid(vm.__xml__(), '../../relaxng/domain.rng') |         self.assertXMLIsValid(vm.__xml__(), 'domain.rng') | ||||||
| 
 | 
 | ||||||
|     def test_001_BaseVM_nxproperty(self): |     def test_001_BaseVM_nxproperty(self): | ||||||
|         xml = lxml.etree.XML(''' |         xml = lxml.etree.XML(''' | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Wojtek Porczyk
						Wojtek Porczyk