Files
akvorado/common/helpers/cache/cache_test.go
Vincent Bernat beb9a3f0ba build: add even more linting rules
Notably, shorten function signatures by not repeating types.
2025-11-12 22:43:12 +01:00

120 lines
3.8 KiB
Go

// SPDX-FileCopyrightText: 2023 Free Mobile
// SPDX-License-Identifier: AGPL-3.0-only
package cache_test
import (
"net/netip"
"testing"
"time"
"akvorado/common/helpers"
"akvorado/common/helpers/cache"
)
func expectCacheGet(t *testing.T, c *cache.Cache[netip.Addr, string], key, expectedResult string, expectedOk bool) {
t.Helper()
ip := netip.MustParseAddr(key)
ip = helpers.AddrTo6(ip)
result, ok := c.Get(time.Time{}, ip)
got := struct {
Result string
Ok bool
}{result, ok}
expected := struct {
Result string
Ok bool
}{expectedResult, expectedOk}
if diff := helpers.Diff(got, expected); diff != "" {
t.Errorf("Get() (-got, +want):\n%s", diff)
}
}
func TestGetPut(t *testing.T) {
c := cache.New[netip.Addr, string]()
t1 := time.Date(2022, time.December, 31, 10, 23, 0, 0, time.UTC)
t2 := t1.Add(time.Minute)
t3 := t2.Add(time.Minute)
c.Put(t1, netip.MustParseAddr("::ffff:127.0.0.1"), "entry1")
c.Put(t2, netip.MustParseAddr("::ffff:127.0.0.2"), "entry2")
c.Put(t3, netip.MustParseAddr("::ffff:127.0.0.3"), "entry3")
c.Put(t3, netip.MustParseAddr("::ffff:127.0.0.3"), "entry4")
expectCacheGet(t, c, "127.0.0.1", "entry1", true)
expectCacheGet(t, c, "127.0.0.2", "entry2", true)
expectCacheGet(t, c, "127.0.0.3", "entry4", true)
expectCacheGet(t, c, "127.0.0.4", "", false)
got := c.Items()
expected := map[netip.Addr]string{
netip.MustParseAddr("::ffff:127.0.0.1"): "entry1",
netip.MustParseAddr("::ffff:127.0.0.2"): "entry2",
netip.MustParseAddr("::ffff:127.0.0.3"): "entry4",
}
if diff := helpers.Diff(got, expected); diff != "" {
t.Errorf("Items() (-got, +want):\n%s", diff)
}
}
func TestDeleteLastAccessedBefore(t *testing.T) {
c := cache.New[netip.Addr, string]()
t1 := time.Date(2022, time.December, 31, 10, 23, 0, 0, time.UTC)
t2 := t1.Add(time.Minute)
t3 := t2.Add(time.Minute)
c.Put(t1, netip.MustParseAddr("::ffff:127.0.0.1"), "entry1")
c.Put(t2, netip.MustParseAddr("::ffff:127.0.0.2"), "entry2")
c.Put(t3, netip.MustParseAddr("::ffff:127.0.0.3"), "entry3")
t4 := t3.Add(time.Minute)
c.Get(t4, netip.MustParseAddr("::ffff:127.0.0.1"))
c.Get(time.Time{}, netip.MustParseAddr("::ffff:127.0.0.2"))
c.DeleteLastAccessedBefore(t1)
expectCacheGet(t, c, "127.0.0.1", "entry1", true)
expectCacheGet(t, c, "127.0.0.2", "entry2", true)
expectCacheGet(t, c, "127.0.0.3", "entry3", true)
c.DeleteLastAccessedBefore(t2)
expectCacheGet(t, c, "127.0.0.1", "entry1", true)
expectCacheGet(t, c, "127.0.0.2", "entry2", true)
expectCacheGet(t, c, "127.0.0.3", "entry3", true)
c.DeleteLastAccessedBefore(t3)
expectCacheGet(t, c, "127.0.0.1", "entry1", true)
expectCacheGet(t, c, "127.0.0.2", "", false)
expectCacheGet(t, c, "127.0.0.3", "entry3", true)
if count := c.DeleteLastAccessedBefore(t4); count != 1 {
t.Errorf("DeleteLastAccessedBefore(): got %d, expected %d", count, 1)
}
expectCacheGet(t, c, "127.0.0.1", "entry1", true)
expectCacheGet(t, c, "127.0.0.2", "", false)
expectCacheGet(t, c, "127.0.0.3", "", false)
c.DeleteLastAccessedBefore(t4.Add(time.Minute))
expectCacheGet(t, c, "127.0.0.1", "", false)
expectCacheGet(t, c, "127.0.0.2", "", false)
expectCacheGet(t, c, "127.0.0.3", "", false)
}
func TestItemsLastUpdatedBefore(t *testing.T) {
c := cache.New[netip.Addr, string]()
t1 := time.Date(2022, time.December, 31, 10, 23, 0, 0, time.UTC)
t2 := t1.Add(time.Minute)
t3 := t2.Add(time.Minute)
c.Put(t1, netip.MustParseAddr("::ffff:127.0.0.1"), "entry1")
c.Put(t2, netip.MustParseAddr("::ffff:127.0.0.2"), "entry2")
c.Put(t3, netip.MustParseAddr("::ffff:127.0.0.3"), "entry3")
t4 := t3.Add(time.Minute)
c.Put(t4, netip.MustParseAddr("::ffff:127.0.0.1"), "entry4")
got := c.ItemsLastUpdatedBefore(t3)
expected := map[netip.Addr]string{
netip.MustParseAddr("::ffff:127.0.0.2"): "entry2",
}
if diff := helpers.Diff(got, expected); diff != "" {
t.Errorf("ItemsLastUpdatedBefore() (-got, +want):\n%s", diff)
}
}