...

Source file src/k8s.io/kubernetes/pkg/proxy/ipvs/util/testing/fake_test.go

Documentation: k8s.io/kubernetes/pkg/proxy/ipvs/util/testing

     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  }
   196  

View as plain text