| // 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) |
| } |