mirror of
				https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
				synced 2025-10-31 08:34:04 +00:00 
			
		
		
		
	Cosmetic changes for adding excuse labels (html) and more readable image manifest path.
This commit is contained in:
		
							parent
							
								
									a84720951a
								
							
						
					
					
						commit
						ed31f1129b
					
				
							
								
								
									
										14
									
								
								boottest.py
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								boottest.py
									
									
									
									
									
								
							| @ -24,7 +24,7 @@ class TouchManifest(object): | |||||||
|     Assumes the deployment is arranged in a way the manifest is available |     Assumes the deployment is arranged in a way the manifest is available | ||||||
|     and fresh on: |     and fresh on: | ||||||
| 
 | 
 | ||||||
|     'data/boottest/{distribution}/{series}/manifest' |     '{britney_cwd}/boottest/images/{distribution}/{series}/manifest' | ||||||
| 
 | 
 | ||||||
|     Only binary name matters, version is ignored, so callsites can: |     Only binary name matters, version is ignored, so callsites can: | ||||||
| 
 | 
 | ||||||
| @ -37,7 +37,7 @@ class TouchManifest(object): | |||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|     def __init__(self, distribution, series): |     def __init__(self, distribution, series): | ||||||
|         self.path = 'data/boottest/{}/{}/manifest'.format( |         self.path = 'boottest/images/{}/{}/manifest'.format( | ||||||
|             distribution, series) |             distribution, series) | ||||||
|         self._manifest = self._load() |         self._manifest = self._load() | ||||||
| 
 | 
 | ||||||
| @ -66,6 +66,14 @@ class BootTest(object): | |||||||
| 
 | 
 | ||||||
|     TBD! |     TBD! | ||||||
|     """ |     """ | ||||||
|  |     VALID_STATUSES = ('PASS', 'SKIPPED') | ||||||
|  | 
 | ||||||
