fmq 0.1.1 → 0.2.0
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/History.txt +24 -0
- data/License.txt +675 -0
- data/PostInstall.txt +3 -0
- data/README.txt +69 -0
- data/config/hoe.rb +73 -0
- data/config/requirements.rb +15 -0
- data/default-server/admin-interface/index.html +7 -7
- data/default-server/queues/my_test.rb +6 -15
- data/lib/fmq/client.rb +52 -19
- data/lib/fmq/mongrel_server.rb +43 -24
- data/lib/fmq/queue_manager.rb +265 -260
- data/lib/fmq/queues/README.txt +12 -21
- data/lib/fmq/queues/admin.rb +11 -22
- data/lib/fmq/queues/base.rb +75 -0
- data/lib/fmq/queues/file.rb +6 -19
- data/lib/fmq/queues/forward.rb +7 -12
- data/lib/fmq/queues/linked.rb +28 -59
- data/lib/fmq/queues/load_balanced.rb +105 -104
- data/lib/fmq/queues/syncronized.rb +54 -55
- data/lib/fmq/version.rb +2 -2
- data/test/test_basic.rb +36 -0
- data/test/test_fmq_client.rb +33 -26
- data/test/test_helper.rb +5 -1
- data/test/test_linked.rb +65 -0
- data/test/test_queue_manager.rb +90 -0
- metadata +22 -5
- data/setup.rb +0 -1585
- data/test/test_fmq_queue.rb +0 -47
data/test/test_fmq_client.rb
CHANGED
@@ -1,26 +1,33 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
-
|
3
|
-
class TestFreeMessageQueue < Test::Unit::TestCase
|
4
|
-
TEST_URL = "http://localhost:5884/fmq_test/test1"
|
5
|
-
TEST_REQUEST = 'X' * 1200 # 1.2 KB
|
6
|
-
|
7
|
-
def setup
|
8
|
-
@queue = FreeMessageQueue::ClientQueue.new(TEST_URL)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_post_and_get_message
|
12
|
-
5.times do |t|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
5.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestFreeMessageQueue < Test::Unit::TestCase
|
4
|
+
TEST_URL = "http://localhost:5884/fmq_test/test1"
|
5
|
+
TEST_REQUEST = 'X' * 1200 # 1.2 KB
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@queue = FreeMessageQueue::ClientQueue.new(TEST_URL)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_post_and_get_message
|
12
|
+
5.times do |t|
|
13
|
+
message = new_msg(TEST_REQUEST + t.to_s)
|
14
|
+
message.option["ID"] = t
|
15
|
+
message.option["application-name"] = "Test"
|
16
|
+
@queue.put(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
assert_equal 5, @queue.size
|
20
|
+
assert_equal TEST_REQUEST.size * 5 + 5, @queue.bytes
|
21
|
+
|
22
|
+
5.times do |t|
|
23
|
+
message = @queue.poll()
|
24
|
+
assert_equal TEST_REQUEST + t.to_s, message.payload
|
25
|
+
assert_equal "text/plain", message.content_type
|
26
|
+
assert_equal t, message.option["ID"].to_i
|
27
|
+
assert_equal "Test", message.option["APPLICATION_NAME"]
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_equal 0, @queue.size
|
31
|
+
assert_equal 0, @queue.bytes
|
32
|
+
end
|
33
|
+
end
|
data/test/test_helper.rb
CHANGED
data/test/test_linked.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
# This is the default test to the message interface
|
4
|
+
class TestLinkedQueue < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
manager = nil # the manager is not needed in this test
|
7
|
+
@queue = FreeMessageQueue::LinkedQueue.new(manager)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_basic_get_poll
|
11
|
+
assert_nil @queue.poll
|
12
|
+
assert_equal 0, @queue.size
|
13
|
+
assert @queue.put(nil) == false
|
14
|
+
assert_nil @queue.poll
|
15
|
+
td_1 = new_msg("asdasd")
|
16
|
+
assert @queue.put(td_1)
|
17
|
+
assert_equal 1, @queue.size
|
18
|
+
assert_equal td_1.payload, @queue.poll.payload
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_n_messages
|
22
|
+
n = 20
|
23
|
+
byte_size = 0
|
24
|
+
n.times { |t| byte_size += t.to_s.size }
|
25
|
+
|
26
|
+
assert_equal 0, @queue.bytes
|
27
|
+
assert_nil @queue.poll
|
28
|
+
n.times do |i|
|
29
|
+
assert @queue.put(new_msg(i.to_s))
|
30
|
+
end
|
31
|
+
assert_equal byte_size, @queue.bytes
|
32
|
+
assert_equal n, @queue.size
|
33
|
+
n.times do |i|
|
34
|
+
assert_equal i.to_s, @queue.poll.payload
|
35
|
+
end
|
36
|
+
assert_equal 0, @queue.bytes
|
37
|
+
assert_nil @queue.poll
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_mam_messages
|
41
|
+
@queue.put(new_msg("asd"))
|
42
|
+
@queue.put(new_msg("asd"))
|
43
|
+
@queue.poll()
|
44
|
+
@queue.put(new_msg("asd"))
|
45
|
+
@queue.put(new_msg("asd"))
|
46
|
+
@queue.poll()
|
47
|
+
@queue.put(new_msg("asd"))
|
48
|
+
@queue.poll()
|
49
|
+
assert_equal 2, @queue.size
|
50
|
+
@queue.put(new_msg("asd"))
|
51
|
+
@queue.put(new_msg("asd"))
|
52
|
+
assert_equal 4, @queue.size
|
53
|
+
@queue.clear
|
54
|
+
assert_equal 0, @queue.size
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_queue_bytes
|
58
|
+
@queue.put(new_msg("XX" * 40))
|
59
|
+
@queue.put(new_msg("X" * 40))
|
60
|
+
@queue.put(new_msg("XX888" * 40))
|
61
|
+
assert_equal 2*40+40+5*40, @queue.bytes
|
62
|
+
@queue.clear
|
63
|
+
assert_equal 0, @queue.bytes
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
# This is the tests the queue manager interface
|
4
|
+
class TestQueueManager < Test::Unit::TestCase
|
5
|
+
DEFAULT_QUEUE_NAME = "/fmq_test/test1"
|
6
|
+
|
7
|
+
def setup
|
8
|
+
FreeMessageQueue.create_logger
|
9
|
+
FreeMessageQueue.set_log_level "fatal"
|
10
|
+
|
11
|
+
@working_conf = {
|
12
|
+
"auto-create-queues" => false,
|
13
|
+
"defined-queues" => {
|
14
|
+
"test-queue-1" => {
|
15
|
+
"path" => DEFAULT_QUEUE_NAME,
|
16
|
+
"max-messages" => 100,
|
17
|
+
"max-size" => "100mb"
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
@queue_manager = FreeMessageQueue::QueueManager.new(@working_conf)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_config
|
25
|
+
# check constraints
|
26
|
+
constraints = { :max_messages => 100, :max_size => 104857600 }
|
27
|
+
assert_equal constraints, @queue_manager.queue_constraints[DEFAULT_QUEUE_NAME]
|
28
|
+
|
29
|
+
# the queue manager can't be created without config
|
30
|
+
assert_raise(FreeMessageQueue::QueueManagerException) {
|
31
|
+
FreeMessageQueue::QueueManager.new(nil)
|
32
|
+
}
|
33
|
+
|
34
|
+
# check that the simple config will work
|
35
|
+
simple = {
|
36
|
+
"auto-create-queues" => true,
|
37
|
+
"defined-queues" => {}
|
38
|
+
}
|
39
|
+
FreeMessageQueue::QueueManager.new(simple)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_poll_and_get
|
43
|
+
10.times do
|
44
|
+
@queue_manager.put(DEFAULT_QUEUE_NAME, new_msg("XXX" * 20))
|
45
|
+
end
|
46
|
+
assert_equal 10, @queue_manager.queue_size(DEFAULT_QUEUE_NAME)
|
47
|
+
i = 0
|
48
|
+
while message = @queue_manager.poll(DEFAULT_QUEUE_NAME)
|
49
|
+
i += 1
|
50
|
+
end
|
51
|
+
assert_equal 10, i
|
52
|
+
assert_equal 0, @queue_manager.queue_size(DEFAULT_QUEUE_NAME)
|
53
|
+
|
54
|
+
# should raise a exception because of the maximum messages limitation
|
55
|
+
i = 0
|
56
|
+
assert_raise(FreeMessageQueue::QueueManagerException) {
|
57
|
+
101.times do
|
58
|
+
@queue_manager.put(DEFAULT_QUEUE_NAME, new_msg("XXX" * 20))
|
59
|
+
i += 1
|
60
|
+
end
|
61
|
+
}
|
62
|
+
@queue_manager.queue[DEFAULT_QUEUE_NAME].clear
|
63
|
+
assert_equal 0, @queue_manager.queue_size(DEFAULT_QUEUE_NAME)
|
64
|
+
assert i = 100
|
65
|
+
|
66
|
+
# should raise a exception because of the maximum byte size limitation
|
67
|
+
i = 0
|
68
|
+
two_mb_message = new_msg("X" * 1024 * 1024 * 2)
|
69
|
+
assert_raise(FreeMessageQueue::QueueManagerException) {
|
70
|
+
101.times do
|
71
|
+
@queue_manager.put(DEFAULT_QUEUE_NAME, two_mb_message)
|
72
|
+
i += 1
|
73
|
+
end
|
74
|
+
}
|
75
|
+
assert i = 50
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_creating_and_deleting
|
79
|
+
url = "/XX123"
|
80
|
+
@queue_manager.create_queue(url)
|
81
|
+
@queue_manager.put(url, new_msg("X_X_X_X_X_X"))
|
82
|
+
assert_equal "X_X_X_X_X_X", @queue_manager.poll(url).payload
|
83
|
+
@queue_manager.delete_queue(url)
|
84
|
+
|
85
|
+
# auto queue creation is off
|
86
|
+
assert_raise(FreeMessageQueue::QueueManagerException) {
|
87
|
+
@queue_manager.put(url, new_msg("Test"))
|
88
|
+
}
|
89
|
+
end
|
90
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Landgraf
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-06-
|
12
|
+
date: 2008-06-28 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -21,28 +21,43 @@ executables:
|
|
21
21
|
extensions: []
|
22
22
|
|
23
23
|
extra_rdoc_files:
|
24
|
+
- History.txt
|
25
|
+
- License.txt
|
26
|
+
- PostInstall.txt
|
27
|
+
- README.txt
|
24
28
|
- lib/fmq/queues/README.txt
|
25
29
|
files:
|
30
|
+
- History.txt
|
31
|
+
- License.txt
|
32
|
+
- PostInstall.txt
|
33
|
+
- README.txt
|
26
34
|
- bin/fmq
|
35
|
+
- config/hoe.rb
|
36
|
+
- config/requirements.rb
|
27
37
|
- default-server/admin-interface/images/logo.png
|
28
38
|
- default-server/admin-interface/index.html
|
29
39
|
- default-server/admin-interface/prototype.js
|
30
40
|
- default-server/config.yml
|
31
41
|
- default-server/queues/my_test.rb
|
32
42
|
- lib/fmq.rb
|
33
|
-
- lib/fmq/client.rb
|
34
43
|
- lib/fmq/boot.rb
|
44
|
+
- lib/fmq/client.rb
|
35
45
|
- lib/fmq/mongrel_server.rb
|
36
46
|
- lib/fmq/queue_manager.rb
|
37
47
|
- lib/fmq/queues/README.txt
|
38
48
|
- lib/fmq/queues/admin.rb
|
49
|
+
- lib/fmq/queues/base.rb
|
39
50
|
- lib/fmq/queues/file.rb
|
40
51
|
- lib/fmq/queues/forward.rb
|
41
52
|
- lib/fmq/queues/linked.rb
|
42
53
|
- lib/fmq/queues/load_balanced.rb
|
43
54
|
- lib/fmq/queues/syncronized.rb
|
44
55
|
- lib/fmq/version.rb
|
45
|
-
-
|
56
|
+
- test/test_basic.rb
|
57
|
+
- test/test_fmq_client.rb
|
58
|
+
- test/test_helper.rb
|
59
|
+
- test/test_linked.rb
|
60
|
+
- test/test_queue_manager.rb
|
46
61
|
has_rdoc: true
|
47
62
|
homepage: http://fmq.rubyforge.org
|
48
63
|
post_install_message: |-
|
@@ -74,6 +89,8 @@ signing_key:
|
|
74
89
|
specification_version: 2
|
75
90
|
summary: The project implements a queue system with a server and some client apis. This project wants to be a fast and lightweight implementation with most of the features of MQS or ActiveMQ.
|
76
91
|
test_files:
|
92
|
+
- test/test_basic.rb
|
77
93
|
- test/test_fmq_client.rb
|
78
|
-
- test/test_fmq_queue.rb
|
79
94
|
- test/test_helper.rb
|
95
|
+
- test/test_linked.rb
|
96
|
+
- test/test_queue_manager.rb
|