Skip to content

Commit

Permalink
Update envs for test config (#1077)
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaszcl committed Aug 20, 2024
1 parent c248cd9 commit a49f2df
Show file tree
Hide file tree
Showing 13 changed files with 134 additions and 1,453 deletions.
67 changes: 44 additions & 23 deletions config/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,37 @@ import (
"strconv"
"strings"

"github.com/smartcontractkit/chainlink-testing-framework/utils"
"github.com/smartcontractkit/chainlink-testing-framework/utils/ptr"
)

const (
E2E_TEST_LOKI_TENANT_ID_ENV = "E2E_TEST_LOKI_TENANT_ID"
E2E_TEST_LOKI_ENDPOINT_ENV = "E2E_TEST_LOKI_ENDPOINT"
E2E_TEST_LOKI_BASIC_AUTH_ENV = "E2E_TEST_LOKI_BASIC_AUTH"
E2E_TEST_LOKI_BEARER_TOKEN_ENV = "E2E_TEST_LOKI_BEARER_TOKEN" // #nosec G101
E2E_TEST_GRAFANA_BASE_URL_ENV = "E2E_TEST_GRAFANA_BASE_URL"
E2E_TEST_GRAFANA_DASHBOARD_URL_ENV = "E2E_TEST_GRAFANA_DASHBOARD_URL"
E2E_TEST_GRAFANA_BEARER_TOKEN_ENV = "E2E_TEST_GRAFANA_BEARER_TOKEN" // #nosec G101
E2E_TEST_PYROSCOPE_ENABLED_ENV = "E2E_TEST_PYROSCOPE_ENABLED"
E2E_TEST_PYROSCOPE_SERVER_URL_ENV = "E2E_TEST_PYROSCOPE_SERVER_URL"
E2E_TEST_PYROSCOPE_KEY_ENV = "E2E_TEST_PYROSCOPE_KEY"
E2E_TEST_PYROSCOPE_ENVIRONMENT_ENV = "E2E_TEST_PYROSCOPE_ENVIRONMENT"
E2E_TEST_CHAINLINK_IMAGE_ENV = "E2E_TEST_CHAINLINK_IMAGE"
E2E_TEST_CHAINLINK_UPGRADE_IMAGE_ENV = "E2E_TEST_CHAINLINK_UPGRADE_IMAGE"
E2E_TEST_WALLET_KEY_ENV = `E2E_TEST_(.+)_WALLET_KEY$`
E2E_TEST_WALLET_KEYS_ENV = `E2E_TEST_(.+)_WALLET_KEY_(\d+)$`
E2E_TEST_RPC_HTTP_URL_ENV = `E2E_TEST_(.+)_RPC_HTTP_URL$`
E2E_TEST_RPC_HTTP_URLS_ENV = `E2E_TEST_(.+)_RPC_HTTP_URL_(\d+)$`
E2E_TEST_RPC_WS_URL_ENV = `E2E_TEST_(.+)_RPC_WS_URL$`
E2E_TEST_RPC_WS_URLS_ENV = `E2E_TEST_(.+)_RPC_WS_URL_(\d+)$`
E2E_TEST_LOG_COLLECT_ENV = "E2E_TEST_LOG_COLLECT"
E2E_TEST_LOGGING_RUN_ID_ENV = "E2E_TEST_LOGGING_RUN_ID"
E2E_TEST_LOG_STREAM_LOG_TARGETS_ENV = "E2E_TEST_LOG_STREAM_LOG_TARGETS"
E2E_TEST_LOKI_TENANT_ID_ENV = "E2E_TEST_LOKI_TENANT_ID"
E2E_TEST_LOKI_ENDPOINT_ENV = "E2E_TEST_LOKI_ENDPOINT"
E2E_TEST_LOKI_BASIC_AUTH_ENV = "E2E_TEST_LOKI_BASIC_AUTH"
E2E_TEST_LOKI_BEARER_TOKEN_ENV = "E2E_TEST_LOKI_BEARER_TOKEN" // #nosec G101
E2E_TEST_GRAFANA_BASE_URL_ENV = "E2E_TEST_GRAFANA_BASE_URL"
E2E_TEST_GRAFANA_DASHBOARD_URL_ENV = "E2E_TEST_GRAFANA_DASHBOARD_URL"
E2E_TEST_GRAFANA_BEARER_TOKEN_ENV = "E2E_TEST_GRAFANA_BEARER_TOKEN" // #nosec G101
E2E_TEST_PYROSCOPE_ENABLED_ENV = "E2E_TEST_PYROSCOPE_ENABLED"
E2E_TEST_PYROSCOPE_SERVER_URL_ENV = "E2E_TEST_PYROSCOPE_SERVER_URL"
E2E_TEST_PYROSCOPE_KEY_ENV = "E2E_TEST_PYROSCOPE_KEY"
E2E_TEST_PYROSCOPE_ENVIRONMENT_ENV = "E2E_TEST_PYROSCOPE_ENVIRONMENT"
E2E_TEST_CHAINLINK_IMAGE_ENV = "E2E_TEST_CHAINLINK_IMAGE"
E2E_TEST_CHAINLINK_VERSION_ENV = "E2E_TEST_CHAINLINK_VERSION"
E2E_TEST_CHAINLINK_POSTGRES_VERSION_ENV = "E2E_TEST_CHAINLINK_POSTGRES_VERSION"
E2E_TEST_CHAINLINK_UPGRADE_IMAGE_ENV = "E2E_TEST_CHAINLINK_UPGRADE_IMAGE"
E2E_TEST_CHAINLINK_UPGRADE_VERSION_ENV = "E2E_TEST_CHAINLINK_UPGRADE_VERSION"
E2E_TEST_SELECTED_NETWORK_ENV = `E2E_TEST_SELECTED_NETWORK`
E2E_TEST_WALLET_KEY_ENV = `E2E_TEST_(.+)_WALLET_KEY$`
E2E_TEST_WALLET_KEYS_ENV = `E2E_TEST_(.+)_WALLET_KEY_(\d+)$`
E2E_TEST_RPC_HTTP_URL_ENV = `E2E_TEST_(.+)_RPC_HTTP_URL$`
E2E_TEST_RPC_HTTP_URLS_ENV = `E2E_TEST_(.+)_RPC_HTTP_URL_(\d+)$`
E2E_TEST_RPC_WS_URL_ENV = `E2E_TEST_(.+)_RPC_WS_URL$`
E2E_TEST_RPC_WS_URLS_ENV = `E2E_TEST_(.+)_RPC_WS_URL_(\d+)$`
)

func MustReadEnvVar_String(name string) string {
Expand All @@ -43,6 +51,18 @@ func MustReadEnvVar_String(name string) string {
return value.(string)
}

func MustReadEnvVar_Strings(name, sep string) []string {
value, err := readEnvVarValue(name, String)
if err != nil {
panic(err)
}
if value == nil {
return nil
}
strVal := value.(string)
return strings.Split(strVal, sep)
}

func MustReadEnvVar_Boolean(name string) *bool {
value, err := readEnvVarValue(name, Boolean)
if err != nil {
Expand All @@ -66,7 +86,7 @@ func ReadEnvVarSlice_String(pattern string) []string {
}
key, value := pair[0], pair[1]
if re.MatchString(key) && value != "" {
values = append(values, value)
values = append(values, utils.MustResolveEnvPlaceholder(value))
}
}
return values
Expand All @@ -91,8 +111,9 @@ func readEnvVarValue(envVarName string, valueType EnvValueType) (interface{}, er
return nil, nil
}
if isSet && value == "" {
return "", nil // Return "" if the environment variable is not set
return nil, nil
}
value = utils.MustResolveEnvPlaceholder(value)

// Parse the value according to the specified type
switch valueType {
Expand Down Expand Up @@ -134,7 +155,7 @@ func readEnvVarGroupedMap(pattern string) map[string][]string {
matches := re.FindStringSubmatch(key)
if len(matches) > 1 && value != "" {
group := matches[1] // Use the first capture group for grouping
groupedVars[group] = append(groupedVars[group], value)
groupedVars[group] = append(groupedVars[group], utils.MustResolveEnvPlaceholder(value))
}
}
return groupedVars
Expand All @@ -152,7 +173,7 @@ func readEnvVarSingleMap(pattern string) map[string]string {
matches := re.FindStringSubmatch(key)
if len(matches) > 1 && value != "" {
group := matches[1] // Use the first capture group for grouping
singleVars[group] = value
singleVars[group] = utils.MustResolveEnvPlaceholder(value)
}
}
return singleVars
Expand Down
66 changes: 66 additions & 0 deletions config/testconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,36 @@ type TestConfig struct {
func (c *TestConfig) ReadFromEnvVar() error {
logger := logging.GetTestLogger(nil)

testLogCollect := MustReadEnvVar_Boolean(E2E_TEST_LOG_COLLECT_ENV)
if testLogCollect != nil {
if c.Logging == nil {
c.Logging = &LoggingConfig{}
}
logger.Debug().Msgf("Using %s env var to override Logging.TestLogCollect", E2E_TEST_LOG_COLLECT_ENV)
c.Logging.TestLogCollect = testLogCollect
}

loggingRunID := MustReadEnvVar_String(E2E_TEST_LOGGING_RUN_ID_ENV)
if loggingRunID != "" {
if c.Logging == nil {
c.Logging = &LoggingConfig{}
}
logger.Debug().Msgf("Using %s env var to override Logging.RunID", E2E_TEST_LOGGING_RUN_ID_ENV)
c.Logging.RunId = &loggingRunID
}

logstreamLogTargets := MustReadEnvVar_Strings(E2E_TEST_LOG_STREAM_LOG_TARGETS_ENV, ",")
if len(logstreamLogTargets) > 0 {
if c.Logging == nil {
c.Logging = &LoggingConfig{}
}
if c.Logging.LogStream == nil {
c.Logging.LogStream = &LogStreamConfig{}
}
logger.Debug().Msgf("Using %s env var to override Logging.LogStream.LogTargets", E2E_TEST_LOG_STREAM_LOG_TARGETS_ENV)
c.Logging.LogStream.LogTargets = logstreamLogTargets
}

lokiTenantID := MustReadEnvVar_String(E2E_TEST_LOKI_TENANT_ID_ENV)
if lokiTenantID != "" {
if c.Logging == nil {
Expand Down Expand Up @@ -172,6 +202,15 @@ func (c *TestConfig) ReadFromEnvVar() error {
c.Pyroscope.Environment = &pyroscopeEnvironment
}

selectedNetworks := MustReadEnvVar_Strings(E2E_TEST_SELECTED_NETWORK_ENV, ",")
if len(selectedNetworks) > 0 {
if c.Network == nil {
c.Network = &NetworkConfig{}
}
logger.Debug().Msgf("Using %s env var to override Network.SelectedNetworks", E2E_TEST_SELECTED_NETWORK_ENV)
c.Network.SelectedNetworks = selectedNetworks
}

walletKeys := ReadEnvVarGroupedMap(E2E_TEST_WALLET_KEY_ENV, E2E_TEST_WALLET_KEYS_ENV)
if len(walletKeys) > 0 {
if c.Network == nil {
Expand Down Expand Up @@ -208,6 +247,24 @@ func (c *TestConfig) ReadFromEnvVar() error {
c.ChainlinkImage.Image = &chainlinkImage
}

chainlinkVersion := MustReadEnvVar_String(E2E_TEST_CHAINLINK_VERSION_ENV)
if chainlinkVersion != "" {
if c.ChainlinkImage == nil {
c.ChainlinkImage = &ChainlinkImageConfig{}
}
logger.Debug().Msgf("Using %s env var to override ChainlinkImage.Version", E2E_TEST_CHAINLINK_VERSION_ENV)
c.ChainlinkImage.Version = &chainlinkVersion
}

chainlinkPostgresVersion := MustReadEnvVar_String(E2E_TEST_CHAINLINK_POSTGRES_VERSION_ENV)
if chainlinkPostgresVersion != "" {
if c.ChainlinkImage == nil {
c.ChainlinkImage = &ChainlinkImageConfig{}
}
logger.Debug().Msgf("Using %s env var to override ChainlinkImage.PostgresVersion", E2E_TEST_CHAINLINK_POSTGRES_VERSION_ENV)
c.ChainlinkImage.PostgresVersion = &chainlinkPostgresVersion
}

chainlinkUpgradeImage := MustReadEnvVar_String(E2E_TEST_CHAINLINK_UPGRADE_IMAGE_ENV)
if chainlinkUpgradeImage != "" {
if c.ChainlinkUpgradeImage == nil {
Expand All @@ -217,6 +274,15 @@ func (c *TestConfig) ReadFromEnvVar() error {
c.ChainlinkUpgradeImage.Image = &chainlinkUpgradeImage
}

chainlinkUpgradeVersion := MustReadEnvVar_String(E2E_TEST_CHAINLINK_UPGRADE_VERSION_ENV)
if chainlinkUpgradeVersion != "" {
if c.ChainlinkUpgradeImage == nil {
c.ChainlinkUpgradeImage = &ChainlinkImageConfig{}
}
logger.Debug().Msgf("Using %s env var to override ChainlinkUpgradeImage.Version", E2E_TEST_CHAINLINK_UPGRADE_VERSION_ENV)
c.ChainlinkUpgradeImage.Version = &chainlinkUpgradeVersion
}

return nil
}

Expand Down
9 changes: 6 additions & 3 deletions config/testconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,22 @@ func TestReadConfigValuesFromEnvVars(t *testing.T) {
os.Setenv("E2E_TEST_GROUP3_RPC_WS_URL_1", "wsUrl1")
os.Setenv("E2E_TEST_CHAINLINK_IMAGE", "imageValue")
os.Setenv("E2E_TEST_PYROSCOPE_ENABLED", "true")
os.Setenv("E2E_TEST_SELECTED_NETWORK", "networkA,networkB")
},
cleanupFunc: func() {
os.Unsetenv("E2E_TEST_GROUP1_WALLET_KEY_1")
os.Unsetenv("E2E_TEST_GROUP2_RPC_HTTP_URL_1")
os.Unsetenv("E2E_TEST_GROUP3_RPC_WS_URL_1")
os.Unsetenv("E2E_TEST_CHAINLINK_IMAGE")
os.Unsetenv("E2E_TEST_PYROSCOPE_ENABLED")
os.Unsetenv("E2E_TEST_SELECTED_NETWORK")
},
expectedConfig: TestConfig{
Network: &NetworkConfig{
WalletKeys: map[string][]string{"GROUP1": {"walletValue1"}},
RpcHttpUrls: map[string][]string{"GROUP2": {"httpUrl1"}},
RpcWsUrls: map[string][]string{"GROUP3": {"wsUrl1"}},
SelectedNetworks: []string{"networkA", "networkB"},
WalletKeys: map[string][]string{"GROUP1": {"walletValue1"}},
RpcHttpUrls: map[string][]string{"GROUP2": {"httpUrl1"}},
RpcWsUrls: map[string][]string{"GROUP3": {"wsUrl1"}},
},
Pyroscope: &PyroscopeConfig{Enabled: ptr.Ptr[bool](true)},
ChainlinkImage: &ChainlinkImageConfig{Image: newString("imageValue")},
Expand Down
Loading

0 comments on commit a49f2df

Please sign in to comment.