Skip to content

Commit

Permalink
improve URI parsing for elasticsearch bindings * alternative determin…
Browse files Browse the repository at this point in the history
…ation of port based on URI scheme #83
  • Loading branch information
schefDev committed Dec 21, 2023
1 parent 52d1759 commit 5a2ca8b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
10 changes: 10 additions & 0 deletions service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,16 @@ func enrichBinding(binding config.ServiceBinding) config.ServiceBinding {
binding.Port, _ = strconv.Atoi(p)
}

// set well-known port based on scheme if still missing
if binding.Port == 0 {
if strings.EqualFold(u.Scheme, "https") {
binding.Port = 443
}
if strings.EqualFold(u.Scheme, "http") {
binding.Port = 80
}
}

// set database if not defined yet but can be found in URI
if len(binding.Database) == 0 {
binding.Database = strings.TrimPrefix(u.Path, "/")
Expand Down
28 changes: 28 additions & 0 deletions service/service_bindings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,31 @@ func Test_Service_ParseServiceBindings(t *testing.T) {
assert.Equal(t, "dev-secret", c.Services["my_postgres_db"].Binding.Password) // from service_binding_root/*
assert.Equal(t, "postgres://dev-user:dev-secret@127.0.0.1:5432/my_postgres_db?sslmode=disable", c.Services["my_postgres_db"].Binding.URI) // from service_binding_root/*
}

func Test_Service_MergeVCAPServices(t *testing.T) {
config.SetConfigFile("_fixtures/config_without_bindings.json")

c := config.Get()
mergeVCAPServices()

assert.Equal(t, "postgres", c.Services["my_postgres_db"].Binding.Type)
assert.Equal(t, "127.0.0.1", c.Services["my_postgres_db"].Binding.Host)
assert.Equal(t, 5432, c.Services["my_postgres_db"].Binding.Port)
assert.Equal(t, "dev-user", c.Services["my_postgres_db"].Binding.Username)
assert.Equal(t, "dev-secret", c.Services["my_postgres_db"].Binding.Password)
assert.Equal(t, "postgres://dev-user:dev-secret@127.0.0.1:5432/my_postgres_db?sslmode=disable", c.Services["my_postgres_db"].Binding.URI)
assert.Equal(t, "https://0c061730-1b19-424b-8efd-349fd40957a0.yolo.elasticsearch.lyra-836.appcloud.swisscom.com:443", c.Services["my-elasticsearch"].Binding.URI)

elasticsearchServiceConfig := c.Services["my-elasticsearch"]
// without enrichBinding is port undefined
assert.Equal(t, 0, elasticsearchServiceConfig.Binding.Port)
// if port is defined in uri, it is determined from there
elasticsearchServiceConfig.Binding = enrichBinding(elasticsearchServiceConfig.Binding)
assert.Equal(t, 443, elasticsearchServiceConfig.Binding.Port)
// if no port is defined in uri, it is determined by schema/protocol
elasticsearchServiceConfig.Binding.Host = "https://0c061730-1b19-424b-8efd-349fd40957a0.yolo.elasticsearch.lyra-836.appcloud.swisscom.com"
elasticsearchServiceConfig.Binding.URI = elasticsearchServiceConfig.Binding.Host
elasticsearchServiceConfig.Binding.Port = 0
elasticsearchServiceConfig.Binding = enrichBinding(elasticsearchServiceConfig.Binding)
assert.Equal(t, 443, elasticsearchServiceConfig.Binding.Port)
}

0 comments on commit 5a2ca8b

Please sign in to comment.