Skip to content

Format expected config file with ini pkg #429

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 29, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 53 additions & 30 deletions internal/resource/configmap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@
package resource_test

import (
"bytes"
"fmt"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/api/v1beta1"
"github.com/rabbitmq/cluster-operator/internal/resource"
"gopkg.in/ini.v1"
corev1 "k8s.io/api/core/v1"
k8sresource "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -24,6 +26,17 @@ import (
defaultscheme "k8s.io/client-go/kubernetes/scheme"
)

func defaultRabbitmqConf(instanceName string) string {
return iniString(`
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default
cluster_formation.k8s.address_type = hostname
cluster_partition_handling = pause_minority
queue_master_locator = min-masters
disk_free_limit.absolute = 2GB
cluster_name = ` + instanceName)
}

var _ = Describe("GenerateServerConfigMap", func() {
var (
instance rabbitmqv1beta1.RabbitmqCluster
Expand Down Expand Up @@ -89,36 +102,28 @@ var _ = Describe("GenerateServerConfigMap", func() {
When("additionalConfig is not provided", func() {
It("returns the default rabbitmq conf", func() {
builder.Instance.Spec.Rabbitmq.AdditionalConfig = ""
defaultRabbitmqConf := `cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s
cluster_formation.k8s.host = kubernetes.default
cluster_formation.k8s.address_type = hostname
cluster_partition_handling = pause_minority
queue_master_locator = min-masters
disk_free_limit.absolute = 2GB
cluster_name = ` + builder.Instance.Name + "\n"

expectedRabbitmqConf := defaultRabbitmqConf(builder.Instance.Name)

Expect(configMapBuilder.Update(configMap)).To(Succeed())
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", defaultRabbitmqConf))
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", expectedRabbitmqConf))
})
})

When("valid additionalConfig is provided", func() {
BeforeEach(func() {
instance.Spec.Rabbitmq.AdditionalConfig = `cluster_formation.peer_discovery_backend = my-backend
instance.Spec.Rabbitmq.AdditionalConfig = `
cluster_formation.peer_discovery_backend = my-backend
my-config-property-0 = great-value
my-config-property-1 = better-value`
})

It("appends configurations to the default rabbitmq.conf and overwrites duplicate keys", func() {
expectedRabbitmqConf := `cluster_formation.peer_discovery_backend = my-backend
cluster_formation.k8s.host = kubernetes.default
cluster_formation.k8s.address_type = hostname
cluster_partition_handling = pause_minority
queue_master_locator = min-masters
disk_free_limit.absolute = 2GB
cluster_name = ` + builder.Instance.Name + `
my-config-property-0 = great-value
my-config-property-1 = better-value
`
expectedRabbitmqConf := iniString(defaultRabbitmqConf(builder.Instance.Name) + `
cluster_formation.peer_discovery_backend = my-backend
my-config-property-0 = great-value
my-config-property-1 = better-value
`)

Expect(configMapBuilder.Update(configMap)).To(Succeed())
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", expectedRabbitmqConf))
Expand Down Expand Up @@ -217,11 +222,14 @@ CONSOLE_LOG=new`
},
}

expectedRabbitmqConf := iniString(defaultRabbitmqConf(builder.Instance.Name) + `
ssl_options.certfile = /etc/rabbitmq-tls/tls.crt
ssl_options.keyfile = /etc/rabbitmq-tls/tls.key
listeners.ssl.default = 5671
`)

Expect(configMapBuilder.Update(configMap)).To(Succeed())
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", ContainSubstring(`
ssl_options.certfile = /etc/rabbitmq-tls/tls.crt
ssl_options.keyfile = /etc/rabbitmq-tls/tls.key
listeners.ssl.default = 5671`)))
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", expectedRabbitmqConf))
})
})

Expand All @@ -240,13 +248,16 @@ listeners.ssl.default = 5671`)))
},
}

expectedRabbitmqConf := iniString(defaultRabbitmqConf(builder.Instance.Name) + `
ssl_options.certfile = /etc/rabbitmq-tls/tls.crt
ssl_options.keyfile = /etc/rabbitmq-tls/tls.key
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq-tls/ca.certificate
ssl_options.verify = verify_peer
`)

Expect(configMapBuilder.Update(configMap)).To(Succeed())
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", ContainSubstring(`
ssl_options.certfile = /etc/rabbitmq-tls/tls.crt
ssl_options.keyfile = /etc/rabbitmq-tls/tls.key
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq-tls/ca.certificate
ssl_options.verify = verify_peer`)))
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", expectedRabbitmqConf))
})
})

Expand All @@ -266,8 +277,10 @@ ssl_options.verify = verify_peer`)))
},
}

expectedRabbitmqConf := iniString(defaultRabbitmqConf(builder.Instance.Name) + fmt.Sprintf("total_memory_available_override_value = %d", 8*GiB))

Expect(configMapBuilder.Update(configMap)).To(Succeed())
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", ContainSubstring(fmt.Sprintf("total_memory_available_override_value = %d", 8*GiB))))
Expect(configMap.Data).To(HaveKeyWithValue("rabbitmq.conf", expectedRabbitmqConf))
})
})

Expand Down Expand Up @@ -362,3 +375,13 @@ ssl_options.verify = verify_peer`)))
})
})
})

// iniString formats the input string using "gopkg.in/ini.v1"
func iniString(input string) string {
ini.PrettySection = false
var output bytes.Buffer
cfg, _ := ini.Load([]byte(input))
_, err := cfg.WriteTo(&output)
ExpectWithOffset(1, err).NotTo(HaveOccurred())
return output.String()
}