kubeam: increase ut coverage for addon/dns
Signed-off-by: xin.li <xin.li@daocloud.io>
This commit is contained in:
		@@ -20,9 +20,12 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"reflect"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/lithammer/dedent"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apps "k8s.io/api/apps/v1"
 | 
						apps "k8s.io/api/apps/v1"
 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						v1 "k8s.io/api/core/v1"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
@@ -31,11 +34,10 @@ import (
 | 
				
			|||||||
	clientset "k8s.io/client-go/kubernetes"
 | 
						clientset "k8s.io/client-go/kubernetes"
 | 
				
			||||||
	clientsetfake "k8s.io/client-go/kubernetes/fake"
 | 
						clientsetfake "k8s.io/client-go/kubernetes/fake"
 | 
				
			||||||
	clientsetscheme "k8s.io/client-go/kubernetes/scheme"
 | 
						clientsetscheme "k8s.io/client-go/kubernetes/scheme"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
 | 
						kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
 | 
				
			||||||
	kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
 | 
						kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
 | 
				
			||||||
	kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
 | 
						kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/lithammer/dedent"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestCompileManifests(t *testing.T) {
 | 
					func TestCompileManifests(t *testing.T) {
 | 
				
			||||||
@@ -585,7 +587,7 @@ func TestDeployedDNSReplicas(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			client := newMockClientForTest(t, 2, tt.deploymentSize, "")
 | 
								client := newMockClientForTest(t, 2, tt.deploymentSize, "", "", "")
 | 
				
			||||||
			got, err := deployedDNSReplicas(client, 5)
 | 
								got, err := deployedDNSReplicas(client, 5)
 | 
				
			||||||
			if (err != nil) != tt.wantErr {
 | 
								if (err != nil) != tt.wantErr {
 | 
				
			||||||
				t.Errorf("deployedDNSReplicas() error = %v, wantErr %v", err, tt.wantErr)
 | 
									t.Errorf("deployedDNSReplicas() error = %v, wantErr %v", err, tt.wantErr)
 | 
				
			||||||
@@ -614,7 +616,7 @@ func TestCoreDNSAddon(t *testing.T) {
 | 
				
			|||||||
			name: "cfg is empty",
 | 
								name: "cfg is empty",
 | 
				
			||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				cfg:           &kubeadmapi.ClusterConfiguration{},
 | 
									cfg:           &kubeadmapi.ClusterConfiguration{},
 | 
				
			||||||
				client:        newMockClientForTest(t, 2, 1, ""),
 | 
									client:        newMockClientForTest(t, 2, 1, "", "", ""),
 | 
				
			||||||
				printManifest: false,
 | 
									printManifest: false,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			wantOut: "",
 | 
								wantOut: "",
 | 
				
			||||||
@@ -626,14 +628,14 @@ func TestCoreDNSAddon(t *testing.T) {
 | 
				
			|||||||
				cfg: &kubeadmapi.ClusterConfiguration{
 | 
									cfg: &kubeadmapi.ClusterConfiguration{
 | 
				
			||||||
					DNS: kubeadmapi.DNS{
 | 
										DNS: kubeadmapi.DNS{
 | 
				
			||||||
						ImageMeta: kubeadmapi.ImageMeta{
 | 
											ImageMeta: kubeadmapi.ImageMeta{
 | 
				
			||||||
							ImageRepository: "daocloud.io",
 | 
												ImageRepository: "foo.bar.io",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Networking: kubeadmapi.Networking{
 | 
										Networking: kubeadmapi.Networking{
 | 
				
			||||||
						ServiceSubnet: "10.0.0.0/16",
 | 
											ServiceSubnet: "10.0.0.0/16",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				client:        newMockClientForTest(t, 2, 1, ""),
 | 
									client:        newMockClientForTest(t, 2, 1, "", "", ""),
 | 
				
			||||||
				printManifest: false,
 | 
									printManifest: false,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			wantOut: "[addons] Applied essential addon: CoreDNS\n",
 | 
								wantOut: "[addons] Applied essential addon: CoreDNS\n",
 | 
				
			||||||
@@ -645,14 +647,14 @@ func TestCoreDNSAddon(t *testing.T) {
 | 
				
			|||||||
				cfg: &kubeadmapi.ClusterConfiguration{
 | 
									cfg: &kubeadmapi.ClusterConfiguration{
 | 
				
			||||||
					DNS: kubeadmapi.DNS{
 | 
										DNS: kubeadmapi.DNS{
 | 
				
			||||||
						ImageMeta: kubeadmapi.ImageMeta{
 | 
											ImageMeta: kubeadmapi.ImageMeta{
 | 
				
			||||||
							ImageRepository: "daocloud.io",
 | 
												ImageRepository: "foo.bar.io",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Networking: kubeadmapi.Networking{
 | 
										Networking: kubeadmapi.Networking{
 | 
				
			||||||
						ServiceSubnet: "10.0.0.0/16",
 | 
											ServiceSubnet: "10.0.0.0/16",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				client:        newMockClientForTest(t, 2, 1, ""),
 | 
									client:        newMockClientForTest(t, 2, 1, "", "", ""),
 | 
				
			||||||
				printManifest: true,
 | 
									printManifest: true,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			wantOut: dedent.Dedent(`---
 | 
								wantOut: dedent.Dedent(`---
 | 
				
			||||||
@@ -699,7 +701,7 @@ spec:
 | 
				
			|||||||
        kubernetes.io/os: linux
 | 
					        kubernetes.io/os: linux
 | 
				
			||||||
      containers:
 | 
					      containers:
 | 
				
			||||||
      - name: coredns
 | 
					      - name: coredns
 | 
				
			||||||
        image: daocloud.io/coredns:v1.11.1
 | 
					        image: foo.bar.io/coredns:v1.11.1
 | 
				
			||||||
        imagePullPolicy: IfNotPresent
 | 
					        imagePullPolicy: IfNotPresent
 | 
				
			||||||
        resources:
 | 
					        resources:
 | 
				
			||||||
          limits:
 | 
					          limits:
 | 
				
			||||||
@@ -892,32 +894,51 @@ func TestEnsureDNSAddon(t *testing.T) {
 | 
				
			|||||||
				cfg: &kubeadmapi.ClusterConfiguration{
 | 
									cfg: &kubeadmapi.ClusterConfiguration{
 | 
				
			||||||
					DNS: kubeadmapi.DNS{
 | 
										DNS: kubeadmapi.DNS{
 | 
				
			||||||
						ImageMeta: kubeadmapi.ImageMeta{
 | 
											ImageMeta: kubeadmapi.ImageMeta{
 | 
				
			||||||
							ImageRepository: "daocloud.io",
 | 
												ImageRepository: "foo.bar.io",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Networking: kubeadmapi.Networking{
 | 
										Networking: kubeadmapi.Networking{
 | 
				
			||||||
						ServiceSubnet: "10.0.0.0/16",
 | 
											ServiceSubnet: "10.0.0.0/16",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				client:        newMockClientForTest(t, 0, 1, ""),
 | 
									client:        newMockClientForTest(t, 0, 1, "", "", ""),
 | 
				
			||||||
				printManifest: false,
 | 
									printManifest: false,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			wantOut: "[addons] Applied essential addon: CoreDNS\n",
 | 
								wantOut: "[addons] Applied essential addon: CoreDNS\n",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "get dns replicas failed",
 | 
				
			||||||
 | 
								args: args{
 | 
				
			||||||
 | 
									cfg: &kubeadmapi.ClusterConfiguration{
 | 
				
			||||||
 | 
										DNS: kubeadmapi.DNS{
 | 
				
			||||||
 | 
											ImageMeta: kubeadmapi.ImageMeta{
 | 
				
			||||||
 | 
												ImageRepository: "foo.bar.io",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Networking: kubeadmapi.Networking{
 | 
				
			||||||
 | 
											ServiceSubnet: "10.0.0.0/16",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									client:        newMockClientForTest(t, 0, 2, "", "", ""),
 | 
				
			||||||
 | 
									printManifest: false,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								wantErr: true,
 | 
				
			||||||
 | 
								wantOut: "",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "not print Manifest",
 | 
								name: "not print Manifest",
 | 
				
			||||||
			args: args{
 | 
								args: args{
 | 
				
			||||||
				cfg: &kubeadmapi.ClusterConfiguration{
 | 
									cfg: &kubeadmapi.ClusterConfiguration{
 | 
				
			||||||
					DNS: kubeadmapi.DNS{
 | 
										DNS: kubeadmapi.DNS{
 | 
				
			||||||
						ImageMeta: kubeadmapi.ImageMeta{
 | 
											ImageMeta: kubeadmapi.ImageMeta{
 | 
				
			||||||
							ImageRepository: "daocloud.io",
 | 
												ImageRepository: "foo.bar.io",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					Networking: kubeadmapi.Networking{
 | 
										Networking: kubeadmapi.Networking{
 | 
				
			||||||
						ServiceSubnet: "10.0.0.0/16",
 | 
											ServiceSubnet: "10.0.0.0/16",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				client:        newMockClientForTest(t, 0, 1, ""),
 | 
									client:        newMockClientForTest(t, 0, 1, "", "", ""),
 | 
				
			||||||
				printManifest: true,
 | 
									printManifest: true,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			wantOut: dedent.Dedent(`---
 | 
								wantOut: dedent.Dedent(`---
 | 
				
			||||||
@@ -964,7 +985,7 @@ spec:
 | 
				
			|||||||
        kubernetes.io/os: linux
 | 
					        kubernetes.io/os: linux
 | 
				
			||||||
      containers:
 | 
					      containers:
 | 
				
			||||||
      - name: coredns
 | 
					      - name: coredns
 | 
				
			||||||
        image: daocloud.io/coredns:v1.11.1
 | 
					        image: foo.bar.io/coredns:v1.11.1
 | 
				
			||||||
        imagePullPolicy: IfNotPresent
 | 
					        imagePullPolicy: IfNotPresent
 | 
				
			||||||
        resources:
 | 
					        resources:
 | 
				
			||||||
          limits:
 | 
					          limits:
 | 
				
			||||||
@@ -1375,7 +1396,7 @@ func TestCreateDNSService(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			client := newMockClientForTest(t, 1, 1, "")
 | 
								client := newMockClientForTest(t, 1, 1, "", "", "")
 | 
				
			||||||
			if err := createDNSService(tt.args.dnsService, tt.args.serviceBytes, client); (err != nil) != tt.wantErr {
 | 
								if err := createDNSService(tt.args.dnsService, tt.args.serviceBytes, client); (err != nil) != tt.wantErr {
 | 
				
			||||||
				t.Errorf("createDNSService() error = %v, wantErr %v", err, tt.wantErr)
 | 
									t.Errorf("createDNSService() error = %v, wantErr %v", err, tt.wantErr)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1385,46 +1406,66 @@ func TestCreateDNSService(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestDeployedDNSAddon(t *testing.T) {
 | 
					func TestDeployedDNSAddon(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		name        string
 | 
							name           string
 | 
				
			||||||
		image       string
 | 
							image          string
 | 
				
			||||||
		wantVersion string
 | 
							wantVersion    string
 | 
				
			||||||
		wantErr     bool
 | 
							deploymentSize int
 | 
				
			||||||
 | 
							wantErr        bool
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "default",
 | 
								name:           "default",
 | 
				
			||||||
			image:       "registry.k8s.io/coredns/coredns:v1.11.1",
 | 
								image:          "registry.k8s.io/coredns/coredns:v1.11.1",
 | 
				
			||||||
			wantVersion: "v1.11.1",
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "v1.11.1",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "with digest",
 | 
								name:           "no dns addon deployment",
 | 
				
			||||||
			image:       "registry.k8s.io/coredns/coredns:v1.11.1@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e",
 | 
								image:          "registry.k8s.io/coredns/coredns:v1.11.1",
 | 
				
			||||||
			wantVersion: "v1.11.1",
 | 
								deploymentSize: 0,
 | 
				
			||||||
 | 
								wantVersion:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "without registry",
 | 
								name:           "multiple dns addon deployment",
 | 
				
			||||||
			image:       "coredns/coredns:coredns-s390x",
 | 
								image:          "registry.k8s.io/coredns/coredns:v1.11.1",
 | 
				
			||||||
			wantVersion: "coredns-s390x",
 | 
								deploymentSize: 2,
 | 
				
			||||||
 | 
								wantVersion:    "",
 | 
				
			||||||
 | 
								wantErr:        true,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "without registry and tag",
 | 
								name:           "with digest",
 | 
				
			||||||
			image:       "coredns/coredns",
 | 
								image:          "registry.k8s.io/coredns/coredns:v1.11.1@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e",
 | 
				
			||||||
			wantVersion: "",
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "v1.11.1",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "with explicit port",
 | 
								name:           "without registry",
 | 
				
			||||||
			image:       "localhost:4711/coredns/coredns:v1.11.2-pre.1",
 | 
								image:          "coredns/coredns:coredns-s390x",
 | 
				
			||||||
			wantVersion: "v1.11.2-pre.1",
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "coredns-s390x",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "with explicit port but without tag",
 | 
								name:           "without registry and tag",
 | 
				
			||||||
			image:       "localhost:4711/coredns/coredns@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e",
 | 
								image:          "coredns/coredns",
 | 
				
			||||||
			wantVersion: "",
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:           "with explicit port",
 | 
				
			||||||
 | 
								image:          "localhost:4711/coredns/coredns:v1.11.2-pre.1",
 | 
				
			||||||
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "v1.11.2-pre.1",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:           "with explicit port but without tag",
 | 
				
			||||||
 | 
								image:          "localhost:4711/coredns/coredns@sha256:a0ead06651cf580044aeb0a0feba63591858fb2e43ade8c9dea45a6a89ae7e5e",
 | 
				
			||||||
 | 
								deploymentSize: 1,
 | 
				
			||||||
 | 
								wantVersion:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			client := newMockClientForTest(t, 1, 1, tt.image)
 | 
								client := newMockClientForTest(t, 1, tt.deploymentSize, tt.image, "", "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			version, err := DeployedDNSAddon(client)
 | 
								version, err := DeployedDNSAddon(client)
 | 
				
			||||||
			if (err != nil) != tt.wantErr {
 | 
								if (err != nil) != tt.wantErr {
 | 
				
			||||||
@@ -1437,9 +1478,182 @@ func TestDeployedDNSAddon(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestGetCoreDNSInfo(t *testing.T) {
 | 
				
			||||||
 | 
						tests := []struct {
 | 
				
			||||||
 | 
							name          string
 | 
				
			||||||
 | 
							client        clientset.Interface
 | 
				
			||||||
 | 
							wantConfigMap *v1.ConfigMap
 | 
				
			||||||
 | 
							wantCorefile  string
 | 
				
			||||||
 | 
							wantVersion   string
 | 
				
			||||||
 | 
							wantErr       bool
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:          "no coredns configmap",
 | 
				
			||||||
 | 
								client:        newMockClientForTest(t, 1, 1, "localhost:4711/coredns/coredns:v1.11.2-pre.1", "", ""),
 | 
				
			||||||
 | 
								wantConfigMap: nil,
 | 
				
			||||||
 | 
								wantCorefile:  "",
 | 
				
			||||||
 | 
								wantVersion:   "",
 | 
				
			||||||
 | 
								wantErr:       false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:          "the key of coredns configmap data does not contain corefile",
 | 
				
			||||||
 | 
								client:        newMockClientForTest(t, 1, 1, "localhost:4711/coredns/coredns:v1.11.2-pre.1", "coredns", "Corefilefake"),
 | 
				
			||||||
 | 
								wantConfigMap: nil,
 | 
				
			||||||
 | 
								wantCorefile:  "",
 | 
				
			||||||
 | 
								wantVersion:   "",
 | 
				
			||||||
 | 
								wantErr:       true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:          "failed to obtain coredns version",
 | 
				
			||||||
 | 
								client:        newMockClientForTest(t, 1, 2, "localhost:4711/coredns/coredns:v1.11.2-pre.1", "coredns", "Corefile"),
 | 
				
			||||||
 | 
								wantConfigMap: nil,
 | 
				
			||||||
 | 
								wantCorefile:  "",
 | 
				
			||||||
 | 
								wantVersion:   "",
 | 
				
			||||||
 | 
								wantErr:       true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:   "coredns information can be obtained normally",
 | 
				
			||||||
 | 
								client: newMockClientForTest(t, 1, 1, "localhost:4711/coredns/coredns:v1.11.2-pre.1", "coredns", "Corefile"),
 | 
				
			||||||
 | 
								wantConfigMap: &v1.ConfigMap{
 | 
				
			||||||
 | 
									TypeMeta: metav1.TypeMeta{
 | 
				
			||||||
 | 
										Kind:       "ConfigMap",
 | 
				
			||||||
 | 
										APIVersion: "v1",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
 | 
										Name: "coredns",
 | 
				
			||||||
 | 
										Labels: map[string]string{
 | 
				
			||||||
 | 
											"k8s-app":            "kube-dns",
 | 
				
			||||||
 | 
											"kubernetes.io/name": "coredns",
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Namespace: "kube-system",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Data: map[string]string{
 | 
				
			||||||
 | 
										"Corefile": dedent.Dedent(`
 | 
				
			||||||
 | 
					    .:53 {
 | 
				
			||||||
 | 
					        errors
 | 
				
			||||||
 | 
					        health {
 | 
				
			||||||
 | 
					            lameduck 5s
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ready
 | 
				
			||||||
 | 
					        kubernetes cluster.local in-addr.arpa ip6.arpa {
 | 
				
			||||||
 | 
					          pods insecure
 | 
				
			||||||
 | 
					          fallthrough in-addr.arpa ip6.arpa
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        prometheus :9153
 | 
				
			||||||
 | 
					        forward . /etc/resolv.conf {
 | 
				
			||||||
 | 
					          prefer_udp
 | 
				
			||||||
 | 
					          max_concurrent 1000
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        cache 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        loop
 | 
				
			||||||
 | 
					        reload
 | 
				
			||||||
 | 
					        loadbalance
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						`),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								wantCorefile: dedent.Dedent(`
 | 
				
			||||||
 | 
					    .:53 {
 | 
				
			||||||
 | 
					        errors
 | 
				
			||||||
 | 
					        health {
 | 
				
			||||||
 | 
					            lameduck 5s
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ready
 | 
				
			||||||
 | 
					        kubernetes cluster.local in-addr.arpa ip6.arpa {
 | 
				
			||||||
 | 
					          pods insecure
 | 
				
			||||||
 | 
					          fallthrough in-addr.arpa ip6.arpa
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        prometheus :9153
 | 
				
			||||||
 | 
					        forward . /etc/resolv.conf {
 | 
				
			||||||
 | 
					          prefer_udp
 | 
				
			||||||
 | 
					          max_concurrent 1000
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        cache 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        loop
 | 
				
			||||||
 | 
					        reload
 | 
				
			||||||
 | 
					        loadbalance
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						`),
 | 
				
			||||||
 | 
								wantVersion: "v1.11.2-pre.1",
 | 
				
			||||||
 | 
								wantErr:     false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, tt := range tests {
 | 
				
			||||||
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								got, got1, got2, err := GetCoreDNSInfo(tt.client)
 | 
				
			||||||
 | 
								if (err != nil) != tt.wantErr {
 | 
				
			||||||
 | 
									t.Errorf("GetCoreDNSInfo() error = %v, wantErr %v", err, tt.wantErr)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if !reflect.DeepEqual(got, tt.wantConfigMap) {
 | 
				
			||||||
 | 
									t.Errorf("GetCoreDNSInfo() got = %v, want %v", got, tt.wantConfigMap)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if got1 != tt.wantCorefile {
 | 
				
			||||||
 | 
									t.Errorf("GetCoreDNSInfo() got1 = %v, want %v", got1, tt.wantCorefile)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if got2 != tt.wantVersion {
 | 
				
			||||||
 | 
									t.Errorf("GetCoreDNSInfo() got2 = %v, want %v", got2, tt.wantVersion)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestIsCoreDNSConfigMapMigrationRequired(t *testing.T) {
 | 
				
			||||||
 | 
						tests := []struct {
 | 
				
			||||||
 | 
							name                           string
 | 
				
			||||||
 | 
							corefile                       string
 | 
				
			||||||
 | 
							currentInstalledCoreDNSVersion string
 | 
				
			||||||
 | 
							want                           bool
 | 
				
			||||||
 | 
							wantErr                        bool
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:                           "currentInstalledCoreDNSVersion is empty",
 | 
				
			||||||
 | 
								corefile:                       "",
 | 
				
			||||||
 | 
								currentInstalledCoreDNSVersion: "",
 | 
				
			||||||
 | 
								want:                           false,
 | 
				
			||||||
 | 
								wantErr:                        false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:                           "currentInstalledCoreDNSVersion is consistent with the standard version",
 | 
				
			||||||
 | 
								corefile:                       "",
 | 
				
			||||||
 | 
								currentInstalledCoreDNSVersion: kubeadmconstants.CoreDNSVersion,
 | 
				
			||||||
 | 
								want:                           false,
 | 
				
			||||||
 | 
								wantErr:                        false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:                           "Coredns Configmap needs to be migrated",
 | 
				
			||||||
 | 
								corefile:                       "Corefile: fake",
 | 
				
			||||||
 | 
								currentInstalledCoreDNSVersion: "v1.2.0",
 | 
				
			||||||
 | 
								want:                           true,
 | 
				
			||||||
 | 
								wantErr:                        false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name:                           "currentInstalledCoreDNSVersion is not supported",
 | 
				
			||||||
 | 
								corefile:                       "",
 | 
				
			||||||
 | 
								currentInstalledCoreDNSVersion: "v0.11.1",
 | 
				
			||||||
 | 
								want:                           false,
 | 
				
			||||||
 | 
								wantErr:                        true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, tt := range tests {
 | 
				
			||||||
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
 | 
								got, err := isCoreDNSConfigMapMigrationRequired(tt.corefile, tt.currentInstalledCoreDNSVersion)
 | 
				
			||||||
 | 
								if (err != nil) != tt.wantErr {
 | 
				
			||||||
 | 
									t.Errorf("isCoreDNSConfigMapMigrationRequired() error = %v, wantErr %v", err, tt.wantErr)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if got != tt.want {
 | 
				
			||||||
 | 
									t.Errorf("isCoreDNSConfigMapMigrationRequired() = %v, want %v", got, tt.want)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// replicas is replica of each DNS deployment
 | 
					// replicas is replica of each DNS deployment
 | 
				
			||||||
// deploymentSize is the number of deployments with `k8s-app=kube-dns` label.
 | 
					// deploymentSize is the number of deployments with `k8s-app=kube-dns` label.
 | 
				
			||||||
func newMockClientForTest(t *testing.T, replicas int32, deploymentSize int, image string) *clientsetfake.Clientset {
 | 
					func newMockClientForTest(t *testing.T, replicas int32, deploymentSize int, image string, configMap string, configData string) *clientsetfake.Clientset {
 | 
				
			||||||
	if image == "" {
 | 
						if image == "" {
 | 
				
			||||||
		image = "registry.k8s.io/coredns/coredns:v1.11.1"
 | 
							image = "registry.k8s.io/coredns/coredns:v1.11.1"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1501,5 +1715,53 @@ func newMockClientForTest(t *testing.T, replicas int32, deploymentSize int, imag
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("error creating service: %v", err)
 | 
							t.Fatalf("error creating service: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if configMap != "" {
 | 
				
			||||||
 | 
							if configMap == "" {
 | 
				
			||||||
 | 
								configMap = "Corefile"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							_, err = client.CoreV1().ConfigMaps(metav1.NamespaceSystem).Create(context.TODO(), &v1.ConfigMap{
 | 
				
			||||||
 | 
								TypeMeta: metav1.TypeMeta{
 | 
				
			||||||
 | 
									Kind:       "ConfigMap",
 | 
				
			||||||
 | 
									APIVersion: "v1",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
 | 
									Name: configMap,
 | 
				
			||||||
 | 
									Labels: map[string]string{
 | 
				
			||||||
 | 
										"k8s-app":            "kube-dns",
 | 
				
			||||||
 | 
										"kubernetes.io/name": "coredns",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Namespace: "kube-system",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								Data: map[string]string{
 | 
				
			||||||
 | 
									configData: dedent.Dedent(`
 | 
				
			||||||
 | 
					    .:53 {
 | 
				
			||||||
 | 
					        errors
 | 
				
			||||||
 | 
					        health {
 | 
				
			||||||
 | 
					            lameduck 5s
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ready
 | 
				
			||||||
 | 
					        kubernetes cluster.local in-addr.arpa ip6.arpa {
 | 
				
			||||||
 | 
					          pods insecure
 | 
				
			||||||
 | 
					          fallthrough in-addr.arpa ip6.arpa
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        prometheus :9153
 | 
				
			||||||
 | 
					        forward . /etc/resolv.conf {
 | 
				
			||||||
 | 
					          prefer_udp
 | 
				
			||||||
 | 
					          max_concurrent 1000
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        cache 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        loop
 | 
				
			||||||
 | 
					        reload
 | 
				
			||||||
 | 
					        loadbalance
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
						`),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							}, metav1.CreateOptions{})
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								t.Fatalf("error creating service: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return client
 | 
						return client
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user