aboutsummaryrefslogtreecommitdiff
path: root/test/fixedbugs/issue56990.go
blob: 4fa6d759f9ebd681b45aac01633cf1d1c067b42a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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)
}