// Copyright 2026 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated file. DO NOT EDIT.

// Package testing provides access to the Cloud Testing API.
//
// For product documentation, see: https://firebase.google.com/docs/test-lab/
//
// # Library status
//
// These client libraries are officially supported by Google. However, this
// library is considered complete and is in maintenance mode. This means
// that we will address critical bugs and security issues but will not add
// any new features.
//
// When possible, we recommend using our newer
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
// that are still actively being worked and iterated on.
//
// # Creating a client
//
// Usage example:
//
//	import "google.golang.org/api/testing/v1"
//	...
//	ctx := context.Background()
//	testingService, err := testing.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// By default, all available scopes (see "Constants") are used to authenticate.
// To restrict scopes, use [google.golang.org/api/option.WithScopes]:
//
//	testingService, err := testing.NewService(ctx, option.WithScopes(testing.CloudPlatformReadOnlyScope))
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	testingService, err := testing.NewService(ctx, option.WithAPIKey("AIza..."))
//
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
// flow, use [google.golang.org/api/option.WithTokenSource]:
//
//	config := &oauth2.Config{...}
//	// ...
//	token, err := config.Exchange(ctx, ...)
//	testingService, err := testing.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package testing // import "google.golang.org/api/testing/v1"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"log/slog"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	"github.com/googleapis/gax-go/v2/internallog"
	googleapi "google.golang.org/api/googleapi"
	internal "google.golang.org/api/internal"
	gensupport "google.golang.org/api/internal/gensupport"
	option "google.golang.org/api/option"
	internaloption "google.golang.org/api/option/internaloption"
	htransport "google.golang.org/api/transport/http"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = gensupport.MarshalJSON
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace
var _ = context.Canceled
var _ = internaloption.WithDefaultEndpoint
var _ = internal.Version
var _ = internallog.New

const apiId = "testing:v1"
const apiName = "testing"
const apiVersion = "v1"
const basePath = "https://testing.googleapis.com/"
const basePathTemplate = "https://testing.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://testing.mtls.googleapis.com/"

// OAuth2 scopes used by this API.
const (
	// See, edit, configure, and delete your Google Cloud data and see the email
	// address for your Google Account.
	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"

	// View your data across Google Cloud services and see the email address of
	// your Google Account
	CloudPlatformReadOnlyScope = "https://www.googleapis.com/auth/cloud-platform.read-only"
)

// NewService creates a new APIService.
func NewService(ctx context.Context, opts ...option.ClientOption) (*APIService, error) {
	scopesOption := internaloption.WithDefaultScopes(
		"https://www.googleapis.com/auth/cloud-platform",
		"https://www.googleapis.com/auth/cloud-platform.read-only",
	)
	// NOTE: prepend, so we don't override user-specified scopes.
	opts = append([]option.ClientOption{scopesOption}, opts...)
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s := &APIService{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.ApplicationDetailService = NewApplicationDetailServiceService(s)
	s.Projects = NewProjectsService(s)
	s.TestEnvironmentCatalog = NewTestEnvironmentCatalogService(s)
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

// New creates a new APIService. It uses the provided http.Client for requests.
//
// Deprecated: please use NewService instead.
// To provide a custom HTTP client, use option.WithHTTPClient.
// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.
func New(client *http.Client) (*APIService, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	return NewService(context.TODO(), option.WithHTTPClient(client))
}

type APIService struct {
	client    *http.Client
	logger    *slog.Logger
	BasePath  string // API endpoint base URL
	UserAgent string // optional additional User-Agent fragment

	ApplicationDetailService *ApplicationDetailServiceService

	Projects *ProjectsService

	TestEnvironmentCatalog *TestEnvironmentCatalogService
}

func (s *APIService) userAgent() string {
	if s.UserAgent == "" {
		return googleapi.UserAgent
	}
	return googleapi.UserAgent + " " + s.UserAgent
}

func NewApplicationDetailServiceService(s *APIService) *ApplicationDetailServiceService {
	rs := &ApplicationDetailServiceService{s: s}
	return rs
}

type ApplicationDetailServiceService struct {
	s *APIService
}

func NewProjectsService(s *APIService) *ProjectsService {
	rs := &ProjectsService{s: s}
	rs.DeviceSessions = NewProjectsDeviceSessionsService(s)
	rs.TestMatrices = NewProjectsTestMatricesService(s)
	return rs
}

type ProjectsService struct {
	s *APIService

	DeviceSessions *ProjectsDeviceSessionsService

	TestMatrices *ProjectsTestMatricesService
}

func NewProjectsDeviceSessionsService(s *APIService) *ProjectsDeviceSessionsService {
	rs := &ProjectsDeviceSessionsService{s: s}
	return rs
}

type ProjectsDeviceSessionsService struct {
	s *APIService
}

func NewProjectsTestMatricesService(s *APIService) *ProjectsTestMatricesService {
	rs := &ProjectsTestMatricesService{s: s}
	return rs
}

type ProjectsTestMatricesService struct {
	s *APIService
}

func NewTestEnvironmentCatalogService(s *APIService) *TestEnvironmentCatalogService {
	rs := &TestEnvironmentCatalogService{s: s}
	return rs
}

type TestEnvironmentCatalogService struct {
	s *APIService
}

// Account: Identifies an account and how to log into it.
type Account struct {
	// GoogleAuto: An automatic google login account.
	GoogleAuto *GoogleAuto `json:"googleAuto,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GoogleAuto") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GoogleAuto") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Account) MarshalJSON() ([]byte, error) {
	type NoMethod Account
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidDevice: A single Android device.
type AndroidDevice struct {
	// AndroidModelId: Required. The id of the Android device to be used. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	AndroidModelId string `json:"androidModelId,omitempty"`
	// AndroidVersionId: Required. The id of the Android OS version to be used. Use
	// the TestEnvironmentDiscoveryService to get supported options.
	AndroidVersionId string `json:"androidVersionId,omitempty"`
	// Locale: Required. The locale the test device used for testing. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	Locale string `json:"locale,omitempty"`
	// Orientation: Required. How the device is oriented during the test. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	Orientation string `json:"orientation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidModelId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidModelId") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidDevice) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidDevice
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidDeviceCatalog: The currently supported Android devices.
type AndroidDeviceCatalog struct {
	// Models: The set of supported Android device models.
	Models []*AndroidModel `json:"models,omitempty"`
	// RuntimeConfiguration: The set of supported runtime configurations.
	RuntimeConfiguration *AndroidRuntimeConfiguration `json:"runtimeConfiguration,omitempty"`
	// Versions: The set of supported Android OS versions.
	Versions []*AndroidVersion `json:"versions,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Models") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Models") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidDeviceCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidDeviceCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidDeviceList: A list of Android device configurations in which the test
// is to be executed.
type AndroidDeviceList struct {
	// AndroidDevices: Required. A list of Android devices.
	AndroidDevices []*AndroidDevice `json:"androidDevices,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidDevices") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidDevices") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidDeviceList) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidDeviceList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidInstrumentationTest: A test of an Android application that can
// control an Android component independently of its normal lifecycle. Android
// instrumentation tests run an application APK and test APK inside the same
// process on a virtual or physical AndroidDevice. They also specify a test
// runner class, such as com.google.GoogleTestRunner, which can vary on the
// specific instrumentation framework chosen. See for more information on types
// of Android tests.
type AndroidInstrumentationTest struct {
	// AppApk: The APK for the application under test.
	AppApk *FileReference `json:"appApk,omitempty"`
	// AppBundle: A multi-apk app bundle for the application under test.
	AppBundle *AppBundle `json:"appBundle,omitempty"`
	// AppPackageId: The java package for the application under test. The default
	// value is determined by examining the application's manifest.
	AppPackageId string `json:"appPackageId,omitempty"`
	// OrchestratorOption: The option of whether running each test within its own
	// invocation of instrumentation with Android Test Orchestrator or not. **
	// Orchestrator is only compatible with AndroidJUnitRunner version 1.1 or
	// higher! ** Orchestrator offers the following benefits: - No shared state -
	// Crashes are isolated - Logs are scoped per test See for more information
	// about Android Test Orchestrator. If not set, the test will be run without
	// the orchestrator.
	//
	// Possible values:
	//   "ORCHESTRATOR_OPTION_UNSPECIFIED" - Default value: the server will choose
	// the mode. Currently implies that the test will run without the orchestrator.
	// In the future, all instrumentation tests will be run with the orchestrator.
	// Using the orchestrator is highly encouraged because of all the benefits it
	// offers.
	//   "USE_ORCHESTRATOR" - Run test using orchestrator. ** Only compatible with
	// AndroidJUnitRunner version 1.1 or higher! ** Recommended.
	//   "DO_NOT_USE_ORCHESTRATOR" - Run test without using orchestrator.
	OrchestratorOption string `json:"orchestratorOption,omitempty"`
	// ShardingOption: The option to run tests in multiple shards in parallel.
	ShardingOption *ShardingOption `json:"shardingOption,omitempty"`
	// TestApk: Required. The APK containing the test code to be executed.
	TestApk *FileReference `json:"testApk,omitempty"`
	// TestPackageId: The java package for the test to be executed. The default
	// value is determined by examining the application's manifest.
	TestPackageId string `json:"testPackageId,omitempty"`
	// TestRunnerClass: The InstrumentationTestRunner class. The default value is
	// determined by examining the application's manifest.
	TestRunnerClass string `json:"testRunnerClass,omitempty"`
	// TestTargets: Each target must be fully qualified with the package name or
	// class name, in one of these formats: - "package package_name" - "class
	// package_name.class_name" - "class package_name.class_name#method_name" If
	// empty, all targets in the module will be run.
	TestTargets []string `json:"testTargets,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppApk") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppApk") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidInstrumentationTest) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidInstrumentationTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidMatrix: A set of Android device configuration permutations is defined
// by the the cross-product of the given axes. Internally, the given
// AndroidMatrix will be expanded into a set of AndroidDevices. Only supported
// permutations will be instantiated. Invalid permutations (e.g., incompatible
// models/versions) are ignored.
type AndroidMatrix struct {
	// AndroidModelIds: Required. The ids of the set of Android device to be used.
	// Use the TestEnvironmentDiscoveryService to get supported options.
	AndroidModelIds []string `json:"androidModelIds,omitempty"`
	// AndroidVersionIds: Required. The ids of the set of Android OS version to be
	// used. Use the TestEnvironmentDiscoveryService to get supported options.
	AndroidVersionIds []string `json:"androidVersionIds,omitempty"`
	// Locales: Required. The set of locales the test device will enable for
	// testing. Use the TestEnvironmentDiscoveryService to get supported options.
	Locales []string `json:"locales,omitempty"`
	// Orientations: Required. The set of orientations to test with. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	Orientations []string `json:"orientations,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidModelIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidModelIds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidMatrix) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidMatrix
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidModel: A description of an Android device tests may be run on.
type AndroidModel struct {
	// AccessDeniedReasons: Reasons for access denial. This model is accessible if
	// this list is empty, otherwise the model is viewable only.
	//
	// Possible values:
	//   "ACCESS_DENIED_REASON_UNSPECIFIED" - Do not use. For proto versioning
	// only.
	//   "EULA_NOT_ACCEPTED" - The model is for viewing purposes only. Access and
	// utilization require acceptance of an End User License Agreement (EULA).
	AccessDeniedReasons []string `json:"accessDeniedReasons,omitempty"`
	// Brand: The company that this device is branded with. Example: "Google",
	// "Samsung".
	Brand string `json:"brand,omitempty"`
	// Codename: The name of the industrial design. This corresponds to
	// android.os.Build.DEVICE.
	Codename string `json:"codename,omitempty"`
	// Form: Whether this device is virtual or physical.
	//
	// Possible values:
	//   "DEVICE_FORM_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "VIRTUAL" - Android virtual device using Compute Engine native
	// virtualization. Firebase Test Lab only.
	//   "PHYSICAL" - Actual hardware.
	//   "EMULATOR" - Android virtual device using emulator in nested
	// virtualization. Equivalent to Android Studio.
	Form string `json:"form,omitempty"`
	// FormFactor: Whether this device is a phone, tablet, wearable, etc.
	//
	// Possible values:
	//   "DEVICE_FORM_FACTOR_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "PHONE" - This device has the shape of a phone.
	//   "TABLET" - This device has the shape of a tablet.
	//   "WEARABLE" - This device has the shape of a watch or other wearable.
	//   "TV" - This device has a television form factor.
	//   "AUTOMOTIVE" - This device has an automotive form factor.
	//   "DESKTOP" - This device has a desktop form factor.
	//   "XR" - This device has an Extended Reality form factor.
	FormFactor string `json:"formFactor,omitempty"`
	// Id: The unique opaque id for this model. Use this for invoking the
	// TestExecutionService.
	Id string `json:"id,omitempty"`
	// LabInfo: Output only. Lab info of this device.
	LabInfo *LabInfo `json:"labInfo,omitempty"`
	// LowFpsVideoRecording: True if and only if tests with this model are recorded
	// by stitching together screenshots. See use_low_spec_video_recording in
	// device config.
	LowFpsVideoRecording bool `json:"lowFpsVideoRecording,omitempty"`
	// Manufacturer: The manufacturer of this device.
	Manufacturer string `json:"manufacturer,omitempty"`
	// Name: The human-readable marketing name for this device model. Examples:
	// "Nexus 5", "Galaxy S5".
	Name string `json:"name,omitempty"`
	// PerVersionInfo: Version-specific information of an Android model.
	PerVersionInfo []*PerAndroidVersionInfo `json:"perVersionInfo,omitempty"`
	// ScreenDensity: Screen density in DPI. This corresponds to ro.sf.lcd_density
	ScreenDensity int64 `json:"screenDensity,omitempty"`
	// ScreenX: Screen size in the horizontal (X) dimension measured in pixels.
	ScreenX int64 `json:"screenX,omitempty"`
	// ScreenY: Screen size in the vertical (Y) dimension measured in pixels.
	ScreenY int64 `json:"screenY,omitempty"`
	// SupportedAbis: The list of supported ABIs for this device. This corresponds
	// to either android.os.Build.SUPPORTED_ABIS (for API level 21 and above) or
	// android.os.Build.CPU_ABI/CPU_ABI2. The most preferred ABI is the first
	// element in the list. Elements are optionally prefixed by "version_id:"
	// (where version_id is the id of an AndroidVersion), denoting an ABI that is
	// supported only on a particular version.
	SupportedAbis []string `json:"supportedAbis,omitempty"`
	// SupportedVersionIds: The set of Android versions this device supports.
	SupportedVersionIds []string `json:"supportedVersionIds,omitempty"`
	// Tags: Tags for this dimension. Examples: "default", "preview", "deprecated".
	Tags []string `json:"tags,omitempty"`
	// ThumbnailUrl: URL of a thumbnail image (photo) of the device.
	ThumbnailUrl string `json:"thumbnailUrl,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AccessDeniedReasons") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AccessDeniedReasons") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidModel) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidModel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidRoboTest: A test of an android application that explores the
// application on a virtual or physical Android Device, finding culprits and
// crashes as it goes.
type AndroidRoboTest struct {
	// AppApk: The APK for the application under test.
	AppApk *FileReference `json:"appApk,omitempty"`
	// AppBundle: A multi-apk app bundle for the application under test.
	AppBundle *AppBundle `json:"appBundle,omitempty"`
	// AppInitialActivity: The initial activity that should be used to start the
	// app.
	AppInitialActivity string `json:"appInitialActivity,omitempty"`
	// AppPackageId: The java package for the application under test. The default
	// value is determined by examining the application's manifest.
	AppPackageId string `json:"appPackageId,omitempty"`
	// MaxDepth: The max depth of the traversal stack Robo can explore. Needs to be
	// at least 2 to make Robo explore the app beyond the first activity. Default
	// is 50.
	MaxDepth int64 `json:"maxDepth,omitempty"`
	// MaxSteps: The max number of steps Robo can execute. Default is no limit.
	MaxSteps int64 `json:"maxSteps,omitempty"`
	// RoboDirectives: A set of directives Robo should apply during the crawl. This
	// allows users to customize the crawl. For example, the username and password
	// for a test account can be provided.
	RoboDirectives []*RoboDirective `json:"roboDirectives,omitempty"`
	// RoboMode: The mode in which Robo should run. Most clients should allow the
	// server to populate this field automatically.
	//
	// Possible values:
	//   "ROBO_MODE_UNSPECIFIED" - This means that the server should choose the
	// mode. Recommended.
	//   "ROBO_VERSION_1" - Runs Robo in UIAutomator-only mode without app
	// resigning
	//   "ROBO_VERSION_2" - Deprecated: Use ROBO_VERSION_1 instead for all use
	// cases. Runs Robo in standard Espresso with UIAutomator fallback
	RoboMode string `json:"roboMode,omitempty"`
	// RoboScript: A JSON file with a sequence of actions Robo should perform as a
	// prologue for the crawl.
	RoboScript *FileReference `json:"roboScript,omitempty"`
	// StartingIntents: The intents used to launch the app for the crawl. If none
	// are provided, then the main launcher activity is launched. If some are
	// provided, then only those provided are launched (the main launcher activity
	// must be provided explicitly).
	StartingIntents []*RoboStartingIntent `json:"startingIntents,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppApk") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppApk") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidRoboTest) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidRoboTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidRuntimeConfiguration: Android configuration that can be selected at
// the time a test is run.
type AndroidRuntimeConfiguration struct {
	// Locales: The set of available locales.
	Locales []*Locale `json:"locales,omitempty"`
	// Orientations: The set of available orientations.
	Orientations []*Orientation `json:"orientations,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Locales") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Locales") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidRuntimeConfiguration) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidRuntimeConfiguration
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidTestLoop: A test of an Android Application with a Test Loop. The
// intent \ will be implicitly added, since Games is the only user of this api,
// for the time being.
type AndroidTestLoop struct {
	// AppApk: The APK for the application under test.
	AppApk *FileReference `json:"appApk,omitempty"`
	// AppBundle: A multi-apk app bundle for the application under test.
	AppBundle *AppBundle `json:"appBundle,omitempty"`
	// AppPackageId: The java package for the application under test. The default
	// is determined by examining the application's manifest.
	AppPackageId string `json:"appPackageId,omitempty"`
	// ScenarioLabels: The list of scenario labels that should be run during the
	// test. The scenario labels should map to labels defined in the application's
	// manifest. For example, player_experience and
	// com.google.test.loops.player_experience add all of the loops labeled in the
	// manifest with the com.google.test.loops.player_experience name to the
	// execution. Scenarios can also be specified in the scenarios field.
	ScenarioLabels []string `json:"scenarioLabels,omitempty"`
	// Scenarios: The list of scenarios that should be run during the test. The
	// default is all test loops, derived from the application's manifest.
	Scenarios []int64 `json:"scenarios,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppApk") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppApk") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidTestLoop) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidTestLoop
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AndroidVersion: A version of the Android OS.
type AndroidVersion struct {
	// ApiLevel: The API level for this Android version. Examples: 18, 19.
	ApiLevel int64 `json:"apiLevel,omitempty"`
	// CodeName: The code name for this Android version. Examples: "JellyBean",
	// "KitKat".
	CodeName string `json:"codeName,omitempty"`
	// Distribution: Market share for this version.
	Distribution *Distribution `json:"distribution,omitempty"`
	// Id: An opaque id for this Android version. Use this id to invoke the
	// TestExecutionService.
	Id string `json:"id,omitempty"`
	// ReleaseDate: The date this Android version became available in the market.
	ReleaseDate *Date `json:"releaseDate,omitempty"`
	// Tags: Tags for this dimension. Examples: "default", "preview", "deprecated".
	Tags []string `json:"tags,omitempty"`
	// VersionString: A string representing this version of the Android OS.
	// Examples: "4.3", "4.4".
	VersionString string `json:"versionString,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ApiLevel") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ApiLevel") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AndroidVersion) MarshalJSON() ([]byte, error) {
	type NoMethod AndroidVersion
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Apk: An Android package file to install.
type Apk struct {
	// Location: The path to an APK to be installed on the device before the test
	// begins.
	Location *FileReference `json:"location,omitempty"`
	// PackageName: The java package for the APK to be installed. Value is
	// determined by examining the application's manifest.
	PackageName string `json:"packageName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Location") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Location") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Apk) MarshalJSON() ([]byte, error) {
	type NoMethod Apk
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ApkDetail: Android application details based on application manifest and
// archive contents.
type ApkDetail struct {
	ApkManifest *ApkManifest `json:"apkManifest,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ApkManifest") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ApkManifest") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ApkDetail) MarshalJSON() ([]byte, error) {
	type NoMethod ApkDetail
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ApkManifest: An Android app manifest. See
// http://developer.android.com/guide/topics/manifest/manifest-intro.html
type ApkManifest struct {
	// ApplicationLabel: User-readable name for the application.
	ApplicationLabel string          `json:"applicationLabel,omitempty"`
	IntentFilters    []*IntentFilter `json:"intentFilters,omitempty"`
	// MaxSdkVersion: Maximum API level on which the application is designed to
	// run.
	MaxSdkVersion int64 `json:"maxSdkVersion,omitempty"`
	// Metadata: Meta-data tags defined in the manifest.
	Metadata []*Metadata `json:"metadata,omitempty"`
	// MinSdkVersion: Minimum API level required for the application to run.
	MinSdkVersion int64 `json:"minSdkVersion,omitempty"`
	// PackageName: Full Java-style package name for this application, e.g.
	// "com.example.foo".
	PackageName string `json:"packageName,omitempty"`
	// Services: Services contained in the tag.
	Services []*Service `json:"services,omitempty"`
	// TargetSdkVersion: Specifies the API Level on which the application is
	// designed to run.
	TargetSdkVersion int64 `json:"targetSdkVersion,omitempty"`
	// UsesFeature: Feature usage tags defined in the manifest.
	UsesFeature    []*UsesFeature `json:"usesFeature,omitempty"`
	UsesPermission []string       `json:"usesPermission,omitempty"`
	// UsesPermissionTags: Permissions declared to be used by the application
	UsesPermissionTags []*UsesPermissionTag `json:"usesPermissionTags,omitempty"`
	// VersionCode: Version number used internally by the app.
	VersionCode int64 `json:"versionCode,omitempty,string"`
	// VersionName: Version number shown to users.
	VersionName string `json:"versionName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ApplicationLabel") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ApplicationLabel") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ApkManifest) MarshalJSON() ([]byte, error) {
	type NoMethod ApkManifest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ApkSplits: A single dynamic feature apk.
type ApkSplits struct {
	// BundleSplits: A list of .apk files generated by bundletool to install to the
	// device under test as a single android app with adb install-multiple. If
	// specified, requires one or more bundle_splits. The first split specified
	// represents the base APK, while subsequent splits represent feature apks.
	BundleSplits []*FileReference `json:"bundleSplits,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BundleSplits") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BundleSplits") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ApkSplits) MarshalJSON() ([]byte, error) {
	type NoMethod ApkSplits
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AppBundle: An Android App Bundle file format, containing a BundleConfig.pb
// file, a base module directory, zero or more dynamic feature module
// directories. See https://developer.android.com/guide/app-bundle/build for
// guidance on building App Bundles.
type AppBundle struct {
	// Apks: .apk files generated by bundletool to install as a single android app.
	Apks *ApkSplits `json:"apks,omitempty"`
	// BundleLocation: .aab file representing the app bundle under test.
	BundleLocation *FileReference `json:"bundleLocation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Apks") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Apks") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AppBundle) MarshalJSON() ([]byte, error) {
	type NoMethod AppBundle
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CancelDeviceSessionRequest: The request object for cancelling a Device
// Session.
type CancelDeviceSessionRequest struct {
}

// CancelTestMatrixResponse: Response containing the current state of the
// specified test matrix.
type CancelTestMatrixResponse struct {
	// TestState: The current rolled-up state of the test matrix. If this state is
	// already final, then the cancelation request will have no effect.
	//
	// Possible values:
	//   "TEST_STATE_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "VALIDATING" - The execution or matrix is being validated.
	//   "PENDING" - The execution or matrix is waiting for resources to become
	// available.
	//   "RUNNING" - The execution is currently being processed. Can only be set on
	// an execution.
	//   "FINISHED" - The execution or matrix has terminated normally. On a matrix
	// this means that the matrix level processing completed normally, but
	// individual executions may be in an ERROR state.
	//   "ERROR" - The execution or matrix has stopped because it encountered an
	// infrastructure failure.
	//   "UNSUPPORTED_ENVIRONMENT" - The execution was not run because it
	// corresponds to a unsupported environment. Can only be set on an execution.
	//   "INCOMPATIBLE_ENVIRONMENT" - The execution was not run because the
	// provided inputs are incompatible with the requested environment. Example:
	// requested AndroidVersion is lower than APK's minSdkVersion Can only be set
	// on an execution.
	//   "INCOMPATIBLE_ARCHITECTURE" - The execution was not run because the
	// provided inputs are incompatible with the requested architecture. Example:
	// requested device does not support running the native code in the supplied
	// APK Can only be set on an execution.
	//   "CANCELLED" - The user cancelled the execution. Can only be set on an
	// execution.
	//   "INVALID" - The execution or matrix was not run because the provided
	// inputs are not valid. Examples: input file is not of the expected type, is
	// malformed/corrupt, or was flagged as malware
	TestState string `json:"testState,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "TestState") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TestState") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CancelTestMatrixResponse) MarshalJSON() ([]byte, error) {
	type NoMethod CancelTestMatrixResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ClientInfo: Information about the client which invoked the test.
type ClientInfo struct {
	// ClientInfoDetails: The list of detailed information about client.
	ClientInfoDetails []*ClientInfoDetail `json:"clientInfoDetails,omitempty"`
	// Name: Required. Client name, such as gcloud.
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClientInfoDetails") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientInfoDetails") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ClientInfo) MarshalJSON() ([]byte, error) {
	type NoMethod ClientInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ClientInfoDetail: Key-value pair of detailed information about the client
// which invoked the test. Examples: {'Version', '1.0'}, {'Release Track',
// 'BETA'}.
type ClientInfoDetail struct {
	// Key: Required. The key of detailed client information.
	Key string `json:"key,omitempty"`
	// Value: Required. The value of detailed client information.
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Key") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Key") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ClientInfoDetail) MarshalJSON() ([]byte, error) {
	type NoMethod ClientInfoDetail
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Date: Represents a whole or partial calendar date, such as a birthday. The
// time of day and time zone are either specified elsewhere or are
// insignificant. The date is relative to the Gregorian Calendar. This can
// represent one of the following: * A full date, with non-zero year, month,
// and day values. * A month and day, with a zero year (for example, an
// anniversary). * A year on its own, with a zero month and a zero day. * A
// year and month, with a zero day (for example, a credit card expiration
// date). Related types: * google.type.TimeOfDay * google.type.DateTime *
// google.protobuf.Timestamp
type Date struct {
	// Day: Day of a month. Must be from 1 to 31 and valid for the year and month,
	// or 0 to specify a year by itself or a year and month where the day isn't
	// significant.
	Day int64 `json:"day,omitempty"`
	// Month: Month of a year. Must be from 1 to 12, or 0 to specify a year without
	// a month and day.
	Month int64 `json:"month,omitempty"`
	// Year: Year of the date. Must be from 1 to 9999, or 0 to specify a date
	// without a year.
	Year int64 `json:"year,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Day") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Day") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Date) MarshalJSON() ([]byte, error) {
	type NoMethod Date
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DeviceFile: A single device file description.
type DeviceFile struct {
	// ObbFile: A reference to an opaque binary blob file.
	ObbFile *ObbFile `json:"obbFile,omitempty"`
	// RegularFile: A reference to a regular file.
	RegularFile *RegularFile `json:"regularFile,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ObbFile") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ObbFile") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DeviceFile) MarshalJSON() ([]byte, error) {
	type NoMethod DeviceFile
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DeviceIpBlock: A single device IP block
type DeviceIpBlock struct {
	// AddedDate: The date this block was added to Firebase Test Lab
	AddedDate *Date `json:"addedDate,omitempty"`
	// Block: An IP address block in CIDR notation eg: 34.68.194.64/29
	Block string `json:"block,omitempty"`
	// Form: Whether this block is used by physical or virtual devices
	//
	// Possible values:
	//   "DEVICE_FORM_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "VIRTUAL" - Android virtual device using Compute Engine native
	// virtualization. Firebase Test Lab only.
	//   "PHYSICAL" - Actual hardware.
	//   "EMULATOR" - Android virtual device using emulator in nested
	// virtualization. Equivalent to Android Studio.
	Form string `json:"form,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AddedDate") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AddedDate") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DeviceIpBlock) MarshalJSON() ([]byte, error) {
	type NoMethod DeviceIpBlock
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DeviceIpBlockCatalog: List of IP blocks used by the Firebase Test Lab
type DeviceIpBlockCatalog struct {
	// IpBlocks: The device IP blocks used by Firebase Test Lab
	IpBlocks []*DeviceIpBlock `json:"ipBlocks,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IpBlocks") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IpBlocks") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DeviceIpBlockCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod DeviceIpBlockCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DeviceSession: Protobuf message describing the device message, used from
// several RPCs.
type DeviceSession struct {
	// ActiveStartTime: Output only. The timestamp that the session first became
	// ACTIVE.
	ActiveStartTime string `json:"activeStartTime,omitempty"`
	// AndroidDevice: Required. The requested device
	AndroidDevice *AndroidDevice `json:"androidDevice,omitempty"`
	// CreateTime: Output only. The time that the Session was created.
	CreateTime string `json:"createTime,omitempty"`
	// DisplayName: Output only. The title of the DeviceSession to be presented in
	// the UI.
	DisplayName string `json:"displayName,omitempty"`
	// ExpireTime: Optional. If the device is still in use at this time, any
	// connections will be ended and the SessionState will transition from ACTIVE
	// to FINISHED.
	ExpireTime string `json:"expireTime,omitempty"`
	// InactivityTimeout: Output only. The interval of time that this device must
	// be interacted with before it transitions from ACTIVE to TIMEOUT_INACTIVITY.
	InactivityTimeout string `json:"inactivityTimeout,omitempty"`
	// Name: Optional. Name of the DeviceSession, e.g.
	// "projects/{project_id}/deviceSessions/{session_id}"
	Name string `json:"name,omitempty"`
	// State: Output only. Current state of the DeviceSession.
	//
	// Possible values:
	//   "SESSION_STATE_UNSPECIFIED" - Default value. This value is unused.
	//   "REQUESTED" - Initial state of a session request. The session is being
	// validated for correctness and a device is not yet requested.
	//   "PENDING" - The session has been validated and is in the queue for a
	// device.
	//   "ACTIVE" - The session has been granted and the device is accepting
	// connections.
	//   "EXPIRED" - The session duration exceeded the device’s reservation time
	// period and timed out automatically.
	//   "FINISHED" - The user is finished with the session and it was canceled by
	// the user while the request was still getting allocated or after allocation
	// and during device usage period.
	//   "UNAVAILABLE" - Unable to complete the session because the device was
	// unavailable and it failed to allocate through the scheduler. For example, a
	// device not in the catalog was requested or the request expired in the
	// allocation queue.
	//   "ERROR" - Unable to complete the session for an internal reason, such as
	// an infrastructure failure.
	State string `json:"state,omitempty"`
	// StateHistories: Output only. The historical state transitions of the
	// session_state message including the current session state.
	StateHistories []*SessionStateEvent `json:"stateHistories,omitempty"`
	// Ttl: Optional. The amount of time that a device will be initially allocated
	// for. This can eventually be extended with the UpdateDeviceSession RPC.
	// Default: 15 minutes.
	Ttl string `json:"ttl,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ActiveStartTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ActiveStartTime") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DeviceSession) MarshalJSON() ([]byte, error) {
	type NoMethod DeviceSession
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DirectAccessVersionInfo: Denotes whether Direct Access is supported, and by
// which client versions. DirectAccessService is currently available as a
// preview to select developers. You can register today on behalf of you and
// your team at
// https://developer.android.com/studio/preview/android-device-streaming
type DirectAccessVersionInfo struct {
	// DirectAccessSupported: Whether direct access is supported at all. Clients
	// are expected to filter down the device list to only android models and
	// versions which support Direct Access when that is the user intent.
	DirectAccessSupported bool `json:"directAccessSupported,omitempty"`
	// MinimumAndroidStudioVersion: Output only. Indicates client-device
	// compatibility, where a device is known to work only with certain workarounds
	// implemented in the Android Studio client. Expected format
	// "major.minor.micro.patch", e.g. "5921.22.2211.8881706".
	MinimumAndroidStudioVersion string `json:"minimumAndroidStudioVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DirectAccessSupported") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DirectAccessSupported") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DirectAccessVersionInfo) MarshalJSON() ([]byte, error) {
	type NoMethod DirectAccessVersionInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Distribution: Data about the relative number of devices running a given
// configuration of the Android platform.
type Distribution struct {
	// MarketShare: Output only. The estimated fraction (0-1) of the total market
	// with this configuration.
	MarketShare float64 `json:"marketShare,omitempty"`
	// MeasurementTime: Output only. The time this distribution was measured.
	MeasurementTime string `json:"measurementTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MarketShare") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MarketShare") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Distribution) MarshalJSON() ([]byte, error) {
	type NoMethod Distribution
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Distribution) UnmarshalJSON(data []byte) error {
	type NoMethod Distribution
	var s1 struct {
		MarketShare gensupport.JSONFloat64 `json:"marketShare"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.MarketShare = float64(s1.MarketShare)
	return nil
}

// Empty: A generic empty message that you can re-use to avoid defining
// duplicated empty messages in your APIs. A typical example is to use it as
// the request or the response type of an API method. For instance: service Foo
// { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
type Empty struct {
	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
}

// Environment: The environment in which the test is run.
type Environment struct {
	// AndroidDevice: An Android device which must be used with an Android test.
	AndroidDevice *AndroidDevice `json:"androidDevice,omitempty"`
	// IosDevice: An iOS device which must be used with an iOS test.
	IosDevice *IosDevice `json:"iosDevice,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidDevice") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidDevice") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Environment) MarshalJSON() ([]byte, error) {
	type NoMethod Environment
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// EnvironmentMatrix: The matrix of environments in which the test is to be
// executed.
type EnvironmentMatrix struct {
	// AndroidDeviceList: A list of Android devices; the test will be run only on
	// the specified devices.
	AndroidDeviceList *AndroidDeviceList `json:"androidDeviceList,omitempty"`
	// AndroidMatrix: A matrix of Android devices.
	AndroidMatrix *AndroidMatrix `json:"androidMatrix,omitempty"`
	// IosDeviceList: A list of iOS devices.
	IosDeviceList *IosDeviceList `json:"iosDeviceList,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidDeviceList") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidDeviceList") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s EnvironmentMatrix) MarshalJSON() ([]byte, error) {
	type NoMethod EnvironmentMatrix
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// EnvironmentVariable: A key-value pair passed as an environment variable to
// the test.
type EnvironmentVariable struct {
	// Key: Key for the environment variable.
	Key string `json:"key,omitempty"`
	// Value: Value for the environment variable.
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Key") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Key") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s EnvironmentVariable) MarshalJSON() ([]byte, error) {
	type NoMethod EnvironmentVariable
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// FileReference: A reference to a file, used for user inputs.
type FileReference struct {
	// GcsPath: A path to a file in Google Cloud Storage. Example:
	// gs://build-app-1414623860166/app%40debug-unaligned.apk These paths are
	// expected to be url encoded (percent encoding)
	GcsPath string `json:"gcsPath,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPath") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPath") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s FileReference) MarshalJSON() ([]byte, error) {
	type NoMethod FileReference
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GetApkDetailsResponse: Response containing the details of the specified
// Android application.
type GetApkDetailsResponse struct {
	// ApkDetail: Details of the Android App.
	ApkDetail *ApkDetail `json:"apkDetail,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ApkDetail") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ApkDetail") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GetApkDetailsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GetApkDetailsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleAuto: Enables automatic Google account login. If set, the service
// automatically generates a Google test account and adds it to the device,
// before executing the test. Note that test accounts might be reused. Many
// applications show their full set of functionalities when an account is
// present on the device. Logging into the device with these generated accounts
// allows testing more functionalities.
type GoogleAuto struct {
}

// GoogleCloudStorage: A storage location within Google cloud storage (GCS).
type GoogleCloudStorage struct {
	// GcsPath: Required. The path to a directory in GCS that will eventually
	// contain the results for this test. The requesting user must have write
	// access on the bucket in the supplied path.
	GcsPath string `json:"gcsPath,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPath") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPath") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudStorage) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudStorage
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IntentFilter: The section of an tag.
// https://developer.android.com/guide/topics/manifest/intent-filter-element.html
type IntentFilter struct {
	// ActionNames: The android:name value of the tag.
	ActionNames []string `json:"actionNames,omitempty"`
	// CategoryNames: The android:name value of the tag.
	CategoryNames []string `json:"categoryNames,omitempty"`
	// MimeType: The android:mimeType value of the tag.
	MimeType string `json:"mimeType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ActionNames") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ActionNames") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IntentFilter) MarshalJSON() ([]byte, error) {
	type NoMethod IntentFilter
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosDevice: A single iOS device.
type IosDevice struct {
	// IosModelId: Required. The id of the iOS device to be used. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	IosModelId string `json:"iosModelId,omitempty"`
	// IosVersionId: Required. The id of the iOS major software version to be used.
	// Use the TestEnvironmentDiscoveryService to get supported options.
	IosVersionId string `json:"iosVersionId,omitempty"`
	// Locale: Required. The locale the test device used for testing. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	Locale string `json:"locale,omitempty"`
	// Orientation: Required. How the device is oriented during the test. Use the
	// TestEnvironmentDiscoveryService to get supported options.
	Orientation string `json:"orientation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IosModelId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IosModelId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosDevice) MarshalJSON() ([]byte, error) {
	type NoMethod IosDevice
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosDeviceCatalog: The currently supported iOS devices.
type IosDeviceCatalog struct {
	// Models: The set of supported iOS device models.
	Models []*IosModel `json:"models,omitempty"`
	// RuntimeConfiguration: The set of supported runtime configurations.
	RuntimeConfiguration *IosRuntimeConfiguration `json:"runtimeConfiguration,omitempty"`
	// Versions: The set of supported iOS software versions.
	Versions []*IosVersion `json:"versions,omitempty"`
	// XcodeVersions: The set of supported Xcode versions.
	XcodeVersions []*XcodeVersion `json:"xcodeVersions,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Models") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Models") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosDeviceCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod IosDeviceCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosDeviceFile: A file or directory to install on the device before the test
// starts.
type IosDeviceFile struct {
	// BundleId: The bundle id of the app where this file lives. iOS apps sandbox
	// their own filesystem, so app files must specify which app installed on the
	// device.
	BundleId string `json:"bundleId,omitempty"`
	// Content: The source file
	Content *FileReference `json:"content,omitempty"`
	// DevicePath: Location of the file on the device, inside the app's sandboxed
	// filesystem
	DevicePath string `json:"devicePath,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BundleId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BundleId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosDeviceFile) MarshalJSON() ([]byte, error) {
	type NoMethod IosDeviceFile
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosDeviceList: A list of iOS device configurations in which the test is to
// be executed.
type IosDeviceList struct {
	// IosDevices: Required. A list of iOS devices.
	IosDevices []*IosDevice `json:"iosDevices,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IosDevices") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IosDevices") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosDeviceList) MarshalJSON() ([]byte, error) {
	type NoMethod IosDeviceList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosModel: A description of an iOS device tests may be run on.
type IosModel struct {
	// DeviceCapabilities: Device capabilities. Copied from
	// https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/DeviceCompatibilityMatrix/DeviceCompatibilityMatrix.html
	DeviceCapabilities []string `json:"deviceCapabilities,omitempty"`
	// FormFactor: Whether this device is a phone, tablet, wearable, etc.
	//
	// Possible values:
	//   "DEVICE_FORM_FACTOR_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "PHONE" - This device has the shape of a phone.
	//   "TABLET" - This device has the shape of a tablet.
	//   "WEARABLE" - This device has the shape of a watch or other wearable.
	//   "TV" - This device has a television form factor.
	//   "AUTOMOTIVE" - This device has an automotive form factor.
	//   "DESKTOP" - This device has a desktop form factor.
	//   "XR" - This device has an Extended Reality form factor.
	FormFactor string `json:"formFactor,omitempty"`
	// Id: The unique opaque id for this model. Use this for invoking the
	// TestExecutionService.
	Id string `json:"id,omitempty"`
	// Name: The human-readable name for this device model. Examples: "iPhone 4s",
	// "iPad Mini 2".
	Name string `json:"name,omitempty"`
	// PerVersionInfo: Version-specific information of an iOS model.
	PerVersionInfo []*PerIosVersionInfo `json:"perVersionInfo,omitempty"`
	// ScreenDensity: Screen density in DPI.
	ScreenDensity int64 `json:"screenDensity,omitempty"`
	// ScreenX: Screen size in the horizontal (X) dimension measured in pixels.
	ScreenX int64 `json:"screenX,omitempty"`
	// ScreenY: Screen size in the vertical (Y) dimension measured in pixels.
	ScreenY int64 `json:"screenY,omitempty"`
	// SupportedVersionIds: The set of iOS major software versions this device
	// supports.
	SupportedVersionIds []string `json:"supportedVersionIds,omitempty"`
	// Tags: Tags for this dimension. Examples: "default", "preview", "deprecated".
	Tags []string `json:"tags,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DeviceCapabilities") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DeviceCapabilities") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosModel) MarshalJSON() ([]byte, error) {
	type NoMethod IosModel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosRoboTest: A test that explores an iOS application on an iOS device.
type IosRoboTest struct {
	// AppBundleId: The bundle ID for the app-under-test. This is determined by
	// examining the application's "Info.plist" file.
	AppBundleId string `json:"appBundleId,omitempty"`
	// AppIpa: Required. The ipa stored at this file should be used to run the
	// test.
	AppIpa *FileReference `json:"appIpa,omitempty"`
	// RoboScript: An optional Roboscript to customize the crawl. See
	// https://firebase.google.com/docs/test-lab/android/robo-scripts-reference for
	// more information about Roboscripts. The maximum allowed file size of the
	// roboscript is 10MiB.
	RoboScript *FileReference `json:"roboScript,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppBundleId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppBundleId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosRoboTest) MarshalJSON() ([]byte, error) {
	type NoMethod IosRoboTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosRuntimeConfiguration: iOS configuration that can be selected at the time
// a test is run.
type IosRuntimeConfiguration struct {
	// Locales: The set of available locales.
	Locales []*Locale `json:"locales,omitempty"`
	// Orientations: The set of available orientations.
	Orientations []*Orientation `json:"orientations,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Locales") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Locales") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosRuntimeConfiguration) MarshalJSON() ([]byte, error) {
	type NoMethod IosRuntimeConfiguration
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosTestLoop: A test of an iOS application that implements one or more game
// loop scenarios. This test type accepts an archived application (.ipa file)
// and a list of integer scenarios that will be executed on the app
// sequentially.
type IosTestLoop struct {
	// AppBundleId: Output only. The bundle id for the application under test.
	AppBundleId string `json:"appBundleId,omitempty"`
	// AppIpa: Required. The .ipa of the application to test.
	AppIpa *FileReference `json:"appIpa,omitempty"`
	// Scenarios: The list of scenarios that should be run during the test.
	// Defaults to the single scenario 0 if unspecified.
	Scenarios []int64 `json:"scenarios,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppBundleId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppBundleId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosTestLoop) MarshalJSON() ([]byte, error) {
	type NoMethod IosTestLoop
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosTestSetup: A description of how to set up an iOS device prior to running
// the test.
type IosTestSetup struct {
	// AdditionalIpas: iOS apps to install in addition to those being directly
	// tested.
	AdditionalIpas []*FileReference `json:"additionalIpas,omitempty"`
	// NetworkProfile: The network traffic profile used for running the test.
	// Available network profiles can be queried by using the NETWORK_CONFIGURATION
	// environment type when calling
	// TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
	NetworkProfile string `json:"networkProfile,omitempty"`
	// PullDirectories: List of directories on the device to upload to Cloud
	// Storage at the end of the test. Directories should either be in a shared
	// directory (such as /private/var/mobile/Media) or within an accessible
	// directory inside the app's filesystem (such as /Documents) by specifying the
	// bundle ID.
	PullDirectories []*IosDeviceFile `json:"pullDirectories,omitempty"`
	// PushFiles: List of files to push to the device before starting the test.
	PushFiles []*IosDeviceFile `json:"pushFiles,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AdditionalIpas") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AdditionalIpas") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosTestSetup) MarshalJSON() ([]byte, error) {
	type NoMethod IosTestSetup
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosVersion: An iOS version.
type IosVersion struct {
	// Id: An opaque id for this iOS version. Use this id to invoke the
	// TestExecutionService.
	Id string `json:"id,omitempty"`
	// MajorVersion: An integer representing the major iOS version. Examples: "8",
	// "9".
	MajorVersion int64 `json:"majorVersion,omitempty"`
	// MinorVersion: An integer representing the minor iOS version. Examples: "1",
	// "2".
	MinorVersion int64 `json:"minorVersion,omitempty"`
	// SupportedXcodeVersionIds: The available Xcode versions for this version.
	SupportedXcodeVersionIds []string `json:"supportedXcodeVersionIds,omitempty"`
	// Tags: Tags for this dimension. Examples: "default", "preview", "deprecated".
	Tags []string `json:"tags,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Id") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Id") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosVersion) MarshalJSON() ([]byte, error) {
	type NoMethod IosVersion
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IosXcTest: A test of an iOS application that uses the XCTest framework.
// Xcode supports the option to "build for testing", which generates an
// .xctestrun file that contains a test specification (arguments, test methods,
// etc). This test type accepts a zip file containing the .xctestrun file and
// the corresponding contents of the Build/Products directory that contains all
// the binaries needed to run the tests.
type IosXcTest struct {
	// AppBundleId: Output only. The bundle id for the application under test.
	AppBundleId string `json:"appBundleId,omitempty"`
	// TestSpecialEntitlements: The option to test special app entitlements.
	// Setting this would re-sign the app having special entitlements with an
	// explicit application-identifier. Currently supports testing aps-environment
	// entitlement.
	TestSpecialEntitlements bool `json:"testSpecialEntitlements,omitempty"`
	// TestsZip: Required. The .zip containing the .xctestrun file and the contents
	// of the DerivedData/Build/Products directory. The .xctestrun file in this zip
	// is ignored if the xctestrun field is specified.
	TestsZip *FileReference `json:"testsZip,omitempty"`
	// XcodeVersion: The Xcode version that should be used for the test. Use the
	// TestEnvironmentDiscoveryService to get supported options. Defaults to the
	// latest Xcode version Firebase Test Lab supports.
	XcodeVersion string `json:"xcodeVersion,omitempty"`
	// Xctestrun: An .xctestrun file that will override the .xctestrun file in the
	// tests zip. Because the .xctestrun file contains environment variables along
	// with test methods to run and/or ignore, this can be useful for sharding
	// tests. Default is taken from the tests zip.
	Xctestrun *FileReference `json:"xctestrun,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppBundleId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppBundleId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IosXcTest) MarshalJSON() ([]byte, error) {
	type NoMethod IosXcTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LabInfo: Lab specific information for a device.
type LabInfo struct {
	// Name: Lab name where the device is hosted. If empty, the device is hosted in
	// a Google owned lab.
	Name string `json:"name,omitempty"`
	// RegionCode: The Unicode country/region code (CLDR) of the lab where the
	// device is hosted. E.g. "US" for United States, "CH" for Switzerland.
	RegionCode string `json:"regionCode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Name") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Name") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s LabInfo) MarshalJSON() ([]byte, error) {
	type NoMethod LabInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LauncherActivityIntent: Specifies an intent that starts the main launcher
// activity.
type LauncherActivityIntent struct {
}

// ListDeviceSessionsResponse: A list of device sessions.
type ListDeviceSessionsResponse struct {
	// DeviceSessions: The sessions matching the specified filter in the given
	// cloud project.
	DeviceSessions []*DeviceSession `json:"deviceSessions,omitempty"`
	// NextPageToken: A token, which can be sent as `page_token` to retrieve the
	// next page. If this field is omitted, there are no subsequent pages.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "DeviceSessions") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DeviceSessions") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListDeviceSessionsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListDeviceSessionsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Locale: A location/region designation for language.
type Locale struct {
	// Id: The id for this locale. Example: "en_US".
	Id string `json:"id,omitempty"`
	// Name: A human-friendly name for this language/locale. Example: "English".
	Name string `json:"name,omitempty"`
	// Region: A human-friendly string representing the region for this locale.
	// Example: "United States". Not present for every locale.
	Region string `json:"region,omitempty"`
	// Tags: Tags for this dimension. Example: "default".
	Tags []string `json:"tags,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Id") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Id") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Locale) MarshalJSON() ([]byte, error) {
	type NoMethod Locale
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ManualSharding: Shards test cases into the specified groups of packages,
// classes, and/or methods. With manual sharding enabled, specifying test
// targets via environment_variables or in InstrumentationTest is invalid.
type ManualSharding struct {
	// TestTargetsForShard: Required. Group of packages, classes, and/or test
	// methods to be run for each manually-created shard. You must specify at least
	// one shard if this field is present. When you select one or more physical
	// devices, the number of repeated test_targets_for_shard must be <= 50. When
	// you select one or more ARM virtual devices, it must be <= 200. When you
	// select only x86 virtual devices, it must be <= 500.
	TestTargetsForShard []*TestTargetsForShard `json:"testTargetsForShard,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TestTargetsForShard") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TestTargetsForShard") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ManualSharding) MarshalJSON() ([]byte, error) {
	type NoMethod ManualSharding
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MatrixErrorDetail: Describes a single error or issue with a matrix.
type MatrixErrorDetail struct {
	// Message: Output only. A human-readable message about how the error in the
	// TestMatrix. Expands on the `reason` field with additional details and
	// possible options to fix the issue.
	Message string `json:"message,omitempty"`
	// Reason: Output only. The reason for the error. This is a constant value in
	// UPPER_SNAKE_CASE that identifies the cause of the error.
	Reason string `json:"reason,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Message") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Message") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MatrixErrorDetail) MarshalJSON() ([]byte, error) {
	type NoMethod MatrixErrorDetail
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Metadata: A tag within a manifest.
// https://developer.android.com/guide/topics/manifest/meta-data-element.html
type Metadata struct {
	// Name: The android:name value
	Name string `json:"name,omitempty"`
	// Value: The android:value value
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Name") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Name") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Metadata) MarshalJSON() ([]byte, error) {
	type NoMethod Metadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type NetworkConfiguration struct {
	// DownRule: The emulation rule applying to the download traffic.
	DownRule *TrafficRule `json:"downRule,omitempty"`
	// Id: The unique opaque id for this network traffic configuration.
	Id string `json:"id,omitempty"`
	// UpRule: The emulation rule applying to the upload traffic.
	UpRule *TrafficRule `json:"upRule,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DownRule") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DownRule") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NetworkConfiguration) MarshalJSON() ([]byte, error) {
	type NoMethod NetworkConfiguration
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type NetworkConfigurationCatalog struct {
	Configurations []*NetworkConfiguration `json:"configurations,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Configurations") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Configurations") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NetworkConfigurationCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod NetworkConfigurationCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// NoActivityIntent: Skips the starting activity
type NoActivityIntent struct {
}

// ObbFile: An opaque binary blob file to install on the device before the test
// starts.
type ObbFile struct {
	// Obb: Required. Opaque Binary Blob (OBB) file(s) to install on the device.
	Obb *FileReference `json:"obb,omitempty"`
	// ObbFileName: Required. OBB file name which must conform to the format as
	// specified by Android e.g. [main|patch].0300110.com.example.android.obb which
	// will be installed into \/Android/obb/\/ on the device.
	ObbFileName string `json:"obbFileName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Obb") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Obb") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ObbFile) MarshalJSON() ([]byte, error) {
	type NoMethod ObbFile
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Orientation: Screen orientation of the device.
type Orientation struct {
	// Id: The id for this orientation. Example: "portrait".
	Id string `json:"id,omitempty"`
	// Name: A human-friendly name for this orientation. Example: "portrait".
	Name string `json:"name,omitempty"`
	// Tags: Tags for this dimension. Example: "default".
	Tags []string `json:"tags,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Id") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Id") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Orientation) MarshalJSON() ([]byte, error) {
	type NoMethod Orientation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PerAndroidVersionInfo: A version-specific information of an Android model.
type PerAndroidVersionInfo struct {
	// DeviceCapacity: The number of online devices for an Android version.
	//
	// Possible values:
	//   "DEVICE_CAPACITY_UNSPECIFIED" - The value of device capacity is unknown or
	// unset.
	//   "DEVICE_CAPACITY_HIGH" - Devices that are high in capacity (The lab has a
	// large number of these devices). These devices are generally suggested for
	// running a large number of simultaneous tests (e.g. more than 100 tests).
	// Please note that high capacity devices do not guarantee short wait times due
	// to several factors: 1. Traffic (how heavily they are used at any given
	// moment) 2. High capacity devices are prioritized for certain usages, which
	// may cause user tests to be slower than selecting other similar device types.
	//   "DEVICE_CAPACITY_MEDIUM" - Devices that are medium in capacity (The lab
	// has a decent number of these devices, though not as many as high capacity
	// devices). These devices are suitable for fewer test runs (e.g. fewer than
	// 100 tests) and only for low shard counts (e.g. less than 10 shards).
	//   "DEVICE_CAPACITY_LOW" - Devices that are low in capacity (The lab has a
	// small number of these devices). These devices may be used if users need to
	// test on this specific device model and version. Please note that due to low
	// capacity, the tests may take much longer to finish, especially if a large
	// number of tests are invoked at once. These devices are not suitable for test
	// sharding.
	//   "DEVICE_CAPACITY_NONE" - Devices that are completely missing from the lab.
	// These devices are unavailable either temporarily or permanently and should
	// not be requested. If the device is also marked as deprecated, this state is
	// very likely permanent.
	DeviceCapacity string `json:"deviceCapacity,omitempty"`
	// DirectAccessVersionInfo: Output only. Identifies supported clients for
	// DirectAccess for this Android version.
	DirectAccessVersionInfo *DirectAccessVersionInfo `json:"directAccessVersionInfo,omitempty"`
	// InteractiveDeviceAvailabilityEstimate: Output only. The estimated wait time
	// for a single interactive device session using Direct Access.
	InteractiveDeviceAvailabilityEstimate string `json:"interactiveDeviceAvailabilityEstimate,omitempty"`
	// VersionId: An Android version.
	VersionId string `json:"versionId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DeviceCapacity") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DeviceCapacity") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PerAndroidVersionInfo) MarshalJSON() ([]byte, error) {
	type NoMethod PerAndroidVersionInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PerIosVersionInfo: A version-specific information of an iOS model.
type PerIosVersionInfo struct {
	// DeviceCapacity: The number of online devices for an iOS version.
	//
	// Possible values:
	//   "DEVICE_CAPACITY_UNSPECIFIED" - The value of device capacity is unknown or
	// unset.
	//   "DEVICE_CAPACITY_HIGH" - Devices that are high in capacity (The lab has a
	// large number of these devices). These devices are generally suggested for
	// running a large number of simultaneous tests (e.g. more than 100 tests).
	// Please note that high capacity devices do not guarantee short wait times due
	// to several factors: 1. Traffic (how heavily they are used at any given
	// moment) 2. High capacity devices are prioritized for certain usages, which
	// may cause user tests to be slower than selecting other similar device types.
	//   "DEVICE_CAPACITY_MEDIUM" - Devices that are medium in capacity (The lab
	// has a decent number of these devices, though not as many as high capacity
	// devices). These devices are suitable for fewer test runs (e.g. fewer than
	// 100 tests) and only for low shard counts (e.g. less than 10 shards).
	//   "DEVICE_CAPACITY_LOW" - Devices that are low in capacity (The lab has a
	// small number of these devices). These devices may be used if users need to
	// test on this specific device model and version. Please note that due to low
	// capacity, the tests may take much longer to finish, especially if a large
	// number of tests are invoked at once. These devices are not suitable for test
	// sharding.
	//   "DEVICE_CAPACITY_NONE" - Devices that are completely missing from the lab.
	// These devices are unavailable either temporarily or permanently and should
	// not be requested. If the device is also marked as deprecated, this state is
	// very likely permanent.
	DeviceCapacity string `json:"deviceCapacity,omitempty"`
	// VersionId: An iOS version.
	VersionId string `json:"versionId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DeviceCapacity") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DeviceCapacity") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PerIosVersionInfo) MarshalJSON() ([]byte, error) {
	type NoMethod PerIosVersionInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ProvidedSoftwareCatalog: The currently provided software environment on the
// devices under test.
type ProvidedSoftwareCatalog struct {
	// AndroidxOrchestratorVersion: A string representing the current version of
	// AndroidX Test Orchestrator that is used in the environment. The package is
	// available at
	// https://maven.google.com/web/index.html#androidx.test:orchestrator.
	AndroidxOrchestratorVersion string `json:"androidxOrchestratorVersion,omitempty"`
	// OrchestratorVersion: Deprecated: Use AndroidX Test Orchestrator going
	// forward. A string representing the current version of Android Test
	// Orchestrator that is used in the environment. The package is available at
	// https://maven.google.com/web/index.html#com.android.support.test:orchestrator.
	OrchestratorVersion string `json:"orchestratorVersion,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "AndroidxOrchestratorVersion") to unconditionally include in API requests.
	// By default, fields with empty or default values are omitted from API
	// requests. See https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields
	// for more details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidxOrchestratorVersion") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ProvidedSoftwareCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod ProvidedSoftwareCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// RegularFile: A file or directory to install on the device before the test
// starts.
type RegularFile struct {
	// Content: Required. The source file.
	Content *FileReference `json:"content,omitempty"`
	// DevicePath: Required. Where to put the content on the device. Must be an
	// absolute, allowlisted path. If the file exists, it will be replaced. The
	// following device-side directories and any of their subdirectories are
	// allowlisted: ${EXTERNAL_STORAGE}, /sdcard ${ANDROID_DATA}/local/tmp, or
	// /data/local/tmp Specifying a path outside of these directory trees is
	// invalid. The paths /sdcard and /data will be made available and treated as
	// implicit path substitutions. E.g. if /sdcard on a particular device does not
	// map to external storage, the system will replace it with the external
	// storage path prefix for that device and copy the file there. It is strongly
	// advised to use the Environment API in app and test code to access files on
	// the device in a portable way.
	DevicePath string `json:"devicePath,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Content") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Content") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s RegularFile) MarshalJSON() ([]byte, error) {
	type NoMethod RegularFile
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ResultStorage: Locations where the results of running the test are stored.
type ResultStorage struct {
	// GoogleCloudStorage: Required.
	GoogleCloudStorage *GoogleCloudStorage `json:"googleCloudStorage,omitempty"`
	// ResultsUrl: Output only. URL to the results in the Firebase Web Console.
	ResultsUrl string `json:"resultsUrl,omitempty"`
	// ToolResultsExecution: Output only. The tool results execution that results
	// are written to.
	ToolResultsExecution *ToolResultsExecution `json:"toolResultsExecution,omitempty"`
	// ToolResultsHistory: The tool results history that contains the tool results
	// execution that results are written to. If not provided, the service will
	// choose an appropriate value.
	ToolResultsHistory *ToolResultsHistory `json:"toolResultsHistory,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GoogleCloudStorage") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GoogleCloudStorage") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ResultStorage) MarshalJSON() ([]byte, error) {
	type NoMethod ResultStorage
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// RoboDirective: Directs Robo to interact with a specific UI element if it is
// encountered during the crawl. Currently, Robo can perform text entry or
// element click.
type RoboDirective struct {
	// ActionType: Required. The type of action that Robo should perform on the
	// specified element.
	//
	// Possible values:
	//   "ACTION_TYPE_UNSPECIFIED" - DO NOT USE. For proto versioning only.
	//   "SINGLE_CLICK" - Direct Robo to click on the specified element. No-op if
	// specified element is not clickable.
	//   "ENTER_TEXT" - Direct Robo to enter text on the specified element. No-op
	// if specified element is not enabled or does not allow text entry.
	//   "IGNORE" - Direct Robo to ignore interactions with a specific element.
	ActionType string `json:"actionType,omitempty"`
	// InputText: The text that Robo is directed to set. If left empty, the
	// directive will be treated as a CLICK on the element matching the
	// resource_name.
	InputText string `json:"inputText,omitempty"`
	// ResourceName: Required. The android resource name of the target UI element.
	// For example, in Java: R.string.foo in xml: @string/foo Only the "foo" part
	// is needed. Reference doc:
	// https://developer.android.com/guide/topics/resources/accessing-resources.html
	ResourceName string `json:"resourceName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ActionType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ActionType") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s RoboDirective) MarshalJSON() ([]byte, error) {
	type NoMethod RoboDirective
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// RoboStartingIntent: Message for specifying the start activities to crawl.
type RoboStartingIntent struct {
	// LauncherActivity: An intent that starts the main launcher activity.
	LauncherActivity *LauncherActivityIntent `json:"launcherActivity,omitempty"`
	// NoActivity: Skips the starting activity
	NoActivity *NoActivityIntent `json:"noActivity,omitempty"`
	// StartActivity: An intent that starts an activity with specific details.
	StartActivity *StartActivityIntent `json:"startActivity,omitempty"`
	// Timeout: Timeout in seconds for each intent.
	Timeout string `json:"timeout,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LauncherActivity") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LauncherActivity") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s RoboStartingIntent) MarshalJSON() ([]byte, error) {
	type NoMethod RoboStartingIntent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Service: The section of an tag.
// https://developer.android.com/guide/topics/manifest/service-element
type Service struct {
	// IntentFilter: Intent filters in the service
	IntentFilter []*IntentFilter `json:"intentFilter,omitempty"`
	// Name: The android:name value
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IntentFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IntentFilter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Service) MarshalJSON() ([]byte, error) {
	type NoMethod Service
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SessionStateEvent: A message encapsulating a series of Session states and
// the time that the DeviceSession first entered those states.
type SessionStateEvent struct {
	// EventTime: Output only. The time that the session_state first encountered
	// that state.
	EventTime string `json:"eventTime,omitempty"`
	// SessionState: Output only. The session_state tracked by this event
	//
	// Possible values:
	//   "SESSION_STATE_UNSPECIFIED" - Default value. This value is unused.
	//   "REQUESTED" - Initial state of a session request. The session is being
	// validated for correctness and a device is not yet requested.
	//   "PENDING" - The session has been validated and is in the queue for a
	// device.
	//   "ACTIVE" - The session has been granted and the device is accepting
	// connections.
	//   "EXPIRED" - The session duration exceeded the device’s reservation time
	// period and timed out automatically.
	//   "FINISHED" - The user is finished with the session and it was canceled by
	// the user while the request was still getting allocated or after allocation
	// and during device usage period.
	//   "UNAVAILABLE" - Unable to complete the session because the device was
	// unavailable and it failed to allocate through the scheduler. For example, a
	// device not in the catalog was requested or the request expired in the
	// allocation queue.
	//   "ERROR" - Unable to complete the session for an internal reason, such as
	// an infrastructure failure.
	SessionState string `json:"sessionState,omitempty"`
	// StateMessage: Output only. A human-readable message to explain the state.
	StateMessage string `json:"stateMessage,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EventTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EventTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SessionStateEvent) MarshalJSON() ([]byte, error) {
	type NoMethod SessionStateEvent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Shard: Output only. Details about the shard.
type Shard struct {
	// EstimatedShardDuration: Output only. The estimated shard duration based on
	// previous test case timing records, if available.
	EstimatedShardDuration string `json:"estimatedShardDuration,omitempty"`
	// NumShards: Output only. The total number of shards.
	NumShards int64 `json:"numShards,omitempty"`
	// ShardIndex: Output only. The index of the shard among all the shards.
	ShardIndex int64 `json:"shardIndex,omitempty"`
	// TestTargetsForShard: Output only. Test targets for each shard. Only set for
	// manual sharding.
	TestTargetsForShard *TestTargetsForShard `json:"testTargetsForShard,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EstimatedShardDuration") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EstimatedShardDuration") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Shard) MarshalJSON() ([]byte, error) {
	type NoMethod Shard
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ShardingOption: Options for enabling sharding.
type ShardingOption struct {
	// ManualSharding: Shards test cases into the specified groups of packages,
	// classes, and/or methods.
	ManualSharding *ManualSharding `json:"manualSharding,omitempty"`
	// SmartSharding: Shards test based on previous test case timing records.
	SmartSharding *SmartSharding `json:"smartSharding,omitempty"`
	// UniformSharding: Uniformly shards test cases given a total number of shards.
	UniformSharding *UniformSharding `json:"uniformSharding,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ManualSharding") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ManualSharding") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ShardingOption) MarshalJSON() ([]byte, error) {
	type NoMethod ShardingOption
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SmartSharding: Shards test based on previous test case timing records.
type SmartSharding struct {
	// TargetedShardDuration: The amount of time tests within a shard should take.
	// Default: 300 seconds (5 minutes). The minimum allowed: 120 seconds (2
	// minutes). The shard count is dynamically set based on time, up to the
	// maximum shard limit (described below). To guarantee at least one test case
	// for each shard, the number of shards will not exceed the number of test
	// cases. Shard duration will be exceeded if: - The maximum shard limit is
	// reached and there is more calculated test time remaining to allocate into
	// shards. - Any individual test is estimated to be longer than the targeted
	// shard duration. Shard duration is not guaranteed because smart sharding uses
	// test case history and default durations which may not be accurate. The rules
	// for finding the test case timing records are: - If the service has processed
	// a test case in the last 30 days, the record of the latest successful test
	// case will be used. - For new test cases, the average duration of other known
	// test cases will be used. - If there are no previous test case timing records
	// available, the default test case duration is 15 seconds. Because the actual
	// shard duration can exceed the targeted shard duration, we recommend that you
	// set the targeted value at least 5 minutes less than the maximum allowed test
	// timeout (45 minutes for physical devices and 60 minutes for virtual), or
	// that you use the custom test timeout value that you set. This approach
	// avoids cancelling the shard before all tests can finish. Note that there is
	// a limit for maximum number of shards. When you select one or more physical
	// devices, the number of shards must be <= 50. When you select one or more ARM
	// virtual devices, it must be <= 200. When you select only x86 virtual
	// devices, it must be <= 500. To guarantee at least one test case for per
	// shard, the number of shards will not exceed the number of test cases. Each
	// shard created counts toward daily test quota.
	TargetedShardDuration string `json:"targetedShardDuration,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TargetedShardDuration") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TargetedShardDuration") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SmartSharding) MarshalJSON() ([]byte, error) {
	type NoMethod SmartSharding
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// StartActivityIntent: A starting intent specified by an action, uri, and
// categories.
type StartActivityIntent struct {
	// Action: Action name. Required for START_ACTIVITY.
	Action string `json:"action,omitempty"`
	// Categories: Intent categories to set on the intent.
	Categories []string `json:"categories,omitempty"`
	// Uri: URI for the action.
	Uri string `json:"uri,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Action") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Action") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s StartActivityIntent) MarshalJSON() ([]byte, error) {
	type NoMethod StartActivityIntent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type SystraceSetup struct {
	// DurationSeconds: Systrace duration in seconds. Should be between 1 and 30
	// seconds. 0 disables systrace.
	DurationSeconds int64 `json:"durationSeconds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DurationSeconds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DurationSeconds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SystraceSetup) MarshalJSON() ([]byte, error) {
	type NoMethod SystraceSetup
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestDetails: Additional details about the progress of the running test.
type TestDetails struct {
	// ErrorMessage: Output only. If the TestState is ERROR, then this string will
	// contain human-readable details about the error.
	ErrorMessage string `json:"errorMessage,omitempty"`
	// ProgressMessages: Output only. Human-readable, detailed descriptions of the
	// test's progress. For example: "Provisioning a device", "Starting Test".
	// During the course of execution new data may be appended to the end of
	// progress_messages.
	ProgressMessages []string `json:"progressMessages,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorMessage") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorMessage") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestDetails) MarshalJSON() ([]byte, error) {
	type NoMethod TestDetails
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestEnvironmentCatalog: A description of a test environment.
type TestEnvironmentCatalog struct {
	// AndroidDeviceCatalog: Supported Android devices.
	AndroidDeviceCatalog *AndroidDeviceCatalog `json:"androidDeviceCatalog,omitempty"`
	// DeviceIpBlockCatalog: The IP blocks used by devices in the test environment.
	DeviceIpBlockCatalog *DeviceIpBlockCatalog `json:"deviceIpBlockCatalog,omitempty"`
	// IosDeviceCatalog: Supported iOS devices.
	IosDeviceCatalog *IosDeviceCatalog `json:"iosDeviceCatalog,omitempty"`
	// NetworkConfigurationCatalog: Supported network configurations.
	NetworkConfigurationCatalog *NetworkConfigurationCatalog `json:"networkConfigurationCatalog,omitempty"`
	// SoftwareCatalog: The software test environment provided by
	// TestExecutionService.
	SoftwareCatalog *ProvidedSoftwareCatalog `json:"softwareCatalog,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AndroidDeviceCatalog") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidDeviceCatalog") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestEnvironmentCatalog) MarshalJSON() ([]byte, error) {
	type NoMethod TestEnvironmentCatalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestExecution: A single test executed in a single environment.
type TestExecution struct {
	// Environment: Output only. How the host machine(s) are configured.
	Environment *Environment `json:"environment,omitempty"`
	// Id: Output only. Unique id set by the service.
	Id string `json:"id,omitempty"`
	// MatrixId: Output only. Id of the containing TestMatrix.
	MatrixId string `json:"matrixId,omitempty"`
	// ProjectId: Output only. The cloud project that owns the test execution.
	ProjectId string `json:"projectId,omitempty"`
	// Shard: Output only. Details about the shard.
	Shard *Shard `json:"shard,omitempty"`
	// State: Output only. Indicates the current progress of the test execution
	// (e.g., FINISHED).
	//
	// Possible values:
	//   "TEST_STATE_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "VALIDATING" - The execution or matrix is being validated.
	//   "PENDING" - The execution or matrix is waiting for resources to become
	// available.
	//   "RUNNING" - The execution is currently being processed. Can only be set on
	// an execution.
	//   "FINISHED" - The execution or matrix has terminated normally. On a matrix
	// this means that the matrix level processing completed normally, but
	// individual executions may be in an ERROR state.
	//   "ERROR" - The execution or matrix has stopped because it encountered an
	// infrastructure failure.
	//   "UNSUPPORTED_ENVIRONMENT" - The execution was not run because it
	// corresponds to a unsupported environment. Can only be set on an execution.
	//   "INCOMPATIBLE_ENVIRONMENT" - The execution was not run because the
	// provided inputs are incompatible with the requested environment. Example:
	// requested AndroidVersion is lower than APK's minSdkVersion Can only be set
	// on an execution.
	//   "INCOMPATIBLE_ARCHITECTURE" - The execution was not run because the
	// provided inputs are incompatible with the requested architecture. Example:
	// requested device does not support running the native code in the supplied
	// APK Can only be set on an execution.
	//   "CANCELLED" - The user cancelled the execution. Can only be set on an
	// execution.
	//   "INVALID" - The execution or matrix was not run because the provided
	// inputs are not valid. Examples: input file is not of the expected type, is
	// malformed/corrupt, or was flagged as malware
	State string `json:"state,omitempty"`
	// TestDetails: Output only. Additional details about the running test.
	TestDetails *TestDetails `json:"testDetails,omitempty"`
	// TestSpecification: Output only. How to run the test.
	TestSpecification *TestSpecification `json:"testSpecification,omitempty"`
	// Timestamp: Output only. The time this test execution was initially created.
	Timestamp string `json:"timestamp,omitempty"`
	// ToolResultsStep: Output only. Where the results for this execution are
	// written.
	ToolResultsStep *ToolResultsStep `json:"toolResultsStep,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Environment") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Environment") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestExecution) MarshalJSON() ([]byte, error) {
	type NoMethod TestExecution
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestMatrix: TestMatrix captures all details about a test. It contains the
// environment configuration, test specification, test executions and overall
// state and outcome.
type TestMatrix struct {
	// ClientInfo: Information about the client which invoked the test.
	ClientInfo *ClientInfo `json:"clientInfo,omitempty"`
	// EnvironmentMatrix: Required. The devices the tests are being executed on.
	EnvironmentMatrix *EnvironmentMatrix `json:"environmentMatrix,omitempty"`
	// ExtendedInvalidMatrixDetails: Output only. Details about why a matrix was
	// deemed invalid. If multiple checks can be safely performed, they will be
	// reported but no assumptions should be made about the length of this list.
	ExtendedInvalidMatrixDetails []*MatrixErrorDetail `json:"extendedInvalidMatrixDetails,omitempty"`
	// FailFast: If true, only a single attempt at most will be made to run each
	// execution/shard in the matrix. Flaky test attempts are not affected.
	// Normally, 2 or more attempts are made if a potential infrastructure issue is
	// detected. This feature is for latency sensitive workloads. The incidence of
	// execution failures may be significantly greater for fail-fast matrices and
	// support is more limited because of that expectation.
	FailFast bool `json:"failFast,omitempty"`
	// FlakyTestAttempts: The number of times a TestExecution should be
	// re-attempted if one or more of its test cases fail for any reason. The
	// maximum number of reruns allowed is 10. Default is 0, which implies no
	// reruns.
	FlakyTestAttempts int64 `json:"flakyTestAttempts,omitempty"`
	// InvalidMatrixDetails: Output only. Describes why the matrix is considered
	// invalid. Only useful for matrices in the INVALID state.
	//
	// Possible values:
	//   "INVALID_MATRIX_DETAILS_UNSPECIFIED" - Do not use. For proto versioning
	// only.
	//   "DETAILS_UNAVAILABLE" - The matrix is INVALID, but there are no further
	// details available.
	//   "MALFORMED_APK" - The input app APK could not be parsed.
	//   "MALFORMED_TEST_APK" - The input test APK could not be parsed.
	//   "NO_MANIFEST" - The AndroidManifest.xml could not be found.
	//   "NO_PACKAGE_NAME" - The APK manifest does not declare a package name.
	//   "INVALID_PACKAGE_NAME" - The APK application ID (aka package name) is
	// invalid. See also https://developer.android.com/studio/build/application-id
	//   "TEST_SAME_AS_APP" - The test package and app package are the same.
	//   "NO_INSTRUMENTATION" - The test apk does not declare an instrumentation.
	//   "NO_SIGNATURE" - The input app apk does not have a signature.
	//   "INSTRUMENTATION_ORCHESTRATOR_INCOMPATIBLE" - The test runner class
	// specified by user or in the test APK's manifest file is not compatible with
	// Android Test Orchestrator. Orchestrator is only compatible with
	// AndroidJUnitRunner version 1.1 or higher. Orchestrator can be disabled by
	// using DO_NOT_USE_ORCHESTRATOR OrchestratorOption.
	//   "NO_TEST_RUNNER_CLASS" - The test APK does not contain the test runner
	// class specified by the user or in the manifest file. This can be caused by
	// one of the following reasons: - the user provided a runner class name that's
	// incorrect, or - the test runner isn't built into the test APK (might be in
	// the app APK instead).
	//   "NO_LAUNCHER_ACTIVITY" - A main launcher activity could not be found.
	//   "FORBIDDEN_PERMISSIONS" - The app declares one or more permissions that
	// are not allowed.
	//   "INVALID_ROBO_DIRECTIVES" - There is a conflict in the provided
	// robo_directives.
	//   "INVALID_RESOURCE_NAME" - There is at least one invalid resource name in
	// the provided robo directives
	//   "INVALID_DIRECTIVE_ACTION" - Invalid definition of action in the robo
	// directives (e.g. a click or ignore action includes an input text field)
	//   "TEST_LOOP_INTENT_FILTER_NOT_FOUND" - There is no test loop intent filter,
	// or the one that is given is not formatted correctly.
	//   "SCENARIO_LABEL_NOT_DECLARED" - The request contains a scenario label that
	// was not declared in the manifest.
	//   "SCENARIO_LABEL_MALFORMED" - There was an error when parsing a label's
	// value.
	//   "SCENARIO_NOT_DECLARED" - The request contains a scenario number that was
	// not declared in the manifest.
	//   "DEVICE_ADMIN_RECEIVER" - Device administrator applications are not
	// allowed.
	//   "MALFORMED_XC_TEST_ZIP" - The zipped XCTest was malformed. The zip did not
	// contain a single .xctestrun file and the contents of the
	// DerivedData/Build/Products directory.
	//   "BUILT_FOR_IOS_SIMULATOR" - The zipped XCTest was built for the iOS
	// simulator rather than for a physical device.
	//   "NO_TESTS_IN_XC_TEST_ZIP" - The .xctestrun file did not specify any test
	// targets.
	//   "USE_DESTINATION_ARTIFACTS" - One or more of the test targets defined in
	// the .xctestrun file specifies "UseDestinationArtifacts", which is
	// disallowed.
	//   "TEST_NOT_APP_HOSTED" - XC tests which run on physical devices must have
	// "IsAppHostedTestBundle" == "true" in the xctestrun file.
	//   "PLIST_CANNOT_BE_PARSED" - An Info.plist file in the XCTest zip could not
	// be parsed.
	//   "TEST_ONLY_APK" - The APK is marked as "testOnly". Deprecated and not
	// currently used.
	//   "MALFORMED_IPA" - The input IPA could not be parsed.
	//   "MISSING_URL_SCHEME" - The application doesn't register the game loop URL
	// scheme.
	//   "MALFORMED_APP_BUNDLE" - The iOS application bundle (.app) couldn't be
	// processed.
	//   "NO_CODE_APK" - APK contains no code. See also
	// https://developer.android.com/guide/topics/manifest/application-element.html#code
	//   "INVALID_INPUT_APK" - Either the provided input APK path was malformed,
	// the APK file does not exist, or the user does not have permission to access
	// the APK file.
	//   "INVALID_APK_PREVIEW_SDK" - APK is built for a preview SDK which is
	// unsupported
	//   "MATRIX_TOO_LARGE" - The matrix expanded to contain too many executions.
	//   "TEST_QUOTA_EXCEEDED" - Not enough test quota to run the executions in
	// this matrix.
	//   "SERVICE_NOT_ACTIVATED" - A required cloud service api is not activated.
	// See:
	// https://firebase.google.com/docs/test-lab/android/continuous#requirements
	//   "UNKNOWN_PERMISSION_ERROR" - There was an unknown permission issue running
	// this test.
	InvalidMatrixDetails string `json:"invalidMatrixDetails,omitempty"`
	// OutcomeSummary: Output Only. The overall outcome of the test. Only set when
	// the test matrix state is FINISHED.
	//
	// Possible values:
	//   "OUTCOME_SUMMARY_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "SUCCESS" - The test matrix run was successful, for instance: - All the
	// test cases passed. - Robo did not detect a crash of the application under
	// test.
	//   "FAILURE" - A run failed, for instance: - One or more test cases failed. -
	// A test timed out. - The application under test crashed.
	//   "INCONCLUSIVE" - Something unexpected happened. The run should still be
	// considered unsuccessful but this is likely a transient problem and
	// re-running the test might be successful.
	//   "SKIPPED" - All tests were skipped, for instance: - All device
	// configurations were incompatible.
	OutcomeSummary string `json:"outcomeSummary,omitempty"`
	// ProjectId: The cloud project that owns the test matrix.
	ProjectId string `json:"projectId,omitempty"`
	// ResultStorage: Required. Where the results for the matrix are written.
	ResultStorage *ResultStorage `json:"resultStorage,omitempty"`
	// State: Output only. Indicates the current progress of the test matrix.
	//
	// Possible values:
	//   "TEST_STATE_UNSPECIFIED" - Do not use. For proto versioning only.
	//   "VALIDATING" - The execution or matrix is being validated.
	//   "PENDING" - The execution or matrix is waiting for resources to become
	// available.
	//   "RUNNING" - The execution is currently being processed. Can only be set on
	// an execution.
	//   "FINISHED" - The execution or matrix has terminated normally. On a matrix
	// this means that the matrix level processing completed normally, but
	// individual executions may be in an ERROR state.
	//   "ERROR" - The execution or matrix has stopped because it encountered an
	// infrastructure failure.
	//   "UNSUPPORTED_ENVIRONMENT" - The execution was not run because it
	// corresponds to a unsupported environment. Can only be set on an execution.
	//   "INCOMPATIBLE_ENVIRONMENT" - The execution was not run because the
	// provided inputs are incompatible with the requested environment. Example:
	// requested AndroidVersion is lower than APK's minSdkVersion Can only be set
	// on an execution.
	//   "INCOMPATIBLE_ARCHITECTURE" - The execution was not run because the
	// provided inputs are incompatible with the requested architecture. Example:
	// requested device does not support running the native code in the supplied
	// APK Can only be set on an execution.
	//   "CANCELLED" - The user cancelled the execution. Can only be set on an
	// execution.
	//   "INVALID" - The execution or matrix was not run because the provided
	// inputs are not valid. Examples: input file is not of the expected type, is
	// malformed/corrupt, or was flagged as malware
	State string `json:"state,omitempty"`
	// TestExecutions: Output only. The list of test executions that the service
	// creates for this matrix.
	TestExecutions []*TestExecution `json:"testExecutions,omitempty"`
	// TestMatrixId: Output only. Unique id set by the service.
	TestMatrixId string `json:"testMatrixId,omitempty"`
	// TestSpecification: Required. How to run the test.
	TestSpecification *TestSpecification `json:"testSpecification,omitempty"`
	// Timestamp: Output only. The time this test matrix was initially created.
	Timestamp string `json:"timestamp,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ClientInfo") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClientInfo") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestMatrix) MarshalJSON() ([]byte, error) {
	type NoMethod TestMatrix
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestSetup: A description of how to set up the Android device prior to
// running the test.
type TestSetup struct {
	// Account: The device will be logged in on this account for the duration of
	// the test.
	Account *Account `json:"account,omitempty"`
	// AdditionalApks: APKs to install in addition to those being directly tested.
	// These will be installed after the app under test. Limited to a combined
	// total of 100 initial setup and additional files.
	AdditionalApks []*Apk `json:"additionalApks,omitempty"`
	// DirectoriesToPull: List of directories on the device to upload to GCS at the
	// end of the test; they must be absolute paths under /sdcard, /storage or
	// /data/local/tmp. Path names are restricted to characters a-z A-Z 0-9 _ - . +
	// and / Note: The paths /sdcard and /data will be made available and treated
	// as implicit path substitutions. E.g. if /sdcard on a particular device does
	// not map to external storage, the system will replace it with the external
	// storage path prefix for that device.
	DirectoriesToPull []string `json:"directoriesToPull,omitempty"`
	// DontAutograntPermissions: Whether to prevent all runtime permissions to be
	// granted at app install
	DontAutograntPermissions bool `json:"dontAutograntPermissions,omitempty"`
	// EnvironmentVariables: Environment variables to set for the test (only
	// applicable for instrumentation tests).
	EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables,omitempty"`
	// FilesToPush: List of files to push to the device before starting the test.
	FilesToPush []*DeviceFile `json:"filesToPush,omitempty"`
	// InitialSetupApks: Optional. Initial setup APKs to install before the app
	// under test is installed. Limited to a combined total of 100 initial setup
	// and additional files.
	InitialSetupApks []*Apk `json:"initialSetupApks,omitempty"`
	// NetworkProfile: The network traffic profile used for running the test.
	// Available network profiles can be queried by using the NETWORK_CONFIGURATION
	// environment type when calling
	// TestEnvironmentDiscoveryService.GetTestEnvironmentCatalog.
	NetworkProfile string `json:"networkProfile,omitempty"`
	// Systrace: Systrace configuration for the run. Deprecated: Systrace used
	// Python 2 which was sunsetted on 2020-01-01. Systrace is no longer supported
	// in the Cloud Testing API, and no Systrace file will be provided in the
	// results.
	Systrace *SystraceSetup `json:"systrace,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Account") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Account") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestSetup) MarshalJSON() ([]byte, error) {
	type NoMethod TestSetup
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestSpecification: A description of how to run the test.
type TestSpecification struct {
	// AndroidInstrumentationTest: An Android instrumentation test.
	AndroidInstrumentationTest *AndroidInstrumentationTest `json:"androidInstrumentationTest,omitempty"`
	// AndroidRoboTest: An Android robo test.
	AndroidRoboTest *AndroidRoboTest `json:"androidRoboTest,omitempty"`
	// AndroidTestLoop: An Android Application with a Test Loop.
	AndroidTestLoop *AndroidTestLoop `json:"androidTestLoop,omitempty"`
	// DisablePerformanceMetrics: Disables performance metrics recording. May
	// reduce test latency.
	DisablePerformanceMetrics bool `json:"disablePerformanceMetrics,omitempty"`
	// DisableVideoRecording: Disables video recording. May reduce test latency.
	DisableVideoRecording bool `json:"disableVideoRecording,omitempty"`
	// IosRoboTest: An iOS Robo test.
	IosRoboTest *IosRoboTest `json:"iosRoboTest,omitempty"`
	// IosTestLoop: An iOS application with a test loop.
	IosTestLoop *IosTestLoop `json:"iosTestLoop,omitempty"`
	// IosTestSetup: Test setup requirements for iOS.
	IosTestSetup *IosTestSetup `json:"iosTestSetup,omitempty"`
	// IosXcTest: An iOS XCTest, via an .xctestrun file.
	IosXcTest *IosXcTest `json:"iosXcTest,omitempty"`
	// TestSetup: Test setup requirements for Android e.g. files to install,
	// bootstrap scripts.
	TestSetup *TestSetup `json:"testSetup,omitempty"`
	// TestTimeout: Max time a test execution is allowed to run before it is
	// automatically cancelled. The default value is 5 min.
	TestTimeout string `json:"testTimeout,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AndroidInstrumentationTest")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AndroidInstrumentationTest") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestSpecification) MarshalJSON() ([]byte, error) {
	type NoMethod TestSpecification
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TestTargetsForShard: Test targets for a shard.
type TestTargetsForShard struct {
	// TestTargets: Group of packages, classes, and/or test methods to be run for
	// each shard. The targets need to be specified in AndroidJUnitRunner argument
	// format. For example, "package com.my.packages" "class
	// com.my.package.MyClass". The number of test_targets must be greater than 0.
	TestTargets []string `json:"testTargets,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TestTargets") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TestTargets") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TestTargetsForShard) MarshalJSON() ([]byte, error) {
	type NoMethod TestTargetsForShard
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ToolResultsExecution: Represents a tool results execution resource. This has
// the results of a TestMatrix.
type ToolResultsExecution struct {
	// ExecutionId: Output only. A tool results execution ID.
	ExecutionId string `json:"executionId,omitempty"`
	// HistoryId: Output only. A tool results history ID.
	HistoryId string `json:"historyId,omitempty"`
	// ProjectId: Output only. The cloud project that owns the tool results
	// execution.
	ProjectId string `json:"projectId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExecutionId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExecutionId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ToolResultsExecution) MarshalJSON() ([]byte, error) {
	type NoMethod ToolResultsExecution
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ToolResultsHistory: Represents a tool results history resource.
type ToolResultsHistory struct {
	// HistoryId: Required. A tool results history ID.
	HistoryId string `json:"historyId,omitempty"`
	// ProjectId: Required. The cloud project that owns the tool results history.
	ProjectId string `json:"projectId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "HistoryId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "HistoryId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ToolResultsHistory) MarshalJSON() ([]byte, error) {
	type NoMethod ToolResultsHistory
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ToolResultsStep: Represents a tool results step resource. This has the
// results of a TestExecution.
type ToolResultsStep struct {
	// ExecutionId: Output only. A tool results execution ID.
	ExecutionId string `json:"executionId,omitempty"`
	// HistoryId: Output only. A tool results history ID.
	HistoryId string `json:"historyId,omitempty"`
	// ProjectId: Output only. The cloud project that owns the tool results step.
	ProjectId string `json:"projectId,omitempty"`
	// StepId: Output only. A tool results step ID.
	StepId string `json:"stepId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExecutionId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExecutionId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ToolResultsStep) MarshalJSON() ([]byte, error) {
	type NoMethod ToolResultsStep
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TrafficRule: Network emulation parameters.
type TrafficRule struct {
	// Bandwidth: Bandwidth in kbits/second.
	Bandwidth float64 `json:"bandwidth,omitempty"`
	// Burst: Burst size in kbits.
	Burst float64 `json:"burst,omitempty"`
	// Delay: Packet delay, must be >= 0.
	Delay string `json:"delay,omitempty"`
	// PacketDuplicationRatio: Packet duplication ratio (0.0 - 1.0).
	PacketDuplicationRatio float64 `json:"packetDuplicationRatio,omitempty"`
	// PacketLossRatio: Packet loss ratio (0.0 - 1.0).
	PacketLossRatio float64 `json:"packetLossRatio,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Bandwidth") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Bandwidth") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TrafficRule) MarshalJSON() ([]byte, error) {
	type NoMethod TrafficRule
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *TrafficRule) UnmarshalJSON(data []byte) error {
	type NoMethod TrafficRule
	var s1 struct {
		Bandwidth              gensupport.JSONFloat64 `json:"bandwidth"`
		Burst                  gensupport.JSONFloat64 `json:"burst"`
		PacketDuplicationRatio gensupport.JSONFloat64 `json:"packetDuplicationRatio"`
		PacketLossRatio        gensupport.JSONFloat64 `json:"packetLossRatio"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Bandwidth = float64(s1.Bandwidth)
	s.Burst = float64(s1.Burst)
	s.PacketDuplicationRatio = float64(s1.PacketDuplicationRatio)
	s.PacketLossRatio = float64(s1.PacketLossRatio)
	return nil
}

// UniformSharding: Uniformly shards test cases given a total number of shards.
// For instrumentation tests, it will be translated to "-e numShard" and "-e
// shardIndex" AndroidJUnitRunner arguments. With uniform sharding enabled,
// specifying either of these sharding arguments via `environment_variables` is
// invalid. Based on the sharding mechanism AndroidJUnitRunner uses, there is
// no guarantee that test cases will be distributed uniformly across all
// shards.
type UniformSharding struct {
	// NumShards: Required. The total number of shards to create. This must always
	// be a positive number that is no greater than the total number of test cases.
	// When you select one or more physical devices, the number of shards must be
	// <= 50. When you select one or more ARM virtual devices, it must be <= 200.
	// When you select only x86 virtual devices, it must be <= 500.
	NumShards int64 `json:"numShards,omitempty"`
	// ForceSendFields is a list of field names (e.g. "NumShards") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NumShards") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s UniformSharding) MarshalJSON() ([]byte, error) {
	type NoMethod UniformSharding
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// UsesFeature: A tag within a manifest.
// https://developer.android.com/guide/topics/manifest/uses-feature-element.html
type UsesFeature struct {
	// IsRequired: The android:required value
	IsRequired bool `json:"isRequired,omitempty"`
	// Name: The android:name value
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IsRequired") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IsRequired") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s UsesFeature) MarshalJSON() ([]byte, error) {
	type NoMethod UsesFeature
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// UsesPermissionTag: The tag within a manifest.
// https://developer.android.com/guide/topics/manifest/uses-permission-element.html
type UsesPermissionTag struct {
	// MaxSdkVersion: The android:name value
	MaxSdkVersion int64 `json:"maxSdkVersion,omitempty"`
	// Name: The android:name value
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MaxSdkVersion") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MaxSdkVersion") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s UsesPermissionTag) MarshalJSON() ([]byte, error) {
	type NoMethod UsesPermissionTag
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// XcodeVersion: An Xcode version that an iOS version is compatible with.
type XcodeVersion struct {
	// Tags: Tags for this Xcode version. Example: "default".
	Tags []string `json:"tags,omitempty"`
	// Version: The id for this version. Example: "9.2".
	Version string `json:"version,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Tags") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Tags") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s XcodeVersion) MarshalJSON() ([]byte, error) {
	type NoMethod XcodeVersion
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type ApplicationDetailServiceGetApkDetailsCall struct {
	s             *APIService
	filereference *FileReference
	urlParams_    gensupport.URLParams
	ctx_          context.Context
	header_       http.Header
}

// GetApkDetails: Gets the details of an Android application APK.
func (r *ApplicationDetailServiceService) GetApkDetails(filereference *FileReference) *ApplicationDetailServiceGetApkDetailsCall {
	c := &ApplicationDetailServiceGetApkDetailsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.filereference = filereference
	return c
}

// BundleLocationGcsPath sets the optional parameter "bundleLocation.gcsPath":
// A path to a file in Google Cloud Storage. Example:
// gs://build-app-1414623860166/app%40debug-unaligned.apk These paths are
// expected to be url encoded (percent encoding)
func (c *ApplicationDetailServiceGetApkDetailsCall) BundleLocationGcsPath(bundleLocationGcsPath string) *ApplicationDetailServiceGetApkDetailsCall {
	c.urlParams_.Set("bundleLocation.gcsPath", bundleLocationGcsPath)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ApplicationDetailServiceGetApkDetailsCall) Fields(s ...googleapi.Field) *ApplicationDetailServiceGetApkDetailsCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ApplicationDetailServiceGetApkDetailsCall) Context(ctx context.Context) *ApplicationDetailServiceGetApkDetailsCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ApplicationDetailServiceGetApkDetailsCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ApplicationDetailServiceGetApkDetailsCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.filereference)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/applicationDetailService/getApkDetails")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.applicationDetailService.getApkDetails", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.applicationDetailService.getApkDetails" call.
// Any non-2xx status code is an error. Response headers are in either
// *GetApkDetailsResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ApplicationDetailServiceGetApkDetailsCall) Do(opts ...googleapi.CallOption) (*GetApkDetailsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GetApkDetailsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.applicationDetailService.getApkDetails", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsDeviceSessionsCancelCall struct {
	s                          *APIService
	name                       string
	canceldevicesessionrequest *CancelDeviceSessionRequest
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Cancel: POST
// /v1/projects/{project_id}/deviceSessions/{device_session_id}:cancel Changes
// the DeviceSession to state FINISHED and terminates all connections. Canceled
// sessions are not deleted and can be retrieved or listed by the user until
// they expire based on the 28 day deletion policy.
//
//   - name: Name of the DeviceSession, e.g.
//     "projects/{project_id}/deviceSessions/{session_id}".
func (r *ProjectsDeviceSessionsService) Cancel(name string, canceldevicesessionrequest *CancelDeviceSessionRequest) *ProjectsDeviceSessionsCancelCall {
	c := &ProjectsDeviceSessionsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.canceldevicesessionrequest = canceldevicesessionrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsDeviceSessionsCancelCall) Fields(s ...googleapi.Field) *ProjectsDeviceSessionsCancelCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsDeviceSessionsCancelCall) Context(ctx context.Context) *ProjectsDeviceSessionsCancelCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsDeviceSessionsCancelCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsDeviceSessionsCancelCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.canceldevicesessionrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.cancel", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.deviceSessions.cancel" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsDeviceSessionsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.cancel", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsDeviceSessionsCreateCall struct {
	s             *APIService
	parent        string
	devicesession *DeviceSession
	urlParams_    gensupport.URLParams
	ctx_          context.Context
	header_       http.Header
}

// Create: POST /v1/projects/{project_id}/deviceSessions
//
//   - parent: The Compute Engine project under which this device will be
//     allocated. "projects/{project_id}".
func (r *ProjectsDeviceSessionsService) Create(parent string, devicesession *DeviceSession) *ProjectsDeviceSessionsCreateCall {
	c := &ProjectsDeviceSessionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.devicesession = devicesession
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsDeviceSessionsCreateCall) Fields(s ...googleapi.Field) *ProjectsDeviceSessionsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsDeviceSessionsCreateCall) Context(ctx context.Context) *ProjectsDeviceSessionsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsDeviceSessionsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsDeviceSessionsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.devicesession)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/deviceSessions")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.deviceSessions.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *DeviceSession.ServerResponse.Header or (if a response was returned at all)
// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsDeviceSessionsCreateCall) Do(opts ...googleapi.CallOption) (*DeviceSession, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &DeviceSession{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsDeviceSessionsGetCall struct {
	s            *APIService
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: GET /v1/projects/{project_id}/deviceSessions/{device_session_id} Return
// a DeviceSession, which documents the allocation status and whether the
// device is allocated. Clients making requests from this API must poll
// GetDeviceSession.
//
//   - name: Name of the DeviceSession, e.g.
//     "projects/{project_id}/deviceSessions/{session_id}".
func (r *ProjectsDeviceSessionsService) Get(name string) *ProjectsDeviceSessionsGetCall {
	c := &ProjectsDeviceSessionsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsDeviceSessionsGetCall) Fields(s ...googleapi.Field) *ProjectsDeviceSessionsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsDeviceSessionsGetCall) IfNoneMatch(entityTag string) *ProjectsDeviceSessionsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsDeviceSessionsGetCall) Context(ctx context.Context) *ProjectsDeviceSessionsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsDeviceSessionsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsDeviceSessionsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.deviceSessions.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *DeviceSession.ServerResponse.Header or (if a response was returned at all)
// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsDeviceSessionsGetCall) Do(opts ...googleapi.CallOption) (*DeviceSession, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &DeviceSession{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsDeviceSessionsListCall struct {
	s            *APIService
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: GET /v1/projects/{project_id}/deviceSessions Lists device Sessions
// owned by the project user.
//
// - parent: The name of the parent to request, e.g. "projects/{project_id}".
func (r *ProjectsDeviceSessionsService) List(parent string) *ProjectsDeviceSessionsListCall {
	c := &ProjectsDeviceSessionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": If specified, responses will be
// filtered by the given filter. Allowed fields are: session_state.
func (c *ProjectsDeviceSessionsListCall) Filter(filter string) *ProjectsDeviceSessionsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// DeviceSessions to return.
func (c *ProjectsDeviceSessionsListCall) PageSize(pageSize int64) *ProjectsDeviceSessionsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A continuation token for
// paging.
func (c *ProjectsDeviceSessionsListCall) PageToken(pageToken string) *ProjectsDeviceSessionsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsDeviceSessionsListCall) Fields(s ...googleapi.Field) *ProjectsDeviceSessionsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsDeviceSessionsListCall) IfNoneMatch(entityTag string) *ProjectsDeviceSessionsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsDeviceSessionsListCall) Context(ctx context.Context) *ProjectsDeviceSessionsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsDeviceSessionsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsDeviceSessionsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/deviceSessions")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.deviceSessions.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListDeviceSessionsResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsDeviceSessionsListCall) Do(opts ...googleapi.CallOption) (*ListDeviceSessionsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListDeviceSessionsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsDeviceSessionsListCall) Pages(ctx context.Context, f func(*ListDeviceSessionsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsDeviceSessionsPatchCall struct {
	s             *APIService
	name          string
	devicesession *DeviceSession
	urlParams_    gensupport.URLParams
	ctx_          context.Context
	header_       http.Header
}

// Patch: PATCH
// /v1/projects/{projectId}/deviceSessions/deviceSessionId}:updateDeviceSession
// Updates the current device session to the fields described by the
// update_mask.
//
//   - name: Optional. Name of the DeviceSession, e.g.
//     "projects/{project_id}/deviceSessions/{session_id}".
func (r *ProjectsDeviceSessionsService) Patch(name string, devicesession *DeviceSession) *ProjectsDeviceSessionsPatchCall {
	c := &ProjectsDeviceSessionsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.devicesession = devicesession
	return c
}

// UpdateMask sets the optional parameter "updateMask": Required. The list of
// fields to update.
func (c *ProjectsDeviceSessionsPatchCall) UpdateMask(updateMask string) *ProjectsDeviceSessionsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsDeviceSessionsPatchCall) Fields(s ...googleapi.Field) *ProjectsDeviceSessionsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsDeviceSessionsPatchCall) Context(ctx context.Context) *ProjectsDeviceSessionsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsDeviceSessionsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsDeviceSessionsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.devicesession)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.deviceSessions.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *DeviceSession.ServerResponse.Header or (if a response was returned at all)
// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsDeviceSessionsPatchCall) Do(opts ...googleapi.CallOption) (*DeviceSession, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &DeviceSession{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.deviceSessions.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTestMatricesCancelCall struct {
	s            *APIService
	projectId    string
	testMatrixId string
	urlParams_   gensupport.URLParams
	ctx_         context.Context
	header_      http.Header
}

// Cancel: Cancels unfinished test executions in a test matrix. This call
// returns immediately and cancellation proceeds asynchronously. If the matrix
// is already final, this operation will have no effect. May return any of the
// following canonical error codes: - PERMISSION_DENIED - if the user is not
// authorized to read project - INVALID_ARGUMENT - if the request is malformed
// - NOT_FOUND - if the Test Matrix does not exist
//
// - projectId: Cloud project that owns the test.
// - testMatrixId: Test matrix that will be canceled.
func (r *ProjectsTestMatricesService) Cancel(projectId string, testMatrixId string) *ProjectsTestMatricesCancelCall {
	c := &ProjectsTestMatricesCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.projectId = projectId
	c.testMatrixId = testMatrixId
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTestMatricesCancelCall) Fields(s ...googleapi.Field) *ProjectsTestMatricesCancelCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTestMatricesCancelCall) Context(ctx context.Context) *ProjectsTestMatricesCancelCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTestMatricesCancelCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTestMatricesCancelCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/testMatrices/{testMatrixId}:cancel")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"projectId":    c.projectId,
		"testMatrixId": c.testMatrixId,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.cancel", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.testMatrices.cancel" call.
// Any non-2xx status code is an error. Response headers are in either
// *CancelTestMatrixResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsTestMatricesCancelCall) Do(opts ...googleapi.CallOption) (*CancelTestMatrixResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &CancelTestMatrixResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.cancel", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTestMatricesCreateCall struct {
	s          *APIService
	projectId  string
	testmatrix *TestMatrix
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Creates and runs a matrix of tests according to the given
// specifications. Unsupported environments will be returned in the state
// UNSUPPORTED. A test matrix is limited to use at most 2000 devices in
// parallel. The returned matrix will not yet contain the executions that will
// be created for this matrix. Execution creation happens later on and will
// require a call to GetTestMatrix. May return any of the following canonical
// error codes: - PERMISSION_DENIED - if the user is not authorized to write to
// project - INVALID_ARGUMENT - if the request is malformed or if the matrix
// tries to use too many simultaneous devices.
//
// - projectId: The GCE project under which this job will run.
func (r *ProjectsTestMatricesService) Create(projectId string, testmatrix *TestMatrix) *ProjectsTestMatricesCreateCall {
	c := &ProjectsTestMatricesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.projectId = projectId
	c.testmatrix = testmatrix
	return c
}

// RequestId sets the optional parameter "requestId": A string id used to
// detect duplicated requests. Ids are automatically scoped to a project, so
// users should ensure the ID is unique per-project. A UUID is recommended.
// Optional, but strongly recommended.
func (c *ProjectsTestMatricesCreateCall) RequestId(requestId string) *ProjectsTestMatricesCreateCall {
	c.urlParams_.Set("requestId", requestId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTestMatricesCreateCall) Fields(s ...googleapi.Field) *ProjectsTestMatricesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTestMatricesCreateCall) Context(ctx context.Context) *ProjectsTestMatricesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTestMatricesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTestMatricesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.testmatrix)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/testMatrices")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"projectId": c.projectId,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.testMatrices.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *TestMatrix.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsTestMatricesCreateCall) Do(opts ...googleapi.CallOption) (*TestMatrix, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &TestMatrix{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTestMatricesGetCall struct {
	s            *APIService
	projectId    string
	testMatrixId string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Checks the status of a test matrix and the executions once they are
// created. The test matrix will contain the list of test executions to run if
// and only if the resultStorage.toolResultsExecution fields have been
// populated. Note: Flaky test executions may be added to the matrix at a later
// stage. May return any of the following canonical error codes: -
// PERMISSION_DENIED - if the user is not authorized to read project -
// INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the Test
// Matrix does not exist
//
// - projectId: Cloud project that owns the test matrix.
// - testMatrixId: Unique test matrix id which was assigned by the service.
func (r *ProjectsTestMatricesService) Get(projectId string, testMatrixId string) *ProjectsTestMatricesGetCall {
	c := &ProjectsTestMatricesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.projectId = projectId
	c.testMatrixId = testMatrixId
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTestMatricesGetCall) Fields(s ...googleapi.Field) *ProjectsTestMatricesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsTestMatricesGetCall) IfNoneMatch(entityTag string) *ProjectsTestMatricesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTestMatricesGetCall) Context(ctx context.Context) *ProjectsTestMatricesGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTestMatricesGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTestMatricesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/testMatrices/{testMatrixId}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"projectId":    c.projectId,
		"testMatrixId": c.testMatrixId,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.projects.testMatrices.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *TestMatrix.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsTestMatricesGetCall) Do(opts ...googleapi.CallOption) (*TestMatrix, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &TestMatrix{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.projects.testMatrices.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type TestEnvironmentCatalogGetCall struct {
	s               *APIService
	environmentType string
	urlParams_      gensupport.URLParams
	ifNoneMatch_    string
	ctx_            context.Context
	header_         http.Header
}

// Get: Gets the catalog of supported test environments. May return any of the
// following canonical error codes: - INVALID_ARGUMENT - if the request is
// malformed - NOT_FOUND - if the environment type does not exist - INTERNAL -
// if an internal error occurred
//
// - environmentType: The type of environment that should be listed.
func (r *TestEnvironmentCatalogService) Get(environmentType string) *TestEnvironmentCatalogGetCall {
	c := &TestEnvironmentCatalogGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.environmentType = environmentType
	return c
}

// IncludeViewableModels sets the optional parameter "includeViewableModels":
// Whether to include viewable only models in the response. This is only
// applicable for Android models.
func (c *TestEnvironmentCatalogGetCall) IncludeViewableModels(includeViewableModels bool) *TestEnvironmentCatalogGetCall {
	c.urlParams_.Set("includeViewableModels", fmt.Sprint(includeViewableModels))
	return c
}

// ProjectId sets the optional parameter "projectId": For authorization, the
// cloud project requesting the TestEnvironmentCatalog.
func (c *TestEnvironmentCatalogGetCall) ProjectId(projectId string) *TestEnvironmentCatalogGetCall {
	c.urlParams_.Set("projectId", projectId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *TestEnvironmentCatalogGetCall) Fields(s ...googleapi.Field) *TestEnvironmentCatalogGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *TestEnvironmentCatalogGetCall) IfNoneMatch(entityTag string) *TestEnvironmentCatalogGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *TestEnvironmentCatalogGetCall) Context(ctx context.Context) *TestEnvironmentCatalogGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *TestEnvironmentCatalogGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *TestEnvironmentCatalogGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/testEnvironmentCatalog/{environmentType}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"environmentType": c.environmentType,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "testing.testEnvironmentCatalog.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "testing.testEnvironmentCatalog.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *TestEnvironmentCatalog.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *TestEnvironmentCatalogGetCall) Do(opts ...googleapi.CallOption) (*TestEnvironmentCatalog, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &TestEnvironmentCatalog{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "testing.testEnvironmentCatalog.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}
