stompserver_ng 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/History.txt +159 -0
  2. data/Manifest.txt +71 -0
  3. data/README.txt +172 -0
  4. data/Rakefile +38 -0
  5. data/STATUS +5 -0
  6. data/bin/stompserver_ng +63 -0
  7. data/client/README.txt +1 -0
  8. data/client/both.rb +25 -0
  9. data/client/consume.rb +14 -0
  10. data/client/send.rb +17 -0
  11. data/config/stompserver_ng.conf +11 -0
  12. data/etc/19xcompat/notes.txt +223 -0
  13. data/etc/arutils/README-activerecord.txt +78 -0
  14. data/etc/arutils/cre_mysql.rb +34 -0
  15. data/etc/arutils/cre_postgres.rb +33 -0
  16. data/etc/arutils/cre_sqlite3.rb +28 -0
  17. data/etc/arutils/mysql_boot.sql +12 -0
  18. data/etc/arutils/postgres_boot.sql +14 -0
  19. data/etc/database.mysql.yml +9 -0
  20. data/etc/database.postgres.yml +9 -0
  21. data/etc/passwd.example +3 -0
  22. data/etc/ppqinfo.rb +15 -0
  23. data/etc/runserver.sh +17 -0
  24. data/etc/stompserver_ng +50 -0
  25. data/etc/stompserver_ng.conf +13 -0
  26. data/lib/stomp_server_ng.rb +471 -0
  27. data/lib/stomp_server_ng/protocols/http.rb +128 -0
  28. data/lib/stomp_server_ng/protocols/stomp.rb +407 -0
  29. data/lib/stomp_server_ng/qmonitor.rb +58 -0
  30. data/lib/stomp_server_ng/queue.rb +248 -0
  31. data/lib/stomp_server_ng/queue/activerecord_queue.rb +118 -0
  32. data/lib/stomp_server_ng/queue/ar_message.rb +21 -0
  33. data/lib/stomp_server_ng/queue/ar_reconnect.rb +18 -0
  34. data/lib/stomp_server_ng/queue/dbm_queue.rb +72 -0
  35. data/lib/stomp_server_ng/queue/file_queue.rb +56 -0
  36. data/lib/stomp_server_ng/queue/memory_queue.rb +64 -0
  37. data/lib/stomp_server_ng/queue_manager.rb +302 -0
  38. data/lib/stomp_server_ng/stomp_auth.rb +26 -0
  39. data/lib/stomp_server_ng/stomp_frame.rb +32 -0
  40. data/lib/stomp_server_ng/stomp_frame_recognizer.rb +77 -0
  41. data/lib/stomp_server_ng/stomp_id.rb +32 -0
  42. data/lib/stomp_server_ng/stomp_user.rb +17 -0
  43. data/lib/stomp_server_ng/test_server.rb +21 -0
  44. data/lib/stomp_server_ng/topic_manager.rb +46 -0
  45. data/setup.rb +1585 -0
  46. data/stompserver_ng.gemspec +136 -0
  47. data/test/devserver/props.yaml +5 -0
  48. data/test/devserver/runserver.sh +16 -0
  49. data/test/devserver/stompserver_ng.dbm.conf +12 -0
  50. data/test/devserver/stompserver_ng.file.conf +12 -0
  51. data/test/devserver/stompserver_ng.memory.conf +12 -0
  52. data/test/noserver/mocklogger.rb +12 -0
  53. data/test/noserver/test_queue_manager.rb +134 -0
  54. data/test/noserver/test_stomp_frame.rb +138 -0
  55. data/test/noserver/test_topic_manager.rb +79 -0
  56. data/test/noserver/ts_all_no_server.rb +12 -0
  57. data/test/props.yaml +5 -0
  58. data/test/runalltests.sh +14 -0
  59. data/test/runtest.sh +4 -0
  60. data/test/test_0000_base.rb +107 -0
  61. data/test/test_0001_conn.rb +47 -0
  62. data/test/test_0002_conn_sr.rb +94 -0
  63. data/test/test_0006_client.rb +41 -0
  64. data/test/test_0011_send_recv.rb +74 -0
  65. data/test/test_0015_ack_conn.rb +78 -0
  66. data/test/test_0017_ack_client.rb +78 -0
  67. data/test/test_0019_ack_no_ack.rb +145 -0
  68. data/test/test_0022_ack_noack_conn.rb +123 -0
  69. data/test/test_0030_subscr_id.rb +44 -0
  70. data/test/test_0040_receipt_conn.rb +87 -0
  71. data/test/ts_all_server.rb +10 -0
  72. metadata +196 -0
