123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /*
- 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 (
- "fmt"
- "k8s.io/apimachinery/pkg/util/sets"
- "k8s.io/kubernetes/pkg/util/ipset"
- )
- // FakeIPSet is a no-op implementation of ipset Interface
- type FakeIPSet struct {
- // version of ipset util
- Version string
- // The key of Sets map is the ip set name
- Sets map[string]*ipset.IPSet
- // The key of Entries map is the ip set name where the entries exists
- Entries map[string]sets.String
- }
- // NewFake create a new fake ipset interface - it initialize the FakeIPSet.
- func NewFake(version string) *FakeIPSet {
- return &FakeIPSet{
- Version: version,
- Sets: make(map[string]*ipset.IPSet),
- Entries: make(map[string]sets.String),
- }
- }
- // GetVersion is part of interface.
- func (f *FakeIPSet) GetVersion() (string, error) {
- return f.Version, nil
- }
- // FlushSet is part of interface. It deletes all entries from a named set but keeps the set itself.
- func (f *FakeIPSet) FlushSet(set string) error {
- if f.Entries == nil {
- return fmt.Errorf("entries map can't be nil")
- }
- // delete all entry elements
- for true {
- if _, has := f.Entries[set].PopAny(); has {
- continue
- }
- break
- }
- return nil
- }
- // DestroySet is part of interface. It deletes both the entries and the set itself.
- func (f *FakeIPSet) DestroySet(set string) error {
- delete(f.Sets, set)
- delete(f.Entries, set)
- return nil
- }
- // DestroyAllSets is part of interface.
- func (f *FakeIPSet) DestroyAllSets() error {
- f.Sets = nil
- f.Entries = nil
- return nil
- }
- // CreateSet is part of interface.
- func (f *FakeIPSet) CreateSet(set *ipset.IPSet, ignoreExistErr bool) error {
- if f.Sets[set.Name] != nil {
- if !ignoreExistErr {
- // already exists
- return fmt.Errorf("Set cannot be created: set with the same name already exists")
- }
- return nil
- }
- f.Sets[set.Name] = set
- // initialize entry map
- f.Entries[set.Name] = sets.NewString()
- return nil
- }
- // AddEntry is part of interface.
- func (f *FakeIPSet) AddEntry(entry string, set *ipset.IPSet, ignoreExistErr bool) error {
- if f.Entries[set.Name].Has(entry) {
- if !ignoreExistErr {
- // already exists
- return fmt.Errorf("Element cannot be added to the set: it's already added")
- }
- return nil
- }
- f.Entries[set.Name].Insert(entry)
- return nil
- }
- // DelEntry is part of interface.
- func (f *FakeIPSet) DelEntry(entry string, set string) error {
- if f.Entries == nil {
- return fmt.Errorf("entries map can't be nil")
- }
- f.Entries[set].Delete(entry)
- return nil
- }
- // TestEntry is part of interface.
- func (f *FakeIPSet) TestEntry(entry string, set string) (bool, error) {
- if f.Entries == nil {
- return false, fmt.Errorf("entries map can't be nil")
- }
- found := f.Entries[set].Has(entry)
- return found, nil
- }
- // ListEntries is part of interface.
- func (f *FakeIPSet) ListEntries(set string) ([]string, error) {
- if f.Entries == nil {
- return nil, fmt.Errorf("entries map can't be nil")
- }
- return f.Entries[set].UnsortedList(), nil
- }
- // ListSets is part of interface.
- func (f *FakeIPSet) ListSets() ([]string, error) {
- res := []string{}
- for set := range f.Sets {
- res = append(res, set)
- }
- return res, nil
- }
- var _ = ipset.Interface(&FakeIPSet{})
|