Skip to content

Commit 4d21eb6

Browse files
authored
[feature-flag] Add simple feature flag package (#251)
## Summary Add very simple feature flag package that uses hard coded boolean to switch on and off. Can be overridden on by setting environment variable. ## How was it tested? unit tests
1 parent a3d6132 commit 4d21eb6

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

boxcli/featureflag/feature.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package featureflag
2+
3+
import (
4+
"os"
5+
"strconv"
6+
)
7+
8+
type feature struct {
9+
name string
10+
enabled bool
11+
}
12+
13+
var features = map[string]*feature{}
14+
15+
func disabled(name string) {
16+
features[name] = &feature{name: name}
17+
}
18+
19+
func enabled(name string) {
20+
features[name] = &feature{name: name, enabled: true}
21+
}
22+
23+
func Get(name string) *feature {
24+
return features[name]
25+
}
26+
27+
func (f *feature) Enabled() bool {
28+
if f == nil {
29+
return false
30+
}
31+
if on, _ := strconv.ParseBool(os.Getenv("DEVBOX_FEATURE_" + f.name)); on {
32+
return true
33+
}
34+
return f.enabled
35+
}

boxcli/featureflag/feature_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package featureflag
2+
3+
import "testing"
4+
5+
func TestEnabledFeature(t *testing.T) {
6+
enabled("TEST")
7+
if !Get("TEST").Enabled() {
8+
t.Errorf("got Get(%q).Enabled() = false, want true.", "TEST")
9+
}
10+
}
11+
12+
func TestDisabledFeature(t *testing.T) {
13+
disabled("TEST")
14+
if Get("TEST").Enabled() {
15+
t.Errorf("got Get(%q).Enabled() = true, want false.", "TEST")
16+
}
17+
}
18+
19+
func TestEnabledFeatureEnv(t *testing.T) {
20+
disabled("TEST")
21+
t.Setenv("DEVBOX_FEATURE_TEST", "1")
22+
if !Get("TEST").Enabled() {
23+
t.Errorf("got Get(%q).Enabled() = false, want true.", "TEST")
24+
}
25+
}
26+
27+
func TestNonExistentFeature(t *testing.T) {
28+
if Get("TEST").Enabled() {
29+
t.Errorf("got Get(%q).Enabled() = true, want false.", "TEST")
30+
}
31+
}

boxcli/featureflag/pkgconfig.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package featureflag
2+
3+
const PKGConfig = "PKG_CONFIG"
4+
5+
func init() {
6+
disabled(PKGConfig)
7+
}

0 commit comments

Comments
 (0)