Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion base/utils/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,15 @@ func initKafkaFromClowder() {
type Endpoint clowder.DependencyEndpoint
type PrivateEndpoint clowder.PrivateDependencyEndpoint

// resolveRbacV2Address returns the RBAC address from V2 dependency endpoints,
// or empty string if V2 is not available.
func resolveRbacV2Address() string {
if endpoint, ok := clowder.GetV2DependencyEndpoint("rbac", "service"); ok && endpoint.Uri != "" {
return endpoint.Uri
}
return ""
}

func initServicesFromClowder() {
webappName := "webapp-service"
if PodConfig.GetBool("use_vmaas_go", true) {
Expand All @@ -286,7 +295,12 @@ func initServicesFromClowder() {
CoreCfg.VmaasAddress = (*Endpoint)(&endpoint).buildURL()
}
case "rbac":
CoreCfg.RbacAddress = (*Endpoint)(&endpoint).buildURL()
// Prefer V2 dependency endpoint; fall back to V1 flat list.
if addr := resolveRbacV2Address(); addr != "" {
CoreCfg.RbacAddress = addr
} else {
CoreCfg.RbacAddress = (*Endpoint)(&endpoint).buildURL()
}
case "rbac-service":
CoreCfg.RbacURL = (*Endpoint)(&endpoint).buildURL()
case "content-sources-backend":
Expand Down
98 changes: 98 additions & 0 deletions base/utils/config_clowder_v2_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package utils

import (
"os"
"testing"

clowder "github.com/redhatinsights/app-common-go/pkg/api/v1"
"github.com/stretchr/testify/assert"
)

func TestResolveRbacV2Address(t *testing.T) {
origV2 := clowder.DependencyEndpointsV2
defer func() { clowder.DependencyEndpointsV2 = origV2 }()

t.Run("V2 available with URI", func(t *testing.T) {
clowder.DependencyEndpointsV2 = map[string]map[string]clowder.DependencyEndpointV2{
"rbac": {
"service": {Uri: "https://rbac-service.svc:8443", Authenticated: false},
},
}
assert.Equal(t, "https://rbac-service.svc:8443", resolveRbacV2Address())
})

t.Run("V2 nil map", func(t *testing.T) {
clowder.DependencyEndpointsV2 = nil
assert.Equal(t, "", resolveRbacV2Address())
})

t.Run("V2 empty URI", func(t *testing.T) {
clowder.DependencyEndpointsV2 = map[string]map[string]clowder.DependencyEndpointV2{
"rbac": {
"service": {Uri: "", Authenticated: false},
},
}
assert.Equal(t, "", resolveRbacV2Address())
})

t.Run("V2 wrong app key", func(t *testing.T) {
clowder.DependencyEndpointsV2 = map[string]map[string]clowder.DependencyEndpointV2{
"other-app": {
"service": {Uri: "https://other.svc:8443", Authenticated: false},
},
}
assert.Equal(t, "", resolveRbacV2Address())
})

t.Run("V2 wrong deployment key", func(t *testing.T) {
clowder.DependencyEndpointsV2 = map[string]map[string]clowder.DependencyEndpointV2{
"rbac": {
"wrong-deploy": {Uri: "https://rbac.svc:8443", Authenticated: false},
},
}
assert.Equal(t, "", resolveRbacV2Address())
})

t.Run("V2 with CA certificate", func(t *testing.T) {
caPath := "/tmp/ca.crt"
clowder.DependencyEndpointsV2 = map[string]map[string]clowder.DependencyEndpointV2{
"rbac": {
"service": {
Uri: "https://rbac-service.svc:8443",
Authenticated: false,
CaCertificate: &caPath,
},
},
}
assert.Equal(t, "https://rbac-service.svc:8443", resolveRbacV2Address())
})
}

func TestRbacAddressEnvOverride(t *testing.T) {
origAddr := CoreCfg.RbacAddress
defer func() { CoreCfg.RbacAddress = origAddr }()

// Simulate V2-resolved address
CoreCfg.RbacAddress = "https://rbac-service.svc:8443"

// Env var override takes precedence (initServicesFromEnv behavior)
t.Setenv("RBAC_ADDRESS", "http://localhost:8080")
initServicesFromEnv()
assert.Equal(t, "http://localhost:8080", CoreCfg.RbacAddress)
}

func TestRbacAddressEnvPreservesV2WhenUnset(t *testing.T) {
origAddr := CoreCfg.RbacAddress
defer func() { CoreCfg.RbacAddress = origAddr }()

// Simulate V2-resolved address
CoreCfg.RbacAddress = "https://rbac-service.svc:8443"

// No env override: Getenv returns current value as default.
// t.Setenv registers cleanup to restore original value after test;
// os.Unsetenv then clears it so LookupEnv returns ok=false.
t.Setenv("RBAC_ADDRESS", "")
os.Unsetenv("RBAC_ADDRESS")
initServicesFromEnv()
assert.Equal(t, "https://rbac-service.svc:8443", CoreCfg.RbacAddress)
}
Loading