e2etestrunner/e2e_testing.go (67 lines of code) (raw):

// Copyright 2021 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package e2etestrunner import ( "context" "log" "time" "github.com/GoogleCloudPlatform/opentelemetry-operations-e2e-testing/e2etestrunner/testclient" ) type ApplyPersistent struct { AutoApprove bool `arg:"--auto-approve" default:"false" help:"Approve without prompting. Default is false."` } type CmdWithProjectId struct { ProjectID string `arg:"required,--project-id,env:PROJECT_ID" help:"GCP project id/name"` } type CmdWithImage struct { Image string `arg:"required" help:"docker container image to deploy and test"` } type LocalCmd struct { CmdWithImage Port string `default:"8000"` // Needed when running without a metadata server for credentials GoogleApplicationCredentials string `arg:"--google-application-credentials,env:GOOGLE_APPLICATION_CREDENTIALS" help:"Path to google credentials key file to mount into test server container"` // May be needed when running this binary in a container Network string `help:"Docker network to use when starting the container, optional"` ContainerUser string `arg:"--container-user" help:"Optional user to use when running the container"` } type GceCmd struct { CmdWithImage } type GkeCmd struct { CmdWithImage } type GaeCmd struct { CmdWithImage Runtime string `arg:"required" help:"The language runtime for the instrumented test server, used in naming the service"` } type GaeStandardCmd struct { Runtime string `arg:"required" help:"The language runtime for the instrumented test server, used in naming the service"` AppSource string `arg:"required" help:"The full path of the zip file that contains the source code to run in GAE"` Entrypoint string `help:"Optional entrypoint to control how GAE starts the application. See https://cloud.google.com/appengine/docs/standard/reference/app-yaml#entrypoint"` } type CloudRunCmd struct { CmdWithImage } type CloudFunctionsGen2Cmd struct { // Needed to configure which language will the function instance support Runtime string `arg:"required" help:"Configure the language runtime environment for CloudFunction"` EntryPoint string `arg:"required" help:"The entry point for the code that will run in this CloudFunction"` FunctionSource string `arg:"required" help:"The full path of the zip file that contains the code source that needs to run within the CloudFunction"` } type Args struct { // This subcommand is a special case, it doesn't run any tests. It just // applies the persistent resources which are used across tests. See // tf/persistent/README.md for details on what is in there. ApplyPersistent *ApplyPersistent `arg:"subcommand:apply-persistent" help:"Terraform apply the resources in tf/persistent and exit (does not run tests)."` Local *LocalCmd `arg:"subcommand:local" help:"Deploy the test server locally with docker and execute tests"` Gke *GkeCmd `arg:"subcommand:gke" help:"Deploy the test server on GKE and execute tests"` Gce *GceCmd `arg:"subcommand:gce" help:"Deploy the test server on GCE and execute tests"` Gae *GaeCmd `arg:"subcommand:gae" help:"Deploy the test server on GAE and execute tests"` GaeStandard *GaeStandardCmd `arg:"subcommand:gae-standard" help:"Deploy the test server on GAE standard and execute tests"` CloudRun *CloudRunCmd `arg:"subcommand:cloud-run" help:"Deploy the test server on Cloud Run and execute tests"` CloudFunctionsGen2 *CloudFunctionsGen2Cmd `arg:"subcommand:cloud-functions-gen2" help:"Deploy the test server on Cloud Function (2nd Gen) and execute tests"` CmdWithProjectId GoTestFlags string `help:"go test flags to pass through, e.g. --gotestflags='-test.v'"` HealthCheckTimeout time.Duration `arg:"--health-check-timeout" help:"A duration (e.g. 5m) to wait for the test server health check. Default is 2m." default:"2m"` // This is used in a new terraform workspace's name and in the GCP resources // we create. Pass the GCB build ID in CI to get the build id formatted into // resources created for debugging. If not provided, we generate a hex // string. TestRunID string `arg:"--test-run-id,env:TEST_RUN_ID" help:"Optional test run id to use to partition terraform resources"` } type Cleanup func() type SetupFunc func( context.Context, *Args, *log.Logger, ) (*testclient.Client, Cleanup, error) func NoopCleanup() {}