From 4d19d1cfc40096d95bd6da2b5950b7c0370ad65d Mon Sep 17 00:00:00 2001 From: Todd Date: Thu, 2 Mar 2023 10:04:24 -0800 Subject: [PATCH] Remove metadata from feature manager (#3046) --- version/feature_manager.go | 38 ++------------ version/feature_manager_test.go | 87 ++++++++++++++------------------- version/testing.go | 7 +-- 3 files changed, 41 insertions(+), 91 deletions(-) diff --git a/version/feature_manager.go b/version/feature_manager.go index 76e83a603c..2ea62aedf4 100644 --- a/version/feature_manager.go +++ b/version/feature_manager.go @@ -4,20 +4,10 @@ package version import ( - "strings" - gvers "github.com/hashicorp/go-version" ) -type Metadata int - -const ( - OSS Metadata = iota - HCP -) - type MetadataConstraint struct { - MetaInfo []Metadata Constraints gvers.Constraints } @@ -59,11 +49,9 @@ func init() { } */ featureMap[IncludeStatusInCli] = MetadataConstraint{ - MetaInfo: []Metadata{OSS, HCP}, Constraints: mustNewConstraints("< 0.14.0"), } featureMap[CredentialLibraryVaultSubtype] = MetadataConstraint{ - MetaInfo: []Metadata{OSS, HCP}, Constraints: mustNewConstraints("< 0.14.0"), } @@ -72,19 +60,10 @@ func init() { // and the SessionAuthroizationData so the CLI can properly build the ssh command // when calling "boundary connect ssh..." featureMap[UseTargetIdForHostId] = MetadataConstraint{ - MetaInfo: []Metadata{OSS, HCP}, Constraints: mustNewConstraints("< 0.14.0"), } } -func metadataStringToMetadata(m string) Metadata { - if strings.Contains(strings.ToLower(m), "hcp") { - return HCP - } - - return OSS -} - func mustNewConstraints(v string) gvers.Constraints { c, err := gvers.NewConstraint(v) if err != nil { @@ -93,29 +72,18 @@ func mustNewConstraints(v string) gvers.Constraints { return c } -// Check returns a bool indicating if a version meets the metadata constraint +// Check returns a bool indicating if a version meets the constraints // for a feature. Check returns false if version is nil. func (m MetadataConstraint) Check(version *gvers.Version) bool { if version == nil { return false } - binaryMeta := metadataStringToMetadata(version.Metadata()) - - for _, v := range m.MetaInfo { - if v == binaryMeta { - return true - } - } - return false + return m.Constraints.Check(version) } // Check returns a bool indicating if a version satisfies the feature constraints func Check(binaryVersion *gvers.Version, featureConstraint MetadataConstraint) bool { - if !featureConstraint.Check(binaryVersion) { - return false - } - - return featureConstraint.Constraints.Check(binaryVersion) + return featureConstraint.Check(binaryVersion) } // SupportsFeature return a bool indicating whether or not this version supports the given feature diff --git a/version/feature_manager_test.go b/version/feature_manager_test.go index 8820212278..07e7e2d977 100644 --- a/version/feature_manager_test.go +++ b/version/feature_manager_test.go @@ -11,21 +11,27 @@ import ( "github.com/stretchr/testify/require" ) -func TestHasFeature(t *testing.T) { +func TestHasFeature_AllMetaData(t *testing.T) { DeprecatedFeature := Feature(999) - HCPOnlyFeature := Feature(998) + ActiveFeature := Feature(998) deprecatedFeatureConstraint, _ := gvers.NewConstraint(">= 0.10.0, < 0.10.1") featureMap[DeprecatedFeature] = MetadataConstraint{ - MetaInfo: []Metadata{OSS, HCP}, Constraints: deprecatedFeatureConstraint, } - - hcpOnlyFeature, _ := gvers.NewConstraint(">= 0.12.0+hcp") - featureMap[HCPOnlyFeature] = MetadataConstraint{ - MetaInfo: []Metadata{HCP}, - Constraints: hcpOnlyFeature, + activeFeatureConstraint, _ := gvers.NewConstraint("> 0.10.0") + featureMap[ActiveFeature] = MetadataConstraint{ + Constraints: activeFeatureConstraint, } + t.Cleanup(func() { + delete(featureMap, DeprecatedFeature) + _, ok := featureMap[DeprecatedFeature] + require.False(t, ok) + + delete(featureMap, ActiveFeature) + _, ok = featureMap[ActiveFeature] + require.False(t, ok) + }) tests := []struct { name string @@ -34,28 +40,16 @@ func TestHasFeature(t *testing.T) { wantResult bool }{ { - name: "does-not-have-multihop-ENT", - version: "0.11.1+hcp", - feature: HCPOnlyFeature, + name: "active-feature-before-active", + version: "0.10.0", + feature: ActiveFeature, wantResult: false, }, { - name: "has-multihop-ENT", - version: "0.12.0+hcp", - feature: HCPOnlyFeature, - wantResult: true, - }, - { - name: "has-multihop-worker-ENT", - version: "0.12.0+hcp.int", - feature: HCPOnlyFeature, - wantResult: true, - }, - { - name: "does-not-have-multihop-OSS", + name: "active-feature-after-active", version: "0.12.0", - feature: HCPOnlyFeature, - wantResult: false, + feature: ActiveFeature, + wantResult: true, }, { name: "deprecated-feature-before-deprecation", @@ -85,23 +79,20 @@ func TestHasFeature(t *testing.T) { require.Equal(tt.wantResult, got) }) } - delete(featureMap, DeprecatedFeature) - _, ok := featureMap[DeprecatedFeature] - require.False(t, ok) - - delete(featureMap, HCPOnlyFeature) - _, ok = featureMap[HCPOnlyFeature] - require.False(t, ok) } -func TestEnableFeatureOnVersionForTest(t *testing.T) { +func TestEnableFeatureOnVersionForTest_AllMetaData(t *testing.T) { FutureFeature := Feature(997) - futureVersionFeature, _ := gvers.NewConstraint(">= 99.99.99+hcp") + futureVersionFeature, _ := gvers.NewConstraint(">= 99.99.99") featureMap[FutureFeature] = MetadataConstraint{ - MetaInfo: []Metadata{HCP}, Constraints: futureVersionFeature, } + t.Cleanup(func() { + delete(featureMap, FutureFeature) + _, ok := featureMap[FutureFeature] + require.False(t, ok) + }) tests := []struct { name string @@ -112,7 +103,7 @@ func TestEnableFeatureOnVersionForTest(t *testing.T) { }{ { name: "has-future-feature", - version: "0.11.1+hcp", + version: "0.11.1", feature: FutureFeature, wantResult: true, }, @@ -133,37 +124,31 @@ func TestEnableFeatureOnVersionForTest(t *testing.T) { require.Equal(tt.wantResult, got) }) } - delete(featureMap, FutureFeature) - _, ok := featureMap[FutureFeature] - require.False(t, ok) } -func TestEnableFeatureForTest(t *testing.T) { +func TestEnableFeatureForTest_AllMetaData(t *testing.T) { FutureFeature := Feature(997) - futureVersionFeature, _ := gvers.NewConstraint(">= 99.99.99+hcp") + futureVersionFeature, _ := gvers.NewConstraint(">= 99.99.99") featureMap[FutureFeature] = MetadataConstraint{ - MetaInfo: []Metadata{HCP}, Constraints: futureVersionFeature, } + t.Cleanup(func() { + delete(featureMap, FutureFeature) + _, ok := featureMap[FutureFeature] + require.False(t, ok) + }) // modify the globals that set which version the current binary is prevVer := Version - prevMd := VersionMetadata defer func() { Version = prevVer - VersionMetadata = prevMd }() Version = "0.11.0" - VersionMetadata = "hcp" EnableFeatureForTest(t, FutureFeature) - semVer, err := gvers.NewVersion("0.11.0+hcp") + semVer, err := gvers.NewVersion("0.11.0") require.NoError(t, err) assert.True(t, SupportsFeature(semVer, FutureFeature)) - - delete(featureMap, FutureFeature) - _, ok := featureMap[FutureFeature] - require.False(t, ok) } diff --git a/version/testing.go b/version/testing.go index b9ccdd95a9..1083b995f7 100644 --- a/version/testing.go +++ b/version/testing.go @@ -33,14 +33,11 @@ func EnableFeatureOnVersionForTest(t *testing.T, version *gvers.Version, feature newConstraint, err := gvers.NewConstraint(fmt.Sprintf(">= %s", versionNumber)) require.NoError(err) - meta := metadataStringToMetadata(version.Metadata()) featureMap[feature] = MetadataConstraint{ - MetaInfo: []Metadata{meta}, Constraints: newConstraint, } - resetFunc := func() { + t.Cleanup(func() { featureMap[feature] = featConstraint - } - t.Cleanup(resetFunc) + }) }