11package wasp
22
33import (
4+ "os"
5+ "path/filepath"
46 "testing"
57
68 "github.com/stretchr/testify/assert"
@@ -13,7 +15,7 @@ import (
1315// kubectl -n default get po --output=json | jq .items
1416// to write tests for real-world cases
1517
16- func TestGenerateDataPositive (t * testing.T ) {
18+ func TestSmokeGenerateDataPositive (t * testing.T ) {
1719 tests := []struct {
1820 name string
1921 namespace string
@@ -60,7 +62,6 @@ func TestGenerateDataPositive(t *testing.T) {
6062 includeWorkload : true ,
6163 expectedCases : 2 ,
6264 },
63-
6465 }
6566
6667 for _ , tt := range tests {
@@ -75,7 +76,7 @@ func TestGenerateDataPositive(t *testing.T) {
7576
7677 err = generator .Read ()
7778 require .NoError (t , err )
78-
79+
7980 testCases , err := generator .GenerateTestCases ()
8081 require .NoError (t , err )
8182 assert .Len (t , testCases , tt .expectedCases )
@@ -96,15 +97,12 @@ func TestGenerateDataPositive(t *testing.T) {
9697 }
9798}
9899
99- func TestGenerateDataNegative (t * testing.T ) {
100+ func TestSmokeGenerateDataNegative (t * testing.T ) {
100101 tests := []struct {
101- name string
102- namespace string
103- mockPods * corev1.PodList
104- mockError error
105- includeWorkload bool
106- expectedCases int
107- expectError bool
102+ name string
103+ namespace string
104+ mockPods * corev1.PodList
105+ mockError error
108106 }{
109107 {
110108 name : "single pod but incorrect instance annotation" ,
@@ -116,15 +114,12 @@ func TestGenerateDataNegative(t *testing.T) {
116114 Name : "test-pod-1" ,
117115 Namespace : "test-namespace" ,
118116 Labels : map [string ]string {
119- "app" : "app1" ,
117+ "app" : "app1" , // wrong label
120118 },
121119 },
122120 },
123121 },
124122 },
125- includeWorkload : false ,
126- expectedCases : 0 ,
127- expectError : true ,
128123 },
129124 }
130125
@@ -135,107 +130,98 @@ func TestGenerateDataNegative(t *testing.T) {
135130 Err : tt .mockError ,
136131 }
137132 generator , err := NewLoadTestGenBuilder (mockClient , tt .namespace ).
138- Workload (tt .includeWorkload ).Build ()
133+ Workload (true ).
134+ Build ()
139135 require .NoError (t , err )
140136
141137 err = generator .Read ()
142138 require .NoError (t , err )
143139
144- experiments , err := generator .GenerateTableTest ()
140+ _ , err = generator .GenerateTableTest ()
141+ require .Error (t , err )
142+ })
143+ }
144+ }
145+
146+ func TestGenerateFiles (t * testing.T ) {
147+ t .Skip ("it's fine to fail until the lib is merged because 'replace' directive is needed but can't be merged" )
148+ tests := []struct {
149+ name string
150+ includeWorkload bool
151+ expectGunFile bool
152+ }{
153+ {
154+ name : "with workload generation" ,
155+ includeWorkload : true ,
156+ expectGunFile : true ,
157+ },
158+ {
159+ name : "without workload generation" ,
160+ includeWorkload : false ,
161+ expectGunFile : false ,
162+ },
163+ }
164+
165+ for _ , tt := range tests {
166+ t .Run (tt .name , func (t * testing.T ) {
167+ mockClient := & MockK8s {
168+ Pods : & corev1.PodList {
169+ Items : []corev1.Pod {
170+ {
171+ ObjectMeta : metav1.ObjectMeta {
172+ Name : "test-pod" ,
173+ Namespace : "test-namespace" ,
174+ Labels : map [string ]string {
175+ "app" : "test-app" ,
176+ },
177+ },
178+ },
179+ },
180+ },
181+ }
182+ tmpDir , err := os .MkdirTemp ("" , "chaos-test-*" )
183+ require .NoError (t , err )
184+ defer os .RemoveAll (tmpDir )
185+
186+ generator , err := NewLoadTestGenBuilder (mockClient , "test-namespace" ).
187+ Workload (tt .includeWorkload ).
188+ OutputDir (tmpDir ).
189+ GoModName ("github.com/test/chaos-tests" ).
190+ Build ()
145191 require .NoError (t , err )
146- assert .Contains (t , experiments , "package main" )
147- assert .Contains (t , experiments , tt .namespace )
148- assert .Contains (t , experiments , "TestGeneratedLoadChaos" )
192+
193+ require .NoError (t , generator .Read ())
194+ require .NoError (t , generator .Write ())
195+
196+ expectedFiles := []string {"go.mod" , "chaos_test.go" }
197+
198+ for _ , file := range expectedFiles {
199+ filePath := filepath .Join (tmpDir , file )
200+ _ , err := os .Stat (filePath )
201+ assert .NoError (t , err , "file %s should exist" , file )
202+ }
203+
204+ // Verify file contents, can be tidied and builded
205+ goModPath := filepath .Join (tmpDir , "go.mod" )
206+ goModContent , err := os .ReadFile (goModPath )
207+ require .NoError (t , err )
208+ assert .Contains (t , string (goModContent ), "module github.com/test/chaos-tests" )
209+ assert .Contains (t , string (goModContent ), "go 1.25" )
210+
211+ testPath := filepath .Join (tmpDir , "chaos_test.go" )
212+ testContent , err := os .ReadFile (testPath )
213+ require .NoError (t , err )
214+
215+ contentStr := string (testContent )
216+ assert .Contains (t , contentStr , "package main" )
217+ assert .Contains (t , contentStr , "TestGeneratedLoadChaos" )
218+ assert .Contains (t , contentStr , "Fail pod test-app" )
219+ assert .Contains (t , contentStr , "Network delay for test-app" )
149220
150221 if tt .includeWorkload {
151- assert .Contains (t , experiments , "wasp.NewGenerator" )
152- assert .Contains (t , experiments , "ExampleGun" )
153- } else {
154- assert .NotContains (t , experiments , "wasp.NewGenerator" )
222+ assert .Contains (t , contentStr , "ExampleGun" )
223+ assert .Contains (t , contentStr , "wasp.NewGenerator" )
155224 }
156225 })
157226 }
158227}
159-
160- // func TestGenerateFiles(t *testing.T) {
161- // t.Skip("it's fine to fail until the lib is merged because 'replace' directive is needed but can't be merged")
162- // tests := []struct {
163- // name string
164- // includeWorkload bool
165- // expectGunFile bool
166- // }{
167- // {
168- // name: "with workload generation",
169- // includeWorkload: true,
170- // expectGunFile: true,
171- // },
172- // {
173- // name: "without workload generation",
174- // includeWorkload: false,
175- // expectGunFile: false,
176- // },
177- // }
178-
179- // for _, tt := range tests {
180- // t.Run(tt.name, func(t *testing.T) {
181- // mockClient := &MockK8s{
182- // Pods: &corev1.PodList{
183- // Items: []corev1.Pod{
184- // {
185- // ObjectMeta: metav1.ObjectMeta{
186- // Name: "test-pod",
187- // Namespace: "test-namespace",
188- // Labels: map[string]string{
189- // "app": "test-app",
190- // },
191- // },
192- // },
193- // },
194- // },
195- // }
196- // tmpDir, err := os.MkdirTemp("", "chaos-test-*")
197- // require.NoError(t, err)
198- // defer os.RemoveAll(tmpDir)
199-
200- // generator, err := NewLoadTestGenBuilder(mockClient, "test-namespace").
201- // Workload(tt.includeWorkload).
202- // OutputDir(tmpDir).
203- // GoModName("github.com/test/chaos-tests").
204- // Build()
205- // require.NoError(t, err)
206-
207- // require.NoError(t, generator.Read())
208- // require.NoError(t, generator.Write())
209-
210- // expectedFiles := []string{"go.mod", "chaos_test.go"}
211-
212- // for _, file := range expectedFiles {
213- // filePath := filepath.Join(tmpDir, file)
214- // _, err := os.Stat(filePath)
215- // assert.NoError(t, err, "file %s should exist", file)
216- // }
217-
218- // // Verify file contents, can be tidied and builded
219- // goModPath := filepath.Join(tmpDir, "go.mod")
220- // goModContent, err := os.ReadFile(goModPath)
221- // require.NoError(t, err)
222- // assert.Contains(t, string(goModContent), "module github.com/test/chaos-tests")
223- // assert.Contains(t, string(goModContent), "go 1.25")
224-
225- // testPath := filepath.Join(tmpDir, "chaos_test.go")
226- // testContent, err := os.ReadFile(testPath)
227- // require.NoError(t, err)
228-
229- // contentStr := string(testContent)
230- // assert.Contains(t, contentStr, "package main")
231- // assert.Contains(t, contentStr, "TestGeneratedLoadChaos")
232- // assert.Contains(t, contentStr, "Fail pod test-app")
233- // assert.Contains(t, contentStr, "Network delay for test-app")
234-
235- // if tt.includeWorkload {
236- // assert.Contains(t, contentStr, "ExampleGun")
237- // assert.Contains(t, contentStr, "wasp.NewGenerator")
238- // }
239- // })
240- // }
241- // }
0 commit comments