mirror of
				https://github.com/ansible-collections/community.general.git
				synced 2024-09-14 20:13:21 +02:00 
			
		
		
		
	* Use correct pip version in ansible-test. * Add git fallback for validate-modules. * Run sanity tests in a docker container. * Use correct python version for sanity tests. * Pin docker completion images and add default. * Split pylint execution into multiple contexts. * Only test .py files in use-argspec-type-path test. * Accept identical python interpeter name or binary. * Switch cloud tests to default container. * Remove unused extras from pip install. * Filter out empty pip commands. * Don't force running of pip list. * Support delegation for windows and network tests. * Fix ansible-test python version usage. * Fix ansible-test python version skipping. * Use absolute path for log in ansible-test. * Run vyos_command test on python 3. * Fix windows/network instance persistence. * Add `test/cache` dir to classification. * Enable more python versions for network tests. * Fix cs_router test.
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Test metadata for passing data to delegated tests."""
 | |
| from __future__ import absolute_import, print_function
 | |
| 
 | |
| import json
 | |
| 
 | |
| from lib.util import (
 | |
|     display,
 | |
|     is_shippable,
 | |
| )
 | |
| 
 | |
| from lib.diff import (
 | |
|     parse_diff,
 | |
|     FileDiff,
 | |
| )
 | |
| 
 | |
| 
 | |
| class Metadata(object):
 | |
|     """Metadata object for passing data to delegated tests."""
 | |
|     def __init__(self):
 | |
|         """Initialize metadata."""
 | |
|         self.changes = {}  # type: dict [str, tuple[tuple[int, int]]
 | |
|         self.cloud_config = None  # type: dict [str, str]
 | |
|         self.instance_config = None  # type: list[dict[str, str]]
 | |
| 
 | |
|         if is_shippable():
 | |
|             self.ci_provider = 'shippable'
 | |
|         else:
 | |
|             self.ci_provider = ''
 | |
| 
 | |
|     def populate_changes(self, diff):
 | |
|         """
 | |
|         :type diff: list[str] | None
 | |
|         """
 | |
|         patches = parse_diff(diff)
 | |
|         patches = sorted(patches, key=lambda k: k.new.path)  # type: list [FileDiff]
 | |
| 
 | |
|         self.changes = dict((patch.new.path, tuple(patch.new.ranges)) for patch in patches)
 | |
| 
 | |
|         renames = [patch.old.path for patch in patches if patch.old.path != patch.new.path and patch.old.exists and patch.new.exists]
 | |
|         deletes = [patch.old.path for patch in patches if not patch.new.exists]
 | |
| 
 | |
|         # make sure old paths which were renamed or deleted are registered in changes
 | |
|         for path in renames + deletes:
 | |
|             if path in self.changes:
 | |
|                 # old path was replaced with another file
 | |
|                 continue
 | |
| 
 | |
|             # failed tests involving deleted files should be using line 0 since there is no content remaining
 | |
|             self.changes[path] = ((0, 0),)
 | |
| 
 | |
|     def to_dict(self):
 | |
|         """
 | |
|         :rtype: dict[str, any]
 | |
|         """
 | |
|         return dict(
 | |
|             changes=self.changes,
 | |
|             cloud_config=self.cloud_config,
 | |
|             instance_config=self.instance_config,
 | |
|             ci_provider=self.ci_provider,
 | |
|         )
 | |
| 
 | |
|     def to_file(self, path):
 | |
|         """
 | |
|         :type path: path
 | |
|         """
 | |
|         data = self.to_dict()
 | |
| 
 | |
|         display.info('>>> Metadata: %s\n%s' % (path, data), verbosity=3)
 | |
| 
 | |
|         with open(path, 'w') as data_fd:
 | |
|             json.dump(data, data_fd, sort_keys=True, indent=4)
 | |
| 
 | |
|     @staticmethod
 | |
|     def from_file(path):
 | |
|         """
 | |
|         :type path: str
 | |
|         :rtype: Metadata
 | |
|         """
 | |
|         with open(path, 'r') as data_fd:
 | |
|             data = json.load(data_fd)
 | |
| 
 | |
|         return Metadata.from_dict(data)
 | |
| 
 | |
|     @staticmethod
 | |
|     def from_dict(data):
 | |
|         """
 | |
|         :type data: dict[str, any]
 | |
|         :rtype: Metadata
 | |
|         """
 | |
|         metadata = Metadata()
 | |
|         metadata.changes = data['changes']
 | |
|         metadata.cloud_config = data['cloud_config']
 | |
|         metadata.instance_config = data['instance_config']
 | |
|         metadata.ci_provider = data['ci_provider']
 | |
| 
 | |
|         return metadata
 |