File: test_pipelined_delete.rb

package info (click to toggle)
ruby-dalli 5.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 992 kB
  • sloc: ruby: 9,447; sh: 19; makefile: 4
file content (89 lines) | stat: -rw-r--r-- 2,179 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# frozen_string_literal: true

require_relative '../helper'

describe 'Pipelined Delete' do
  MemcachedManager.supported_protocols.each do |p|
    describe "using the #{p} protocol" do
      describe 'single-server delete_multi fast path' do
        it 'deletes multiple keys' do
          memcached_persistent(p) do |dc|
            dc.flush

            dc.set('d1', 'v1')
            dc.set('d2', 'v2')
            dc.set('d3', 'v3')

            assert_equal 'v1', dc.get('d1')

            dc.delete_multi(%w[d1 d2 d3])

            assert_nil dc.get('d1')
            assert_nil dc.get('d2')
            assert_nil dc.get('d3')
          end
        end

        it 'handles empty array' do
          memcached_persistent(p) do |dc|
            dc.delete_multi([])
          end
        end

        it 'handles non-existent keys' do
          memcached_persistent(p) do |dc|
            dc.flush

            dc.delete_multi(%w[nonexistent1 nonexistent2])
          end
        end

        it 'only deletes specified keys' do
          memcached_persistent(p) do |dc|
            dc.flush

            dc.set('keep', 'keep_val')
            dc.set('remove', 'remove_val')

            dc.delete_multi(['remove'])

            assert_equal 'keep_val', dc.get('keep')
            assert_nil dc.get('remove')
          end
        end

        it 'handles Unicode and space keys' do
          memcached_persistent(p) do |dc|
            dc.flush

            dc.set('contains space', 'space_val')
            dc.set('ƒ©åÍÎ', 'unicode_val')

            dc.delete_multi(['contains space', 'ƒ©åÍÎ'])

            assert_nil dc.get('contains space')
            assert_nil dc.get('ƒ©åÍÎ')
          end
        end

        it 'handles large batch' do
          memcached_persistent(p) do |dc|
            dc.flush

            keys = []
            100.times do |i|
              key = "del_bulk_#{i}"
              dc.set(key, "val_#{i}")
              keys << key
            end

            dc.delete_multi(keys)

            assert_nil dc.get('del_bulk_0')
            assert_nil dc.get('del_bulk_99')
          end
        end
      end
    end
  end
end