Skip to content

Commit fa29453

Browse files
authored
Use anonymous function to avoid defer in loop (#86)
Signed-off-by: Reinhard Nägele <[email protected]>
1 parent f44fea9 commit fa29453

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

pkg/chart/chart.go

+29-19
Original file line numberDiff line numberDiff line change
@@ -345,28 +345,38 @@ func (t *Testing) InstallChart(chart string, valuesFiles []string) TestResult {
345345
for _, valuesFile := range valuesFiles {
346346
var namespace, release, releaseSelector string
347347

348-
if t.config.Namespace != "" {
349-
namespace = t.config.Namespace
350-
release, _ = util.CreateInstallParams(chart, t.config.BuildId)
351-
releaseSelector = fmt.Sprintf("%s=%s", t.config.ReleaseLabel, release)
352-
} else {
353-
release, namespace = util.CreateInstallParams(chart, t.config.BuildId)
354-
defer t.kubectl.DeleteNamespace(namespace)
355-
}
348+
// Use anonymous function. Otherwise deferred calls would pile up
349+
// and be executed in reverse order after the loop.
350+
fun := func() error {
351+
if t.config.Namespace != "" {
352+
namespace = t.config.Namespace
353+
release, _ = util.CreateInstallParams(chart, t.config.BuildId)
354+
releaseSelector = fmt.Sprintf("%s=%s", t.config.ReleaseLabel, release)
355+
} else {
356+
release, namespace = util.CreateInstallParams(chart, t.config.BuildId)
357+
defer t.kubectl.DeleteNamespace(namespace)
358+
}
356359

357-
defer t.helm.DeleteRelease(release)
358-
defer t.PrintPodDetailsAndLogs(namespace, releaseSelector)
360+
defer t.helm.DeleteRelease(release)
361+
defer t.PrintPodDetailsAndLogs(namespace, releaseSelector)
359362

360-
if err := t.helm.InstallWithValues(chart, valuesFile, namespace, release); err != nil {
361-
result.Error = err
362-
break
363-
}
364-
if err := t.kubectl.WaitForDeployments(namespace, releaseSelector); err != nil {
365-
result.Error = err
366-
break
363+
if err := t.helm.InstallWithValues(chart, valuesFile, namespace, release); err != nil {
364+
result.Error = err
365+
return err
366+
}
367+
if err := t.kubectl.WaitForDeployments(namespace, releaseSelector); err != nil {
368+
result.Error = err
369+
return err
370+
}
371+
if err := t.helm.Test(release); err != nil {
372+
result.Error = err
373+
return err
374+
}
375+
376+
return nil
367377
}
368-
if err := t.helm.Test(release); err != nil {
369-
result.Error = err
378+
379+
if err := fun(); err != nil {
370380
break
371381
}
372382
}

0 commit comments

Comments
 (0)