# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: test_platform/side_effects/config.proto

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
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 symbol_database as _symbol_database
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='test_platform/side_effects/config.proto',
  package='test_platform.side_effects',
  syntax='proto3',
  serialized_options=_b('ZDgo.chromium.org/chromiumos/infra/proto/go/test_platform/side_effects'),
  serialized_pb=_b('\n\'test_platform/side_effects/config.proto\x12\x1atest_platform.side_effects\"\xbd\x01\n\tTKOConfig\x12\"\n\x0cproxy_socket\x18\x01 \x01(\tR\x0cproxy_socket\x12\x1e\n\nmysql_user\x18\x02 \x01(\tR\nmysql_user\x12\x30\n\x13mysql_password_file\x18\x03 \x01(\tR\x13mysql_password_file\x12:\n\x18\x65ncrypted_mysql_password\x18\x04 \x01(\tR\x18\x65ncrypted_mysql_password\"Q\n\x13GoogleStorageConfig\x12\x0e\n\x06\x62ucket\x18\x01 \x01(\t\x12*\n\x10\x63redentials_file\x18\x02 \x01(\tR\x10\x63redentials_file\"#\n\x10\x43hromePerfConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\x1c\n\tCTSConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\"\x99\x02\n\x06\x43onfig\x12\x32\n\x03tko\x18\x01 \x01(\x0b\x32%.test_platform.side_effects.TKOConfig\x12W\n\x0egoogle_storage\x18\x02 \x01(\x0b\x32/.test_platform.side_effects.GoogleStorageConfigR\x0egoogle_storage\x12N\n\x0b\x63hrome_perf\x18\x03 \x01(\x0b\x32,.test_platform.side_effects.ChromePerfConfigR\x0b\x63hrome_perf\x12\x32\n\x03\x63ts\x18\x04 \x01(\x0b\x32%.test_platform.side_effects.CTSConfigBFZDgo.chromium.org/chromiumos/infra/proto/go/test_platform/side_effectsb\x06proto3')
)




_TKOCONFIG = _descriptor.Descriptor(
  name='TKOConfig',
  full_name='test_platform.side_effects.TKOConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='proxy_socket', full_name='test_platform.side_effects.TKOConfig.proxy_socket', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='proxy_socket', file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='mysql_user', full_name='test_platform.side_effects.TKOConfig.mysql_user', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='mysql_user', file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='mysql_password_file', full_name='test_platform.side_effects.TKOConfig.mysql_password_file', index=2,
      number=3, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='mysql_password_file', file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='encrypted_mysql_password', full_name='test_platform.side_effects.TKOConfig.encrypted_mysql_password', index=3,
      number=4, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='encrypted_mysql_password', file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=72,
  serialized_end=261,
)


_GOOGLESTORAGECONFIG = _descriptor.Descriptor(
  name='GoogleStorageConfig',
  full_name='test_platform.side_effects.GoogleStorageConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='bucket', full_name='test_platform.side_effects.GoogleStorageConfig.bucket', index=0,
      number=1, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='credentials_file', full_name='test_platform.side_effects.GoogleStorageConfig.credentials_file', index=1,
      number=2, type=9, cpp_type=9, label=1,
      has_default_value=False, default_value=_b("").decode('utf-8'),
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='credentials_file', file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=263,
  serialized_end=344,
)


_CHROMEPERFCONFIG = _descriptor.Descriptor(
  name='ChromePerfConfig',
  full_name='test_platform.side_effects.ChromePerfConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='enabled', full_name='test_platform.side_effects.ChromePerfConfig.enabled', index=0,
      number=1, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=346,
  serialized_end=381,
)


_CTSCONFIG = _descriptor.Descriptor(
  name='CTSConfig',
  full_name='test_platform.side_effects.CTSConfig',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='enabled', full_name='test_platform.side_effects.CTSConfig.enabled', index=0,
      number=1, type=8, cpp_type=7, label=1,
      has_default_value=False, default_value=False,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=383,
  serialized_end=411,
)


_CONFIG = _descriptor.Descriptor(
  name='Config',
  full_name='test_platform.side_effects.Config',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='tko', full_name='test_platform.side_effects.Config.tko', index=0,
      number=1, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='google_storage', full_name='test_platform.side_effects.Config.google_storage', index=1,
      number=2, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='google_storage', file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='chrome_perf', full_name='test_platform.side_effects.Config.chrome_perf', index=2,
      number=3, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, json_name='chrome_perf', file=DESCRIPTOR),
    _descriptor.FieldDescriptor(
      name='cts', full_name='test_platform.side_effects.Config.cts', index=3,
      number=4, type=11, cpp_type=10, label=1,
      has_default_value=False, default_value=None,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      serialized_options=None, file=DESCRIPTOR),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  serialized_options=None,
  is_extendable=False,
  syntax='proto3',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=414,
  serialized_end=695,
)

_CONFIG.fields_by_name['tko'].message_type = _TKOCONFIG
_CONFIG.fields_by_name['google_storage'].message_type = _GOOGLESTORAGECONFIG
_CONFIG.fields_by_name['chrome_perf'].message_type = _CHROMEPERFCONFIG
_CONFIG.fields_by_name['cts'].message_type = _CTSCONFIG
DESCRIPTOR.message_types_by_name['TKOConfig'] = _TKOCONFIG
DESCRIPTOR.message_types_by_name['GoogleStorageConfig'] = _GOOGLESTORAGECONFIG
DESCRIPTOR.message_types_by_name['ChromePerfConfig'] = _CHROMEPERFCONFIG
DESCRIPTOR.message_types_by_name['CTSConfig'] = _CTSCONFIG
DESCRIPTOR.message_types_by_name['Config'] = _CONFIG
_sym_db.RegisterFileDescriptor(DESCRIPTOR)

TKOConfig = _reflection.GeneratedProtocolMessageType('TKOConfig', (_message.Message,), dict(
  DESCRIPTOR = _TKOCONFIG,
  __module__ = 'test_platform.side_effects.config_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.side_effects.TKOConfig)
  ))
_sym_db.RegisterMessage(TKOConfig)

GoogleStorageConfig = _reflection.GeneratedProtocolMessageType('GoogleStorageConfig', (_message.Message,), dict(
  DESCRIPTOR = _GOOGLESTORAGECONFIG,
  __module__ = 'test_platform.side_effects.config_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.side_effects.GoogleStorageConfig)
  ))
_sym_db.RegisterMessage(GoogleStorageConfig)

ChromePerfConfig = _reflection.GeneratedProtocolMessageType('ChromePerfConfig', (_message.Message,), dict(
  DESCRIPTOR = _CHROMEPERFCONFIG,
  __module__ = 'test_platform.side_effects.config_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.side_effects.ChromePerfConfig)
  ))
_sym_db.RegisterMessage(ChromePerfConfig)

CTSConfig = _reflection.GeneratedProtocolMessageType('CTSConfig', (_message.Message,), dict(
  DESCRIPTOR = _CTSCONFIG,
  __module__ = 'test_platform.side_effects.config_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.side_effects.CTSConfig)
  ))
_sym_db.RegisterMessage(CTSConfig)

Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), dict(
  DESCRIPTOR = _CONFIG,
  __module__ = 'test_platform.side_effects.config_pb2'
  # @@protoc_insertion_point(class_scope:test_platform.side_effects.Config)
  ))
_sym_db.RegisterMessage(Config)


DESCRIPTOR._options = None
# @@protoc_insertion_point(module_scope)
