123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /*
- Copyright 2016 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package node
- import (
- "testing"
- "k8s.io/api/core/v1"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- )
- func TestGetPreferredAddress(t *testing.T) {
- testcases := map[string]struct {
- Labels map[string]string
- Addresses []v1.NodeAddress
- Preferences []v1.NodeAddressType
- ExpectErr string
- ExpectAddress string
- }{
- "no addresses": {
- ExpectErr: "no preferred addresses found; known addresses: []",
- },
- "missing address": {
- Addresses: []v1.NodeAddress{
- {Type: v1.NodeInternalIP, Address: "1.2.3.4"},
- },
- Preferences: []v1.NodeAddressType{v1.NodeHostName},
- ExpectErr: "no preferred addresses found; known addresses: [{InternalIP 1.2.3.4}]",
- },
- "found address": {
- Addresses: []v1.NodeAddress{
- {Type: v1.NodeInternalIP, Address: "1.2.3.4"},
- {Type: v1.NodeExternalIP, Address: "1.2.3.5"},
- {Type: v1.NodeExternalIP, Address: "1.2.3.7"},
- },
- Preferences: []v1.NodeAddressType{v1.NodeHostName, v1.NodeExternalIP},
- ExpectAddress: "1.2.3.5",
- },
- "found hostname address": {
- Labels: map[string]string{v1.LabelHostname: "label-hostname"},
- Addresses: []v1.NodeAddress{
- {Type: v1.NodeExternalIP, Address: "1.2.3.5"},
- {Type: v1.NodeHostName, Address: "status-hostname"},
- },
- Preferences: []v1.NodeAddressType{v1.NodeHostName, v1.NodeExternalIP},
- ExpectAddress: "status-hostname",
- },
- "label address ignored": {
- Labels: map[string]string{v1.LabelHostname: "label-hostname"},
- Addresses: []v1.NodeAddress{
- {Type: v1.NodeExternalIP, Address: "1.2.3.5"},
- },
- Preferences: []v1.NodeAddressType{v1.NodeHostName, v1.NodeExternalIP},
- ExpectAddress: "1.2.3.5",
- },
- }
- for k, tc := range testcases {
- node := &v1.Node{
- ObjectMeta: metav1.ObjectMeta{Labels: tc.Labels},
- Status: v1.NodeStatus{Addresses: tc.Addresses},
- }
- address, err := GetPreferredNodeAddress(node, tc.Preferences)
- errString := ""
- if err != nil {
- errString = err.Error()
- }
- if errString != tc.ExpectErr {
- t.Errorf("%s: expected err=%q, got %q", k, tc.ExpectErr, errString)
- }
- if address != tc.ExpectAddress {
- t.Errorf("%s: expected address=%q, got %q", k, tc.ExpectAddress, address)
- }
- }
- }
- func TestGetHostname(t *testing.T) {
- testCases := []struct {
- hostName string
- expectedHostName string
- expectError bool
- }{
- {
- hostName: " ",
- expectError: true,
- },
- {
- hostName: " abc ",
- expectedHostName: "abc",
- expectError: false,
- },
- }
- for idx, test := range testCases {
- hostName, err := GetHostname(test.hostName)
- if err != nil && !test.expectError {
- t.Errorf("[%d]: unexpected error: %s", idx, err)
- }
- if err == nil && test.expectError {
- t.Errorf("[%d]: expected error, got none", idx)
- }
- if test.expectedHostName != hostName {
- t.Errorf("[%d]: expected output %q, got %q", idx, test.expectedHostName, hostName)
- }
- }
- }
- func Test_GetZoneKey(t *testing.T) {
- tests := []struct {
- name string
- node *v1.Node
- zone string
- }{
- {
- name: "has no zone or region keys",
- node: &v1.Node{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{},
- },
- },
- zone: "",
- },
- {
- name: "has beta zone and region keys",
- node: &v1.Node{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{
- v1.LabelZoneFailureDomain: "zone1",
- v1.LabelZoneRegion: "region1",
- },
- },
- },
- zone: "region1:\x00:zone1",
- },
- {
- name: "has GA zone and region keys",
- node: &v1.Node{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{
- v1.LabelZoneFailureDomainStable: "zone1",
- v1.LabelZoneRegionStable: "region1",
- },
- },
- },
- zone: "region1:\x00:zone1",
- },
- {
- name: "has both beta and GA zone and region keys",
- node: &v1.Node{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{
- v1.LabelZoneFailureDomainStable: "zone1",
- v1.LabelZoneRegionStable: "region1",
- v1.LabelZoneFailureDomain: "zone1",
- v1.LabelZoneRegion: "region1",
- },
- },
- },
- zone: "region1:\x00:zone1",
- },
- {
- name: "has both beta and GA zone and region keys, beta labels take precedent",
- node: &v1.Node{
- ObjectMeta: metav1.ObjectMeta{
- Labels: map[string]string{
- v1.LabelZoneFailureDomainStable: "zone1",
- v1.LabelZoneRegionStable: "region1",
- v1.LabelZoneFailureDomain: "zone2",
- v1.LabelZoneRegion: "region2",
- },
- },
- },
- zone: "region2:\x00:zone2",
- },
- }
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- zone := GetZoneKey(test.node)
- if zone != test.zone {
- t.Logf("actual zone key: %q", zone)
- t.Logf("expected zone key: %q", test.zone)
- t.Errorf("unexpected zone key")
- }
- })
- }
- }
|