mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-24 13:04:00 -07:00
Add test verification to ansible-test. (#22636)
* Add unified git diff parser. * Add metadata and diff handling. * Add test confidence/verification to bot output.
This commit is contained in:
parent
5e9a2b8528
commit
869449e288
14 changed files with 623 additions and 10 deletions
82
test/runner/lib/metadata.py
Normal file
82
test/runner/lib/metadata.py
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
"""Test metadata for passing data to delegated tests."""
|
||||
from __future__ import absolute_import, print_function
|
||||
|
||||
import json
|
||||
|
||||
from lib.util import (
|
||||
display,
|
||||
)
|
||||
|
||||
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]]
|
||||
|
||||
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,
|
||||
)
|
||||
|
||||
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']
|
||||
|
||||
return metadata
|
||||
Loading…
Add table
Add a link
Reference in a new issue