k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/pkg/proxy/ipvs/util/testing/fake_test.go (about) 1 //go:build linux 2 // +build linux 3 4 /* 5 Copyright 2017 The Kubernetes Authors. 6 7 Licensed under the Apache License, Version 2.0 (the "License"); 8 you may not use this file except in compliance with the License. 9 You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13 Unless required by applicable law or agreed to in writing, software 14 distributed under the License is distributed on an "AS IS" BASIS, 15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 See the License for the specific language governing permissions and 17 limitations under the License. 18 */ 19 20 package testing 21 22 import ( 23 "testing" 24 25 utilipvs "k8s.io/kubernetes/pkg/proxy/ipvs/util" 26 netutils "k8s.io/utils/net" 27 ) 28 29 func TestVirtualServer(t *testing.T) { 30 // Initialize 31 fake := NewFake() 32 // Add a virtual server 33 vs1 := &utilipvs.VirtualServer{ 34 Address: netutils.ParseIPSloppy("1.2.3.4"), 35 Port: uint16(80), 36 Protocol: string("TCP"), 37 Flags: utilipvs.FlagHashed, 38 } 39 err := fake.AddVirtualServer(vs1) 40 if err != nil { 41 t.Errorf("Fail to add virtual server, error: %v", err) 42 } 43 // Get a specific virtual server 44 got1, err := fake.GetVirtualServer(vs1) 45 if err != nil { 46 t.Errorf("Fail to get virtual server, error: %v", err) 47 } 48 if !vs1.Equal(got1) { 49 t.Errorf("Expect virtual server: %v, got: %v", vs1, got1) 50 } 51 // Update virtual server 52 vs12 := &utilipvs.VirtualServer{ 53 Address: netutils.ParseIPSloppy("1.2.3.4"), 54 Port: uint16(80), 55 Protocol: string("TCP"), 56 Flags: utilipvs.FlagPersistent, 57 } 58 err = fake.UpdateVirtualServer(vs12) 59 if err != nil { 60 t.Errorf("Fail to update virtual server, error: %v", err) 61 } 62 // Check the updated virtual server 63 got12, err := fake.GetVirtualServer(vs1) 64 if err != nil { 65 t.Errorf("Fail to get virtual server, error: %v", err) 66 } 67 if !got12.Equal(vs12) { 68 t.Errorf("Expect virtual server: %v, got: %v", vs12, got12) 69 } 70 // Add another virtual server 71 vs2 := &utilipvs.VirtualServer{ 72 Address: netutils.ParseIPSloppy("10::40"), 73 Port: uint16(8080), 74 Protocol: string("UDP"), 75 } 76 err = fake.AddVirtualServer(vs2) 77 if err != nil { 78 t.Errorf("Unexpected error when add virtual server, error: %v", err) 79 } 80 // Add another virtual server 81 vs3 := &utilipvs.VirtualServer{ 82 Address: netutils.ParseIPSloppy("10::40"), 83 Port: uint16(7777), 84 Protocol: string("SCTP"), 85 } 86 err = fake.AddVirtualServer(vs3) 87 if err != nil { 88 t.Errorf("Unexpected error when add virtual server, error: %v", err) 89 } 90 // List all virtual servers 91 list, err := fake.GetVirtualServers() 92 if err != nil { 93 t.Errorf("Fail to list virtual servers, error: %v", err) 94 } 95 if len(list) != 3 { 96 t.Errorf("Expect 2 virtual servers, got: %d", len(list)) 97 } 98 // Delete a virtual server 99 err = fake.DeleteVirtualServer(vs1) 100 if err != nil { 101 t.Errorf("Fail to delete virtual server: %v, error: %v", vs1, err) 102 } 103 // Check the deleted virtual server no longer exists 104 got, _ := fake.GetVirtualServer(vs1) 105 if got != nil { 106 t.Errorf("Expect nil, got: %v", got) 107 } 108 // Flush all virtual servers 109 err = fake.Flush() 110 if err != nil { 111 t.Errorf("Fail to flush virtual servers, error: %v", err) 112 } 113 // List all virtual servers 114 list, err = fake.GetVirtualServers() 115 if err != nil { 116 t.Errorf("Fail to list virtual servers, error: %v", err) 117 } 118 if len(list) != 0 { 119 t.Errorf("Expect 0 virtual servers, got: %d", len(list)) 120 } 121 } 122 123 func TestRealServer(t *testing.T) { 124 // Initialize 125 fake := NewFake() 126 // Add a virtual server 127 vs := &utilipvs.VirtualServer{ 128 Address: netutils.ParseIPSloppy("10.20.30.40"), 129 Port: uint16(80), 130 Protocol: string("TCP"), 131 } 132 rss := []*utilipvs.RealServer{ 133 {Address: netutils.ParseIPSloppy("172.16.2.1"), Port: 8080, Weight: 1}, 134 {Address: netutils.ParseIPSloppy("172.16.2.2"), Port: 8080, Weight: 2}, 135 {Address: netutils.ParseIPSloppy("172.16.2.3"), Port: 8080, Weight: 3}, 136 } 137 err := fake.AddVirtualServer(vs) 138 if err != nil { 139 t.Errorf("Fail to add virtual server, error: %v", err) 140 } 141 // Add real server to the virtual server 142 for i := range rss { 143 if err = fake.AddRealServer(vs, rss[i]); err != nil { 144 t.Errorf("Fail to add real server, error: %v", err) 145 } 146 } 147 // Delete a real server of the virtual server 148 // Make sure any position of the list can be real deleted 149 rssLen := len(rss) 150 for i := range rss { 151 // List all real servers of the virtual server 152 list, err := fake.GetRealServers(vs) 153 if err != nil { 154 t.Errorf("Fail to get real servers of the virtual server, error: %v", err) 155 } 156 if len(list) != rssLen { 157 t.Errorf("Expect %d virtual servers, got: %d", len(rss), len(list)) 158 } 159 rsToDel := list[i] 160 if err = fake.DeleteRealServer(vs, rsToDel); err != nil { 161 t.Errorf("Fail to delete real server of the virtual server, error: %v", err) 162 } else { 163 dests, err := fake.GetRealServers(vs) 164 if err != nil { 165 t.Errorf("Fail to get real servers of the virtual server, error: %v", err) 166 } 167 for _, dest := range dests { 168 if toRealServerKey(dest).String() == toRealServerKey(rsToDel).String() { 169 t.Errorf("Expect real server %q be deleted.", rsToDel.String()) 170 } 171 } 172 if err = fake.AddRealServer(vs, rsToDel); err != nil { 173 t.Errorf("Fail to add real server, error: %v", err) 174 } 175 } 176 } 177 // Test delete real server that not exist 178 rs := &utilipvs.RealServer{ 179 Address: netutils.ParseIPSloppy("172.16.2.4"), 180 Port: uint16(8080), 181 Weight: 1, 182 } 183 if err = fake.DeleteRealServer(vs, rs); err == nil { 184 t.Errorf("Delete real server that not exist, Expect error, got nil") 185 } 186 // Delete the virtual server 187 err = fake.DeleteVirtualServer(vs) 188 if err != nil { 189 t.Errorf("Fail to delete virtual server, error: %v", err) 190 } 191 _, err = fake.GetRealServers(vs) 192 if err == nil { 193 t.Errorf("Expect error, got nil") 194 } 195 }