syntax = "proto3";

option cc_enable_arenas = true;

package vm_tools.container;

import "common.proto";
import "container_host.proto";
import "tremplin.proto";
import "vm_crash.proto";

// A proto representation of a grpc::Status

// A special message that contains all the possible inputs to the
// ContainerListener and TremplinListener services plus some controls over the
// call results.
//
// This is used for fuzz testing; we get some fuzzed examples of this message
// and then call the correct rpc handler based on which of the oneof is set.
message ContainerListenerFuzzerSingleAction {
  // Next id: 55
  // Skip [100-109]
  oneof input {
    // Calls to the ContainerListener service.
    ContainerStartupInfo container_startup_info = 1;
    ContainerShutdownInfo container_shutdown_info = 2;
    UpdateApplicationListRequest update_application_list_request = 3;
    OpenUrlRequest open_url_request = 4;
    InstallLinuxPackageProgressInfo install_linux_package_progress_info = 5;
    UninstallPackageProgressInfo uninstall_package_progress_info = 6;
    OpenTerminalRequest open_terminal_request = 7;
    UpdateMimeTypesRequest update_mime_types_request = 8;
    PendingAppListUpdateCount pending_app_list_update_count = 27;
    ApplyAnsiblePlaybookProgressInfo apply_ansible_playbook_progress_info = 28;
    FileWatchTriggeredInfo file_watch_triggered_info = 45;
    LowDiskSpaceTriggeredInfo low_disk_space_triggered_info = 49;
    ForwardSecurityKeyMessageRequest forward_security_key_message_request = 50;
    SelectFileRequest select_file_request = 51;
    GetDiskInfoRequest get_disk_info_request = 52;
    RequestSpaceRequest request_space_request = 53;
    ReleaseSpaceRequest release_space_request = 54;

    // Calls to the CrashListener service.
    EmptyMessage metrics_consent_request = 33;
    vm_tools.cicerone.CrashReport send_crash_report_request = 42;
    vm_tools.cicerone.FailureReport send_failure_report_request = 46;

    // Calls to the TremplinListener service.
    vm_tools.tremplin.TremplinStartupInfo tremplin_startup_info = 100;
    vm_tools.tremplin.ContainerCreationProgress container_creation_progress =
        101;
    vm_tools.tremplin.ContainerDeletionProgress container_deletion_progress =
        102;
    vm_tools.tremplin.ContainerStartProgress container_start_progress = 103;
    vm_tools.tremplin.ContainerExportProgress container_export_progress = 104;
    vm_tools.tremplin.ContainerImportProgress container_import_progress = 105;
    vm_tools.tremplin.ContainerShutdownInfo tremplin_container_shutdown_info =
        106;
    vm_tools.tremplin.UpgradeContainerProgress upgrade_container_progress = 107;
    vm_tools.tremplin.ListeningPortInfo update_listening_ports = 108;
    vm_tools.tremplin.StartLxdProgress start_lxd_progress = 109;
  }

  // Claim all gRPC messages come from this address (overrides
  // grpc::ServerContext::peer()).
  string peer_address = 9;

  // If true, return a non-null response from dbus CallMethodAndBlock.
  bool return_dbus_response = 10;

  // Controls the TremplinTestStub. These represent the status code and response
  // protos for all the various Tremplin server calls.
  int32 tremplin_create_container_status = 11;
  vm_tools.tremplin.CreateContainerResponse tremplin_create_container_response =
      12;
  int32 tremplin_start_container_status = 13;
  vm_tools.tremplin.StartContainerResponse tremplin_start_container_response =
      14;
  int32 tremplin_get_container_username_status = 15;
  vm_tools.tremplin.GetContainerUsernameResponse
      tremplin_get_container_username_response = 16;
  int32 tremplin_set_up_user_status = 17;
  vm_tools.tremplin.SetUpUserResponse tremplin_set_up_user_response = 18;
  int32 tremplin_get_container_info_status = 19;
  vm_tools.tremplin.GetContainerInfoResponse
      tremplin_get_container_info_response = 20;
  int32 tremplin_set_timezone_status = 21;
  vm_tools.tremplin.SetTimezoneResponse tremplin_set_timezone_response = 22;
  int32 tremplin_export_container_status = 23;
  vm_tools.tremplin.ExportContainerResponse tremplin_export_container_response =
      24;
  int32 tremplin_import_container_status = 25;
  vm_tools.tremplin.ImportContainerResponse tremplin_import_container_response =
      26;
  int32 tremplin_upgrade_container_status = 29;
  vm_tools.tremplin.UpgradeContainerResponse
      tremplin_upgrade_container_response = 30;
  int32 tremplin_cancel_upgrade_container_status = 31;
  vm_tools.tremplin.CancelUpgradeContainerResponse
      tremplin_cancel_upgrade_container_response = 32;
  int32 tremplin_delete_container_status = 34;
  vm_tools.tremplin.DeleteContainerResponse tremplin_delete_container_response =
      35;
  int32 tremplin_cancel_export_container_status = 36;
  vm_tools.tremplin.CancelExportContainerResponse
      tremplin_cancel_export_container_response = 37;
  int32 tremplin_cancel_import_container_status = 38;
  vm_tools.tremplin.CancelImportContainerResponse
      tremplin_cancel_import_container_response = 39;
  int32 tremplin_host_network_changed_status = 40;
  vm_tools.tremplin.HostNetworkChangedResponse
      tremplin_host_network_changed_response = 41;
  int32 tremplin_start_lxd_status = 43;
  vm_tools.tremplin.StartLxdResponse tremplin_start_lxd_response = 44;
  int32 tremplin_get_debug_info_status = 47;
  vm_tools.tremplin.GetDebugInfoResponse tremplin_get_debug_info_response = 48;
}

// A list of fuzzer actions. This is the actual input to the fuzzer.
message ContainerListenerFuzzerInput {
  repeated ContainerListenerFuzzerSingleAction action = 1;
}
