// run // Copyright 2022 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "fmt" "path/filepath" "testing" ) var t *testing.T type TypeMeta struct { Kind string APIVersion string } type ObjectMeta struct { Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"` SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"` } type ConfigSpec struct { Disks []DiskSpec StorageClass string } type DiskSpec struct { Name string Size string StorageClass string Annotations map[string]string VolumeName string } // Config is the Schema for the configs API. type Config struct { TypeMeta ObjectMeta Spec ConfigSpec } func findDiskSize(diskSpec *DiskSpec, configSpec *ConfigSpec) string { t.Log(fmt.Sprintf("Hello World")) return diskSpec.Size } func findStorageClassName(diskSpec *DiskSpec, configSpec *ConfigSpec) *string { if diskSpec.StorageClass != "" { return &diskSpec.StorageClass } if configSpec != nil { for _, d := range configSpec.Disks { if d.Name == diskSpec.Name { if d.StorageClass != "" { return &d.StorageClass } break } } if configSpec.StorageClass != "" { return &configSpec.StorageClass } } return nil } func Bar(config *Config) *ConfigSpec { var configSpec *ConfigSpec if config != nil { configSpec = &config.Spec } return configSpec } func Foo(diskSpec DiskSpec, config *Config) { cs := Bar(config) _ = findDiskSize(&diskSpec, cs) cs = Bar(config) _ = findStorageClassName(&diskSpec, cs) } func TestPanic(tt *testing.T) { t = tt myarray := []string{filepath.Join("..", "config", "crd", "bases")} for i := 0; i < 1000; i++ { Foo(DiskSpec{ Name: "DataDisk", Size: "1Gi", }, nil) } t.Log(myarray) } // Hack to run tests in a playground func matchString(a, b string) (bool, error) { return a == b, nil } func main() { testSuite := []testing.InternalTest{ { Name: "TestPanic", F: TestPanic, }, } testing.Main(matchString, testSuite, nil, nil) }