k8s.io/kubernetes@v1.31.0-alpha.0.0.20240520171757-56147500dadc/pkg/proxy/ipvs/ipset/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  	"k8s.io/apimachinery/pkg/util/sets"
    26  	"k8s.io/kubernetes/pkg/proxy/ipvs/ipset"
    27  )
    28  
    29  const testVersion = "v6.19"
    30  
    31  func TestSetEntry(t *testing.T) {
    32  	fake := NewFake(testVersion)
    33  	version, err := fake.GetVersion()
    34  	if err != nil {
    35  		t.Errorf("Unexpected error: %v", err)
    36  	}
    37  	if version != testVersion {
    38  		t.Errorf("Unexpected version mismatch, expected: %s, got: %s", testVersion, version)
    39  	}
    40  	// create a set
    41  	set := &ipset.IPSet{
    42  		Name:       "foo",
    43  		SetType:    ipset.HashIPPort,
    44  		HashFamily: ipset.ProtocolFamilyIPV4,
    45  	}
    46  	if err := fake.CreateSet(set, true); err != nil {
    47  		t.Errorf("Unexpected error: %v", err)
    48  	}
    49  
    50  	// add two entries
    51  	err = fake.AddEntry("192.168.1.1,tcp:8080", set, true)
    52  	if err != nil {
    53  		t.Errorf("Unexpected error: %v", err)
    54  	}
    55  	err = fake.AddEntry("192.168.1.2,tcp:8081", set, true)
    56  	if err != nil {
    57  		t.Errorf("Unexpected error: %v", err)
    58  	}
    59  	entries, err := fake.ListEntries(set.Name)
    60  	if err != nil {
    61  		t.Errorf("Unexpected error: %v", err)
    62  	}
    63  	if len(entries) != 2 {
    64  		t.Errorf("Expected 2 entries, got %d", len(entries))
    65  	}
    66  	expectedEntries := sets.NewString("192.168.1.1,tcp:8080", "192.168.1.2,tcp:8081")
    67  	if !expectedEntries.Equal(sets.NewString(entries...)) {
    68  		t.Errorf("Unexpected entries mismatch, expected: %v, got: %v", expectedEntries, entries)
    69  	}
    70  
    71  	// test entries
    72  	found, err := fake.TestEntry("192.168.1.1,tcp:8080", set.Name)
    73  	if err != nil {
    74  		t.Errorf("Unexpected error: %v", err)
    75  	}
    76  	if !found {
    77  		t.Errorf("Unexpected entry 192.168.1.1,tcp:8080 not found")
    78  	}
    79  
    80  	found, err = fake.TestEntry("192.168.1.2,tcp:8081", set.Name)
    81  	if err != nil {
    82  		t.Errorf("Unexpected error: %v", err)
    83  	}
    84  	if !found {
    85  		t.Errorf("Unexpected entry 192.168.1.2,tcp:8081 not found")
    86  	}
    87  
    88  	// delete entry from a given set
    89  	if err := fake.DelEntry("192.168.1.1,tcp:8080", set.Name); err != nil {
    90  		t.Errorf("Unexpected error: %v", err)
    91  	}
    92  	entries, err = fake.ListEntries(set.Name)
    93  	if err != nil {
    94  		t.Errorf("Unexpected error: %v", err)
    95  	}
    96  	if len(entries) != 1 {
    97  		t.Errorf("Expected 1 entries, got %d", len(entries))
    98  	}
    99  	expectedEntries = sets.NewString("192.168.1.2,tcp:8081")
   100  	if !expectedEntries.Equal(sets.NewString(entries...)) {
   101  		t.Errorf("Unexpected entries mismatch, expected: %v, got: %v", expectedEntries, entries)
   102  	}
   103  
   104  	// Flush set
   105  	if err := fake.FlushSet(set.Name); err != nil {
   106  		t.Errorf("Unexpected error: %v", err)
   107  	}
   108  	entries, err = fake.ListEntries(set.Name)
   109  	if err != nil {
   110  		t.Errorf("Unexpected error: %v", err)
   111  	}
   112  	if len(entries) != 0 {
   113  		t.Errorf("Expected 0 entries, got %d, entries: %v", len(entries), entries)
   114  	}
   115  
   116  	// create another set
   117  	set2 := &ipset.IPSet{
   118  		Name:       "bar",
   119  		SetType:    ipset.HashIPPortIP,
   120  		HashFamily: ipset.ProtocolFamilyIPV6,
   121  	}
   122  	if err := fake.CreateSet(set2, true); err != nil {
   123  		t.Errorf("Unexpected error: %v", err)
   124  	}
   125  
   126  	setList, err := fake.ListSets()
   127  	if err != nil {
   128  		t.Errorf("Unexpected error: %v", err)
   129  	}
   130  	if len(setList) != 2 {
   131  		t.Errorf("Expected 2 sets, got %d", len(setList))
   132  	}
   133  	expectedSets := sets.NewString("foo", "bar")
   134  	if !expectedSets.Equal(sets.NewString(setList...)) {
   135  		t.Errorf("Unexpected sets mismatch, expected: %v, got: %v", expectedSets, setList)
   136  	}
   137  
   138  	// Destroy a given set
   139  	if err := fake.DestroySet(set.Name); err != nil {
   140  		t.Errorf("Unexpected error: %v", err)
   141  	}
   142  	if fake.Sets[set.Name] != nil {
   143  		t.Errorf("Unexpected set: %v", fake.Sets[set.Name])
   144  	}
   145  	if fake.Entries[set.Name] != nil {
   146  		t.Errorf("Unexpected entries: %v", fake.Entries[set.Name])
   147  	}
   148  
   149  	// Destroy all sets
   150  	if err := fake.DestroyAllSets(); err != nil {
   151  		t.Errorf("Unexpected error: %v", err)
   152  	}
   153  	if len(fake.Sets) != 0 {
   154  		t.Errorf("Expected 0 sets, got %d, sets: %v", len(fake.Sets), fake.Sets)
   155  	}
   156  	if len(fake.Entries) != 0 {
   157  		t.Errorf("Expected 0 entries, got %d, entries: %v", len(fake.Entries), fake.Entries)
   158  	}
   159  }
   160  
   161  // TODO: Test ignoreExistErr=false