/* Copyright 2017 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package testing import ( "testing" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/util/ipset" ) const testVersion = "v6.19" func TestSetEntry(t *testing.T) { fake := NewFake(testVersion) version, err := fake.GetVersion() if err != nil { t.Errorf("Unexpected error: %v", err) } if version != testVersion { t.Errorf("Unexpected version mismatch, expected: %s, got: %s", testVersion, version) } // create a set set := &ipset.IPSet{ Name: "foo", SetType: ipset.HashIPPort, HashFamily: ipset.ProtocolFamilyIPV4, } if err := fake.CreateSet(set, true); err != nil { t.Errorf("Unexpected error: %v", err) } // add two entries fake.AddEntry("192.168.1.1,tcp:8080", set, true) fake.AddEntry("192.168.1.2,tcp:8081", set, true) entries, err := fake.ListEntries(set.Name) if err != nil { t.Errorf("Unexpected error: %v", err) } if len(entries) != 2 { t.Errorf("Expected 2 entries, got %d", len(entries)) } expectedEntries := sets.NewString("192.168.1.1,tcp:8080", "192.168.1.2,tcp:8081") if !expectedEntries.Equal(sets.NewString(entries...)) { t.Errorf("Unexpected entries mismatch, expected: %v, got: %v", expectedEntries, entries) } // test entries found, err := fake.TestEntry("192.168.1.1,tcp:8080", set.Name) if err != nil { t.Errorf("Unexpected error: %v", err) } if !found { t.Errorf("Unexpected entry 192.168.1.1,tcp:8080 not found") } found, err = fake.TestEntry("192.168.1.2,tcp:8081", set.Name) if err != nil { t.Errorf("Unexpected error: %v", err) } if !found { t.Errorf("Unexpected entry 192.168.1.2,tcp:8081 not found") } // delete entry from a given set if err := fake.DelEntry("192.168.1.1,tcp:8080", set.Name); err != nil { t.Errorf("Unexpected error: %v", err) } entries, err = fake.ListEntries(set.Name) if err != nil { t.Errorf("Unexpected error: %v", err) } if len(entries) != 1 { t.Errorf("Expected 1 entries, got %d", len(entries)) } expectedEntries = sets.NewString("192.168.1.2,tcp:8081") if !expectedEntries.Equal(sets.NewString(entries...)) { t.Errorf("Unexpected entries mismatch, expected: %v, got: %v", expectedEntries, entries) } // Flush set if err := fake.FlushSet(set.Name); err != nil { t.Errorf("Unexpected error: %v", err) } entries, err = fake.ListEntries(set.Name) if err != nil { t.Errorf("Unexpected error: %v", err) } if len(entries) != 0 { t.Errorf("Expected 0 entries, got %d, entries: %v", len(entries), entries) } // create another set set2 := &ipset.IPSet{ Name: "bar", SetType: ipset.HashIPPortIP, HashFamily: ipset.ProtocolFamilyIPV6, } if err := fake.CreateSet(set2, true); err != nil { t.Errorf("Unexpected error: %v", err) } setList, err := fake.ListSets() if err != nil { t.Errorf("Unexpected error: %v", err) } if len(setList) != 2 { t.Errorf("Expected 2 sets, got %d", len(setList)) } expectedSets := sets.NewString("foo", "bar") if !expectedSets.Equal(sets.NewString(setList...)) { t.Errorf("Unexpected sets mismatch, expected: %v, got: %v", expectedSets, setList) } // Destroy a given set if err := fake.DestroySet(set.Name); err != nil { t.Errorf("Unexpected error: %v", err) } if fake.Sets[set.Name] != nil { t.Errorf("Unexpected set: %v", fake.Sets[set.Name]) } if fake.Entries[set.Name] != nil { t.Errorf("Unexpected entries: %v", fake.Entries[set.Name]) } // Destroy all sets if err := fake.DestroyAllSets(); err != nil { t.Errorf("Unexpected error: %v", err) } if len(fake.Sets) != 0 { t.Errorf("Expected 0 sets, got %d, sets: %v", len(fake.Sets), fake.Sets) } if len(fake.Entries) != 0 { t.Errorf("Expected 0 entries, got %d, entries: %v", len(fake.Entries), fake.Entries) } } // TODO: Test ignoreExistErr=false