Skip to content
Snippets Groups Projects
Commit 42fb2ee5 authored by Georges Racinet's avatar Georges Racinet
Browse files

Comparison tests: cut off BaseRpcHelper from RpcHelper

This new base class does not carry the specificities of
the Gitaly comparison, but still has feature flags, default args,
and calling primitives. It will be useful to introduce Comparison
tests between HGitaly and RHGitaly with room for growth.
parent bd9e9d77
No related branches found
No related tags found
3 merge requests!151heptapod#743: making 0.36 the new stable,!144RHGitaly: implement CommitService.ListCommitsByOid,!140Bootstrapping RHGitaly
......@@ -97,7 +97,57 @@
)
class RpcHelper:
class BaseRpcHelper:
"""Common helper for all comparisons.
Will handle comparison between Gitaly and (HGitaly or HGitaly) as well
as comparison beween HGitaly and RHGitaly, or whatever comes next.
"""
def __init__(self, comparison, stub_cls, method_name, request_cls,
repository_arg=True,
request_defaults=None,
feature_flags=(),
streaming=False):
self.comparison = comparison
self.stub_cls = stub_cls
self.method_name = method_name
self.request_cls = request_cls
self.streaming = streaming
self.repository_arg = repository_arg
self.request_defaults = request_defaults
self.streaming = streaming
self.feature_flags = list(feature_flags)
self.init_stubs()
def init_stubs(self):
"""To be provided by subclasses."""
raise NotImplementedError # pragma no cover
def grpc_metadata(self):
return feature.as_grpc_metadata(self.feature_flags)
def rpc(self, backend, **kwargs):
if self.repository_arg:
kwargs.setdefault('repository', self.comparison.gitaly_repo)
request = self.request_cls(**kwargs)
meth = getattr(self.stubs[backend], self.method_name)
metadata = self.grpc_metadata()
if self.streaming:
return [resp for resp in meth(request, metadata=metadata)]
return meth(request, metadata=metadata)
def apply_request_defaults(self, kwargs):
defaults = self.request_defaults
if defaults is not None:
for k, v in defaults.items():
kwargs.setdefault(k, v)
class RpcHelper(BaseRpcHelper):
"""Encapsulates a comparison fixture with call and compare helpers.
As Mercurial and Git responses are expected to differ (commit hashes and
......@@ -113,7 +163,5 @@
def __init__(self, comparison, stub_cls, method_name, request_cls,
hg_server='hgitaly',
repository_arg=True,
request_defaults=None,
request_sha_attrs=(),
response_sha_attrs=(),
......@@ -118,7 +166,6 @@
request_sha_attrs=(),
response_sha_attrs=(),
feature_flags=(),
normalizer=None,
error_details_normalizer=None,
chunked_fields_remover=None,
chunks_concatenator=None,
......@@ -121,13 +168,28 @@
normalizer=None,
error_details_normalizer=None,
chunked_fields_remover=None,
chunks_concatenator=None,
streaming=False):
self.comparison = comparison
if hg_server == 'rhgitaly':
**kwargs,
):
self.hg_server = hg_server
super(RpcHelper, self).__init__(
comparison, stub_cls, method_name, request_cls,
**kwargs
)
self.request_sha_attrs = request_sha_attrs
self.response_sha_attrs = response_sha_attrs
self.normalizer = normalizer
self.error_details_normalizer = error_details_normalizer
self.chunked_fields_remover = chunked_fields_remover
self.chunks_concatenator = chunks_concatenator
def init_stubs(self):
comparison, stub_cls = self.comparison, self.stub_cls
if self.hg_server == 'rhgitaly':
hg_channel = comparison.rhgitaly_channel
else:
hg_channel = comparison.hgitaly_channel
self.stubs = dict(git=stub_cls(comparison.gitaly_channel),
hg=stub_cls(hg_channel))
......@@ -128,39 +190,9 @@
hg_channel = comparison.rhgitaly_channel
else:
hg_channel = comparison.hgitaly_channel
self.stubs = dict(git=stub_cls(comparison.gitaly_channel),
hg=stub_cls(hg_channel))
self.stub_cls = stub_cls
self.method_name = method_name
self.request_cls = request_cls
self.streaming = streaming
self.repository_arg = repository_arg
self.request_defaults = request_defaults
self.request_sha_attrs = request_sha_attrs
self.response_sha_attrs = response_sha_attrs
self.streaming = streaming
self.feature_flags = list(feature_flags)
self.normalizer = normalizer
self.error_details_normalizer = error_details_normalizer
self.chunked_fields_remover = chunked_fields_remover
self.chunks_concatenator = chunks_concatenator
def grpc_metadata(self):
return feature.as_grpc_metadata(self.feature_flags)
def rpc(self, vcs, **kwargs):
if self.repository_arg:
kwargs.setdefault('repository', self.comparison.gitaly_repo)
request = self.request_cls(**kwargs)
meth = getattr(self.stubs[vcs], self.method_name)
metadata = self.grpc_metadata()
if self.streaming:
return [resp for resp in meth(request, metadata=metadata)]
return meth(request, metadata=metadata)
def hg2git(self, hg_sha):
"""Convert a Mercurial hex SHA to its counterpart SHA in Git repo.
......@@ -240,12 +272,6 @@
else:
setattr(obj, obj_attr, self.hg2git(value))
def apply_request_defaults(self, kwargs):
defaults = self.request_defaults
if defaults is not None:
for k, v in defaults.items():
kwargs.setdefault(k, v)
def call_backends(self, **hg_kwargs):
"""Call Gitaly and HGitaly with uniform request kwargs.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment