@@ -13,6 +13,12 @@ import (
1313 openbaov1alpha1 "github.com/dc-tec/openbao-operator/api/v1alpha1"
1414)
1515
16+ const (
17+ testOpenBaoVersion250 = "2.5.0"
18+ testOpenBaoImage250 = "openbao/openbao:2.5.0"
19+ testMetricsListenerVersionHint = "requires OpenBao >= 2.5.0"
20+ )
21+
1622func newMinimalCluster (name , namespace string ) * openbaov1alpha1.OpenBaoCluster {
1723 return & openbaov1alpha1.OpenBaoCluster {
1824 ObjectMeta : metav1.ObjectMeta {
@@ -153,8 +159,8 @@ func TestRenderHCLIncludesCoreStanzas(t *testing.T) {
153159
154160func TestRenderHCLWithStructuredConfiguration (t * testing.T ) {
155161 cluster := newMinimalCluster ("structured-config" , "default" )
156- cluster .Spec .Version = "2.5.0"
157- cluster .Spec .Image = "openbao/openbao:2.5.0"
162+ cluster .Spec .Version = testOpenBaoVersion250
163+ cluster .Spec .Image = testOpenBaoImage250
158164 uiEnabled := true
159165 autoDownload := true
160166 autoRegister := false
@@ -230,7 +236,7 @@ func TestRenderHCLRejectsPluginAutoConfigForUnsupportedVersions(t *testing.T) {
230236 if err == nil {
231237 t .Fatalf ("RenderHCL() expected error, got nil" )
232238 }
233- if ! strings .Contains (err .Error (), "requires OpenBao >= 2.5.0" ) {
239+ if ! strings .Contains (err .Error (), testMetricsListenerVersionHint ) {
234240 t .Fatalf ("RenderHCL() error = %v, want version gate error" , err )
235241 }
236242 })
@@ -557,10 +563,12 @@ func TestRenderHCLWithObservabilityMetricsTelemetry(t *testing.T) {
557563
558564func TestRenderHCLWithAllNodeMetricsListener (t * testing.T ) {
559565 cluster := newMinimalCluster ("metrics-listener" , "default" )
566+ cluster .Spec .Version = testOpenBaoVersion250
567+ cluster .Spec .Image = testOpenBaoImage250
560568 cluster .Spec .Observability = & openbaov1alpha1.ObservabilityConfig {
561569 Metrics : & openbaov1alpha1.MetricsConfig {
562570 Enabled : true ,
563- ScrapeProfile : "AllNodes" ,
571+ ScrapeProfile : configScrapeProfileAllNodes ,
564572 },
565573 }
566574
@@ -591,8 +599,69 @@ func TestRenderHCLWithAllNodeMetricsListener(t *testing.T) {
591599 }
592600}
593601
602+ func TestRenderHCLWithMetricsOnlyListenerRejectsUnsupportedVersions (t * testing.T ) {
603+ tests := []struct {
604+ name string
605+ configure func (* openbaov1alpha1.MetricsConfig )
606+ wantErrSubstr string
607+ }{
608+ {
609+ name : "all nodes" ,
610+ configure : func (metrics * openbaov1alpha1.MetricsConfig ) {
611+ metrics .ScrapeProfile = configScrapeProfileAllNodes
612+ },
613+ wantErrSubstr : testMetricsListenerVersionHint ,
614+ },
615+ {
616+ name : "explicit listener" ,
617+ configure : func (metrics * openbaov1alpha1.MetricsConfig ) {
618+ enabled := true
619+ metrics .MetricsOnlyListener = & openbaov1alpha1.MetricsOnlyListenerConfig {
620+ Enabled : & enabled ,
621+ }
622+ },
623+ wantErrSubstr : testMetricsListenerVersionHint ,
624+ },
625+ {
626+ name : "all nodes disabled listener" ,
627+ configure : func (metrics * openbaov1alpha1.MetricsConfig ) {
628+ enabled := false
629+ metrics .ScrapeProfile = configScrapeProfileAllNodes
630+ metrics .MetricsOnlyListener = & openbaov1alpha1.MetricsOnlyListenerConfig {
631+ Enabled : & enabled ,
632+ }
633+ },
634+ wantErrSubstr : "cannot be false when scrapeProfile is AllNodes" ,
635+ },
636+ }
637+
638+ for _ , tt := range tests {
639+ t .Run (tt .name , func (t * testing.T ) {
640+ cluster := newMinimalCluster ("metrics-version" , "default" )
641+ metrics := & openbaov1alpha1.MetricsConfig {Enabled : true }
642+ tt .configure (metrics )
643+ cluster .Spec .Observability = & openbaov1alpha1.ObservabilityConfig {Metrics : metrics }
644+
645+ _ , err := RenderHCL (cluster , InfrastructureDetails {
646+ HeadlessServiceName : cluster .Name ,
647+ Namespace : cluster .Namespace ,
648+ APIPort : 8200 ,
649+ ClusterPort : 8201 ,
650+ })
651+ if err == nil {
652+ t .Fatal ("expected error, got nil" )
653+ }
654+ if ! strings .Contains (err .Error (), tt .wantErrSubstr ) {
655+ t .Fatalf ("RenderHCL() error = %v, want containing %q" , err , tt .wantErrSubstr )
656+ }
657+ })
658+ }
659+ }
660+
594661func TestRenderHCLWithMetricsOnlyListenerRejectsACME (t * testing.T ) {
595662 cluster := newMinimalCluster ("metrics-acme" , "default" )
663+ cluster .Spec .Version = testOpenBaoVersion250
664+ cluster .Spec .Image = testOpenBaoImage250
596665 cluster .Spec .TLS .Mode = openbaov1alpha1 .TLSModeACME
597666 cluster .Spec .TLS .ACME = & openbaov1alpha1.ACMEConfig {
598667 Email : "platform@example.com" ,
@@ -602,7 +671,7 @@ func TestRenderHCLWithMetricsOnlyListenerRejectsACME(t *testing.T) {
602671 cluster .Spec .Observability = & openbaov1alpha1.ObservabilityConfig {
603672 Metrics : & openbaov1alpha1.MetricsConfig {
604673 Enabled : true ,
605- ScrapeProfile : "AllNodes" ,
674+ ScrapeProfile : configScrapeProfileAllNodes ,
606675 },
607676 }
608677
0 commit comments