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  }