@@ -0,0 +1,136 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{stompserver_ng}
8
+ s.version = "1.0.6"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Patrick Hurley", "Lionel Bouton", "snacktime", "gyver", "Mike Mangino", "robl", "gmallard"]
12
+ s.date = %q{2011-04-21}
13
+ s.default_executable = %q{stompserver_ng}
14
+ s.description = %q{STOMP Next Generation Ruby server.}
15
+ s.email = ["phurley-blocked@rubyforge.org", "lionel-dev@bouton.name", "snacktime@somewhere.com", "gyver@somewhere.com", "mmangino-blocked@rubyforge.org", "robl@monkeyhelper.com", "allard.guy.m@gmail.com"]
16
+ s.executables = ["stompserver_ng"]
17
+ s.extra_rdoc_files = [
18
+ "README.txt"
19
+ ]
20
+ s.files = [
21
+ "History.txt",
22
+ "Manifest.txt",
23
+ "README.txt",
24
+ "Rakefile",
25
+ "STATUS",
26
+ "bin/stompserver_ng",
27
+ "client/README.txt",
28
+ "client/both.rb",
29
+ "client/consume.rb",
30
+ "client/send.rb",
31
+ "config/stompserver_ng.conf",
32
+ "etc/19xcompat/notes.txt",
33
+ "etc/arutils/README-activerecord.txt",
34
+ "etc/arutils/cre_mysql.rb",
35
+ "etc/arutils/cre_postgres.rb",
36
+ "etc/arutils/cre_sqlite3.rb",
37
+ "etc/arutils/mysql_boot.sql",
38
+ "etc/arutils/postgres_boot.sql",
39
+ "etc/database.mysql.yml",
40
+ "etc/database.postgres.yml",
41
+ "etc/passwd.example",
42
+ "etc/ppqinfo.rb",
43
+ "etc/runserver.sh",
44
+ "etc/stompserver_ng",
45
+ "etc/stompserver_ng.conf",
46
+ "lib/stomp_server_ng.rb",
47
+ "lib/stomp_server_ng/protocols/http.rb",
48
+ "lib/stomp_server_ng/protocols/stomp.rb",
49
+ "lib/stomp_server_ng/qmonitor.rb",
50
+ "lib/stomp_server_ng/queue.rb",
51
+ "lib/stomp_server_ng/queue/activerecord_queue.rb",
52
+ "lib/stomp_server_ng/queue/ar_message.rb",
53
+ "lib/stomp_server_ng/queue/ar_reconnect.rb",
54
+ "lib/stomp_server_ng/queue/dbm_queue.rb",
55
+ "lib/stomp_server_ng/queue/file_queue.rb",
56
+ "lib/stomp_server_ng/queue/memory_queue.rb",
57
+ "lib/stomp_server_ng/queue_manager.rb",
58
+ "lib/stomp_server_ng/stomp_auth.rb",
59
+ "lib/stomp_server_ng/stomp_frame.rb",
60
+ "lib/stomp_server_ng/stomp_frame_recognizer.rb",
61
+ "lib/stomp_server_ng/stomp_id.rb",
62
+ "lib/stomp_server_ng/stomp_user.rb",
63
+ "lib/stomp_server_ng/test_server.rb",
64
+ "lib/stomp_server_ng/topic_manager.rb",
65
+ "setup.rb",
66
+ "stompserver_ng.gemspec",
67
+ "test/devserver/props.yaml",
68
+ "test/devserver/runserver.sh",
69
+ "test/devserver/stompserver_ng.dbm.conf",
70
+ "test/devserver/stompserver_ng.file.conf",
71
+ "test/devserver/stompserver_ng.memory.conf",
72
+ "test/noserver/mocklogger.rb",
73
+ "test/noserver/test_queue_manager.rb",
74
+ "test/noserver/test_stomp_frame.rb",
75
+ "test/noserver/test_topic_manager.rb",
76
+ "test/noserver/ts_all_no_server.rb",
77
+ "test/props.yaml",
78
+ "test/runalltests.sh",
79
+ "test/runtest.sh",
80
+ "test/test_0000_base.rb",
81
+ "test/test_0001_conn.rb",
82
+ "test/test_0002_conn_sr.rb",
83
+ "test/test_0006_client.rb",
84
+ "test/test_0011_send_recv.rb",
85
+ "test/test_0015_ack_conn.rb",
86
+ "test/test_0017_ack_client.rb",
87
+ "test/test_0019_ack_no_ack.rb",
88
+ "test/test_0022_ack_noack_conn.rb",
89
+ "test/test_0030_subscr_id.rb",
90
+ "test/test_0040_receipt_conn.rb",
91
+ "test/ts_all_server.rb"
92
+ ]
93
+ s.homepage = %q{http://github.com/gmallard/stompserver_ng}
94
+ s.require_paths = ["lib"]
95
+ s.rubygems_version = %q{1.3.7}
96
+ s.summary = %q{A very light messaging server, next generation}
97
+ s.test_files = [
98
+ "test/noserver/mocklogger.rb",
99
+ "test/noserver/test_queue_manager.rb",
100
+ "test/noserver/test_stomp_frame.rb",
101
+ "test/noserver/test_topic_manager.rb",
102
+ "test/noserver/ts_all_no_server.rb",
103
+ "test/test_0000_base.rb",
104
+ "test/test_0001_conn.rb",
105
+ "test/test_0002_conn_sr.rb",
106
+ "test/test_0006_client.rb",
107
+ "test/test_0011_send_recv.rb",
108
+ "test/test_0015_ack_conn.rb",
109
+ "test/test_0017_ack_client.rb",
110
+ "test/test_0019_ack_no_ack.rb",
111
+ "test/test_0022_ack_noack_conn.rb",
112
+ "test/test_0030_subscr_id.rb",
113
+ "test/test_0040_receipt_conn.rb",
114
+ "test/ts_all_server.rb"
115
+ ]
116
+
117
+ if s.respond_to? :specification_version then
118
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
119
+ s.specification_version = 3
120
+
121
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
122
+ s.add_runtime_dependency(%q<daemons>, [">= 1.0.10"])
123
+ s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.10"])
124
+ s.add_runtime_dependency(%q<uuid>, [">= 2.1.0"])
125
+ else
126
+ s.add_dependency(%q<daemons>, [">= 1.0.10"])
127
+ s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
128
+ s.add_dependency(%q<uuid>, [">= 2.1.0"])
129
+ end
130
+ else
131
+ s.add_dependency(%q<daemons>, [">= 1.0.10"])
132
+ s.add_dependency(%q<eventmachine>, [">= 0.12.10"])
133
+ s.add_dependency(%q<uuid>, [">= 2.1.0"])
134
+ end
135
+ end
136
+
@@ -0,0 +1,5 @@
1
+ ---
2
+ :userid: login
3
+ :password: passcode
4
+ :host: localhost
5
+ :port: 51613
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+ #
3
+ set -x
4
+ #
5
+ PH=$(pwd)
6
+ echo "Project Home: $PH"
7
+ mtype=${QMEM:-.file}
8
+ CONFIG=$PH/test/devserver/stompserver_ng${mtype}.conf
9
+ echo "Using Config: $CONFIG"
10
+ #
11
+ FLAGS="--log_level=debug --config=$CONFIG $*"
12
+ #
13
+ ruby -I $(pwd)/lib bin/stompserver_ng $FLAGS
14
+ #
15
+ set +x
16
+
@@ -0,0 +1,12 @@
1
+ ---
2
+ :daemon: false
3
+ :working_dir: /tmp/stompserver
4
+ :storage: .queue
5
+ :queue: dbm
6
+ :auth: false
7
+ :debug: false
8
+ :group:
9
+ :user:
10
+ :host: localhost
11
+ :port: 51613
12
+
@@ -0,0 +1,12 @@
1
+ ---
2
+ :daemon: false
3
+ :working_dir: /tmp/stompserver
4
+ :storage: .queue
5
+ :queue: file
6
+ :auth: false
7
+ :debug: false
8
+ :group:
9
+ :user:
10
+ :host: localhost
11
+ :port: 51613
12
+
@@ -0,0 +1,12 @@
1
+ ---
2
+ :daemon: false
3
+ :working_dir: /tmp/stompserver
4
+ :storage: .queue
5
+ :queue: memory
6
+ :auth: false
7
+ :debug: false
8
+ :group:
9
+ :user:
10
+ :host: localhost
11
+ :port: 51613
12
+
@@ -0,0 +1,12 @@
1
+ #
2
+ require 'logger'
3
+ #
4
+ module StompServer
5
+ class LogHelper
6
+ # Mock LogHelper Imlementation -> previous tests
7
+ def self.get_loglevel
8
+ Logger::DEBUG
9
+ end # of self.get_loglevel
10
+ end # of class LogHelper
11
+ end # of module
12
+
@@ -0,0 +1,134 @@
1
+ require 'logger'
2
+ $:.unshift File.dirname(__FILE__)
3
+ require 'mocklogger'
4
+ #
5
+ require 'stomp_server/stomp_id'
6
+ require 'stomp_server/stomp_frame'
7
+ require 'stomp_server/queue_manager'
8
+ require 'stomp_server/queue'
9
+ require 'stomp_server/queue/file_queue'
10
+ require 'stomp_server/queue/memory_queue'
11
+ require 'stomp_server/queue/dbm_queue'
12
+ require 'test/unit'
13
+ require 'fileutils'
14
+
15
+ class TestQueues < Test::Unit::TestCase
16
+
17
+ class MockQueueManager < StompServer::QueueManager
18
+ def initialize(qstore)
19
+ super(qstore)
20
+ @qstore = qstore
21
+ @queue_stats = Hash.new
22
+ @queues = Hash.new { Array.new }
23
+ @pending = Hash.new { Array.new }
24
+ end
25
+ end
26
+
27
+ class UserMock
28
+ attr_accessor :data
29
+ def initialize ; @data = '' ; end
30
+ def stomp_send_data(data); @data += data.to_s ; end
31
+ def connected?;true;end
32
+ end
33
+
34
+ class MessageMock
35
+ attr_accessor :headers, :data, :command, :body
36
+ def initialize(dest, msg, id=1)
37
+ @body = msg
38
+ @headers = {
39
+ 'message-id' => id,
40
+ 'destination' => dest,
41
+ 'content-length' => msg.size.to_s
42
+ }
43
+
44
+ @frame = StompServer::StompFrame.new('MESSAGE', headers, body)
45
+ @data = @frame.to_s
46
+ end
47
+ def to_s ; @data.to_s ; end
48
+ end
49
+
50
+ def teardown
51
+ FileUtils.rm_rf(".queue_test")
52
+ end
53
+
54
+ def setup
55
+ FileUtils.rm_rf(".queue_test") if File.directory?('.queue_test')
56
+ @@qstore = StompServer::FileQueue.new(".queue_test")
57
+ @@qstore.checkpoint_interval=0
58
+ @t = MockQueueManager.new(@@qstore)
59
+ @log = Logger.new(STDOUT)
60
+ @log.level = Logger::DEBUG
61
+ end
62
+
63
+ # def test_subscribe
64
+ # u = UserMock.new
65
+ # t = 'foo'
66
+ # @t.subscribe(t, u)
67
+ #
68
+ # m1 = MessageMock.new('foo', 'foomsg')
69
+ # m2 = MessageMock.new('bar', 'barmsg')
70
+ # @t.sendmsg(m1)
71
+ # assert_equal(m1.data, u.data)
72
+ #
73
+ # u.data = ''
74
+ # @t.sendmsg(m2)
75
+ # assert_equal('', u.data)
76
+ # end
77
+
78
+ def test_subscribe2
79
+ @log.debug("test_subscribe2 starts")
80
+ t = 'sub2'
81
+ m1 = MessageMock.new(t, 'sub2msg')
82
+ @t.sendmsg(m1)
83
+
84
+ u = UserMock.new
85
+ @t.subscribe(t, u)
86
+
87
+ assert_equal(m1.data, u.data)
88
+ @log.debug("test_subscribe2 ends")
89
+ end
90
+
91
+ # def test_unsubscribe
92
+ # u = UserMock.new
93
+ # t = 'foo'
94
+ # @t.subscribe(t, u)
95
+ #
96
+ # m1 = MessageMock.new('foo', 'foomsg')
97
+ # @t.sendmsg(m1)
98
+ # assert_equal(m1.data, u.data)
99
+ #
100
+ # @t.unsubscribe(t,u)
101
+ # u.data = ''
102
+ # @t.sendmsg(m1)
103
+ # assert_equal('', u.data)
104
+ # end
105
+
106
+ # def test_sendmsg
107
+ # u = UserMock.new
108
+ # t = 'foo'
109
+ # @t.subscribe(t, u)
110
+ #
111
+ # m1 = MessageMock.new('foo', 'foomsg')
112
+ # @t.sendmsg(m1)
113
+ # assert_equal(m1.data, u.data)
114
+ # assert_equal('MESSAGE', m1.command)
115
+ # end
116
+
117
+ def test_queued_sendmsg
118
+ @log.debug("test_queued_sendmsg starts")
119
+ t = 'foo'
120
+ m1 = MessageMock.new('foo', 'foomsg')
121
+ @t.sendmsg(m1)
122
+
123
+ u = UserMock.new
124
+ @t.subscribe(t, u)
125
+
126
+ assert_equal(m1.data, u.data)
127
+ assert_equal('MESSAGE', m1.command)
128
+
129
+ u2 = UserMock.new
130
+ @t.subscribe(t, u2)
131
+ assert_equal('', u2.data)
132
+ @log.debug("test_queued_sendmsg ends")
133
+ end
134
+ end
@@ -0,0 +1,138 @@
1
+ require 'logger'
2
+ $:.unshift File.dirname(__FILE__)
3
+ require 'mocklogger'
4
+ require 'stomp_server/stomp_frame'
5
+ require 'test/unit' unless defined? $ZENTEST and $ZENTEST
6
+
7
+ class TestStompFrame < Test::Unit::TestCase
8
+ def setup
9
+ @sfr = StompServer::StompFrameRecognizer.new
10
+ @log = Logger.new(STDOUT)
11
+ @log.level = Logger::DEBUG
12
+ end
13
+
14
+ def test_simpleframe
15
+ @log.debug("test_simpleframe starts")
16
+ @sfr << <<FRAME
17
+ COMMAND
18
+ name:value
19
+ foo:bar
20
+
21
+ message body
22
+ \000
23
+ FRAME
24
+ assert_equal(1, @sfr.frames.size)
25
+ f = @sfr.frames.shift
26
+ assert_equal(0, @sfr.frames.size)
27
+ assert_equal("COMMAND", f.command)
28
+ assert_equal("value", f.headers["name"])
29
+ assert_equal("bar", f.headers["foo"])
30
+ assert_equal("message body\n", f.body)
31
+ @log.debug("test_simpleframe ends")
32
+ end
33
+
34
+ def test_doubleframe
35
+ @log.debug("test_doubleframe starts")
36
+ @sfr << <<FRAME
37
+ COMMAND
38
+ name:value
39
+ foo:bar
40
+
41
+ message body
42
+ \000
43
+
44
+ COMMAND2
45
+ name2:value2
46
+ foo2:bar2
47
+
48
+ message body 2
49
+ \000
50
+ FRAME
51
+ assert_equal(2, @sfr.frames.size)
52
+ f = @sfr.frames.shift
53
+ assert_equal(1, @sfr.frames.size)
54
+ assert_equal("COMMAND", f.command)
55
+ assert_equal("value", f.headers["name"])
56
+ assert_equal("bar", f.headers["foo"])
57
+ assert_equal("message body\n", f.body)
58
+
59
+ # check second frame
60
+ f = @sfr.frames.shift
61
+ assert_equal(0, @sfr.frames.size)
62
+ assert_equal("COMMAND2", f.command)
63
+ assert_equal("value2", f.headers["name2"])
64
+ assert_equal("bar2", f.headers["foo2"])
65
+ assert_equal("message body 2\n", f.body)
66
+ @log.debug("test_doubleframe ends")
67
+ end
68
+
69
+ def test_partialframe
70
+ @log.debug("test_partialframe starts")
71
+ @sfr << <<FRAME
72
+ COMMAND
73
+ name:value
74
+ foo:bar
75
+
76
+ message body
77
+ \000
78
+
79
+ COMMAND2
80
+ name2:value2
81
+ foo2:bar2
82
+
83
+ message body 2
84
+ FRAME
85
+ assert_equal(1, @sfr.frames.size)
86
+ f = @sfr.frames.shift
87
+ assert_equal(0, @sfr.frames.size)
88
+ assert_equal("COMMAND", f.command)
89
+ assert_equal("value", f.headers["name"])
90
+ assert_equal("bar", f.headers["foo"])
91
+ assert_equal("message body\n", f.body)
92
+ @log.debug("test_partialframe ends")
93
+ end
94
+
95
+ def test_partialframe2
96
+ @log.debug("test_partialframe2 starts")
97
+ @sfr << <<FRAME
98
+ COMMAND
99
+ name:value
100
+ foo:bar
101
+ FRAME
102
+ assert_equal(0, @sfr.frames.size)
103
+ @log.debug("test_partialframe2 ends")
104
+ end
105
+
106
+ def test_headless_frame
107
+ @log.debug("test_headless_frame starts")
108
+ @sfr << <<FRAME
109
+ COMMAND
110
+
111
+ message body\000
112
+ FRAME
113
+ assert_equal(1, @sfr.frames.size)
114
+ f = @sfr.frames.shift
115
+ assert_equal(0, @sfr.frames.size)
116
+ assert_equal("COMMAND", f.command)
117
+ assert_equal("message body", f.body)
118
+ @log.debug("test_headless_frame ends")
119
+ end
120
+
121
+ def test_destination_cache
122
+ @log.debug("test_destination_cache starts")
123
+ @sfr << <<FRAME
124
+ MESSAGE
125
+ destination: /queue/foo
126
+
127
+ message body\000
128
+ FRAME
129
+ assert_equal(1, @sfr.frames.size)
130
+ f = @sfr.frames.shift
131
+ assert_equal(0, @sfr.frames.size)
132
+ assert_equal("MESSAGE", f.command)
133
+ assert_equal("message body", f.body)
134
+ assert_equal('/queue/foo', f.dest)
135
+ @log.debug("test_destination_cache ends")
136
+ end
137
+ end
138
+