From a0c84e13dfee1008d283127c9bafb4df0bd7c857 Mon Sep 17 00:00:00 2001 From: Mateusz Karasiewicz Date: Mon, 23 Sep 2024 16:48:21 +0200 Subject: [PATCH 1/3] fix: validate Splunk Observability release channel --- internal/manifest/v1alpha/examples/direct.go | 8 +++++- manifest/v1alpha/direct/validation.go | 27 +++++++++++++++++++- manifest/v1alpha/direct/validation_test.go | 24 +++++++++++++++++ manifest/v1alpha/release_channel.go | 2 +- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/internal/manifest/v1alpha/examples/direct.go b/internal/manifest/v1alpha/examples/direct.go index c9a2124f..e0fadd12 100644 --- a/internal/manifest/v1alpha/examples/direct.go +++ b/internal/manifest/v1alpha/examples/direct.go @@ -38,6 +38,10 @@ func Direct() []Example { return examples } +var alphaChannelDirects = []v1alpha.DataSourceType{ + v1alpha.SplunkObservability, +} + var betaChannelDirects = []v1alpha.DataSourceType{ v1alpha.AzureMonitor, v1alpha.Honeycomb, @@ -77,7 +81,9 @@ func (d directExample) Generate() v1alphaDirect.Direct { Unit: defaultQueryDelay.Unit, }, } - if slices.Contains(betaChannelDirects, typ) { + if slices.Contains(alphaChannelDirects, typ) { + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelAlpha + } else if slices.Contains(betaChannelDirects, typ) { direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelBeta } else { direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelStable diff --git a/manifest/v1alpha/direct/validation.go b/manifest/v1alpha/direct/validation.go index d74befe5..36be2bf4 100644 --- a/manifest/v1alpha/direct/validation.go +++ b/manifest/v1alpha/direct/validation.go @@ -35,7 +35,8 @@ var specValidation = govy.New[Spec]( Rules(exactlyOneDataSourceTypeValidationRule). Rules( historicalDataRetrievalValidationRule, - queryDelayGreaterThanOrEqualToDefaultValidationRule), + queryDelayGreaterThanOrEqualToDefaultValidationRule, + releaseChannelValidationRule), govy.For(func(s Spec) v1alpha.ReleaseChannel { return s.ReleaseChannel }). WithName("releaseChannel"). OmitEmpty(). @@ -223,6 +224,7 @@ var ( const ( errCodeExactlyOneDataSourceType = "exactly_one_data_source_type" errCodeQueryDelayGreaterThanOrEqualToDefault = "query_delay_greater_than_or_equal_to_default" + errUnsupportedReleaseChannel = "unsupported_release_channel" ) var exactlyOneDataSourceTypeValidationRule = govy.NewRule(func(spec Spec) error { @@ -383,6 +385,29 @@ var queryDelayGreaterThanOrEqualToDefaultValidationRule = govy.NewRule(func(spec return nil }).WithErrorCode(errCodeQueryDelayGreaterThanOrEqualToDefault) +const errorCodeUnsupportedReleaseChannel = "unsupported_release_channel" + +var releaseChannelValidationRule = govy.NewRule(func(spec Spec) error { + typ, _ := spec.GetType() + if typ != v1alpha.SplunkObservability && spec.ReleaseChannel == v1alpha.ReleaseChannelAlpha { + return govy.NewPropertyError( + "releaseChannel", + spec.ReleaseChannel, + errors.New("must be one of [stable, beta]"), + ) + } + + if typ == v1alpha.SplunkObservability && spec.ReleaseChannel != v1alpha.ReleaseChannelAlpha { + return govy.NewPropertyError( + "releaseChannel", + spec.ReleaseChannel, + errors.New("must be alpha for Splunk Observability"), + ) + } + + return nil +}).WithErrorCode(errorCodeUnsupportedReleaseChannel) + const errorCodeHTTPSSchemeRequired = "https_scheme_required" func urlPropertyRules[S any](getter govy.PropertyGetter[string, S]) govy.PropertyRules[*url.URL, S] { diff --git a/manifest/v1alpha/direct/validation_test.go b/manifest/v1alpha/direct/validation_test.go index f99af00f..15ea8bc2 100644 --- a/manifest/v1alpha/direct/validation_test.go +++ b/manifest/v1alpha/direct/validation_test.go @@ -128,6 +128,30 @@ func TestValidateSpec_ReleaseChannel(t *testing.T) { Code: rules.ErrorCodeOneOf, }) }) + t.Run("data source type using supported release channel", func(t *testing.T) { + direct := validDirect(v1alpha.Datadog) + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelBeta + err := validate(direct) + testutils.AssertNoError(t, direct, err) + }) + t.Run("data source type using unsupported release channel", func(t *testing.T) { + direct := validDirect(v1alpha.Datadog) + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelAlpha + err := validate(direct) + testutils.AssertContainsErrors(t, direct, err, 1, testutils.ExpectedError{ + Prop: "spec.releaseChannel", + Code: errUnsupportedReleaseChannel, + }) + }) + t.Run("data source type using unsupported release channel", func(t *testing.T) { + direct := validDirect(v1alpha.SplunkObservability) + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelStable + err := validate(direct) + testutils.AssertContainsErrors(t, direct, err, 1, testutils.ExpectedError{ + Prop: "spec.releaseChannel", + Code: errUnsupportedReleaseChannel, + }) + }) } func TestValidateSpec_QueryDelay(t *testing.T) { diff --git a/manifest/v1alpha/release_channel.go b/manifest/v1alpha/release_channel.go index 8341be0c..78202d79 100644 --- a/manifest/v1alpha/release_channel.go +++ b/manifest/v1alpha/release_channel.go @@ -34,5 +34,5 @@ func (r *ReleaseChannel) UnmarshalText(text []byte) error { } func ReleaseChannelValidation() govy.Rule[ReleaseChannel] { - return rules.OneOf(ReleaseChannelStable, ReleaseChannelBeta) + return rules.OneOf(ReleaseChannelStable, ReleaseChannelBeta, ReleaseChannelAlpha) } From dd62425aec2ce5d1a3256372d8182eea1f53ccd2 Mon Sep 17 00:00:00 2001 From: Mateusz Karasiewicz Date: Mon, 23 Sep 2024 17:04:03 +0200 Subject: [PATCH 2/3] make generate --- .../direct/examples/splunk-observability.yaml | 2 +- sdk/config_activity.png | Bin 34341 -> 30429 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest/v1alpha/direct/examples/splunk-observability.yaml b/manifest/v1alpha/direct/examples/splunk-observability.yaml index 78a5d5a6..6facf4ec 100644 --- a/manifest/v1alpha/direct/examples/splunk-observability.yaml +++ b/manifest/v1alpha/direct/examples/splunk-observability.yaml @@ -6,7 +6,7 @@ metadata: project: default spec: description: Example Splunk Observability Direct - releaseChannel: stable + releaseChannel: alpha splunkObservability: realm: us1 accessToken: "[secret]" diff --git a/sdk/config_activity.png b/sdk/config_activity.png index 071c94bef33e449b8f5ab7a6bee7d17d51a419ba..b64ec382526a0017e7450f1173d10ded9d02282e 100644 GIT binary patch literal 30429 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 Date: Tue, 24 Sep 2024 10:12:21 +0200 Subject: [PATCH 3/3] clean up --- manifest/v1alpha/direct/validation.go | 8 +++----- manifest/v1alpha/direct/validation_test.go | 6 ++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/manifest/v1alpha/direct/validation.go b/manifest/v1alpha/direct/validation.go index 36be2bf4..dd80df9b 100644 --- a/manifest/v1alpha/direct/validation.go +++ b/manifest/v1alpha/direct/validation.go @@ -224,7 +224,7 @@ var ( const ( errCodeExactlyOneDataSourceType = "exactly_one_data_source_type" errCodeQueryDelayGreaterThanOrEqualToDefault = "query_delay_greater_than_or_equal_to_default" - errUnsupportedReleaseChannel = "unsupported_release_channel" + errCodeUnsupportedReleaseChannel = "unsupported_release_channel" ) var exactlyOneDataSourceTypeValidationRule = govy.NewRule(func(spec Spec) error { @@ -385,8 +385,6 @@ var queryDelayGreaterThanOrEqualToDefaultValidationRule = govy.NewRule(func(spec return nil }).WithErrorCode(errCodeQueryDelayGreaterThanOrEqualToDefault) -const errorCodeUnsupportedReleaseChannel = "unsupported_release_channel" - var releaseChannelValidationRule = govy.NewRule(func(spec Spec) error { typ, _ := spec.GetType() if typ != v1alpha.SplunkObservability && spec.ReleaseChannel == v1alpha.ReleaseChannelAlpha { @@ -401,12 +399,12 @@ var releaseChannelValidationRule = govy.NewRule(func(spec Spec) error { return govy.NewPropertyError( "releaseChannel", spec.ReleaseChannel, - errors.New("must be alpha for Splunk Observability"), + errors.New("must be 'alpha' for Splunk Observability"), ) } return nil -}).WithErrorCode(errorCodeUnsupportedReleaseChannel) +}).WithErrorCode(errCodeUnsupportedReleaseChannel) const errorCodeHTTPSSchemeRequired = "https_scheme_required" diff --git a/manifest/v1alpha/direct/validation_test.go b/manifest/v1alpha/direct/validation_test.go index 15ea8bc2..6a634fd2 100644 --- a/manifest/v1alpha/direct/validation_test.go +++ b/manifest/v1alpha/direct/validation_test.go @@ -140,7 +140,7 @@ func TestValidateSpec_ReleaseChannel(t *testing.T) { err := validate(direct) testutils.AssertContainsErrors(t, direct, err, 1, testutils.ExpectedError{ Prop: "spec.releaseChannel", - Code: errUnsupportedReleaseChannel, + Code: errCodeUnsupportedReleaseChannel, }) }) t.Run("data source type using unsupported release channel", func(t *testing.T) { @@ -149,7 +149,7 @@ func TestValidateSpec_ReleaseChannel(t *testing.T) { err := validate(direct) testutils.AssertContainsErrors(t, direct, err, 1, testutils.ExpectedError{ Prop: "spec.releaseChannel", - Code: errUnsupportedReleaseChannel, + Code: errCodeUnsupportedReleaseChannel, }) }) } @@ -615,11 +615,13 @@ func TestValidateSpec_BigQuery(t *testing.T) { func TestValidateSpec_SplunkObservability(t *testing.T) { t.Run("passes", func(t *testing.T) { direct := validDirect(v1alpha.SplunkObservability) + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelAlpha err := validate(direct) testutils.AssertNoError(t, direct, err) }) t.Run("required realm", func(t *testing.T) { direct := validDirect(v1alpha.SplunkObservability) + direct.Spec.ReleaseChannel = v1alpha.ReleaseChannelAlpha direct.Spec.SplunkObservability.Realm = "" err := validate(direct) testutils.AssertContainsErrors(t, direct, err, 1, testutils.ExpectedError{