-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,193 @@ | ||
package clowder_test | ||
|
||
import ( | ||
"github.com/RedHatInsights/insights-operator-utils/clowder" | ||
"github.com/RedHatInsights/insights-operator-utils/kafka" | ||
"github.com/RedHatInsights/insights-operator-utils/postgres" | ||
api "github.com/redhatinsights/app-common-go/pkg/api/v1" | ||
"github.com/stretchr/testify/assert" | ||
"github.com/tisnik/go-capture" | ||
"testing" | ||
) | ||
|
||
func TestUseDBConfig(t *testing.T) { | ||
cfg := postgres.StorageConfiguration{} | ||
expected := postgres.StorageConfiguration{ | ||
PGUsername: "username", | ||
PGPassword: "password", | ||
PGHost: "hostname", | ||
PGPort: 1234, | ||
PGDBName: "dbname", | ||
} | ||
loadedCfg := api.AppConfig{ | ||
Database: &api.DatabaseConfig{ | ||
AdminPassword: "adminpw", | ||
AdminUsername: "admin", | ||
Hostname: "hostname", | ||
Name: "dbname", | ||
Password: "password", | ||
Port: 1234, | ||
RdsCa: nil, | ||
Username: "username", | ||
}, | ||
} | ||
|
||
clowder.UseDBConfig(&cfg, &loadedCfg) | ||
assert.Equal(t, expected, cfg, "Clowder database config was not used") | ||
} | ||
|
||
func TestUseClowderTopicsTopicFound(t *testing.T) { | ||
originalTopicName := "topic1" | ||
clowderTopicName := "NewTopicName" | ||
brokerCfg := kafka.BrokerConfiguration{ | ||
Topic: originalTopicName, | ||
} | ||
kafkaTopics := map[string]api.TopicConfig{ | ||
originalTopicName: { | ||
Name: clowderTopicName, | ||
}, | ||
"topic2": { | ||
Name: "AnotherTopicName", | ||
}, | ||
} | ||
|
||
clowder.UseClowderTopics(&brokerCfg, kafkaTopics) | ||
assert.Equal(t, clowderTopicName, brokerCfg.Topic, "Clowder topic name was not used") | ||
} | ||
|
||
func TestUseClowderTopicsTopicNotFound(t *testing.T) { | ||
originalTopicName := "topic1" | ||
|
||
brokerCfg := kafka.BrokerConfiguration{ | ||
Topic: originalTopicName, | ||
} | ||
kafkaTopics := map[string]api.TopicConfig{ | ||
"topic2": { | ||
Name: "AnotherTopicName", | ||
}, | ||
} | ||
|
||
output, _ := capture.StandardOutput(func() { | ||
clowder.UseClowderTopics(&brokerCfg, kafkaTopics) | ||
}) | ||
assert.Equal(t, originalTopicName, brokerCfg.Topic, "topic name should not change") | ||
assert.Contains(t, output, "warning: no kafka mapping found for topic topic1") | ||
} | ||
|
||
func TestUseBrokerConfigNoKafkaConfig(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
loadedConfig := api.AppConfig{} | ||
|
||
output, _ := capture.StandardOutput(func() { | ||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
}) | ||
assert.Contains(t, output, clowder.NoBrokerCfg) | ||
} | ||
|
||
func TestUseBrokerConfigNoKafkaBrokers(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
loadedConfig := api.AppConfig{ | ||
Kafka: &api.KafkaConfig{}, | ||
} | ||
|
||
output, _ := capture.StandardOutput(func() { | ||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
}) | ||
assert.Contains(t, output, clowder.NoBrokerCfg) | ||
} | ||
|
||
func TestUseBrokerConfigNoAuthNoPort(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
loadedConfig := api.AppConfig{ | ||
Kafka: &api.KafkaConfig{ | ||
Brokers: []api.BrokerConfig{ | ||
{ | ||
Hostname: "test_broker", | ||
Port: nil, | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
assert.Equal(t, "test_broker", brokerCfg.Address) | ||
} | ||
|
||
func TestUseBrokerConfigNoAuth(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
port := 12345 | ||
loadedConfig := api.AppConfig{ | ||
Kafka: &api.KafkaConfig{ | ||
Brokers: []api.BrokerConfig{ | ||
{ | ||
Hostname: "test_broker", | ||
Port: &port, | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
assert.Equal(t, "test_broker:12345", brokerCfg.Address) | ||
} | ||
|
||
func TestUseBrokerConfigAuthEnabledNoSasl(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
port := 12345 | ||
authType := api.BrokerConfigAuthtypeSasl | ||
loadedConfig := api.AppConfig{ | ||
Kafka: &api.KafkaConfig{ | ||
Brokers: []api.BrokerConfig{ | ||
{ | ||
Hostname: "test_broker", | ||
Port: &port, | ||
Authtype: &authType, | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
output, _ := capture.StandardOutput(func() { | ||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
}) | ||
|
||
assert.Equal(t, "test_broker:12345", brokerCfg.Address) | ||
assert.Contains(t, output, clowder.NoSaslCfg) | ||
} | ||
|
||
func TestUseBrokerConfigAuthEnabledWithSaslConfig(t *testing.T) { | ||
brokerCfg := kafka.BrokerConfiguration{} | ||
port := 12345 | ||
saslCfg := "user_pwd" | ||
protocol := "tls" | ||
|
||
authType := api.BrokerConfigAuthtypeSasl | ||
loadedConfig := api.AppConfig{ | ||
Kafka: &api.KafkaConfig{ | ||
Brokers: []api.BrokerConfig{ | ||
{ | ||
Hostname: "test_broker", | ||
Port: &port, | ||
Authtype: &authType, | ||
Sasl: &api.KafkaSASLConfig{ | ||
Password: &saslCfg, | ||
Username: &saslCfg, | ||
SaslMechanism: &saslCfg, | ||
}, | ||
SecurityProtocol: &protocol, | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
output, _ := capture.StandardOutput(func() { | ||
clowder.UseBrokerConfig(&brokerCfg, &loadedConfig) | ||
}) | ||
|
||
assert.Equal(t, "test_broker:12345", brokerCfg.Address) | ||
assert.Contains(t, output, "kafka is configured to use authentication") | ||
assert.Equal(t, saslCfg, brokerCfg.SaslUsername) | ||
assert.Equal(t, saslCfg, brokerCfg.SaslPassword) | ||
assert.Equal(t, saslCfg, brokerCfg.SaslMechanism) | ||
assert.Equal(t, protocol, brokerCfg.SecurityProtocol) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package clowder | ||
|
||
var ( | ||
NoBrokerCfg = noBrokerConfig | ||
NoSaslCfg = noSaslConfig | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
package clowder | ||
|
||
import ( | ||
"fmt" | ||
"github.com/RedHatInsights/insights-operator-utils/kafka" | ||
api "github.com/redhatinsights/app-common-go/pkg/api/v1" | ||
) | ||
|
||
// Common constants used for logging and error reporting | ||
const ( | ||
noBrokerConfig = "warning: no broker configurations found in clowder config" | ||
noSaslConfig = "warning: SASL configuration is missing" | ||
noTopicMapping = "warning: no kafka mapping found for topic %s" | ||
) | ||
|
||
func UseBrokerConfig(brokerCfg *kafka.BrokerConfiguration, loadedConfig *api.AppConfig) { | ||
Check failure on line 16 in clowder/kafka.go GitHub Actions / Linters for Go 1.18
Check failure on line 16 in clowder/kafka.go GitHub Actions / Linters for Go 1.19
Check failure on line 16 in clowder/kafka.go GitHub Actions / Linters for Go 1.20
|
||
// make sure broker(s) are configured in Clowder | ||
if loadedConfig.Kafka != nil && len(loadedConfig.Kafka.Brokers) > 0 { | ||
broker := loadedConfig.Kafka.Brokers[0] | ||
// port can be empty in api, so taking it into account | ||
if broker.Port != nil { | ||
brokerCfg.Address = fmt.Sprintf("%s:%d", broker.Hostname, *broker.Port) | ||
} else { | ||
brokerCfg.Address = broker.Hostname | ||
} | ||
|
||
// SSL config | ||
if broker.Authtype != nil { | ||
fmt.Println("kafka is configured to use authentication") | ||
if broker.Sasl != nil { | ||
// we are trusting that these values are set and | ||
// dereferencing the pointers without any check... | ||
brokerCfg.SaslUsername = *broker.Sasl.Username | ||
brokerCfg.SaslPassword = *broker.Sasl.Password | ||
brokerCfg.SaslMechanism = *broker.Sasl.SaslMechanism | ||
brokerCfg.SecurityProtocol = *broker.SecurityProtocol | ||
|
||
if caPath, err := loadedConfig.KafkaCa(broker); err == nil { | ||
brokerCfg.CertPath = caPath | ||
} | ||
} else { | ||
fmt.Println(noSaslConfig) | ||
} | ||
} | ||
} else { | ||
fmt.Println(noBrokerConfig) | ||
} | ||
} | ||
func UseClowderTopics(configuration *kafka.BrokerConfiguration, kafkaTopics map[string]api.TopicConfig) { | ||
Check failure on line 49 in clowder/kafka.go GitHub Actions / Linters for Go 1.18
Check failure on line 49 in clowder/kafka.go GitHub Actions / Linters for Go 1.19
Check failure on line 49 in clowder/kafka.go GitHub Actions / Linters for Go 1.20
|
||
// Get the correct topic name from clowder mapping if available | ||
if clowderTopic, ok := kafkaTopics[configuration.Topic]; ok { | ||
configuration.Topic = clowderTopic.Name | ||
} else { | ||
fmt.Printf(noTopicMapping, configuration.Topic) | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package clowder | ||
|
||
import ( | ||
"github.com/RedHatInsights/insights-operator-utils/postgres" | ||
api "github.com/redhatinsights/app-common-go/pkg/api/v1" | ||
) | ||
|
||
func UseDBConfig(storageCfg *postgres.StorageConfiguration, loadedConfig *api.AppConfig) { | ||
Check failure on line 8 in clowder/storage.go GitHub Actions / Linters for Go 1.18
Check failure on line 8 in clowder/storage.go GitHub Actions / Linters for Go 1.19
Check failure on line 8 in clowder/storage.go GitHub Actions / Linters for Go 1.20
|
||
storageCfg.PGDBName = loadedConfig.Database.Name | ||
storageCfg.PGHost = loadedConfig.Database.Hostname | ||
storageCfg.PGPort = loadedConfig.Database.Port | ||
storageCfg.PGUsername = loadedConfig.Database.Username | ||
storageCfg.PGPassword = loadedConfig.Database.Password | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package postgres | ||
|
||
// StorageConfiguration represents common configuration of data storage | ||
type StorageConfiguration struct { | ||
Driver string `mapstructure:"db_driver" toml:"db_driver"` | ||
PGUsername string `mapstructure:"pg_username" toml:"pg_username"` | ||
PGPassword string `mapstructure:"pg_password" toml:"pg_password"` | ||
PGHost string `mapstructure:"pg_host" toml:"pg_host"` | ||
PGPort int `mapstructure:"pg_port" toml:"pg_port"` | ||
PGDBName string `mapstructure:"pg_db_name" toml:"pg_db_name"` | ||
PGParams string `mapstructure:"pg_params" toml:"pg_params"` | ||
LogSQLQueries bool `mapstructure:"log_sql_queries" toml:"log_sql_queries"` | ||
} |