# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: VtsWebStatusMessage.proto

from google.protobuf.internal import enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)




DESCRIPTOR = _descriptor.FileDescriptor(
  name='VtsWebStatusMessage.proto',
  package='android.vts',
  serialized_pb='\n\x19VtsWebStatusMessage.proto\x12\x0b\x61ndroid.vts\"\x92\x01\n\x11TestStatusMessage\x12\x12\n\ntest_suite\x18\x01 \x01(\x0c\x12\x0c\n\x04test\x18\x02 \x01(\x0c\x12\x18\n\x10status_timestamp\x18\x03 \x01(\x03\x12\'\n\x06status\x18\x04 \x01(\x0e\x32\x17.android.vts.TestStatus\x12\x18\n\x10\x66\x61iled_testcases\x18\x05 \x03(\x0c*:\n\nTestStatus\x12\x10\n\x0cTEST_UNKNOWN\x10\x00\x12\x0b\n\x07TEST_OK\x10\x01\x12\r\n\tTEST_FAIL\x10\x02\x42,\n\x15\x63om.android.vts.protoB\x13VtsWebStatusMessage')

_TESTSTATUS = _descriptor.EnumDescriptor(
  name='TestStatus',
  full_name='android.vts.TestStatus',
  filename=None,
  file=DESCRIPTOR,
  values=[
    _descriptor.EnumValueDescriptor(
      name='TEST_UNKNOWN', index=0, number=0,
      options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='TEST_OK', index=1, number=1,
      options=None,
      type=None),
    _descriptor.EnumValueDescriptor(
      name='TEST_FAIL', index=2, number=2,
      options=None,
      type=None),
  ],
  containing_type=None,
  options=None,
  serialized_start=191,
  serialized_end=249,
)

TestStatus = enum_type_wrapper.EnumTypeWrapper(_TESTSTATUS)
TEST_UNKNOWN = 0
TEST_OK = 1
TEST_FAIL = 2



_TESTSTATUSMESSAGE = _descriptor.Descriptor(
  name='TestStatusMessage',
  full_name='android.vts.TestStatusMessage',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='test_suite', full_name='android.vts.TestStatusMessage.test_suite', index=0,
      number=1, type=12, cpp_type=9, label=1,
      has_default_value=False, default_value="",
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='test', full_name='android.vts.TestStatusMessage.test', index=1,
      number=2, type=12, cpp_type=9, label=1,
      has_default_value=False, default_value="",
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='status_timestamp', full_name='android.vts.TestStatusMessage.status_timestamp', index=2,
      number=3, type=3, cpp_type=2, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='status', full_name='android.vts.TestStatusMessage.status', index=3,
      number=4, type=14, cpp_type=8, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
    _descriptor.FieldDescriptor(
      name='failed_testcases', full_name='android.vts.TestStatusMessage.failed_testcases', index=4,
      number=5, type=12, cpp_type=9, label=3,
      has_default_value=False, default_value=[],
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  extension_ranges=[],
  serialized_start=43,
  serialized_end=189,
)

_TESTSTATUSMESSAGE.fields_by_name['status'].enum_type = _TESTSTATUS
DESCRIPTOR.message_types_by_name['TestStatusMessage'] = _TESTSTATUSMESSAGE

class TestStatusMessage(_message.Message):
  __metaclass__ = _reflection.GeneratedProtocolMessageType
  DESCRIPTOR = _TESTSTATUSMESSAGE

  # @@protoc_insertion_point(class_scope:android.vts.TestStatusMessage)


DESCRIPTOR.has_options = True
DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\n\025com.android.vts.protoB\023VtsWebStatusMessage')
# @@protoc_insertion_point(module_scope)
