Skip to content

Commit 139f672

Browse files
authored
test(flags): ensure temp files are cleaned up (#1727)
1 parent 32204a7 commit 139f672

File tree

2 files changed

+31
-42
lines changed

2 files changed

+31
-42
lines changed

internal/flags/flags.go

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bufio"
55
"errors"
66
"fmt"
7-
"io/ioutil"
87
"os"
98
"strings"
109
"time"
@@ -469,12 +468,14 @@ func GetSecretsFromFiles(rootCmd *cobra.Command) {
469468
"notification-url",
470469
}
471470
for _, secret := range secrets {
472-
getSecretFromFile(flags, secret)
471+
if err := getSecretFromFile(flags, secret); err != nil {
472+
log.Fatalf("failed to get secret from flag %v: %s", secret, err)
473+
}
473474
}
474475
}
475476

476477
// getSecretFromFile will check if the flag contains a reference to a file; if it does, replaces the value of the flag with the contents of the file.
477-
func getSecretFromFile(flags *pflag.FlagSet, secret string) {
478+
func getSecretFromFile(flags *pflag.FlagSet, secret string) error {
478479
flag := flags.Lookup(secret)
479480
if sliceValue, ok := flag.Value.(pflag.SliceValue); ok {
480481
oldValues := sliceValue.GetSlice()
@@ -483,7 +484,7 @@ func getSecretFromFile(flags *pflag.FlagSet, secret string) {
483484
if value != "" && isFile(value) {
484485
file, err := os.Open(value)
485486
if err != nil {
486-
log.Fatal(err)
487+
return err
487488
}
488489
scanner := bufio.NewScanner(file)
489490
for scanner.Scan() {
@@ -493,25 +494,26 @@ func getSecretFromFile(flags *pflag.FlagSet, secret string) {
493494
}
494495
values = append(values, line)
495496
}
497+
if err := file.Close(); err != nil {
498+
return err
499+
}
496500
} else {
497501
values = append(values, value)
498502
}
499503
}
500-
sliceValue.Replace(values)
501-
return
504+
return sliceValue.Replace(values)
502505
}
503506

504507
value := flag.Value.String()
505508
if value != "" && isFile(value) {
506-
file, err := ioutil.ReadFile(value)
509+
content, err := os.ReadFile(value)
507510
if err != nil {
508-
log.Fatal(err)
509-
}
510-
err = flags.Set(secret, strings.TrimSpace(string(file)))
511-
if err != nil {
512-
log.Error(err)
511+
return err
513512
}
513+
return flags.Set(secret, strings.TrimSpace(string(content)))
514514
}
515+
516+
return nil
515517
}
516518

517519
func isFile(s string) bool {
@@ -564,15 +566,15 @@ func ProcessFlagAliases(flags *pflag.FlagSet) {
564566
// update schedule flag to match interval if it's set, or to the default if none of them are
565567
if intervalChanged || !scheduleChanged {
566568
interval, _ := flags.GetInt(`interval`)
567-
flags.Set(`schedule`, fmt.Sprintf(`@every %ds`, interval))
569+
_ = flags.Set(`schedule`, fmt.Sprintf(`@every %ds`, interval))
568570
}
569571

570572
if flagIsEnabled(flags, `debug`) {
571-
flags.Set(`log-level`, `debug`)
573+
_ = flags.Set(`log-level`, `debug`)
572574
}
573575

574576
if flagIsEnabled(flags, `trace`) {
575-
flags.Set(`log-level`, `trace`)
577+
_ = flags.Set(`log-level`, `trace`)
576578
}
577579

578580
}
@@ -593,7 +595,7 @@ func appendFlagValue(flags *pflag.FlagSet, name string, values ...string) error
593595

594596
if flagValues, ok := flag.Value.(pflag.SliceValue); ok {
595597
for _, value := range values {
596-
flagValues.Append(value)
598+
_ = flagValues.Append(value)
597599
}
598600
} else {
599601
return fmt.Errorf(`the value for flag %q is not a slice value`, name)

internal/flags/flags_test.go

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
package flags
22

33
import (
4-
"io/ioutil"
5-
"os"
6-
"testing"
7-
84
"github.com/sirupsen/logrus"
95
"github.com/spf13/cobra"
106
"github.com/stretchr/testify/assert"
117
"github.com/stretchr/testify/require"
8+
"os"
9+
"testing"
1210
)
1311

1412
func TestEnvConfig_Defaults(t *testing.T) {
1513
// Unset testing environments own variables, since those are not what is under test
16-
os.Unsetenv("DOCKER_TLS_VERIFY")
17-
os.Unsetenv("DOCKER_HOST")
14+
_ = os.Unsetenv("DOCKER_TLS_VERIFY")
15+
_ = os.Unsetenv("DOCKER_HOST")
1816

1917
cmd := new(cobra.Command)
2018
SetDefaults()
@@ -48,10 +46,7 @@ func TestEnvConfig_Custom(t *testing.T) {
4846

4947
func TestGetSecretsFromFilesWithString(t *testing.T) {
5048
value := "supersecretstring"
51-
52-
err := os.Setenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD", value)
53-
require.NoError(t, err)
54-
defer os.Unsetenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD")
49+
t.Setenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD", value)
5550

5651
testGetSecretsFromFiles(t, "notification-email-server-password", value)
5752
}
@@ -60,18 +55,15 @@ func TestGetSecretsFromFilesWithFile(t *testing.T) {
6055
value := "megasecretstring"
6156

6257
// Create the temporary file which will contain a secret.
63-
file, err := ioutil.TempFile(os.TempDir(), "watchtower-")
58+
file, err := os.CreateTemp(t.TempDir(), "watchtower-")
6459
require.NoError(t, err)
65-
defer os.Remove(file.Name()) // Make sure to remove the temporary file later.
6660

6761
// Write the secret to the temporary file.
68-
secret := []byte(value)
69-
_, err = file.Write(secret)
62+
_, err = file.Write([]byte(value))
7063
require.NoError(t, err)
64+
require.NoError(t, file.Close())
7165

72-
err = os.Setenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD", file.Name())
73-
require.NoError(t, err)
74-
defer os.Unsetenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD")
66+
t.Setenv("WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD", file.Name())
7567

7668
testGetSecretsFromFiles(t, "notification-email-server-password", value)
7769
}
@@ -80,16 +72,15 @@ func TestGetSliceSecretsFromFiles(t *testing.T) {
8072
values := []string{"entry2", "", "entry3"}
8173

8274
// Create the temporary file which will contain a secret.
83-
file, err := ioutil.TempFile(os.TempDir(), "watchtower-")
75+
file, err := os.CreateTemp(t.TempDir(), "watchtower-")
8476
require.NoError(t, err)
85-
defer os.Remove(file.Name()) // Make sure to remove the temporary file later.
8677

8778
// Write the secret to the temporary file.
8879
for _, value := range values {
8980
_, err = file.WriteString("\n" + value)
9081
require.NoError(t, err)
9182
}
92-
file.Close()
83+
require.NoError(t, file.Close())
9384

9485
testGetSecretsFromFiles(t, "notification-url", `[entry1,entry2,entry3]`,
9586
`--notification-url`, "entry1",
@@ -166,9 +157,7 @@ func TestProcessFlagAliases(t *testing.T) {
166157

167158
func TestProcessFlagAliasesLogLevelFromEnvironment(t *testing.T) {
168159
cmd := new(cobra.Command)
169-
err := os.Setenv("WATCHTOWER_DEBUG", `true`)
170-
require.NoError(t, err)
171-
defer os.Unsetenv("WATCHTOWER_DEBUG")
160+
t.Setenv("WATCHTOWER_DEBUG", `true`)
172161

173162
SetDefaults()
174163
RegisterDockerFlags(cmd)
@@ -202,9 +191,7 @@ func TestProcessFlagAliasesSchedAndInterval(t *testing.T) {
202191
func TestProcessFlagAliasesScheduleFromEnvironment(t *testing.T) {
203192
cmd := new(cobra.Command)
204193

205-
err := os.Setenv("WATCHTOWER_SCHEDULE", `@hourly`)
206-
require.NoError(t, err)
207-
defer os.Unsetenv("WATCHTOWER_SCHEDULE")
194+
t.Setenv("WATCHTOWER_SCHEDULE", `@hourly`)
208195

209196
SetDefaults()
210197
RegisterDockerFlags(cmd)

0 commit comments

Comments
 (0)