|  |     EXCUSE_LABELS = { | ||||||
|  |         "PASS": '<span style="background:#87d96c">Pass</span>', | ||||||
|  |         "SKIPPED": '<span style="background:#e5c545">Skipped</span>', | ||||||
|  |         "FAIL": '<span style="background:#ff6666">Regression</span>', | ||||||
|  |         "RUNNING": '<span style="background:#99ddff">Test in progress</span>', | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     def __init__(self, britney, distribution, series, debug=False): |     def __init__(self, britney, distribution, series, debug=False): | ||||||
|         self.britney = britney |         self.britney = britney | ||||||
| @ -86,7 +94,7 @@ class BootTest(object): | |||||||
|                 return 'PASS' |                 return 'PASS' | ||||||
|             return 'FAIL' |             return 'FAIL' | ||||||
| 
 | 
 | ||||||
|         return 'IN PROGRESS' |         return 'RUNNING' | ||||||
| 
 | 
 | ||||||
|     def update(self, excuse): |     def update(self, excuse): | ||||||
|         """Update given 'excuse' and yields testing status. |         """Update given 'excuse' and yields testing status. | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								britney.py
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								britney.py
									
									
									
									
									
								
							| @ -1897,17 +1897,19 @@ class Britney(object): | |||||||
|                 # Skip already invalid excuses. |                 # Skip already invalid excuses. | ||||||
|                 if not excuse.is_valid: |                 if not excuse.is_valid: | ||||||
|                     continue |                     continue | ||||||
|                 labels = set() |                 statuses = set() | ||||||
|                 # Update valid excuses from the boottest context and if they |                 # Update valid excuses from the boottest context and if they | ||||||
|                 # have failed, block their migration. |                 # have failed, block their migration. | ||||||
|                 for binary_name, label in boottest.update(excuse): |                 for binary_name, status in boottest.update(excuse): | ||||||
|  |                     label = BootTest.EXCUSE_LABELS.get( | ||||||
|  |                         status, 'UNKNOWN STATUS') | ||||||
|                     excuse.addhtml("boottest for %s %s: %s" % |                     excuse.addhtml("boottest for %s %s: %s" % | ||||||
|                                    (binary_name, excuse.ver[1], label)) |                                    (binary_name, excuse.ver[1], label)) | ||||||
|                     labels.add(label) |                     statuses.add(status) | ||||||
|                 # If all boottests passed or were skipped, the excuse is |                 # If all boottests passed or were skipped, the excuse is | ||||||
|                 # clean and promotion can proceed, according to the |                 # clean and promotion can proceed, according to the | ||||||
|                 # boottest criteria. Otherwise block the promotion. |                 # boottest criteria. Otherwise block the promotion. | ||||||
|                 if not labels.issubset(set(['PASS', 'SKIPPED'])): |                 if not statuses.issubset(set(BootTest.VALID_STATUSES)): | ||||||
|                     excuse.addhtml("Not considered") |                     excuse.addhtml("Not considered") | ||||||
|                     excuse.addreason("boottest") |                     excuse.addreason("boottest") | ||||||
|                     excuse.is_valid = False |                     excuse.is_valid = False | ||||||
|  | |||||||
| @ -17,7 +17,10 @@ PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |||||||
| sys.path.insert(0, PROJECT_DIR) | sys.path.insert(0, PROJECT_DIR) | ||||||
| 
 | 
 | ||||||
| from tests import TestBase | from tests import TestBase | ||||||
| from boottest import TouchManifest | from boottest import ( | ||||||
|  |     BootTest, | ||||||
|  |     TouchManifest, | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def create_manifest(manifest_dir, lines): | def create_manifest(manifest_dir, lines): | ||||||
| @ -33,8 +36,8 @@ class TestTouchManifest(unittest.TestCase): | |||||||
|         super(TestTouchManifest, self).setUp() |         super(TestTouchManifest, self).setUp() | ||||||
|         self.path = tempfile.mkdtemp(prefix='boottest') |         self.path = tempfile.mkdtemp(prefix='boottest') | ||||||
|         os.chdir(self.path) |         os.chdir(self.path) | ||||||
|         self.datadir = os.path.join(self.path, 'data/boottest/') |         self.imagesdir = os.path.join(self.path, 'boottest/images') | ||||||
|         os.makedirs(self.datadir) |         os.makedirs(self.imagesdir) | ||||||
|         self.addCleanup(shutil.rmtree, self.path) |         self.addCleanup(shutil.rmtree, self.path) | ||||||
| 
 | 
 | ||||||
|     def test_missing(self): |     def test_missing(self): | ||||||
| @ -45,7 +48,7 @@ class TestTouchManifest(unittest.TestCase): | |||||||
| 
 | 
 | ||||||
|     def test_simple(self): |     def test_simple(self): | ||||||
|         # Existing manifest file allows callsites to properly check presence. |         # Existing manifest file allows callsites to properly check presence. | ||||||
|         manifest_dir = os.path.join(self.datadir, 'ubuntu/vivid') |         manifest_dir = os.path.join(self.imagesdir, 'ubuntu/vivid') | ||||||
|         manifest_lines = [ |         manifest_lines = [ | ||||||
|             'bar 1234', |             'bar 1234', | ||||||
|             'foo:armhf       1~beta1', |             'foo:armhf       1~beta1', | ||||||
| @ -91,7 +94,7 @@ class TestBoottestEnd2End(TestBase): | |||||||
|         """Create a manifest for this britney run context.""" |         """Create a manifest for this britney run context.""" | ||||||
|         path = os.path.join( |         path = os.path.join( | ||||||
|             self.data.path, |             self.data.path, | ||||||
|             'data/boottest/ubuntu/{}'.format(self.data.series)) |             'boottest/images/ubuntu/{}'.format(self.data.series)) | ||||||
|         create_manifest(path, lines) |         create_manifest(path, lines) | ||||||
| 
 | 
 | ||||||
|     def do_test(self, context, expect=None, no_expect=None): |     def do_test(self, context, expect=None, no_expect=None): | ||||||
| @ -121,8 +124,10 @@ class TestBoottestEnd2End(TestBase): | |||||||
|         self.do_test( |         self.do_test( | ||||||
|             context, |             context, | ||||||
|             [r'\bgreen\b.*>1</a> to .*>1.1~beta<', |             [r'\bgreen\b.*>1</a> to .*>1.1~beta<', | ||||||
|              '<li>boottest for green 1.1~beta: IN PROGRESS', |              '<li>boottest for green 1.1~beta: {}'.format( | ||||||
|              '<li>boottest for libgreen1 1.1~beta: SKIPPED', |                  BootTest.EXCUSE_LABELS['RUNNING']), | ||||||
|  |              '<li>boottest for libgreen1 1.1~beta: {}'.format( | ||||||
|  |                  BootTest.EXCUSE_LABELS['SKIPPED']), | ||||||
|              '<li>Not considered']) |              '<li>Not considered']) | ||||||
| 
 | 
 | ||||||
|     def test_pass(self): |     def test_pass(self): | ||||||
| @ -135,7 +140,8 @@ class TestBoottestEnd2End(TestBase): | |||||||
|         self.do_test( |         self.do_test( | ||||||
|             context, |             context, | ||||||
|             [r'\bpyqt5-src\b.*\(- to .*>1.1~beta<', |             [r'\bpyqt5-src\b.*\(- to .*>1.1~beta<', | ||||||
|              '<li>boottest for pyqt5 1.1~beta: PASS', |              '<li>boottest for pyqt5 1.1~beta: {}'.format( | ||||||
|  |                  BootTest.EXCUSE_LABELS['PASS']), | ||||||
|              '<li>Valid candidate']) |              '<li>Valid candidate']) | ||||||
| 
 | 
 | ||||||
|     def test_fail(self): |     def test_fail(self): | ||||||
| @ -148,7 +154,8 @@ class TestBoottestEnd2End(TestBase): | |||||||
|         self.do_test( |         self.do_test( | ||||||
|             context, |             context, | ||||||
|             [r'\bpyqt5-src\b.*\(- to .*>1.1<', |             [r'\bpyqt5-src\b.*\(- to .*>1.1<', | ||||||
|              '<li>boottest for pyqt5 1.1: FAIL', |              '<li>boottest for pyqt5 1.1: {}'.format( | ||||||
|  |                  BootTest.EXCUSE_LABELS['FAIL']), | ||||||
|              '<li>Not considered']) |              '<li>Not considered']) | ||||||
| 
 | 
 | ||||||
|     def test_skipped(self): |     def test_skipped(self): | ||||||
| @ -162,7 +169,8 @@ class TestBoottestEnd2End(TestBase): | |||||||
|         self.do_test( |         self.do_test( | ||||||
|             context, |             context, | ||||||
|             [r'\bapache2-src\b.*\(- to .*>2.4.8-1ubuntu1<', |             [r'\bapache2-src\b.*\(- to .*>2.4.8-1ubuntu1<', | ||||||
|              '<li>boottest for apache2 2.4.8-1ubuntu1: SKIPPED', |              '<li>boottest for apache2 2.4.8-1ubuntu1: {}'.format( | ||||||
|  |                  BootTest.EXCUSE_LABELS['SKIPPED']), | ||||||
|              '<li>Valid candidate']) |              '<li>Valid candidate']) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user