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: 49
  // 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;

    // 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;
}
