sippy_cup 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
 - data/CHANGELOG.md +3 -0
 - data/README.markdown +2 -2
 - data/lib/sippy_cup/runner.rb +1 -1
 - data/lib/sippy_cup/scenario.rb +16 -8
 - data/lib/sippy_cup/version.rb +1 -1
 - data/sippy_cup.gemspec +1 -1
 - data/spec/sippy_cup/runner_spec.rb +21 -45
 - data/spec/sippy_cup/scenario_spec.rb +28 -0
 - data/spec/spec_helper.rb +38 -1
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: cec1cec887891ded08da44c8bf7e35d533923924
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 3f79938ed6a455dd62b883f4db39ddd6273876a2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 63276337ff8887505d17e00dc3e26ff1ae4670b6f905d432bc911c082f7dc740c23acdcd8e7f17466fdf0746d2756e67fad1f4ebeae3cd37acf43e9884c92852
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3bce73eada59e55f0610a8667441712c3b3b3f93d36ec7311f38b4f63569440998972c94a21eafd5064c703a7dbf0b60413aef2a132dbdfde77d72d8c57b252b
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # develop
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            # [0.7.0](https://github.com/mojolingo/sippy_cup/compare/v0.6.0...v0.7.0)
         
     | 
| 
      
 4 
     | 
    
         
            +
              * Feature: Permit `To` domain to be different from the destination. This permits testing multi-tenant systems more easily.
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       3 
6 
     | 
    
         
             
            # [0.6.0](https://github.com/mojolingo/sippy_cup/compare/v0.5.0...v0.6.0)
         
     | 
| 
       4 
7 
     | 
    
         
             
              * Change: Call limits (`number_of_calls`, `concurrent_max` and `calls_per_second`) no longer have default values for simplicity of UAS scenarios. The value of `to_user` now defaults to the SIPp default of `s`.
         
     | 
| 
       5 
8 
     | 
    
         
             
              * Feature: Support for setting rate scaling independently of reporting frequency via the new `calls_per_second_interval` option. See also https://github.com/SIPp/sipp/pull/107 and https://github.com/SIPp/sipp/pull/126.
         
     | 
    
        data/README.markdown
    CHANGED
    
    | 
         @@ -201,8 +201,8 @@ Each parameter has an impact on the test, and may either be changed once the XML 
     | 
|
| 
       201 
201 
     | 
    
         
             
              <dt>from_user</dt>
         
     | 
| 
       202 
202 
     | 
    
         
             
              <dd>SIP user from which traffic should appear. Default: sipp</dd>
         
     | 
| 
       203 
203 
     | 
    
         | 
| 
       204 
     | 
    
         
            -
              <dt> 
     | 
| 
       205 
     | 
    
         
            -
              <dd>SIP user to send requests to. Defaults to SIPp's default: `s` (as in `s@127.0.0.1`) 
     | 
| 
      
 204 
     | 
    
         
            +
              <dt>to</dt>
         
     | 
| 
      
 205 
     | 
    
         
            +
              <dd>SIP user / address to send requests to. Defaults to SIPp's default: `s@[destination]` (as in `s@127.0.0.1`). Can specify either a user (`foouser`) or a full address (`foouser@there.com`), the latter being useful for testing multi-tenant systems where the `To` domain is not the same as the hostname of the system.</dd>
         
     | 
| 
       206 
206 
     | 
    
         | 
| 
       207 
207 
     | 
    
         
             
              <dt>transport</dt>
         
     | 
| 
       208 
208 
     | 
    
         
             
              <dd>Specify the SIP transport. Valid options are `udp` (default) or `tcp`. Default: `udp`</dd>
         
     | 
    
        data/lib/sippy_cup/runner.rb
    CHANGED
    
    | 
         @@ -105,7 +105,7 @@ module SippyCup 
     | 
|
| 
       105 
105 
     | 
    
         
             
                  options[:l] = max_concurrent if max_concurrent
         
     | 
| 
       106 
106 
     | 
    
         
             
                  options[:m] = @scenario_options[:number_of_calls] if @scenario_options[:number_of_calls]
         
     | 
| 
       107 
