Skip to content
Snippets Groups Projects
Select Git revision
  • 3bc8ba9ee2d5a320ea5005a72a9653a82514b2bf
  • master default protected
  • arm-aarch-platform
  • arm-platform
  • vjpai-patch-3
  • vjpai-patch-1
  • v1.27.x
  • jtattermusch-patch-2
  • jtattermusch-patch-1
  • update-java-worker-example-in-performance-docs
  • revert-21805-revert-21797-reintroduce_21527
  • revert-21804-tls-credentials-1
  • zhen_cleanup_namecheck
  • revert-21806-revert-21767-revert-21725-revert-21680-cq_ordering
  • vjpai-patch-2
  • revert-21766-tls-credentials-1
  • revert-21640-change_local_tcp_security_level
  • revert-21680-cq_ordering
  • revert-21527-unify_boringssl_deps2
  • revert-20803-grpclb_stabilization
  • fix-kokoro-rvm-key
  • v1.27.0
  • v1.27.0-pre2
  • v1.27.0-pre1
  • v1.26.0
  • v1.26.0-pre1
  • v1.25.0
  • v1.25.0-pre1
  • v1.24.3
  • v1.24.2
  • v1.24.1
  • v1.23.1
  • v1.24.0
  • v1.24.0-pre2
  • v1.24.0-pre1
  • v1.22.1
  • v1.23.0
  • v1.23.0-pre1
  • v1.22.0
  • v1.22.0-pre1
  • v1.21.4
41 results

grpc.native.csharp_ext.props

Blame
  • rpc_server_pool_spec.rb 3.98 KiB
    # Copyright 2014, Google Inc.
    # All rights reserved.
    #
    # Redistribution and use in source and binary forms, with or without
    # modification, are permitted provided that the following conditions are
    # met:
    #
    #     * Redistributions of source code must retain the above copyright
    # notice, this list of conditions and the following disclaimer.
    #     * Redistributions in binary form must reproduce the above
    # copyright notice, this list of conditions and the following disclaimer
    # in the documentation and/or other materials provided with the
    # distribution.
    #     * Neither the name of Google Inc. nor the names of its
    # contributors may be used to endorse or promote products derived from
    # this software without specific prior written permission.
    #
    # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    
    require 'grpc'
    require 'xray/thread_dump_signal_handler'
    
    Pool = GRPC::RpcServer::Pool
    
    describe Pool do
      describe '#new' do
        it 'raises if a non-positive size is used' do
          expect { Pool.new(0) }.to raise_error
          expect { Pool.new(-1) }.to raise_error
          expect { Pool.new(Object.new) }.to raise_error
        end
    
        it 'is constructed OK with a positive size' do
          expect { Pool.new(1) }.not_to raise_error
        end
      end
    
      describe '#jobs_waiting' do
        it 'at start, it is zero' do
          p = Pool.new(1)
          expect(p.jobs_waiting).to be(0)
        end
    
        it 'it increases, with each scheduled job if the pool is not running' do
          p = Pool.new(1)
          job = proc {}
          expect(p.jobs_waiting).to be(0)
          5.times do |i|
            p.schedule(&job)
            expect(p.jobs_waiting).to be(i + 1)
          end
        end
    
        it 'it decreases as jobs are run' do
          p = Pool.new(1)
          job = proc {}
          expect(p.jobs_waiting).to be(0)
          3.times do
            p.schedule(&job)
          end
          p.start
          sleep 2
          expect(p.jobs_waiting).to be(0)
        end
      end
    
      describe '#schedule' do
        it 'throws if the pool is already stopped' do
          p = Pool.new(1)
          p.stop
          job = proc {}
          expect { p.schedule(&job) }.to raise_error
        end
    
        it 'adds jobs that get run by the pool' do
          p = Pool.new(1)
          p.start
          o, q = Object.new, Queue.new
          job = proc { q.push(o) }
          p.schedule(&job)
          expect(q.pop).to be(o)
          p.stop
        end
      end
    
      describe '#stop' do
        it 'works when there are no scheduled tasks' do
          p = Pool.new(1)
          expect { p.stop }.not_to raise_error
        end
    
        it 'stops jobs when there are long running jobs' do
          p = Pool.new(1)
          p.start
          o, q = Object.new, Queue.new
          job = proc do
            sleep(5)  # long running
            q.push(o)
          end
          p.schedule(&job)
          sleep(1)  # should ensure the long job gets scheduled
          expect { p.stop }.not_to raise_error
        end
      end
    
      describe '#start' do
        it 'runs pre-scheduled jobs' do
          p = Pool.new(2)
          o, q = Object.new, Queue.new
          n = 5  # arbitrary
          n.times { p.schedule(o, &q.method(:push)) }
          p.start
          n.times { expect(q.pop).to be(o) }
          p.stop
        end
    
        it 'runs jobs as they are scheduled ' do
          p = Pool.new(2)
          o, q = Object.new, Queue.new
          p.start
          n = 5  # arbitrary
          n.times do
            p.schedule(o, &q.method(:push))
            expect(q.pop).to be(o)
          end
          p.stop
        end
      end
    end