From 5a2ca8bb50a8ec34f5834851fb06e4cdc7e253cd Mon Sep 17 00:00:00 2001 From: Christian Schefuss Date: Thu, 21 Dec 2023 19:15:57 +0100 Subject: [PATCH] improve URI parsing for elasticsearch bindings * alternative determination of port based on URI scheme swisscom/backman#83 --- service/service.go | 10 ++++++++++ service/service_bindings_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/service/service.go b/service/service.go index a6e7203..385a2f8 100644 --- a/service/service.go +++ b/service/service.go @@ -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, "/") diff --git a/service/service_bindings_test.go b/service/service_bindings_test.go index 7e45b03..1b29fcc 100644 --- a/service/service_bindings_test.go +++ b/service/service_bindings_test.go @@ -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) +}