Skip to content

Commit 2f0a4ae

Browse files
committed
feat: Added the Go code for the EnvEnsure() function.
1 parent cc22b71 commit 2f0a4ae

File tree

4 files changed

+170
-9
lines changed

4 files changed

+170
-9
lines changed

corefunc/env_ensure.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package corefunc
2+
3+
import (
4+
"errors"
5+
"os"
6+
)
7+
8+
/*
9+
EnvEnsure ensures that a given environment variable is set to a non-empty value.
10+
If the environment variable is unset or if it is set to an empty string,
11+
EnvEnsure will respond with an error.
12+
13+
----
14+
15+
* name (string): The name of the environment variable to check.
16+
*/
17+
func EnvEnsure(name string) error {
18+
if os.Getenv(name) == "" {
19+
return errors.New("environment variable " + name + " is not defined") // lint:allow_errorf
20+
}
21+
22+
return nil
23+
}

corefunc/env_ensure_test.go

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package corefunc
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"testing"
7+
8+
"github.com/northwood-labs/terraform-provider-corefunc/testfixtures"
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func ExampleEnvEnsure() {
13+
_ = os.Setenv("MY_ENV_VAR_VALUE", "abcd1234")
14+
_ = os.Setenv("MY_ENV_VAR_EMPTY", "")
15+
16+
err := EnvEnsure("MY_ENV_VAR_VALUE")
17+
fmt.Println(err)
18+
19+
err = EnvEnsure("MY_ENV_VAR_EMPTY")
20+
fmt.Println(err)
21+
22+
err = EnvEnsure("MY_ENV_VAR_NOT_SET")
23+
fmt.Println(err)
24+
// Output:
25+
// <nil>
26+
// environment variable MY_ENV_VAR_EMPTY is not defined
27+
// environment variable MY_ENV_VAR_NOT_SET is not defined
28+
}
29+
30+
func TestEnvEnsure(t *testing.T) {
31+
for name, tc := range testfixtures.EnvEnsureTestTable {
32+
t.Run(name, func(t *testing.T) {
33+
_ = os.Setenv(tc.EnvVarName, tc.SetValue)
34+
err := EnvEnsure(tc.EnvVarName)
35+
36+
if tc.ExpectedErr != nil {
37+
expectedErrorMsg := tc.ExpectedErr.Error()
38+
assert.EqualErrorf(t, err, expectedErrorMsg, "Error should be: %v, got: %v", expectedErrorMsg, err)
39+
}
40+
})
41+
}
42+
}
43+
44+
func BenchmarkEnvEnsure(b *testing.B) {
45+
b.ReportAllocs()
46+
for name, tc := range testfixtures.EnvEnsureTestTable {
47+
_ = os.Setenv(tc.EnvVarName, tc.SetValue)
48+
49+
b.Run(name, func(b *testing.B) {
50+
b.ResetTimer()
51+
for i := 0; i < b.N; i++ {
52+
EnvEnsure(tc.EnvVarName)
53+
}
54+
})
55+
}
56+
}
57+
58+
func BenchmarkEnvEnsureParallel(b *testing.B) {
59+
b.ReportAllocs()
60+
for name, tc := range testfixtures.EnvEnsureTestTable {
61+
_ = os.Setenv(tc.EnvVarName, tc.SetValue)
62+
63+
b.Run(name, func(b *testing.B) {
64+
b.ResetTimer()
65+
b.RunParallel(func(pb *testing.PB) {
66+
for pb.Next() {
67+
EnvEnsure(tc.EnvVarName)
68+
}
69+
})
70+
})
71+
}
72+
}
73+
74+
func FuzzEnvEnsure(f *testing.F) {
75+
for _, tc := range testfixtures.EnvEnsureTestTable {
76+
f.Add(tc.EnvVarName)
77+
}
78+
79+
f.Fuzz(
80+
func(t *testing.T, envVarName string) {
81+
_ = EnvEnsure(envVarName)
82+
},
83+
)
84+
}

corefunc/truncate_label.go

-9
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ shared prefix, but also truncate them appropriately to fit length
3232
constraints.
3333
*/
3434
func TruncateLabel(maxLength int64, prefix, label string) string {
35-
// origName := fmt.Sprintf("%s: %s", prefix, label)
36-
// strLen := int64(len(origName))
37-
3835
// None.
3936
if maxLength == 0 {
4037
return ""
@@ -77,12 +74,6 @@ func TruncateLabel(maxLength int64, prefix, label string) string {
7774
trimmedLabel := label[:removeFromLabelLength]
7875

7976
return strings.TrimSpace(trimmedPrefix) + "…: " + strings.TrimSpace(trimmedLabel) + "…"
80-
81-
// return fmt.Sprintf(
82-
// "%s…: %s…",
83-
// strings.TrimSpace(trimmedPrefix),
84-
// strings.TrimSpace(trimmedLabel),
85-
// )
8677
}
8778

8879
return origName

testfixtures/env_ensure.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package testfixtures
2+
3+
import "errors"
4+
5+
// EnvEnsureTestTable is used by both the standard Go tests and also the
6+
// Terraform acceptance tests.
7+
// <https://github.com/golang/go/wiki/TableDrivenTests>
8+
var EnvEnsureTestTable = map[string]struct {
9+
EnvVarName string
10+
SetValue string
11+
ExpectedErr error
12+
}{
13+
"AWS_DEFAULT_REGION": {
14+
EnvVarName: "AWS_DEFAULT_REGION",
15+
SetValue: "us-east-1",
16+
ExpectedErr: nil,
17+
},
18+
"AWS_REGION": {
19+
EnvVarName: "AWS_REGION",
20+
SetValue: "us-east-1",
21+
ExpectedErr: nil,
22+
},
23+
"AWS_PAGER": {
24+
EnvVarName: "AWS_PAGER",
25+
SetValue: "",
26+
ExpectedErr: errors.New("environment variable AWS_PAGER is not defined"), // lint:allow_errorf
27+
},
28+
"BREW_PREFIX": {
29+
EnvVarName: "BREW_PREFIX",
30+
SetValue: "/opt/homebrew",
31+
ExpectedErr: nil,
32+
},
33+
"GO111MODULE": {
34+
EnvVarName: "GO111MODULE",
35+
SetValue: "on",
36+
ExpectedErr: nil,
37+
},
38+
"LANG": {
39+
EnvVarName: "LANG",
40+
SetValue: "en_US.UTF-8",
41+
ExpectedErr: nil,
42+
},
43+
"LC_ALL": {
44+
EnvVarName: "LC_ALL",
45+
SetValue: "en_US.UTF-8",
46+
ExpectedErr: nil,
47+
},
48+
"LSCOLORS": {
49+
EnvVarName: "LSCOLORS",
50+
SetValue: "gxBxhxDxfxhxhxhxhxcxcx",
51+
ExpectedErr: nil,
52+
},
53+
"SHELL": {
54+
EnvVarName: "SHELL",
55+
SetValue: "/opt/homebrew/bin/bash",
56+
ExpectedErr: nil,
57+
},
58+
"TERM": {
59+
EnvVarName: "TERM",
60+
SetValue: "xterm-256color",
61+
ExpectedErr: nil,
62+
},
63+
}

0 commit comments

Comments
 (0)