Remove metadata from feature manager (#3046)
This commit is contained in:
1 parent
54aad4d292
commit
4d19d1cfc4
3 files changed
+41
-91
No files matched your search
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
+2
-5
@@ -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)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user