diff options
Diffstat (limited to 'test/fixedbugs/issue56990.go')
-rw-r--r-- | test/fixedbugs/issue56990.go | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/test/fixedbugs/issue56990.go b/test/fixedbugs/issue56990.go new file mode 100644 index 0000000..4fa6d75 --- /dev/null +++ b/test/fixedbugs/issue56990.go @@ -0,0 +1,119 @@ +// 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) +} |