blob: dc2f72070e44266c345df8869b0307a8f356547a [file] [log] [blame]
# Copyright 2020 The LUCI Authors. All rights reserved.
# Use of this source code is governed under the Apache License, Version 2.0
# that can be found in the LICENSE file.
from google.protobuf import message
from recipe_engine import recipe_test_api
class ProtoTestApi(recipe_test_api.RecipeTestApi):
@recipe_test_api.placeholder_step_data
@staticmethod
def output(proto_msg,
retcode: int | None = None,
name: str | None = None):
"""Supplies placeholder data for a proto.output.
Args:
* proto_msg - Instance of a proto message that should be returned for this
placeholder.
* retcode - The returncode of the step.
* name - The name of the placeholder you're mocking.
"""
if not isinstance(proto_msg, message.Message): # pragma: no cover
raise ValueError("expected proto Message, got: %r" % (type(proto_msg),))
return proto_msg, retcode, name
def output_stream(self, proto_msg, stream='stdout', retcode=None, name=None):
"""Supplies placeholder data for a step using proto.output for stdout
or stderr.
Args:
* stream ('stdout' or 'stderr') - Which output stream this data is for.
The other args are passed directly through to `output` in this test API.
"""
assert stream in ('stdout', 'stderr')
ret = recipe_test_api.StepTestData()
step_data = self.output(proto_msg, retcode=retcode, name=name)
setattr(ret, stream, step_data.unwrap_placeholder())
return ret
@recipe_test_api.placeholder_step_data('output')
@staticmethod
def backing_file_missing(retcode=None, name=None):
"""Simulates a missing backing file.
Only valid if the corresponding placeholder has `leak_to` specified.
"""
# Passing None as the data of a placeholder causes the placeholder to
# behave during testing as if its backing file was missing.
return None, retcode, name
@recipe_test_api.placeholder_step_data('output')
@staticmethod
def invalid_contents(retcode=None, name=None):
"""Simulates a file with invalid contents."""
# Passing None as the data of a placeholder causes the placeholder to
# behave during testing as if its backing file was missing.
return 'i are not protoh', retcode, name