// Copyright 2020 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package testplans;

import "test_platform/taskstate.proto";

option go_package = "go.chromium.org/chromiumos/infra/proto/go/testplans";

// Defines a config for tests to be retried automatically.
message SuiteRetryCfg {
  // Tag defines which suite this config set should apply.
  string test_suite = 1;

  // Scenario defines the test failure conditions that trigger retry.
  message Scenario {
    // Name of the test.
    string test_name = 1;

    // Failure reason/summary. This field is a substring of the actual error
    // message. Ex: 'SSH connection failed' or 'DUT rebooted'.
    string reason = 2;

    // Verdict of the test run.
    test_platform.TaskState.Verdict verdict = 3;

    // Should the DUT/VM restart before retry?
    bool requires_restart = 4;
  }

  // Scenarios to retry for each build_target.
  repeated Scenario suite_scenarios = 3;

  message BuilderScenario {
    // Tag defines which builders this config set should apply.
    repeated string builders = 1;

    repeated Scenario scenarios = 2;
  }
  repeated BuilderScenario builder_scenarios = 4;

  // Reason scenario defines test failure conditions irrespective of which test.
  message ReasonScenario {
    // Failures reason.
    string reason = 1;

    // Verdict of the test run.
    test_platform.TaskState.Verdict verdict = 2;

    // Should the DUT/VM restart before retry?
    bool requires_restart = 3;
  }

  // ReasonScenarios to retry for the suite.
  repeated ReasonScenario reason_scenarios = 5;
}