107 
     | 
    
         
             
                  options[:r] = @scenario_options[:calls_per_second] if @scenario_options[:calls_per_second]
         
     | 
| 
       108 
     | 
    
         
            -
                  options[:s] = @scenario_options[: 
     | 
| 
      
 108 
     | 
    
         
            +
                  options[:s] = @scenario_options[:to] if @scenario_options[:to]
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
110 
     | 
    
         
             
                  options[:i] = @scenario_options[:source] if @scenario_options[:source]
         
     | 
| 
       111 
111 
     | 
    
         
             
                  options[:mp] = @scenario_options[:media_port] if @scenario_options[:media_port]
         
     | 
    
        data/lib/sippy_cup/scenario.rb
    CHANGED
    
    | 
         @@ -83,7 +83,8 @@ module SippyCup 
     | 
|
| 
       83 
83 
     | 
    
         
             
                # @option options [String] :destination The target system at which to direct traffic.
         
     | 
| 
       84 
84 
     | 
    
         
             
                # @option options [String] :advertise_address The IP address to advertise in SIP and SDP if different from the bind IP (defaults to the bind IP).
         
     | 
| 
       85 
85 
     | 
    
         
             
                # @option options [String] :from_user The SIP user from which traffic should appear.
         
     | 
| 
       86 
     | 
    
         
            -
                # @option options [String] :to_user The SIP user to send requests to.
         
     | 
| 
      
 86 
     | 
    
         
            +
                # @option options [String] :to_user The SIP user to send requests to. Alias for `:to` and deprecated in favour of the same.
         
     | 
| 
      
 87 
     | 
    
         
            +
                # @option options [String] :to The SIP user / address to send requests to.
         
     | 
| 
       87 
88 
     | 
    
         
             
                # @option options [Integer] :media_port The RTCP (media) port to bind to locally.
         
     | 
| 
       88 
89 
     | 
    
         
             
                # @option options [String, Numeric] :max_concurrent The maximum number of concurrent calls to execute.
         
     | 
| 
       89 
90 
     | 
    
         
             
                # @option options [String, Numeric] :number_of_calls The maximum number of calls to execute in the test run.
         
     | 
| 
         @@ -155,10 +156,9 @@ module SippyCup 
     | 
|
| 
       155 
156 
     | 
    
         
             
                  # FIXME: The DTMF mapping (101) is hard-coded. It would be better if we could
         
     | 
| 
       156 
157 
     | 
    
         
             
                  # get this from the DTMF payload generator
         
     | 
| 
       157 
158 
     | 
    
         
             
                  from_addr = "#{@from_user}@#{@adv_ip}:[local_port]"
         
     | 
| 
       158 
     | 
    
         
            -
                  to_addr   = "[service]@[remote_ip]:[remote_port]"
         
     | 
| 
       159 
159 
     | 
    
         
             
                  msg = <<-MSG
         
     | 
| 
       160 
160 
     | 
    
         | 
| 
       161 
     | 
    
         
            -
            INVITE sip 
     | 
| 
      
 161 
     | 
    
         
            +
            INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
         
     | 
| 
       162 
162 
     | 
    
         
             
            Via: SIP/2.0/[transport] #{@adv_ip}:[local_port];branch=[branch]
         
     | 
| 
       163 
163 
     | 
    
         
             
            From: "#{@from_user}" <sip:#{from_addr}>;tag=[call_number]
         
     | 
| 
       164 
164 
     | 
    
         
             
            To: <sip:#{to_addr}>
         
     | 
| 
         @@ -325,7 +325,7 @@ Content-Type: application/sdp 
     | 
|
| 
       325 
325 
     | 
    
         
             
            Content-Length: [len]
         
     | 
| 
       326 
326 
     | 
    
         | 
| 
       327 
327 
     | 
    
         
             
            v=0
         
     | 
| 
       328 
     | 
    
         
            -
            o=user1 53655765 2353687637 IN IP[local_ip_type] #{@adv_ip} 
     | 
| 
      
 328 
     | 
    
         
            +
            o=user1 53655765 2353687637 IN IP[local_ip_type] #{@adv_ip}
         
     | 
| 
       329 
329 
     | 
    
         
             
            s=-
         
     | 
| 
       330 
330 
     | 
    
         
             
            c=IN IP[media_ip_type] [media_ip]
         
     | 
| 
       331 
331 
     | 
    
         
             
            t=0 0
         
     | 
| 
         @@ -448,7 +448,7 @@ a=rtpmap:0 PCMU/8000 
     | 
|
| 
       448 
448 
     | 
    
         
             
            ACK [next_url] SIP/2.0
         
     | 
| 
       449 
449 
     | 
    
         
             
            Via: SIP/2.0/[transport] #{@adv_ip}:[local_port];branch=[branch]
         
     | 
| 
       450 
450 
     | 
    
         
             
            From: "#{@from_user}" <sip:#{@from_user}@#{@adv_ip}:[local_port]>;tag=[call_number]
         
     | 
| 
       451 
     | 
    
         
            -
            To: <sip 
     | 
| 
      
 451 
     | 
    
         
            +
            To: <sip:#{to_addr}>[peer_tag_param]
         
     | 
| 
       452 
452 
     | 
    
         
             
            Call-ID: [call_id]
         
     | 
| 
       453 
453 
     | 
    
         
             
            CSeq: [cseq] ACK
         
     | 
| 
       454 
454 
     | 
    
         
             
            Contact: <sip:[$local_addr];transport=[transport]>
         
     | 
| 
         @@ -499,7 +499,7 @@ Content-Length: 0 
     | 
|
| 
       499 
499 
     | 
    
         
             
            INFO [next_url] SIP/2.0
         
     | 
| 
       500 
500 
     | 
    
         
             
            Via: SIP/2.0/[transport] #{@adv_ip}:[local_port];branch=[branch]
         
     | 
| 
       501 
501 
     | 
    
         
             
            From: "#{@from_user}" <sip:#{@from_user}@#{@adv_ip}:[local_port]>;tag=[call_number]
         
     | 
| 
       502 
     | 
    
         
            -
            To: <sip 
     | 
| 
      
 502 
     | 
    
         
            +
            To: <sip:#{to_addr}>[peer_tag_param]
         
     | 
| 
       503 
503 
     | 
    
         
             
            Call-ID: [call_id]
         
     | 
| 
       504 
504 
     | 
    
         
             
            CSeq: [cseq] INFO
         
     | 
| 
       505 
505 
     | 
    
         
             
            Contact: <sip:[$local_addr];transport=[transport]>
         
     | 
| 
         @@ -736,6 +736,10 @@ Content-Length: 0 
     | 
|
| 
       736 
736 
     | 
    
         | 
| 
       737 
737 
     | 
    
         
             
              private
         
     | 
| 
       738 
738 
     | 
    
         | 
| 
      
 739 
     | 
    
         
            +
                def to_addr
         
     | 
| 
      
 740 
     | 
    
         
            +
                  @to_addr ||= "[service]@#{@to_domain}:[remote_port]"
         
     | 
| 
      
 741 
     | 
    
         
            +
                end
         
     | 
| 
      
 742 
     | 
    
         
            +
             
     | 
| 
       739 
743 
     | 
    
         
             
                #TODO: SIPS support?
         
     | 
| 
       740 
744 
     | 
    
         
             
                def parse_user(user)
         
     | 
| 
       741 
745 
     | 
    
         
             
                  user.slice! 0, 4 if user =~ /sip:/
         
     | 
| 
         @@ -774,9 +778,13 @@ Content-Length: 0 
     | 
|
| 
       774 
778 
     | 
    
         
             
                    @dtmf_mode = :rfc2833
         
     | 
| 
       775 
779 
     | 
    
         
             
                  end
         
     | 
| 
       776 
780 
     | 
    
         | 
| 
       777 
     | 
    
         
            -
                  @from_addr, @from_port = args[:source].split ':' if args[:source]
         
     | 
| 
       778 
     | 
    
         
            -
                  @to_addr, @to_port = args[:destination].split ':' if args[:destination]
         
     | 
| 
       779 
781 
     | 
    
         
             
                  @from_user = args[:from_user] || "sipp"
         
     | 
| 
      
 782 
     | 
    
         
            +
             
     | 
| 
      
 783 
     | 
    
         
            +
                  args[:to] ||= args[:to_user] if args.has_key?(:to_user)
         
     | 
| 
      
 784 
     | 
    
         
            +
                  if args[:to]
         
     | 
| 
      
 785 
     | 
    
         
            +
                    @to_user, @to_domain = args[:to].to_s.split('@')
         
     | 
| 
      
 786 
     | 
    
         
            +
                  end
         
     | 
| 
      
 787 
     | 
    
         
            +
                  @to_domain ||= "[remote_ip]"
         
     | 
| 
       780 
788 
     | 
    
         
             
                end
         
     | 
| 
       781 
789 
     | 
    
         | 
| 
       782 
790 
     | 
    
         
             
                def compile_media
         
     | 
    
        data/lib/sippy_cup/version.rb
    CHANGED
    
    
    
        data/sippy_cup.gemspec
    CHANGED
    
    | 
         @@ -20,7 +20,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
              s.add_runtime_dependency 'packetfu'
         
     | 
| 
       22 
22 
     | 
    
         
             
              s.add_runtime_dependency 'nokogiri', ["~> 1.6.0"]
         
     | 
| 
       23 
     | 
    
         
            -
              s.add_runtime_dependency 'activesupport', [" 
     | 
| 
      
 23 
     | 
    
         
            +
              s.add_runtime_dependency 'activesupport', [">= 3.0"]
         
     | 
| 
       24 
24 
     | 
    
         
             
              s.add_runtime_dependency 'psych', ["~> 2.0.1"] unless RUBY_PLATFORM == 'java'
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
              s.add_development_dependency 'guard-rspec'
         
     | 
| 
         @@ -86,7 +86,7 @@ steps: 
     | 
|
| 
       86 
86 
     | 
    
         
             
            name: foobar
         
     | 
| 
       87 
87 
     | 
    
         
             
            source: 'dah.com'
         
     | 
| 
       88 
88 
     | 
    
         
             
            destination: 'bar.com'
         
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
            to: 1
         
     | 
| 
       90 
90 
     | 
    
         
             
            concurrent_max: 5
         
     | 
| 
       91 
91 
     | 
    
         
             
            calls_per_second: 2
         
     | 
| 
       92 
92 
     | 
    
         
             
            number_of_calls: 10
         
     | 
| 
         @@ -166,7 +166,7 @@ steps: 
     | 
|
| 
       166 
166 
     | 
    
         
             
                  end
         
     | 
| 
       167 
167 
     | 
    
         
             
                end
         
     | 
| 
       168 
168 
     | 
    
         | 
| 
       169 
     | 
    
         
            -
                context "specifying a  
     | 
| 
      
 169 
     | 
    
         
            +
                context "specifying a to in the Scenario" do
         
     | 
| 
       170 
170 
     | 
    
         
             
                  let(:manifest) do
         
     | 
| 
       171 
171 
     | 
    
         
             
                    <<-MANIFEST
         
     | 
| 
       172 
172 
     | 
    
         
             
            name: foobar
         
     | 
| 
         @@ -176,7 +176,7 @@ concurrent_max: 5 
     | 
|
| 
       176 
176 
     | 
    
         
             
            calls_per_second: 2
         
     | 
| 
       177 
177 
     | 
    
         
             
            number_of_calls: 10
         
     | 
| 
       178 
178 
     | 
    
         
             
            from_user: pat
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
      
 179 
     | 
    
         
            +
            to: frank@there.com
         
     | 
| 
       180 
180 
     | 
    
         
             
            steps:
         
     | 
| 
       181 
181 
     | 
    
         
             
              - invite
         
     | 
| 
       182 
182 
     | 
    
         
             
              - wait_for_answer
         
     | 
| 
         @@ -450,9 +450,7 @@ steps: 
     | 
|
| 
       450 
450 
     | 
    
         
             
                    let(:exit_code) { 0 }
         
     | 
| 
       451 
451 
     | 
    
         | 
| 
       452 
452 
     | 
    
         
             
                    it "doesn't raise anything if SIPp returns 0" do
         
     | 
| 
       453 
     | 
    
         
            -
                       
     | 
| 
       454 
     | 
    
         
            -
                        subject.run.should be true
         
     | 
| 
       455 
     | 
    
         
            -
                      end
         
     | 
| 
      
 453 
     | 
    
         
            +
                      subject.run.should be true
         
     | 
| 
       456 
454 
     | 
    
         
             
                    end
         
     | 
| 
       457 
455 
     | 
    
         
             
                  end
         
     | 
| 
       458 
456 
     | 
    
         | 
| 
         @@ -460,10 +458,8 @@ steps: 
     | 
|
| 
       460 
458 
     | 
    
         
             
                    let(:exit_code) { 1 }
         
     | 
| 
       461 
459 
     | 
    
         | 
| 
       462 
460 
     | 
    
         
             
                    it "returns false if SIPp returns 1" do
         
     | 
| 
       463 
     | 
    
         
            -
                       
     | 
| 
       464 
     | 
    
         
            -
             
     | 
| 
       465 
     | 
    
         
            -
                        subject.run.should be false
         
     | 
| 
       466 
     | 
    
         
            -
                      end
         
     | 
| 
      
 461 
     | 
    
         
            +
                      logger.should_receive(:info).ordered.with(/Test completed successfully but some calls failed./)
         
     | 
| 
      
 462 
     | 
    
         
            +
                      subject.run.should be false
         
     | 
| 
       467 
463 
     | 
    
         
             
                    end
         
     | 
| 
       468 
464 
     | 
    
         
             
                  end
         
     | 
| 
       469 
465 
     | 
    
         | 
| 
         @@ -471,9 +467,7 @@ steps: 
     | 
|
| 
       471 
467 
     | 
    
         
             
                    let(:exit_code) { 97 }
         
     | 
| 
       472 
468 
     | 
    
         | 
| 
       473 
469 
     | 
    
         
             
                    it "raises a ExitOnInternalCommand error if SIPp returns 97" do
         
     | 
| 
       474 
     | 
    
         
            -
                       
     | 
| 
       475 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::ExitOnInternalCommand, error_string
         
     | 
| 
       476 
     | 
    
         
            -
                      end
         
     | 
| 
      
 470 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::ExitOnInternalCommand, error_string
         
     | 
| 
       477 
471 
     | 
    
         
             
                    end
         
     | 
| 
       478 
472 
     | 
    
         
             
                  end
         
     | 
| 
       479 
473 
     | 
    
         | 
| 
         @@ -481,9 +475,7 @@ steps: 
     | 
|
| 
       481 
475 
     | 
    
         
             
                    let(:exit_code) { 99 }
         
     | 
| 
       482 
476 
     | 
    
         | 
| 
       483 
477 
     | 
    
         
             
                    it "raises a NoCallsProcessed error if SIPp returns 99" do
         
     | 
| 
       484 
     | 
    
         
            -
                       
     | 
| 
       485 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::NoCallsProcessed, error_string
         
     | 
| 
       486 
     | 
    
         
            -
                      end
         
     | 
| 
      
 478 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::NoCallsProcessed, error_string
         
     | 
| 
       487 
479 
     | 
    
         
             
                    end
         
     | 
| 
       488 
480 
     | 
    
         
             
                  end
         
     | 
| 
       489 
481 
     | 
    
         | 
| 
         @@ -491,9 +483,7 @@ steps: 
     | 
|
| 
       491 
483 
     | 
    
         
             
                    let(:exit_code) { 255 }
         
     | 
| 
       492 
484 
     | 
    
         | 
| 
       493 
485 
     | 
    
         
             
                    it "raises a FatalError error if SIPp returns 255" do
         
     | 
| 
       494 
     | 
    
         
            -
                       
     | 
| 
       495 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::FatalError, error_string
         
     | 
| 
       496 
     | 
    
         
            -
                      end
         
     | 
| 
      
 486 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::FatalError, error_string
         
     | 
| 
       497 
487 
     | 
    
         
             
                    end
         
     | 
| 
       498 
488 
     | 
    
         
             
                  end
         
     | 
| 
       499 
489 
     | 
    
         | 
| 
         @@ -501,9 +491,7 @@ steps: 
     | 
|
| 
       501 
491 
     | 
    
         
             
                    let(:exit_code) { 254 }
         
     | 
| 
       502 
492 
     | 
    
         | 
| 
       503 
493 
     | 
    
         
             
                    it "raises a FatalSocketBindingError error if SIPp returns 254" do
         
     | 
| 
       504 
     | 
    
         
            -
                       
     | 
| 
       505 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::FatalSocketBindingError, error_string
         
     | 
| 
       506 
     | 
    
         
            -
                      end
         
     | 
| 
      
 494 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::FatalSocketBindingError, error_string
         
     | 
| 
       507 
495 
     | 
    
         
             
                    end
         
     | 
| 
       508 
496 
     | 
    
         
             
                  end
         
     | 
| 
       509 
497 
     | 
    
         | 
| 
         @@ -511,15 +499,11 @@ steps: 
     | 
|
| 
       511 
499 
     | 
    
         
             
                    let(:exit_code) { 128 }
         
     | 
| 
       512 
500 
     | 
    
         | 
| 
       513 
501 
     | 
    
         
             
                    it "raises a SippGenericError error if SIPp returns 255" do
         
     | 
| 
       514 
     | 
    
         
            -
                       
     | 
| 
       515 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::SippGenericError, error_string
         
     | 
| 
       516 
     | 
    
         
            -
                      end
         
     | 
| 
      
 502 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::SippGenericError, error_string
         
     | 
| 
       517 
503 
     | 
    
         
             
                    end
         
     | 
| 
       518 
504 
     | 
    
         | 
| 
       519 
505 
     | 
    
         
             
                    it "raises a SippGenericError error with the appropriate message" do
         
     | 
| 
       520 
     | 
    
         
            -
                       
     | 
| 
       521 
     | 
    
         
            -
                        expect { subject.run }.to raise_error SippyCup::SippGenericError, error_string
         
     | 
| 
       522 
     | 
    
         
            -
                      end
         
     | 
| 
      
 506 
     | 
    
         
            +
                      expect { subject.run }.to raise_error SippyCup::SippGenericError, error_string
         
     | 
| 
       523 
507 
     | 
    
         
             
                    end
         
     | 
| 
       524 
508 
     | 
    
         
             
                  end
         
     | 
| 
       525 
509 
     | 
    
         
             
                end
         
     | 
| 
         @@ -537,24 +521,18 @@ steps: 
     | 
|
| 
       537 
521 
     | 
    
         | 
| 
       538 
522 
     | 
    
         
             
                  context "by default" do
         
     | 
| 
       539 
523 
     | 
    
         
             
                    it "proxies stdout to the terminal" do
         
     | 
| 
       540 
     | 
    
         
            -
                       
     | 
| 
       541 
     | 
    
         
            -
                        capture(:stdout) { subject.run }.strip.should == output_string
         
     | 
| 
       542 
     | 
    
         
            -
                      end
         
     | 
| 
      
 524 
     | 
    
         
            +
                      capture(:stdout) { subject.run }.strip.should == output_string
         
     | 
| 
       543 
525 
     | 
    
         
             
                    end
         
     | 
| 
       544 
526 
     | 
    
         | 
| 
       545 
527 
     | 
    
         
             
                    it "proxies stderr to the terminal" do
         
     | 
| 
       546 
     | 
    
         
            -
                       
     | 
| 
       547 
     | 
    
         
            -
                        capture(:stderr) { subject.run }.strip.should == error_string
         
     | 
| 
       548 
     | 
    
         
            -
                      end
         
     | 
| 
      
 528 
     | 
    
         
            +
                      capture(:stderr) { subject.run }.strip.should == error_string
         
     | 
| 
       549 
529 
     | 
    
         
             
                    end
         
     | 
| 
       550 
530 
     | 
    
         | 
| 
       551 
531 
     | 
    
         
             
                    it "does not leak threads" do
         
     | 
| 
       552 
532 
     | 
    
         
             
                      Thread.list.each { |t| t.kill unless t = Thread.main }
         
     | 
| 
       553 
533 
     | 
    
         
             
                      sleep 0.1
         
     | 
| 
       554 
534 
     | 
    
         
             
                      original_thread_count = active_thread_count
         
     | 
| 
       555 
     | 
    
         
            -
                       
     | 
| 
       556 
     | 
    
         
            -
                        subject.run
         
     | 
| 
       557 
     | 
    
         
            -
                      end
         
     | 
| 
      
 535 
     | 
    
         
            +
                      subject.run
         
     | 
| 
       558 
536 
     | 
    
         
             
                      sleep 0.1
         
     | 
| 
       559 
537 
     | 
    
         
             
                      active_thread_count.should == original_thread_count
         
     | 
| 
       560 
538 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -572,14 +550,12 @@ steps: 
     | 
|
| 
       572 
550 
     | 
    
         
             
                    end
         
     | 
| 
       573 
551 
     | 
    
         | 
| 
       574 
552 
     | 
    
         
             
                    it "does not leak threads" do
         
     | 
| 
       575 
     | 
    
         
            -
                       
     | 
| 
       576 
     | 
    
         
            -
             
     | 
| 
       577 
     | 
    
         
            -
             
     | 
| 
       578 
     | 
    
         
            -
             
     | 
| 
       579 
     | 
    
         
            -
             
     | 
| 
       580 
     | 
    
         
            -
             
     | 
| 
       581 
     | 
    
         
            -
                        active_thread_count.should == original_thread_count
         
     | 
| 
       582 
     | 
    
         
            -
                      end
         
     | 
| 
      
 553 
     | 
    
         
            +
                      Thread.list.each { |t| t.kill unless t = Thread.main }
         
     | 
| 
      
 554 
     | 
    
         
            +
                      sleep 0.1
         
     | 
| 
      
 555 
     | 
    
         
            +
                      original_thread_count = active_thread_count
         
     | 
| 
      
 556 
     | 
    
         
            +
                      subject.run
         
     | 
| 
      
 557 
     | 
    
         
            +
                      sleep 0.1
         
     | 
| 
      
 558 
     | 
    
         
            +
                      active_thread_count.should == original_thread_count
         
     | 
| 
       583 
559 
     | 
    
         
             
                    end
         
     | 
| 
       584 
560 
     | 
    
         
             
                  end
         
     | 
| 
       585 
561 
     | 
    
         
             
                end
         
     | 
| 
         @@ -91,6 +91,34 @@ describe SippyCup::Scenario do 
     | 
|
| 
       91 
91 
     | 
    
         
             
                    subject.to_xml.should match(%r{Contact: <sip:sipp@})
         
     | 
| 
       92 
92 
     | 
    
         
             
                  end
         
     | 
| 
       93 
93 
     | 
    
         
             
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                context "when a to user is specified" do
         
     | 
| 
      
 96 
     | 
    
         
            +
                  let(:args) { {to: 'usera'} }
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                  it "includes the specified user in the To header and URI line" do
         
     | 
| 
      
 99 
     | 
    
         
            +
                    subject.invite
         
     | 
| 
      
 100 
     | 
    
         
            +
                    subject.to_xml.should match(%r{To: <sip:\[service\]@\[remote_ip\]})
         
     | 
| 
      
 101 
     | 
    
         
            +
                    subject.to_xml.should match(%r{INVITE sip:\[service\]@\[remote_ip\]})
         
     | 
| 
      
 102 
     | 
    
         
            +
                  end
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                context "when a to address is specified" do
         
     | 
| 
      
 106 
     | 
    
         
            +
                  let(:args) { {to: 'usera@foo.bar'} }
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  it "includes the specified address in the To header, but not the URI line" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                    subject.invite
         
     | 
| 
      
 110 
     | 
    
         
            +
                    subject.to_xml.should match(%r{To: <sip:\[service\]@foo.bar})
         
     | 
| 
      
 111 
     | 
    
         
            +
                    subject.to_xml.should match(%r{INVITE sip:\[service\]@\[remote_ip\]})
         
     | 
| 
      
 112 
     | 
    
         
            +
                  end
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                context "when no to is specified" do
         
     | 
| 
      
 116 
     | 
    
         
            +
                  it "uses a default of '[remote_ip]' in the To header and URI line" do
         
     | 
| 
      
 117 
     | 
    
         
            +
                    subject.invite
         
     | 
| 
      
 118 
     | 
    
         
            +
                    subject.to_xml.should match(%r{To: <sip:\[service\]@\[remote_ip\]})
         
     | 
| 
      
 119 
     | 
    
         
            +
                    subject.to_xml.should match(%r{INVITE sip:\[service\]@\[remote_ip\]})
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
       94 
122 
     | 
    
         
             
              end
         
     | 
| 
       95 
123 
     | 
    
         | 
| 
       96 
124 
     | 
    
         
             
              describe "#register" do
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -3,15 +3,52 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            %w{
         
     | 
| 
       4 
4 
     | 
    
         
             
              sippy_cup
         
     | 
| 
       5 
5 
     | 
    
         
             
              fakefs/spec_helpers
         
     | 
| 
      
 6 
     | 
    
         
            +
              tempfile
         
     | 
| 
       6 
7 
     | 
    
         
             
            }.each { |f| require f }
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            module SippyCup
         
     | 
| 
      
 10 
     | 
    
         
            +
              module SpecHelpers
         
     | 
| 
      
 11 
     | 
    
         
            +
                def capture(stream)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  stream = stream.to_s
         
     | 
| 
      
 13 
     | 
    
         
            +
                  captured_stream = Tempfile.new(stream)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  stream_io = eval("$#{stream}")
         
     | 
| 
      
 15 
     | 
    
         
            +
                  origin_stream = stream_io.dup
         
     | 
| 
      
 16 
     | 
    
         
            +
                  stream_io.reopen(captured_stream)
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  stream_io.rewind
         
     | 
| 
      
 21 
     | 
    
         
            +
                  return captured_stream.read
         
     | 
| 
      
 22 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 23 
     | 
    
         
            +
                  captured_stream.close
         
     | 
| 
      
 24 
     | 
    
         
            +
                  captured_stream.unlink
         
     | 
| 
      
 25 
     | 
    
         
            +
                  stream_io.reopen(origin_stream)
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def silence_stream(stream)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  old_stream = stream.dup
         
     | 
| 
      
 30 
     | 
    
         
            +
                  stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
         
     | 
| 
      
 31 
     | 
    
         
            +
                  stream.sync = true
         
     | 
| 
      
 32 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 33 
     | 
    
         
            +
                ensure
         
     | 
| 
      
 34 
     | 
    
         
            +
                  stream.reopen(old_stream)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  old_stream.close
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
       8 
40 
     | 
    
         
             
            RSpec.configure do |config|
         
     | 
| 
      
 41 
     | 
    
         
            +
              config.include SippyCup::SpecHelpers
         
     | 
| 
       9 
42 
     | 
    
         
             
              config.mock_framework = :rspec
         
     | 
| 
       10 
43 
     | 
    
         
             
              config.filter_run :focus => true
         
     | 
| 
       11 
44 
     | 
    
         
             
              config.run_all_when_everything_filtered = true
         
     | 
| 
       12 
45 
     | 
    
         
             
              config.color = true
         
     | 
| 
       13 
46 
     | 
    
         | 
| 
       14 
47 
     | 
    
         
             
              config.around(:each) do |example|
         
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
      
 48 
     | 
    
         
            +
                silence_stream(STDOUT) do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  silence_stream(STDERR) do
         
     | 
| 
      
 50 
     | 
    
         
            +
                    example.run
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
       16 
53 
     | 
    
         
             
              end
         
     | 
| 
       17 
54 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: sippy_cup
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Ben Klang
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2015-07-13 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: packetfu
         
     | 
| 
         @@ -43,14 +43,14 @@ dependencies: 
     | 
|
| 
       43 
43 
     | 
    
         
             
              name: activesupport
         
     | 
| 
       44 
44 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       45 
45 
     | 
    
         
             
                requirements:
         
     | 
| 
       46 
     | 
    
         
            -
                - - " 
     | 
| 
      
 46 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       47 
47 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       48 
48 
     | 
    
         
             
                    version: '3.0'
         
     | 
| 
       49 
49 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       50 
50 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       51 
51 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       52 
52 
     | 
    
         
             
                requirements:
         
     | 
| 
       53 
     | 
    
         
            -
                - - " 
     | 
| 
      
 53 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       54 
54 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       55 
55 
     | 
    
         
             
                    version: '3.0'
         
     | 
| 
       56 
56 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     |