memcache 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +12 -1
 - data/README.rdoc +65 -11
 - data/Rakefile +14 -0
 - data/VERSION.yml +2 -2
 - data/bench/benchmark.rb +126 -0
 - data/ext/extconf.rb +51 -2
 - data/ext/libmemcached-0.38.tar.gz +0 -0
 - data/ext/native_server.c +575 -0
 - data/lib/memcache/base.rb +65 -0
 - data/lib/memcache/local_server.rb +7 -53
 - data/lib/memcache/migration.rb +7 -6
 - data/lib/memcache/null_server.rb +1 -1
 - data/lib/memcache/pg_server.rb +37 -20
 - data/lib/memcache/{segmented_server.rb → segmented.rb} +25 -15
 - data/lib/memcache/server.rb +44 -56
 - data/lib/memcache.rb +131 -83
 - data/test/memcache_local_server_test.rb +1 -1
 - data/test/memcache_native_server_test.rb +31 -0
 - data/test/memcache_null_server_test.rb +16 -8
 - data/test/memcache_segmented_native_server_test.rb +18 -0
 - data/test/memcache_segmented_server_test.rb +6 -9
 - data/test/memcache_server_test.rb +9 -11
 - data/test/memcache_server_test_helper.rb +89 -49
 - data/test/memcache_test.rb +11 -19
 - data/test/test_helper.rb +34 -9
 - metadata +12 -4
 - data/memcache.gemspec +0 -69
 
| 
         @@ -1,34 +1,74 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.dirname(__FILE__) + '/test_helper'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module MemcacheServerTestHelper
         
     | 
| 
       4 
     | 
    
         
            -
              def  
     | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
              def test_prefix
         
     | 
| 
      
 5 
     | 
    
         
            +
                assert_equal nil, m.prefix = nil
         
     | 
| 
      
 6 
     | 
    
         
            +
                assert_equal nil, m.prefix
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                m.set('1', 'baz', 0)
         
     | 
| 
      
 9 
     | 
    
         
            +
                m.set('2', 'bar', 0)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                assert_equal nil,   m.prefix
         
     | 
| 
      
 12 
     | 
    
         
            +
                assert_equal 'foo', m.prefix = 'foo'
         
     | 
| 
      
 13 
     | 
    
         
            +
                assert_equal 'foo', m.prefix
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                m.set('2', 'foo', 0)
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_equal nil,   m.get('1')
         
     | 
| 
      
 17 
     | 
    
         
            +
                assert_equal 'foo', m.get('2')
         
     | 
| 
      
 18 
     | 
    
         
            +
                assert_equal({'2'=>'foo'}, m.get(['1', '2']))
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal 'bar:', m.prefix = 'bar:'
         
     | 
| 
      
 21 
     | 
    
         
            +
                assert_equal 'bar:', m.prefix
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                assert_equal nil, m.prefix = nil
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert_equal nil, m.prefix
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                assert_equal 'baz', m.get('1')
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal 'bar', m.get('2')
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal({'1'=>'baz','2'=>'bar'}, m.get(['1', '2']))
         
     | 
| 
       6 
29 
     | 
    
         
             
              end
         
     | 
| 
       7 
30 
     | 
    
         | 
| 
       8 
31 
     | 
    
         
             
              def test_set_and_get
         
     | 
| 
       9 
     | 
    
         
            -
                m.set(2, 'foo', 0)
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
                assert_equal 'foo', m.set('2', 'foo', 0)
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       11 
34 
     | 
    
         
             
                assert_equal 'foo', m.get('2')
         
     | 
| 
       12 
35 
     | 
    
         
             
                assert_equal 'foo', m.get('2')
         
     | 
| 
       13 
36 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
                m.set(2, 'bar', 0)
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal 'bar', m.set('2', 'bar', 0)
         
     | 
| 
       15 
38 
     | 
    
         | 
| 
       16 
39 
     | 
    
         
             
                assert_equal 'bar', m.get('2')
         
     | 
| 
       17 
40 
     | 
    
         
             
                assert_equal 'bar', m.get('2')
         
     | 
| 
       18 
41 
     | 
    
         
             
              end
         
     | 
| 
       19 
42 
     | 
    
         | 
| 
      
 43 
     | 
    
         
            +
              def test_spaces_in_keys
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal '1', m.set('foo bar', '1', 0)
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal '1', m.get('foo bar')
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal '1', m.get('foo bar')
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                assert_equal '2', m.set('foo bar', '2', 0)
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal '2', m.get('foo bar')
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert_equal '2', m.get('foo bar')
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                assert_equal '8', m.set('foo baz', '8', 0)
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                expected = { 'foo bar' => '2', 'foo baz' => '8' }
         
     | 
