go.ligato.io/vpp-agent/v3@v3.5.0/plugins/vpp/l3plugin/vrfidx/vrfidx_test.go (about) 1 // Copyright (c) 2019 Cisco and/or its affiliates. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at: 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package vrfidx 16 17 import ( 18 "testing" 19 20 "fmt" 21 22 . "github.com/onsi/gomega" 23 "go.ligato.io/cn-infra/v2/logging/logrus" 24 ) 25 26 // Constants 27 const ( 28 vrfName0 = "vrf-0" 29 vrfName1 = "vrf-1" 30 vrfName2 = "vrf-2" 31 idx0 uint32 = 0 32 idx1 uint32 = 1 33 idx2 uint32 = 2 34 watchName = "watchName" 35 ) 36 37 func testInitialization(t *testing.T) VRFMetadataIndexRW { 38 RegisterTestingT(t) 39 return NewVRFIndex(logrus.DefaultLogger(), "vrf-meta-index") 40 } 41 42 // Tests registering and unregistering name to index 43 func TestRegisterAndUnregisterName(t *testing.T) { 44 index := testInitialization(t) 45 vrf := &VRFMetadata{Index: idx0} 46 47 // Register vrf 48 index.Put(vrfName0, vrf) 49 names := index.ListAllVRFs() 50 Expect(names).To(HaveLen(1)) 51 Expect(names).To(ContainElement(vrfName0)) 52 metadata := index.ListAllVrfMetadata() 53 Expect(metadata).To(HaveLen(1)) 54 Expect(metadata[0].GetIndex()).To(Equal(idx0)) 55 56 // Unregister vrf 57 index.Delete(vrfName0) 58 names = index.ListAllVRFs() 59 Expect(names).To(BeEmpty()) 60 } 61 62 // Tests index mapping clear 63 func TestClearInterfaces(t *testing.T) { 64 index := testInitialization(t) 65 66 // Register entries 67 index.Put(vrfName0, &VRFMetadata{Index: idx0}) 68 index.Put(vrfName1, &VRFMetadata{Index: idx1}) 69 index.Put(vrfName2, &VRFMetadata{Index: idx2}) 70 names := index.ListAllVRFs() 71 Expect(names).To(HaveLen(3)) 72 73 // Clear 74 index.Clear() 75 names = index.ListAllVRFs() 76 Expect(names).To(BeEmpty()) 77 } 78 79 // Tests lookup by name 80 func TestLookupByName(t *testing.T) { 81 index := testInitialization(t) 82 vrf := &VRFMetadata{Index: idx0} 83 84 index.Put(vrfName0, vrf) 85 86 metadata, exist := index.LookupByName(vrfName0) 87 Expect(exist).To(BeTrue()) 88 Expect(metadata.GetIndex()).To(Equal(idx0)) 89 Expect(metadata).To(Equal(vrf)) 90 } 91 92 // Tests lookup by index 93 func TestLookupByIndex(t *testing.T) { 94 index := testInitialization(t) 95 vrf := &VRFMetadata{Index: idx0} 96 97 index.Put(vrfName0, vrf) 98 99 foundName, metadata, exist := index.LookupByVRFIndex(idx0) 100 Expect(exist).To(BeTrue()) 101 Expect(foundName).To(Equal(vrfName0)) 102 Expect(metadata).To(Equal(vrf)) 103 } 104 105 // Tests watch VRFs 106 func TestWatchNameToIdx(t *testing.T) { 107 fmt.Println("TestWatchNameToIdx") 108 index := testInitialization(t) 109 vrf := &VRFMetadata{Index: idx0} 110 111 c := make(chan VRFMetadataDto, 10) 112 index.WatchVRFs(watchName, c) 113 114 index.Put(vrfName0, vrf) 115 116 var dto VRFMetadataDto 117 Eventually(c).Should(Receive(&dto)) 118 119 Expect(dto.Name).To(Equal(vrfName0)) 120 Expect(dto.Metadata.GetIndex()).To(Equal(idx0)) 121 }