...

Source file src/github.com/go-redis/redis/iterator_test.go

Documentation: github.com/go-redis/redis

     1  package redis_test
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/go-redis/redis"
     7  
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("ScanIterator", func() {
    13  	var client *redis.Client
    14  
    15  	var seed = func(n int) error {
    16  		pipe := client.Pipeline()
    17  		for i := 1; i <= n; i++ {
    18  			pipe.Set(fmt.Sprintf("K%02d", i), "x", 0).Err()
    19  		}
    20  		_, err := pipe.Exec()
    21  		return err
    22  	}
    23  
    24  	var extraSeed = func(n int, m int) error {
    25  		pipe := client.Pipeline()
    26  		for i := 1; i <= m; i++ {
    27  			pipe.Set(fmt.Sprintf("A%02d", i), "x", 0).Err()
    28  		}
    29  		for i := 1; i <= n; i++ {
    30  			pipe.Set(fmt.Sprintf("K%02d", i), "x", 0).Err()
    31  		}
    32  		_, err := pipe.Exec()
    33  		return err
    34  	}
    35  
    36  	var hashKey = "K_HASHTEST"
    37  	var hashSeed = func(n int) error {
    38  		pipe := client.Pipeline()
    39  		for i := 1; i <= n; i++ {
    40  			pipe.HSet(hashKey, fmt.Sprintf("K%02d", i), "x").Err()
    41  		}
    42  		_, err := pipe.Exec()
    43  		return err
    44  	}
    45  
    46  	BeforeEach(func() {
    47  		client = redis.NewClient(redisOptions())
    48  		Expect(client.FlushDB().Err()).NotTo(HaveOccurred())
    49  	})
    50  
    51  	AfterEach(func() {
    52  		Expect(client.Close()).NotTo(HaveOccurred())
    53  	})
    54  
    55  	It("should scan across empty DBs", func() {
    56  		iter := client.Scan(0, "", 10).Iterator()
    57  		Expect(iter.Next()).To(BeFalse())
    58  		Expect(iter.Err()).NotTo(HaveOccurred())
    59  	})
    60  
    61  	It("should scan across one page", func() {
    62  		Expect(seed(7)).NotTo(HaveOccurred())
    63  
    64  		var vals []string
    65  		iter := client.Scan(0, "", 0).Iterator()
    66  		for iter.Next() {
    67  			vals = append(vals, iter.Val())
    68  		}
    69  		Expect(iter.Err()).NotTo(HaveOccurred())
    70  		Expect(vals).To(ConsistOf([]string{"K01", "K02", "K03", "K04", "K05", "K06", "K07"}))
    71  	})
    72  
    73  	It("should scan across multiple pages", func() {
    74  		Expect(seed(71)).NotTo(HaveOccurred())
    75  
    76  		var vals []string
    77  		iter := client.Scan(0, "", 10).Iterator()
    78  		for iter.Next() {
    79  			vals = append(vals, iter.Val())
    80  		}
    81  		Expect(iter.Err()).NotTo(HaveOccurred())
    82  		Expect(vals).To(HaveLen(71))
    83  		Expect(vals).To(ContainElement("K01"))
    84  		Expect(vals).To(ContainElement("K71"))
    85  	})
    86  
    87  	It("should hscan across multiple pages", func() {
    88  		Expect(hashSeed(71)).NotTo(HaveOccurred())
    89  
    90  		var vals []string
    91  		iter := client.HScan(hashKey, 0, "", 10).Iterator()
    92  		for iter.Next() {
    93  			vals = append(vals, iter.Val())
    94  		}
    95  		Expect(iter.Err()).NotTo(HaveOccurred())
    96  		Expect(vals).To(HaveLen(71 * 2))
    97  		Expect(vals).To(ContainElement("K01"))
    98  		Expect(vals).To(ContainElement("K71"))
    99  	})
   100  
   101  	It("should scan to page borders", func() {
   102  		Expect(seed(20)).NotTo(HaveOccurred())
   103  
   104  		var vals []string
   105  		iter := client.Scan(0, "", 10).Iterator()
   106  		for iter.Next() {
   107  			vals = append(vals, iter.Val())
   108  		}
   109  		Expect(iter.Err()).NotTo(HaveOccurred())
   110  		Expect(vals).To(HaveLen(20))
   111  	})
   112  
   113  	It("should scan with match", func() {
   114  		Expect(seed(33)).NotTo(HaveOccurred())
   115  
   116  		var vals []string
   117  		iter := client.Scan(0, "K*2*", 10).Iterator()
   118  		for iter.Next() {
   119  			vals = append(vals, iter.Val())
   120  		}
   121  		Expect(iter.Err()).NotTo(HaveOccurred())
   122  		Expect(vals).To(HaveLen(13))
   123  	})
   124  
   125  	It("should scan with match across empty pages", func() {
   126  		Expect(extraSeed(2, 10)).NotTo(HaveOccurred())
   127  
   128  		var vals []string
   129  		iter := client.Scan(0, "K*", 1).Iterator()
   130  		for iter.Next() {
   131  			vals = append(vals, iter.Val())
   132  		}
   133  		Expect(iter.Err()).NotTo(HaveOccurred())
   134  		Expect(vals).To(HaveLen(2))
   135  	})
   136  })
   137  

View as plain text