k8s.io/client-go@v0.31.1/listers/extensions/v1beta1/daemonset_expansion_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 v1beta1
    18  
    19  import (
    20  	"testing"
    21  
    22  	"k8s.io/api/core/v1"
    23  	extensions "k8s.io/api/extensions/v1beta1"
    24  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    25  	"k8s.io/apimachinery/pkg/labels"
    26  	"k8s.io/apimachinery/pkg/util/sets"
    27  	"k8s.io/client-go/tools/cache"
    28  )
    29  
    30  func TestDaemonSetLister(t *testing.T) {
    31  	store := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{"namespace": cache.MetaNamespaceIndexFunc})
    32  	lister := NewDaemonSetLister(store)
    33  	testCases := []struct {
    34  		inDSs             []*extensions.DaemonSet
    35  		list              func() ([]*extensions.DaemonSet, error)
    36  		outDaemonSetNames sets.String
    37  		expectErr         bool
    38  	}{
    39  		// Basic listing
    40  		{
    41  			inDSs: []*extensions.DaemonSet{
    42  				{ObjectMeta: metav1.ObjectMeta{Name: "basic"}},
    43  			},
    44  			list: func() ([]*extensions.DaemonSet, error) {
    45  				return lister.List(labels.Everything())
    46  			},
    47  			outDaemonSetNames: sets.NewString("basic"),
    48  		},
    49  		// Listing multiple daemon sets
    50  		{
    51  			inDSs: []*extensions.DaemonSet{
    52  				{ObjectMeta: metav1.ObjectMeta{Name: "basic"}},
    53  				{ObjectMeta: metav1.ObjectMeta{Name: "complex"}},
    54  				{ObjectMeta: metav1.ObjectMeta{Name: "complex2"}},
    55  			},
    56  			list: func() ([]*extensions.DaemonSet, error) {
    57  				return lister.List(labels.Everything())
    58  			},
    59  			outDaemonSetNames: sets.NewString("basic", "complex", "complex2"),
    60  		},
    61  		// No pod labels
    62  		{
    63  			inDSs: []*extensions.DaemonSet{
    64  				{
    65  					ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"},
    66  					Spec: extensions.DaemonSetSpec{
    67  						Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}},
    68  					},
    69  				},
    70  			},
    71  			list: func() ([]*extensions.DaemonSet, error) {
    72  				pod := &v1.Pod{
    73  					ObjectMeta: metav1.ObjectMeta{Name: "pod1", Namespace: "ns"},
    74  				}
    75  				return lister.GetPodDaemonSets(pod)
    76  			},
    77  			outDaemonSetNames: sets.NewString(),
    78  			expectErr:         true,
    79  		},
    80  		// No DS selectors
    81  		{
    82  			inDSs: []*extensions.DaemonSet{
    83  				{
    84  					ObjectMeta: metav1.ObjectMeta{Name: "basic", Namespace: "ns"},
    85  				},
    86  			},
    87  			list: func() ([]*extensions.DaemonSet, error) {
    88  				pod := &v1.Pod{
    89  					ObjectMeta: metav1.ObjectMeta{
    90  						Name:      "pod1",
    91  						Namespace: "ns",
    92  						Labels:    map[string]string{"foo": "bar"},
    93  					},
    94  				}
    95  				return lister.GetPodDaemonSets(pod)
    96  			},
    97  			outDaemonSetNames: sets.NewString(),
    98  			expectErr:         true,
    99  		},
   100  		// Matching labels to selectors and namespace
   101  		{
   102  			inDSs: []*extensions.DaemonSet{
   103  				{
   104  					ObjectMeta: metav1.ObjectMeta{Name: "foo"},
   105  					Spec: extensions.DaemonSetSpec{
   106  						Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}},
   107  					},
   108  				},
   109  				{
   110  					ObjectMeta: metav1.ObjectMeta{Name: "bar", Namespace: "ns"},
   111  					Spec: extensions.DaemonSetSpec{
   112  						Selector: &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}},
   113  					},
   114  				},
   115  			},
   116  			list: func() ([]*extensions.DaemonSet, error) {
   117  				pod := &v1.Pod{
   118  					ObjectMeta: metav1.ObjectMeta{
   119  						Name:      "pod1",
   120  						Labels:    map[string]string{"foo": "bar"},
   121  						Namespace: "ns",
   122  					},
   123  				}
   124  				return lister.GetPodDaemonSets(pod)
   125  			},
   126  			outDaemonSetNames: sets.NewString("bar"),
   127  		},
   128  	}
   129  	for _, c := range testCases {
   130  		for _, r := range c.inDSs {
   131  			store.Add(r)
   132  		}
   133  
   134  		daemonSets, err := c.list()
   135  		if err != nil && c.expectErr {
   136  			continue
   137  		} else if c.expectErr {
   138  			t.Error("Expected error, got none")
   139  			continue
   140  		} else if err != nil {
   141  			t.Errorf("Unexpected error %#v", err)
   142  			continue
   143  		}
   144  		daemonSetNames := make([]string, len(daemonSets))
   145  		for ix := range daemonSets {
   146  			daemonSetNames[ix] = daemonSets[ix].Name
   147  		}
   148  		if !c.outDaemonSetNames.HasAll(daemonSetNames...) || len(daemonSetNames) != len(c.outDaemonSetNames) {
   149  			t.Errorf("Unexpected got controllers %+v expected %+v", daemonSetNames, c.outDaemonSetNames)
   150  		}
   151  	}
   152  }