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