| 61 | } |
| 62 | |
| 63 | func TestMultiIndexKeys(t *testing.T) { |
| 64 | index := NewIndexer(MetaNamespaceKeyFunc, Indexers{"byUser": testUsersIndexFunc}) |
| 65 | |
| 66 | pod1 := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "one", Annotations: map[string]string{"users": "ernie,bert"}}} |
| 67 | pod2 := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "two", Annotations: map[string]string{"users": "bert,oscar"}}} |
| 68 | pod3 := &v1.Pod{ObjectMeta: metav1.ObjectMeta{Name: "tre", Annotations: map[string]string{"users": "ernie,elmo"}}} |
| 69 | |
| 70 | index.Add(pod1) |
| 71 | index.Add(pod2) |
| 72 | index.Add(pod3) |
| 73 | |
| 74 | expected := map[string]sets.String{} |
| 75 | expected["ernie"] = sets.NewString("one", "tre") |
| 76 | expected["bert"] = sets.NewString("one", "two") |
| 77 | expected["elmo"] = sets.NewString("tre") |
| 78 | expected["oscar"] = sets.NewString("two") |
| 79 | expected["elmo"] = sets.NewString() // let's just make sure we don't get anything back in this case |
| 80 | { |
| 81 | for k, v := range expected { |
| 82 | found := sets.String{} |
| 83 | indexResults, err := index.ByIndex("byUser", k) |
| 84 | if err != nil { |
| 85 | t.Errorf("Unexpected error %v", err) |
| 86 | } |
| 87 | for _, item := range indexResults { |
| 88 | found.Insert(item.(*v1.Pod).Name) |
| 89 | } |
| 90 | items := v.List() |
| 91 | if !found.HasAll(items...) { |
| 92 | t.Errorf("missing items, index %s, expected %v but found %v", k, items, found.List()) |
| 93 | } |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | index.Delete(pod3) |
| 98 | erniePods, err := index.ByIndex("byUser", "ernie") |
| 99 | if err != nil { |
| 100 | t.Errorf("unexpected error: %v", err) |
| 101 | } |
| 102 | if len(erniePods) != 1 { |
| 103 | t.Errorf("Expected 1 pods but got %v", len(erniePods)) |
| 104 | } |
| 105 | for _, erniePod := range erniePods { |
| 106 | if erniePod.(*v1.Pod).Name != "one" { |
| 107 | t.Errorf("Expected only 'one' but got %s", erniePod.(*v1.Pod).Name) |
| 108 | } |
| 109 | } |
| 110 | |
| 111 | elmoPods, err := index.ByIndex("byUser", "elmo") |
| 112 | if err != nil { |
| 113 | t.Errorf("unexpected error: %v", err) |
| 114 | } |
| 115 | if len(elmoPods) != 0 { |
| 116 | t.Errorf("Expected 0 pods but got %v", len(elmoPods)) |
| 117 | } |
| 118 | |
| 119 | copyOfPod2 := pod2.DeepCopy() |
| 120 | copyOfPod2.Annotations["users"] = "oscar" |