| 
      
 57 
     | 
    
         
            +
                assert_equal expected, m.get(['foo bar','foo baz'])
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       20 
60 
     | 
    
         
             
              def test_expiry
         
     | 
| 
       21 
     | 
    
         
            -
                m.set('foo', 'foo', 1)
         
     | 
| 
      
 61 
     | 
    
         
            +
                assert_equal 'foo', m.set('foo', 'foo', 1)
         
     | 
| 
       22 
62 
     | 
    
         
             
                assert_equal 'foo', m.get('foo')
         
     | 
| 
       23 
63 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                m.add('bar', 'bar', 1)
         
     | 
| 
      
 64 
     | 
    
         
            +
                assert_equal 'bar', m.add('bar', 'bar', 1)
         
     | 
| 
       25 
65 
     | 
    
         
             
                assert_equal 'bar', m.get('bar')
         
     | 
| 
       26 
66 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                m.set('baz', '')
         
     | 
| 
       28 
     | 
    
         
            -
                m.replace('baz', 'baz',  
     | 
| 
      
 67 
     | 
    
         
            +
                assert_equal '',    m.set('baz', '')
         
     | 
| 
      
 68 
     | 
    
         
            +
                assert_equal 'baz', m.replace('baz', 'baz', 1)
         
     | 
| 
       29 
69 
     | 
    
         
             
                assert_equal 'baz', m.get('baz')
         
     | 
| 
       30 
70 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                m.set('bam', 'bap', Time.now + 1)
         
     | 
| 
      
 71 
     | 
    
         
            +
                assert_equal 'bap', m.set('bam', 'bap', (Time.now + 1).to_i)
         
     | 
| 
       32 
72 
     | 
    
         
             
                assert_equal 'bap', m.get('bam')
         
     | 
| 
       33 
73 
     | 
    
         | 
| 
       34 
74 
     | 
    
         
             
                sleep 2
         
     | 
| 
         @@ -41,114 +81,114 @@ module MemcacheServerTestHelper 
     | 
|
| 
       41 
81 
     | 
    
         | 
| 
       42 
82 
     | 
    
         
             
              def test_add_and_replace
         
     | 
| 
       43 
83 
     | 
    
         
             
                # Replace should do nothing if key doesn't exist.
         
     | 
| 
       44 
     | 
    
         
            -
                m.replace('foo', 'bar')
         
     | 
| 
      
 84 
     | 
    
         
            +
                assert_equal nil, m.replace('foo', 'bar')
         
     | 
| 
       45 
85 
     | 
    
         
             
                assert_equal nil, m.get('foo')
         
     | 
| 
       46 
86 
     | 
    
         | 
| 
       47 
87 
     | 
    
         
             
                # Add should only work if key doesn't exist.
         
     | 
| 
       48 
     | 
    
         
            -
                m.add('foo', 'foo')
         
     | 
| 
      
 88 
     | 
    
         
            +
                assert_equal 'foo', m.add('foo', 'foo')
         
     | 
| 
       49 
89 
     | 
    
         
             
                assert_equal 'foo', m.get('foo')
         
     | 
| 
       50 
90 
     | 
    
         
             
                assert_equal nil,   m.add('foo', 'bar')
         
     | 
| 
       51 
91 
     | 
    
         
             
                assert_equal 'foo', m.get('foo')
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
       53 
93 
     | 
    
         
             
                # Replace should only work if key doesn't exist.
         
     | 
| 
       54 
     | 
    
         
            -
                m.replace('foo', 'bar')
         
     | 
| 
      
 94 
     | 
    
         
            +
                assert_equal 'bar', m.replace('foo', 'bar')
         
     | 
| 
       55 
95 
     | 
    
         
             
                assert_equal 'bar', m.get('foo')
         
     | 
| 
       56 
96 
     | 
    
         
             
              end
         
     | 
| 
       57 
97 
     | 
    
         | 
| 
       58 
98 
     | 
    
         
             
              def test_append_and_prepend
         
     | 
| 
       59 
     | 
    
         
            -
                m.append('foo', 'bar')
         
     | 
| 
      
 99 
     | 
    
         
            +
                assert_equal false, m.append('foo', 'bar')
         
     | 
| 
       60 
100 
     | 
    
         
             
                assert_equal nil, m.get('foo')
         
     | 
| 
       61 
101 
     | 
    
         | 
| 
       62 
102 
     | 
    
         
             
                m.set('foo', 'foo')
         
     | 
| 
       63 
     | 
    
         
            -
                m.append('foo', 'bar')
         
     | 
| 
      
 103 
     | 
    
         
            +
                assert_equal true, m.append('foo', 'bar')
         
     | 
| 
       64 
104 
     | 
    
         
             
                assert_equal 'foobar', m.get('foo')
         
     | 
| 
       65 
105 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                m.prepend('foo', 'baz')
         
     | 
| 
      
 106 
     | 
    
         
            +
                assert_equal true, m.prepend('foo', 'baz')
         
     | 
| 
       67 
107 
     | 
    
         
             
                assert_equal 'bazfoobar', m.get('foo')
         
     | 
| 
       68 
108 
     | 
    
         
             
              end
         
     | 
| 
       69 
109 
     | 
    
         | 
| 
       70 
110 
     | 
    
         
             
              def test_incr
         
     | 
| 
       71 
111 
     | 
    
         
             
                # incr does nothing if value doesn't exist
         
     | 
| 
       72 
     | 
    
         
            -
                m.incr('foo')
         
     | 
| 
      
 112 
     | 
    
         
            +
                assert_equal nil, m.incr('foo')
         
     | 
| 
       73 
113 
     | 
    
         
             
                assert_equal nil, m.get('foo')
         
     | 
| 
       74 
114 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                m.decr('foo', 1)
         
     | 
| 
      
 115 
     | 
    
         
            +
                assert_equal nil, m.decr('foo', 1)
         
     | 
| 
       76 
116 
     | 
    
         
             
                assert_equal nil, m.get('foo')
         
     | 
| 
       77 
117 
     | 
    
         | 
| 
       78 
118 
     | 
    
         
             
                m.set('foo', '0')
         
     | 
| 
       79 
     | 
    
         
            -
                m.incr('foo')
         
     | 
| 
      
 119 
     | 
    
         
            +
                assert_equal 1, m.incr('foo')
         
     | 
| 
       80 
120 
     | 
    
         
             
                assert_equal '1', m.get('foo')
         
     | 
| 
       81 
121 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
                m.incr('foo', 52)
         
     | 
| 
      
 122 
     | 
    
         
            +
                assert_equal 53, m.incr('foo', 52)
         
     | 
| 
       83 
123 
     | 
    
         
             
                assert_equal '53', m.get('foo')
         
     | 
| 
       84 
124 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                m.decr('foo', 43)
         
     | 
| 
      
 125 
     | 
    
         
            +
                assert_equal 10, m.decr('foo', 43)
         
     | 
| 
       86 
126 
     | 
    
         
             
                assert_equal '10', m.get('foo')
         
     | 
| 
       87 
127 
     | 
    
         | 
| 
       88 
128 
     | 
    
         
             
                # Cannot go below zero.
         
     | 
| 
       89 
     | 
    
         
            -
                m.decr('foo', 100)
         
     | 
| 
      
 129 
     | 
    
         
            +
                assert_equal 0, m.decr('foo', 100)
         
     | 
| 
       90 
130 
     | 
    
         
             
                assert_equal '0', m.get('foo').strip
         
     | 
| 
       91 
131 
     | 
    
         
             
              end
         
     | 
| 
       92 
132 
     | 
    
         | 
| 
       93 
133 
     | 
    
         
             
              def test_multi_get
         
     | 
| 
       94 
     | 
    
         
            -
                m.set(2, '1,2,3')
         
     | 
| 
       95 
     | 
    
         
            -
                m.set(3, '4,5')
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
      
 134 
     | 
    
         
            +
                m.set('2', '1,2,3')
         
     | 
| 
      
 135 
     | 
    
         
            +
                m.set('3', '4,5')
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
       97 
137 
     | 
    
         
             
                expected = { '2' => '1,2,3', '3' => '4,5' }
         
     | 
| 
       98 
     | 
    
         
            -
                assert_equal expected, m.get([2,3])
         
     | 
| 
      
 138 
     | 
    
         
            +
                assert_equal expected, m.get(['2','3'])
         
     | 
| 
      
 139 
     | 
    
         
            +
                assert_equal '4,5', m.get(['3'])['3']
         
     | 
| 
      
 140 
     | 
    
         
            +
                assert_equal({}, m.get([]))
         
     | 
| 
       99 
141 
     | 
    
         
             
              end
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
       101 
143 
     | 
    
         
             
              def test_delete
         
     | 
| 
       102 
     | 
    
         
            -
                m.set(2, '1,2,3')
         
     | 
| 
       103 
     | 
    
         
            -
                
         
     | 
| 
       104 
     | 
    
         
            -
                assert_equal '1,2,3', m.get(2)
         
     | 
| 
      
 144 
     | 
    
         
            +
                m.set('2', '1,2,3')
         
     | 
| 
       105 
145 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
                m. 
     | 
| 
       107 
     | 
    
         
            -
                
         
     | 
| 
       108 
     | 
    
         
            -
                assert_equal nil, m.get(2)
         
     | 
| 
      
 146 
     | 
    
         
            +
                assert_equal '1,2,3', m.get('2')
         
     | 
| 
      
 147 
     | 
    
         
            +
                assert_equal true, m.delete('2')
         
     | 
| 
      
 148 
     | 
    
         
            +
                assert_equal nil, m.get('2')
         
     | 
| 
       109 
149 
     | 
    
         
             
              end
         
     | 
| 
       110 
150 
     | 
    
         | 
| 
       111 
151 
     | 
    
         
             
              def test_flush_all
         
     | 
| 
       112 
     | 
    
         
            -
                m.set(2, 'bar')
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                assert_equal 'bar', m.get(2)
         
     | 
| 
      
 152 
     | 
    
         
            +
                m.set('2', 'bar')
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                assert_equal 'bar', m.get('2')
         
     | 
| 
       115 
155 
     | 
    
         | 
| 
       116 
156 
     | 
    
         
             
                m.flush_all
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                assert_equal nil, m.get(2)
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                assert_equal nil, m.get('2')
         
     | 
| 
       119 
159 
     | 
    
         
             
              end
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
       121 
161 
     | 
    
         
             
              module AdvancedMethods
         
     | 
| 
       122 
162 
     | 
    
         
             
                def test_flags
         
     | 
| 
       123 
163 
     | 
    
         
             
                  m.set('thom', 'hartmann', 0)
         
     | 
| 
       124 
164 
     | 
    
         
             
                  value = m.gets('thom')
         
     | 
| 
       125 
165 
     | 
    
         
             
                  assert_equal 0, value.memcache_flags
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
       127 
167 
     | 
    
         
             
                  m.set('thom', 'hartmann', 0, 0b11110001)
         
     | 
| 
       128 
168 
     | 
    
         
             
                  value = m.gets('thom')
         
     | 
| 
       129 
169 
     | 
    
         
             
                  assert_equal 0b11110001, value.memcache_flags
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
       131 
171 
     | 
    
         
             
                  value = m.get('thom')
         
     | 
| 
       132 
172 
     | 
    
         
             
                  assert_equal 0b11110001, value.memcache_flags
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
       134 
174 
     | 
    
         
             
                  m.set('thom', 'hartmann', 0, 0b10101010)
         
     | 
| 
       135 
175 
     | 
    
         
             
                  value = m.get('thom')
         
     | 
| 
       136 
176 
     | 
    
         
             
                  assert_equal 0b10101010, value.memcache_flags
         
     | 
| 
       137 
177 
     | 
    
         
             
                end
         
     | 
| 
       138 
     | 
    
         
            -
             
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       139 
179 
     | 
    
         
             
                def test_gets_and_cas
         
     | 
| 
       140 
180 
     | 
    
         
             
                  m.set('thom', 'hartmann')
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
       142 
     | 
    
         
            -
                  value = m.gets('thom') 
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
                  value = m.gets('thom')
         
     | 
| 
       143 
183 
     | 
    
         
             
                  assert_equal 'hartmann', value
         
     | 
| 
       144 
     | 
    
         
            -
                  m.cas('thom', 'thompson', value.memcache_cas)
         
     | 
| 
      
 184 
     | 
    
         
            +
                  assert_equal 'thompson', m.cas('thom', 'thompson', value.memcache_cas)
         
     | 
| 
       145 
185 
     | 
    
         
             
                  assert_equal 'thompson', m.get('thom')
         
     | 
| 
       146 
     | 
    
         
            -
             
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
       147 
187 
     | 
    
         
             
                  value = m.gets('thom')
         
     | 
| 
       148 
188 
     | 
    
         
             
                  m.delete('thom')
         
     | 
| 
       149 
189 
     | 
    
         
             
                  assert_nil m.cas('thom', 'hartson', value.memcache_cas)
         
     | 
| 
       150 
190 
     | 
    
         
             
                  assert_equal nil, m.get('thom')
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
       152 
192 
     | 
    
         
             
                  m.add('thom', 'hartmann')
         
     | 
| 
       153 
193 
     | 
    
         
             
                  value = m.gets('thom')
         
     | 
| 
       154 
194 
     | 
    
         
             
                  m.set('thom', 'foo')
         
     | 
    
        data/test/memcache_test.rb
    CHANGED
    
    | 
         @@ -3,33 +3,25 @@ require File.dirname(__FILE__) + '/test_helper' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            class MemcacheTest < Test::Unit::TestCase
         
     | 
| 
       5 
5 
     | 
    
         
             
              PORTS = [11212, 11213, 11214, 11215, 11216, 11217]
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              def m
         
     | 
| 
       8 
     | 
    
         
            -
                @memcache
         
     | 
| 
       9 
     | 
    
         
            -
              end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
6 
     | 
    
         
             
              def setup
         
     | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                
         
     | 
| 
       16 
     | 
    
         
            -
              def teardown
         
     | 
| 
       17 
     | 
    
         
            -
                stop_memcache(*PORTS)
         
     | 
| 
      
 7 
     | 
    
         
            +
                init_memcache(*PORTS) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Memcache.new(:servers => PORTS.collect {|p| "localhost:#{p}"})
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
       18 
10 
     | 
    
         
             
              end
         
     | 
| 
       19 
11 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              def test_get_and_set 
     | 
| 
      
 12 
     | 
    
         
            +
              def test_get_and_set
         
     | 
| 
       21 
13 
     | 
    
         
             
                100.times do |i|
         
     | 
| 
       22 
14 
     | 
    
         
             
                  m.set(i.to_s, i)
         
     | 
| 
       23 
15 
     | 
    
         
             
                  assert_equal i, m.get(i.to_s)
         
     | 
| 
       24 
16 
     | 
    
         
             
                end
         
     | 
| 
       25 
17 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                keys = (0..200). 
     | 
| 
      
 18 
     | 
    
         
            +
                keys = (0..200).collect {|key| key.to_s}
         
     | 
| 
       27 
19 
     | 
    
         
             
                results = m.get(keys)
         
     | 
| 
       28 
20 
     | 
    
         
             
                assert_equal 100, results.size
         
     | 
| 
       29 
21 
     | 
    
         
             
                results.each do |key, value|
         
     | 
| 
       30 
22 
     | 
    
         
             
                  assert_equal key.to_i, value
         
     | 
| 
       31 
23 
     | 
    
         
             
                end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       33 
25 
     | 
    
         
             
                100.times do |i|
         
     | 
| 
       34 
26 
     | 
    
         
             
                  m.set(i.to_s, i.to_s, :raw => true)
         
     | 
| 
       35 
27 
     | 
    
         
             
                  assert_equal i.to_s, m.get(i.to_s, :raw => true)
         
     | 
| 
         @@ -68,7 +60,7 @@ class MemcacheTest < Test::Unit::TestCase 
     | 
|
| 
       68 
60 
     | 
    
         
             
                  assert_equal nil, m.get(i.to_s, :raw => true)
         
     | 
| 
       69 
61 
     | 
    
         | 
| 
       70 
62 
     | 
    
         
             
                  m.add(i.to_s, 'homerun', :raw => true)
         
     | 
| 
       71 
     | 
    
         
            -
                  assert_equal 'homerun', m.get(i.to_s, :raw => true) 
     | 
| 
      
 63 
     | 
    
         
            +
                  assert_equal 'homerun', m.get(i.to_s, :raw => true)
         
     | 
| 
       72 
64 
     | 
    
         
             
                end
         
     | 
| 
       73 
65 
     | 
    
         
             
              end
         
     | 
| 
       74 
66 
     | 
    
         | 
| 
         @@ -92,7 +84,7 @@ class MemcacheTest < Test::Unit::TestCase 
     | 
|
| 
       92 
84 
     | 
    
         
             
                  assert_equal [i, :foo], m["foo#{i}"]
         
     | 
| 
       93 
85 
     | 
    
         | 
| 
       94 
86 
     | 
    
         
             
                  m.get_or_set("foo#{i}") {raise}
         
     | 
| 
       95 
     | 
    
         
            -
                  assert_equal [i, :foo], m["foo#{i}"] 
     | 
| 
      
 87 
     | 
    
         
            +
                  assert_equal [i, :foo], m["foo#{i}"]
         
     | 
| 
       96 
88 
     | 
    
         | 
| 
       97 
89 
     | 
    
         
             
                  # Overwrite if changed.
         
     | 
| 
       98 
90 
     | 
    
         
             
                  m.get_or_set("bar#{i}") do
         
     | 
| 
         @@ -109,7 +101,7 @@ class MemcacheTest < Test::Unit::TestCase 
     | 
|
| 
       109 
101 
     | 
    
         
             
                  assert_equal [:foo, i], m["foo#{i}"]
         
     | 
| 
       110 
102 
     | 
    
         | 
| 
       111 
103 
     | 
    
         
             
                  m.get_or_add("foo#{i}") {raise}
         
     | 
| 
       112 
     | 
    
         
            -
                  assert_equal [:foo, i], m["foo#{i}"] 
     | 
| 
      
 104 
     | 
    
         
            +
                  assert_equal [:foo, i], m["foo#{i}"]
         
     | 
| 
       113 
105 
     | 
    
         | 
| 
       114 
106 
     | 
    
         
             
                  # Don't overwrite if changed.
         
     | 
| 
       115 
107 
     | 
    
         
             
                  m.get_or_add("bar#{i}") do
         
     | 
| 
         @@ -141,7 +133,7 @@ class MemcacheTest < Test::Unit::TestCase 
     | 
|
| 
       141 
133 
     | 
    
         
             
                  assert_equal i, m.get(i.to_s)
         
     | 
| 
       142 
134 
     | 
    
         
             
                end
         
     | 
| 
       143 
135 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
                keys = (0...200). 
     | 
| 
      
 136 
     | 
    
         
            +
                keys = (0...200).collect {|key| key.to_s}
         
     | 
| 
       145 
137 
     | 
    
         
             
                results = m.get_some(keys) do |missing_keys|
         
     | 
| 
       146 
138 
     | 
    
         
             
                  assert_equal 100, missing_keys.size
         
     | 
| 
       147 
139 
     | 
    
         
             
                  r = {}
         
     | 
| 
         @@ -160,7 +152,7 @@ class MemcacheTest < Test::Unit::TestCase 
     | 
|
| 
       160 
152 
     | 
    
         
             
              def test_get_with_reset_expiry
         
     | 
| 
       161 
153 
     | 
    
         
             
                m.add('foo', 'quick brown fox', :expiry => 1)
         
     | 
| 
       162 
154 
     | 
    
         
             
                assert_equal 'quick brown fox', m.get('foo', :expiry => 2)
         
     | 
| 
       163 
     | 
    
         
            -
                sleep(1) 
     | 
| 
      
 155 
     | 
    
         
            +
                sleep(1)
         
     | 
| 
       164 
156 
     | 
    
         
             
                assert_equal 'quick brown fox', m.get('foo')
         
     | 
| 
       165 
157 
     | 
    
         
             
              end
         
     | 
| 
       166 
158 
     | 
    
         | 
    
        data/test/test_helper.rb
    CHANGED
    
    | 
         @@ -7,20 +7,45 @@ require 'pp' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
         
     | 
| 
       8 
8 
     | 
    
         
             
            require 'memcache'
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            system 'killall memcached 2> /dev/null'
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
10 
     | 
    
         
             
            class Test::Unit::TestCase
         
     | 
| 
       13 
     | 
    
         
            -
               
     | 
| 
      
 11 
     | 
    
         
            +
              @@servers ||= {}
         
     | 
| 
      
 12 
     | 
    
         
            +
              def init_memcache(*ports)
         
     | 
| 
       14 
13 
     | 
    
         
             
                ports.each do |port|
         
     | 
| 
       15 
     | 
    
         
            -
                   
     | 
| 
      
 14 
     | 
    
         
            +
                  @@servers[port] ||= start_memcache(port)
         
     | 
| 
       16 
15 
     | 
    
         
             
                end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                @memcache = yield
         
     | 
| 
      
 18 
     | 
    
         
            +
                @memcache.flush_all
         
     | 
| 
       18 
19 
     | 
    
         
             
              end
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              def  
     | 
| 
       21 
     | 
    
         
            -
                 
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
              def m
         
     | 
| 
      
 22 
     | 
    
         
            +
                @memcache
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def start_memcache(port)
         
     | 
| 
      
 26 
     | 
    
         
            +
                system("memcached -p #{port} -U 0 -d -P /tmp/memcached_#{port}.pid")
         
     | 
| 
      
 27 
     | 
    
         
            +
                sleep 1
         
     | 
| 
      
 28 
     | 
    
         
            +
                File.read("/tmp/memcached_#{port}.pid")
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              def self.with_prefixes(*prefixes)
         
     | 
| 
      
 32 
     | 
    
         
            +
                # Define new test_* methods that calls super for every prefix. This only works for
         
     | 
| 
      
 33 
     | 
    
         
            +
                # methods that are mixed in, and should be called before you define custom test methods.
         
     | 
| 
      
 34 
     | 
    
         
            +
                opts = prefixes.last.is_a?(Hash) ? prefixes.last : {}
         
     | 
| 
      
 35 
     | 
    
         
            +
                instance_methods.each do |method_name|
         
     | 
| 
      
 36 
     | 
    
         
            +
                  next unless method_name =~ /^test_/
         
     | 
| 
      
 37 
     | 
    
         
            +
                  next if opts[:except] and opts[:except].include?(method_name)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  next if opts[:only] and not opts[:only].include?(method_name)
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  define_method(method_name) do |*args|
         
     | 
| 
      
 41 
     | 
    
         
            +
                    prefixes.each do |prefix|
         
     | 
| 
      
 42 
     | 
    
         
            +
                      assert_equal prefix, m.prefix = prefix
         
     | 
| 
      
 43 
     | 
    
         
            +
                      assert_equal prefix, m.prefix
         
     | 
| 
      
 44 
     | 
    
         
            +
                      super
         
     | 
| 
      
 45 
     | 
    
         
            +
                      assert_equal nil, m.prefix = nil
         
     | 
| 
      
 46 
     | 
    
         
            +
                      assert_equal nil, m.prefix
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                  end
         
     | 
| 
       24 
49 
     | 
    
         
             
                end
         
     | 
| 
       25 
50 
     | 
    
         
             
              end
         
     | 
| 
       26 
51 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: memcache
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.2.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors: 
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Justin Balthrop
         
     | 
| 
         @@ -9,7 +9,7 @@ autorequire: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2010-03-17 00:00:00 -07:00
         
     | 
| 
       13 
13 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
         @@ -28,17 +28,23 @@ files: 
     | 
|
| 
       28 
28 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       29 
29 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       30 
30 
     | 
    
         
             
            - VERSION.yml
         
     | 
| 
      
 31 
     | 
    
         
            +
            - bench/benchmark.rb
         
     | 
| 
      
 32 
     | 
    
         
            +
            - ext/extconf.rb
         
     | 
| 
      
 33 
     | 
    
         
            +
            - ext/libmemcached-0.38.tar.gz
         
     | 
| 
      
 34 
     | 
    
         
            +
            - ext/native_server.c
         
     | 
| 
       31 
35 
     | 
    
         
             
            - lib/memcache.rb
         
     | 
| 
      
 36 
     | 
    
         
            +
            - lib/memcache/base.rb
         
     | 
| 
       32 
37 
     | 
    
         
             
            - lib/memcache/local_server.rb
         
     | 
| 
       33 
38 
     | 
    
         
             
            - lib/memcache/migration.rb
         
     | 
| 
       34 
39 
     | 
    
         
             
            - lib/memcache/null_server.rb
         
     | 
| 
       35 
40 
     | 
    
         
             
            - lib/memcache/pg_server.rb
         
     | 
| 
       36 
     | 
    
         
            -
            - lib/memcache/ 
     | 
| 
      
 41 
     | 
    
         
            +
            - lib/memcache/segmented.rb
         
     | 
| 
       37 
42 
     | 
    
         
             
            - lib/memcache/server.rb
         
     | 
| 
       38 
     | 
    
         
            -
            - memcache.gemspec
         
     | 
| 
       39 
43 
     | 
    
         
             
            - test/memcache_local_server_test.rb
         
     | 
| 
      
 44 
     | 
    
         
            +
            - test/memcache_native_server_test.rb
         
     | 
| 
       40 
45 
     | 
    
         
             
            - test/memcache_null_server_test.rb
         
     | 
| 
       41 
46 
     | 
    
         
             
            - test/memcache_pg_server_test.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            - test/memcache_segmented_native_server_test.rb
         
     | 
| 
       42 
48 
     | 
    
         
             
            - test/memcache_segmented_server_test.rb
         
     | 
| 
       43 
49 
     | 
    
         
             
            - test/memcache_server_test.rb
         
     | 
| 
       44 
50 
     | 
    
         
             
            - test/memcache_server_test_helper.rb
         
     | 
| 
         @@ -74,8 +80,10 @@ specification_version: 3 
     | 
|
| 
       74 
80 
     | 
    
         
             
            summary: Advanced ruby memcache client
         
     | 
| 
       75 
81 
     | 
    
         
             
            test_files: 
         
     | 
| 
       76 
82 
     | 
    
         
             
            - test/memcache_local_server_test.rb
         
     | 
| 
      
 83 
     | 
    
         
            +
            - test/memcache_native_server_test.rb
         
     | 
| 
       77 
84 
     | 
    
         
             
            - test/memcache_null_server_test.rb
         
     | 
| 
       78 
85 
     | 
    
         
             
            - test/memcache_pg_server_test.rb
         
     | 
| 
      
 86 
     | 
    
         
            +
            - test/memcache_segmented_native_server_test.rb
         
     | 
| 
       79 
87 
     | 
    
         
             
            - test/memcache_segmented_server_test.rb
         
     | 
| 
       80 
88 
     | 
    
         
             
            - test/memcache_server_test.rb
         
     | 
| 
       81 
89 
     | 
    
         
             
            - test/memcache_server_test_helper.rb
         
     | 
    
        data/memcache.gemspec
    DELETED
    
    | 
         @@ -1,69 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Generated by jeweler
         
     | 
| 
       2 
     | 
    
         
            -
            # DO NOT EDIT THIS FILE DIRECTLY
         
     | 
| 
       3 
     | 
    
         
            -
            # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
         
     | 
| 
       4 
     | 
    
         
            -
            # -*- encoding: utf-8 -*-
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            Gem::Specification.new do |s|
         
     | 
| 
       7 
     | 
    
         
            -
              s.name = %q{memcache}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "1.2.0"
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
     | 
    
         
            -
              s.authors = ["Justin Balthrop"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{2009-12-17}
         
     | 
| 
       13 
     | 
    
         
            -
              s.description = %q{Ruby client for memcached supporting advanced protocol features and pluggable architecture.}
         
     | 
| 
       14 
     | 
    
         
            -
              s.email = %q{code@justinbalthrop.com}
         
     | 
| 
       15 
     | 
    
         
            -
              s.extensions = ["ext/extconf.rb"]
         
     | 
| 
       16 
     | 
    
         
            -
              s.extra_rdoc_files = [
         
     | 
| 
       17 
     | 
    
         
            -
                "LICENSE",
         
     | 
| 
       18 
     | 
    
         
            -
                 "README.rdoc"
         
     | 
| 
       19 
     | 
    
         
            -
              ]
         
     | 
| 
       20 
     | 
    
         
            -
              s.files = [
         
     | 
| 
       21 
     | 
    
         
            -
                ".gitignore",
         
     | 
| 
       22 
     | 
    
         
            -
                 "LICENSE",
         
     | 
| 
       23 
     | 
    
         
            -
                 "README.rdoc",
         
     | 
| 
       24 
     | 
    
         
            -
                 "Rakefile",
         
     | 
| 
       25 
     | 
    
         
            -
                 "VERSION.yml",
         
     | 
| 
       26 
     | 
    
         
            -
                 "lib/memcache.rb",
         
     | 
| 
       27 
     | 
    
         
            -
                 "lib/memcache/local_server.rb",
         
     | 
| 
       28 
     | 
    
         
            -
                 "lib/memcache/migration.rb",
         
     | 
| 
       29 
     | 
    
         
            -
                 "lib/memcache/null_server.rb",
         
     | 
| 
       30 
     | 
    
         
            -
                 "lib/memcache/pg_server.rb",
         
     | 
| 
       31 
     | 
    
         
            -
                 "lib/memcache/segmented_server.rb",
         
     | 
| 
       32 
     | 
    
         
            -
                 "lib/memcache/server.rb",
         
     | 
| 
       33 
     | 
    
         
            -
                 "memcache.gemspec",
         
     | 
| 
       34 
     | 
    
         
            -
                 "test/memcache_local_server_test.rb",
         
     | 
| 
       35 
     | 
    
         
            -
                 "test/memcache_null_server_test.rb",
         
     | 
| 
       36 
     | 
    
         
            -
                 "test/memcache_pg_server_test.rb",
         
     | 
| 
       37 
     | 
    
         
            -
                 "test/memcache_segmented_server_test.rb",
         
     | 
| 
       38 
     | 
    
         
            -
                 "test/memcache_server_test.rb",
         
     | 
| 
       39 
     | 
    
         
            -
                 "test/memcache_server_test_helper.rb",
         
     | 
| 
       40 
     | 
    
         
            -
                 "test/memcache_test.rb",
         
     | 
| 
       41 
     | 
    
         
            -
                 "test/test_helper.rb"
         
     | 
| 
       42 
     | 
    
         
            -
              ]
         
     | 
| 
       43 
     | 
    
         
            -
              s.homepage = %q{http://github.com/ninjudd/memcache}
         
     | 
| 
       44 
     | 
    
         
            -
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
       45 
     | 
    
         
            -
              s.require_paths = ["lib"]
         
     | 
| 
       46 
     | 
    
         
            -
              s.rubygems_version = %q{1.3.5}
         
     | 
| 
       47 
     | 
    
         
            -
              s.summary = %q{Advanced ruby memcache client}
         
     | 
| 
       48 
     | 
    
         
            -
              s.test_files = [
         
     | 
| 
       49 
     | 
    
         
            -
                "test/memcache_local_server_test.rb",
         
     | 
| 
       50 
     | 
    
         
            -
                 "test/memcache_null_server_test.rb",
         
     | 
| 
       51 
     | 
    
         
            -
                 "test/memcache_pg_server_test.rb",
         
     | 
| 
       52 
     | 
    
         
            -
                 "test/memcache_segmented_server_test.rb",
         
     | 
| 
       53 
     | 
    
         
            -
                 "test/memcache_server_test.rb",
         
     | 
| 
       54 
     | 
    
         
            -
                 "test/memcache_server_test_helper.rb",
         
     | 
| 
       55 
     | 
    
         
            -
                 "test/memcache_test.rb",
         
     | 
| 
       56 
     | 
    
         
            -
                 "test/test_helper.rb"
         
     | 
| 
       57 
     | 
    
         
            -
              ]
         
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
              if s.respond_to? :specification_version then
         
     | 
| 
       60 
     | 
    
         
            -
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
       61 
     | 
    
         
            -
                s.specification_version = 3
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         
     | 
| 
       64 
     | 
    
         
            -
                else
         
     | 
| 
       65 
     | 
    
         
            -
                end
         
     | 
| 
       66 
     | 
    
         
            -
              else
         
     | 
| 
       67 
     | 
    
         
            -
              end
         
     | 
| 
       68 
     | 
    
         
            -
            end
         
     | 
| 
       69 
     | 
    
         
            -
             
     |