File: hash_ring_test.rb

package info (click to toggle)
ruby-redis-client 0.28.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,116 kB
  • sloc: ansic: 7,517; ruby: 5,801; makefile: 246; sh: 123
file content (61 lines) | stat: -rw-r--r-- 1,644 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# frozen_string_literal: true

require "test_helper"

require "redis_client/hash_ring"
require "digest/sha1"

class RedisClient
  class HashRingTest < RedisClientTestCase
    include ClientTestHelper

    setup do
      @nodes = [
        new_client(db: 1, id: "cache-1"),
        new_client(db: 2, id: "cache-2"),
        new_client(db: 3, id: "cache-3"),
      ]
      @ring = RedisClient.ring(@nodes)
    end

    def test_node_for
      assert_equal @nodes[2], @ring.node_for("foo")
      assert_equal @nodes[0], @ring.node_for("bar")
      assert_equal @nodes[1], @ring.node_for("baz")

      assert_equal @nodes[0], @nodes[0].node_for("baz")
    end

    def test_custom_digest
      @ring = RedisClient.ring(@nodes, digest: Digest::SHA1)

      assert_equal @nodes[0], @ring.node_for("foo")
      assert_equal @nodes[2], @ring.node_for("bar")
      assert_equal @nodes[1], @ring.node_for("baz999")
    end

    def test_nodes_for
      mapping = @ring.nodes_for("foo", "bar", "baz", "egg", "spam", "plop")
      assert_equal 3, mapping.size

      assert_equal ["baz", "spam", "plop"], mapping[@nodes[1]]
      assert_equal ["bar", "egg"], mapping[@nodes[0]]
      assert_equal ["foo"], mapping[@nodes[2]]

      assert_equal mapping, @ring.nodes_for(["foo", "bar", "baz", "egg", "spam", "plop"])

      assert_equal({ @nodes[0] => ["foo", "bar"] }, @nodes[0].nodes_for("foo", "bar"))
    end

    def test_nodes
      assert_equal @nodes, @ring.nodes
      assert_equal [@nodes[0]], @nodes[0].nodes
    end

    private

    def new_client(**overrides)
      RedisClient.config(**tcp_config.merge(overrides)).new_pool
    end
  end
end