File: test_event_machine.rb

package info (click to toggle)
ruby-memcache-client 1.8.5-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 268 kB
  • sloc: ruby: 2,120; makefile: 6
file content (110 lines) | stat: -rw-r--r-- 3,149 bytes parent folder | download | duplicates (2)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# encoding: ascii-8bit
require 'test/unit'
require 'memcache'

class TestEventMachine < Test::Unit::TestCase

  def test_concurrent_fibers
    return puts("Skipping EventMachine test, not Ruby 1.9") if RUBY_VERSION < '1.9'
    return puts("Skipping EventMachine test, no live server") if !live_server?

    require 'eventmachine'
    require 'memcache/event_machine'
    ex = nil
    m = MemCache.new(['127.0.0.1:11211', 'localhost:11211'])
    within_em(3) do
      begin
        key1 = 'foo'
        key2 = 'bar'*50
        key3 = '£∞'*45
        value1 = 'abc'
        value2 = 'xyz'*1000
        value3 = '∞§¶•ª'*1000

        100.times do
          assert_equal "STORED\r\n", m.set(key1, value1)
          assert_equal "STORED\r\n", m.set(key2, value2)
          assert_equal "STORED\r\n", m.set(key3, value3)
          m.get(key1)
          m.get(key2)
          m.get(key3)
          assert m.delete(key1)
          assert_equal "STORED\r\n", m.set(key1, value2)
          m.get(key1)
          assert_equal "STORED\r\n", m.set(key2, value3)
          m.get(key2)
          assert_equal "STORED\r\n", m.set(key3, value1)
          m.get(key3)
          h = m.get_multi(key1, key2, key3)
          assert h
          assert_equal Hash, h.class
          assert h.size > 0
        end
      rescue Exception => exp
        puts exp.message
        ex = exp
      ensure
        EM.stop
      end
    end
    raise ex if ex
  end

  def test_live_server
    return puts("Skipping EventMachine test, not Ruby 1.9") if RUBY_VERSION < '1.9'
    return puts("Skipping EventMachine test, no live server") if !live_server?

    require 'eventmachine'
    require 'memcache/event_machine'
    ex = nil
    within_em do
      begin
        m = MemCache.new(['127.0.0.1:11211', 'localhost:11211'])
        key1 = 'foo'
        key2 = 'bar'*50
        key3 = '£∞'*50
        value1 = 'abc'
        value2 = 'xyz'*1000
        value3 = '∞§¶•ª'*1000
    
        1000.times do
          assert_equal "STORED\r\n", m.set(key1, value1)
          assert_equal "STORED\r\n", m.set(key2, value2)
          assert_equal "STORED\r\n", m.set(key3, value3)
          assert_equal value1, m.get(key1)
          assert_equal value2, m.get(key2)
          assert_equal value3, m.get(key3)
          assert_equal "DELETED\r\n", m.delete(key1)
          assert_equal "STORED\r\n", m.set(key1, value2)
          assert_equal value2, m.get(key1)
          assert_equal "STORED\r\n", m.set(key2, value3)
          assert_equal value3, m.get(key2)
          assert_equal "STORED\r\n", m.set(key3, value1)
          assert_equal value1, m.get(key3)
          assert_equal({ key1 => value2, key2 => value3, key3 => value1 }, 
                       m.get_multi(key1, key2, key3))
        end
      rescue Exception => exp
        puts exp.message
        ex = exp
      ensure
        EM.stop
      end
    end
    raise ex if ex
  end
  
  private
  
  def within_em(count=1, &block)
    EM.run do
      count.times do
        Fiber.new(&block).resume
      end
    end
  end
  
  def live_server?
    TCPSocket.new('localhost', 11211) rescue nil
  end
end