github.com/cilium/cilium@v1.16.2/operator/identitygc/heartbeat_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package identitygc 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestIdentityHeartbeatStore(t *testing.T) { 14 store := newHeartbeatStore(time.Second) 15 16 // mark lifesign to now, identity must be alive, run GC, identity 17 // should still exist 18 store.markAlive("foo", time.Now()) 19 require.Equal(t, true, store.isAlive("foo")) 20 store.gc() 21 require.Equal(t, true, store.isAlive("foo")) 22 23 // mark lifesign in the past, identity should not be alive anymore 24 store.markAlive("foo", time.Now().Add(-time.Minute)) 25 require.Equal(t, false, store.isAlive("foo")) 26 27 // mark lifesign way in the past, run GC, validate that identity is no 28 // longer tracked 29 store.markAlive("foo", time.Now().Add(-24*time.Hour)) 30 require.Equal(t, false, store.isAlive("foo")) 31 store.gc() 32 store.mutex.RLock() 33 _, ok := store.lastLifesign["foo"] 34 require.Equal(t, false, ok) 35 store.mutex.RUnlock() 36 37 // mark lifesign to now and validate deletion 38 store.markAlive("foo", time.Now()) 39 store.mutex.RLock() 40 _, ok = store.lastLifesign["foo"] 41 store.mutex.RUnlock() 42 require.Equal(t, true, ok) 43 store.delete("foo") 44 store.mutex.RLock() 45 _, ok = store.lastLifesign["foo"] 46 store.mutex.RUnlock() 47 require.Equal(t, false, ok) 48 49 // identity foo now doesn't exist, simulate start time of operator way 50 // in the past to check if an old, stale identity will be deleted 51 store.firstRun = time.Now().Add(-24 * time.Hour) 52 require.Equal(t, false, store.isAlive("foo")) 53 }