package live_query import ( "testing" "github.com/fleetdm/fleet/v4/server/datastore/redis/redistest" "github.com/fleetdm/fleet/v4/server/test" "github.com/stretchr/testify/assert" ) func TestRedisLiveQuery(t *testing.T) { for _, f := range testFunctions { t.Run(test.FunctionName(f), func(t *testing.T) { t.Run("standalone", func(t *testing.T) { store := setupRedisLiveQuery(t, false) f(t, store) }) t.Run("cluster", func(t *testing.T) { store := setupRedisLiveQuery(t, true) f(t, store) }) }) } } func setupRedisLiveQuery(t *testing.T, cluster bool) *redisLiveQuery { pool := redistest.SetupRedis(t, "*livequery", cluster, true, true) return NewRedisLiveQuery(pool) } func TestMapBitfield(t *testing.T) { // empty assert.Equal(t, []byte{}, mapBitfield(nil)) assert.Equal(t, []byte{}, mapBitfield([]uint{})) // one byte assert.Equal(t, []byte("\x80"), mapBitfield([]uint{0})) assert.Equal(t, []byte("\x40"), mapBitfield([]uint{1})) assert.Equal(t, []byte("\xc0"), mapBitfield([]uint{0, 1})) assert.Equal(t, []byte("\x08"), mapBitfield([]uint{4})) assert.Equal(t, []byte("\xf8"), mapBitfield([]uint{0, 1, 2, 3, 4})) assert.Equal(t, []byte("\xff"), mapBitfield([]uint{0, 1, 2, 3, 4, 5, 6, 7})) // two bytes assert.Equal(t, []byte("\x00\x80"), mapBitfield([]uint{8})) assert.Equal(t, []byte("\xff\x80"), mapBitfield([]uint{0, 1, 2, 3, 4, 5, 6, 7, 8})) // more bytes assert.Equal( t, []byte("\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 "), mapBitfield([]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 170}), ) assert.Equal( t, []byte("\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00 "), mapBitfield([]uint{0, 1, 2, 3, 4, 5, 6, 7, 8, 113, 170}), ) assert.Equal( t, []byte("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"), mapBitfield([]uint{79}), ) }