From 98b11e82d5cc3d79fdb9681d624e91f71ddcd007 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 4 Feb 2016 08:02:05 +0100 Subject: [PATCH] Add explicit test case for old mergo.Merge behavior --- .../unversioned/clientcmd/client_config.go | 2 ++ .../clientcmd/client_config_test.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/pkg/client/unversioned/clientcmd/client_config.go b/pkg/client/unversioned/clientcmd/client_config.go index a0a323fe4d..970bd08891 100644 --- a/pkg/client/unversioned/clientcmd/client_config.go +++ b/pkg/client/unversioned/clientcmd/client_config.go @@ -111,6 +111,8 @@ func (config DirectClientConfig) ClientConfig() (*client.Config, error) { var err error // mergo is a first write wins for map value and a last writing wins for interface values + // NOTE: This behavior changed with https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a. + // Our mergo.Merge version is older than this change. userAuthPartialConfig, err := getUserIdentificationPartialConfig(configAuthInfo, config.fallbackReader) if err != nil { return nil, err diff --git a/pkg/client/unversioned/clientcmd/client_config_test.go b/pkg/client/unversioned/clientcmd/client_config_test.go index 8348696778..555c4240fc 100644 --- a/pkg/client/unversioned/clientcmd/client_config_test.go +++ b/pkg/client/unversioned/clientcmd/client_config_test.go @@ -20,11 +20,30 @@ import ( "reflect" "testing" + "github.com/imdario/mergo" "k8s.io/kubernetes/pkg/api/testapi" client "k8s.io/kubernetes/pkg/client/unversioned" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ) +func TestOldMergoLib(t *testing.T) { + type T struct { + X string + } + dst := T{X: "one"} + src := T{X: "two"} + mergo.Merge(&dst, &src) + if dst.X != "two" { + // mergo.Merge changed in an incompatible way with + // + // https://github.com/imdario/mergo/commit/d304790b2ed594794496464fadd89d2bb266600a + // + // We have to stay with the old version which still does eager + // copying from src to dst in structs. + t.Errorf("mergo.Merge library found with incompatible, new behavior") + } +} + func createValidTestConfig() *clientcmdapi.Config { const ( server = "https://anything.com:8080"