diff --git a/postgres_exporter_test.go b/postgres_exporter_test.go index 7edeee04..06aa9d80 100644 --- a/postgres_exporter_test.go +++ b/postgres_exporter_test.go @@ -7,6 +7,7 @@ import ( "testing" "github.com/blang/semver" + "os" ) // Hook up gocheck into the "go test" runner. @@ -84,3 +85,67 @@ func (s *FunctionalSuite) TestSemanticVersionColumnDiscard(c *C) { ) } } + +func TestEnvironmentSettingWithSecretsFiles(t *testing.T) { + + err := os.Setenv("DATA_SOURCE_USER_FILE", "./tests/username_file") + if err != nil { + t.Errorf("DATA_SOURCE_USER_FILE could not be set") + } + + err = os.Setenv("DATA_SOURCE_PASS_FILE", "./tests/userpass_file") + if err != nil { + t.Errorf("DATA_SOURCE_PASS_FILE could not be set") + } + + err = os.Setenv("DATA_SOURCE_URI", "localhost:5432/?sslmode=disable") + if err != nil { + t.Errorf("DATA_SOURCE_URI could not be set") + } + + var expected = "postgresql://custom_username:custom_password@localhost:5432/?sslmode=disable" + + dsn := getDataSource() + if dsn != expected { + t.Errorf("Expected Username to be read from file. Found=%v, expected=%v", dsn, expected) + } +} + +func TestEnvironmentSettingWithDns(t *testing.T) { + + envDsn := "postgresql://user:password@localhost:5432/?sslmode=enabled" + err := os.Setenv("DATA_SOURCE_NAME", envDsn) + if err != nil { + t.Errorf("DATA_SOURCE_NAME could not be set") + } + + dsn := getDataSource() + if dsn != envDsn { + t.Errorf("Expected Username to be read from file. Found=%v, expected=%v", dsn, envDsn) + } +} + +// test DATA_SOURCE_NAME is used even if username and password environment wariables are set +func TestEnvironmentSettingWithDnsAndSecrets(t *testing.T) { + + envDsn := "postgresql://userDsn:passwordDsn@localhost:55432/?sslmode=disabled" + err := os.Setenv("DATA_SOURCE_NAME", envDsn) + if err != nil { + t.Errorf("DATA_SOURCE_NAME could not be set") + } + + err = os.Setenv("DATA_SOURCE_USER_FILE", "./tests/username_file") + if err != nil { + t.Errorf("DATA_SOURCE_USER_FILE could not be set") + } + + err = os.Setenv("DATA_SOURCE_PASS", "envUserPass") + if err != nil { + t.Errorf("DATA_SOURCE_PASS could not be set") + } + + dsn := getDataSource() + if dsn != envDsn { + t.Errorf("Expected Username to be read from file. Found=%v, expected=%v", dsn, envDsn) + } +} diff --git a/tests/username_file b/tests/username_file new file mode 100644 index 00000000..895ad19f --- /dev/null +++ b/tests/username_file @@ -0,0 +1 @@ +custom_username diff --git a/tests/userpass_file b/tests/userpass_file new file mode 100644 index 00000000..4251eaea --- /dev/null +++ b/tests/userpass_file @@ -0,0 +1 @@ +custom_password