// Copyright 2020 The Chromium OS Authors. All rights reserved.
// 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;
}
