|
| 1 | +//go:build e2ecollector |
| 2 | + |
| 3 | +package e2etestrunner_collector |
| 4 | + |
| 5 | +import ( |
| 6 | + "context" |
| 7 | + "flag" |
| 8 | + "github.com/GoogleCloudPlatform/opentelemetry-operations-e2e-testing/util" |
| 9 | + "github.com/GoogleCloudPlatform/opentelemetry-operations-e2e-testing/util/setuptf" |
| 10 | + "log" |
| 11 | + "math/rand" |
| 12 | + "os" |
| 13 | + "strings" |
| 14 | + "testing" |
| 15 | + "time" |
| 16 | + |
| 17 | + "github.com/alexflint/go-arg" |
| 18 | +) |
| 19 | + |
| 20 | +var ( |
| 21 | + args util.Args |
| 22 | + resourceType string |
| 23 | +) |
| 24 | + |
| 25 | +func TestMain(m *testing.M) { |
| 26 | + rand.New(rand.NewSource(time.Now().UnixNano())) |
| 27 | + p := arg.MustParse(&args) |
| 28 | + if p.Subcommand() == nil { |
| 29 | + p.Fail("missing command") |
| 30 | + } |
| 31 | + // Need a logger just for TestMain() before testing.T is available |
| 32 | + logger := log.New(os.Stdout, "TestMain: ", log.LstdFlags|log.Lshortfile) |
| 33 | + ctx := context.Background() |
| 34 | + |
| 35 | + // Handle special case of just creating persistent resources |
| 36 | + if args.ApplyPersistent != nil { |
| 37 | + err := setuptf.ApplyPersistentCollector(ctx, args.ProjectID, args.ApplyPersistent.AutoApprove, logger) |
| 38 | + if err != nil { |
| 39 | + logger.Panic(err) |
| 40 | + } |
| 41 | + return |
| 42 | + } |
| 43 | + |
| 44 | + // hacky but works |
| 45 | + os.Args = append([]string{os.Args[0]}, strings.Fields(args.GoTestFlags)...) |
| 46 | + flag.Parse() |
| 47 | + |
| 48 | + // handle any complex defaults |
| 49 | + if args.TestRunID == "" { |
| 50 | + hex, err := util.RandomHex(6) |
| 51 | + if err != nil { |
| 52 | + logger.Fatalf("error generating random hex string: %v\n", err) |
| 53 | + } |
| 54 | + args.TestRunID = hex |
| 55 | + } |
| 56 | + |
| 57 | + var setupFunc util.SetupCollectorFunc |
| 58 | + switch { |
| 59 | + case args.GceCollector != nil: |
| 60 | + setupFunc = SetupGceCollector |
| 61 | + resourceType = "gce_instance" |
| 62 | + case args.GkeCollector != nil: |
| 63 | + setupFunc = SetupGkeCollector |
| 64 | + resourceType = "k8s_container" |
| 65 | + case args.GkeOperatorCollector != nil: |
| 66 | + setupFunc = SetupGkeOperatorCollector |
| 67 | + resourceType = "k8s_container" |
| 68 | + case args.CloudRunCollector != nil: |
| 69 | + setupFunc = SetupCloudRunCollector |
| 70 | + resourceType = "generic_task" |
| 71 | + } |
| 72 | + cleanup, err := setupFunc(ctx, &args, logger) |
| 73 | + |
| 74 | + defer cleanup() |
| 75 | + if err != nil { |
| 76 | + logger.Panic(err) |
| 77 | + } |
| 78 | + |
| 79 | + // wait for instrumented test server to be healthy |
| 80 | + logger.Printf("Waiting for health check on (will timeout after %v)\n", args.HealthCheckTimeout) |
| 81 | + time.Sleep(args.HealthCheckTimeout) |
| 82 | + // Run tests |
| 83 | + logger.Print(util.BeginOutputArt) |
| 84 | + m.Run() |
| 85 | + logger.Print(util.EndOutputArt) |
| 86 | +} |
0 commit comments