k8s.io/kubernetes@v1.29.3/pkg/proxy/ipvs/util/testing/fake_test.go (about)

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