# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/phosphorus/runtest.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from chromite.api.gen_sdk.chromiumos.build.api import container_metadata_pb2 as chromiumos_dot_build_dot_api_dot_container__metadata__pb2
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
from chromite.api.gen_sdk.test_platform.phosphorus import common_pb2 as test__platform_dot_phosphorus_dot_common__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&test_platform/phosphorus/runtest.proto\x12\x18test_platform.phosphorus\x1a-chromiumos/build/api/container_metadata.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a%test_platform/phosphorus/common.proto\"\xde\x04\n\x0eRunTestRequest\x12\x30\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .test_platform.phosphorus.Config\x12\x15\n\rdut_hostnames\x18\x02 \x03(\t\x12\x45\n\x08\x61utotest\x18\x03 \x01(\x0b\x32\x31.test_platform.phosphorus.RunTestRequest.AutotestH\x00\x12,\n\x08\x64\x65\x61\x64line\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x46\n\x14\x63ontainer_image_info\x18\x06 \x01(\x0b\x32(.chromiumos.build.api.ContainerImageInfo\x12\x1d\n\x15max_execution_seconds\x18\x07 \x01(\x03\x1a\x8b\x02\n\x08\x41utotest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\ttest_args\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x16\n\x0eis_client_test\x18\x04 \x01(\x08\x12O\n\x07keyvals\x18\x05 \x03(\x0b\x32>.test_platform.phosphorus.RunTestRequest.Autotest.KeyvalsEntry\x12\x11\n\tpeer_duts\x18\x06 \x03(\t\x12\x1c\n\x14image_storage_server\x18\x07 \x01(\t\x1a.\n\x0cKeyvalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x06\n\x04testJ\x04\x08\x04\x10\x05R\x0b\x65nvironment\"\xbd\x01\n\x0fRunTestResponse\x12>\n\x05state\x18\x01 \x01(\x0e\x32/.test_platform.phosphorus.RunTestResponse.State\x12\x13\n\x0bresults_dir\x18\x02 \x01(\t\"U\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\r\n\tSUCCEEDED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\r\n\tTIMED_OUT\x10\x03\x12\x0b\n\x07\x41\x42ORTED\x10\x04\x42\x44ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorusb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'test_platform.phosphorus.runtest_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'ZBgo.chromium.org/chromiumos/infra/proto/go/test_platform/phosphorus'
  _RUNTESTREQUEST_AUTOTEST_KEYVALSENTRY._options = None
  _RUNTESTREQUEST_AUTOTEST_KEYVALSENTRY._serialized_options = b'8\001'
  _globals['_RUNTESTREQUEST']._serialized_start=188
  _globals['_RUNTESTREQUEST']._serialized_end=794
  _globals['_RUNTESTREQUEST_AUTOTEST']._serialized_start=500
  _globals['_RUNTESTREQUEST_AUTOTEST']._serialized_end=767
  _globals['_RUNTESTREQUEST_AUTOTEST_KEYVALSENTRY']._serialized_start=721
  _globals['_RUNTESTREQUEST_AUTOTEST_KEYVALSENTRY']._serialized_end=767
  _globals['_RUNTESTRESPONSE']._serialized_start=797
  _globals['_RUNTESTRESPONSE']._serialized_end=986
  _globals['_RUNTESTRESPONSE_STATE']._serialized_start=901
  _globals['_RUNTESTRESPONSE_STATE']._serialized_end=986
# @@protoc_insertion_point(module_scope)
