bloom_test.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package bloom
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/alicebob/miniredis"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/tal-tech/go-zero/core/lang"
  8. "github.com/tal-tech/go-zero/core/stores/redis"
  9. )
  10. func TestRedisBitSet_New_Set_Test(t *testing.T) {
  11. s, clean, err := createMiniRedis()
  12. assert.Nil(t, err)
  13. defer clean()
  14. store := redis.NewRedis(s.Addr(), redis.NodeType)
  15. bitSet := newRedisBitSet(store, "test_key", 1024)
  16. isSetBefore, err := bitSet.check([]uint{0})
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. if isSetBefore {
  21. t.Fatal("Bit should not be set")
  22. }
  23. err = bitSet.set([]uint{512})
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. isSetAfter, err := bitSet.check([]uint{512})
  28. if err != nil {
  29. t.Fatal(err)
  30. }
  31. if !isSetAfter {
  32. t.Fatal("Bit should be set")
  33. }
  34. err = bitSet.expire(3600)
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. err = bitSet.del()
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. }
  43. func TestRedisBitSet_Add(t *testing.T) {
  44. s, clean, err := createMiniRedis()
  45. assert.Nil(t, err)
  46. defer clean()
  47. store := redis.NewRedis(s.Addr(), redis.NodeType)
  48. filter := New(store, "test_key", 64)
  49. assert.Nil(t, filter.Add([]byte("hello")))
  50. assert.Nil(t, filter.Add([]byte("world")))
  51. ok, err := filter.Exists([]byte("hello"))
  52. assert.Nil(t, err)
  53. assert.True(t, ok)
  54. }
  55. func createMiniRedis() (r *miniredis.Miniredis, clean func(), err error) {
  56. r, err = miniredis.Run()
  57. if err != nil {
  58. return nil, nil, err
  59. }
  60. return r, func() {
  61. ch := make(chan lang.PlaceholderType)
  62. go func() {
  63. r.Close()
  64. close(ch)
  65. }()
  66. select {
  67. case <-ch:
  68. case <-time.After(time.Second):
  69. }
  70. }, nil
  71. }