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
         |