ngrok-wrapper 0.2.0 → 0.3.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/.github/workflows/ci.yml +2 -2
- data/.github/workflows/codeql-analysis.yml +1 -1
- data/.rubocop.yml +7 -1
- data/.ruby-version +1 -1
- data/.tool-versions +1 -1
- data/CHANGELOG.md +18 -1
- data/README.md +9 -5
- data/lib/ngrok/wrapper/version.rb +1 -1
- data/lib/ngrok/wrapper.rb +22 -10
- data/spec/ngrok/wrapper_spec.rb +286 -271
- metadata +3 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: af2e280f5efacf50a98453cbd8bbc26840b00fa74d31eff6346abc14fed1650f
         | 
| 4 | 
            +
              data.tar.gz: 383a1dd7792b1dbff611f6f826ba24e9b904e41005622c8a7b68edbe45a82646
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: dd6252001dbc722e9e087131e3eb8abc8561dce031d323a5a649b228233e6ebb7b39ceb04e9966c27701fd779aa6e3056c223331b1353175da1ac9715e0e28e5
         | 
| 7 | 
            +
              data.tar.gz: 79e8891907659df3e858cad810b30e209139c1e9c1de0dee5834598ab2f4fd2e89a90aad17600bad8f8f084fd9273b8e89f97879a2660ce9787783ee013203ac
         | 
    
        data/.github/workflows/ci.yml
    CHANGED
    
    | @@ -25,7 +25,7 @@ jobs: | |
| 25 25 |  | 
| 26 26 | 
             
                steps:
         | 
| 27 27 | 
             
                  - name: Checkout
         | 
| 28 | 
            -
                    uses: actions/checkout@ | 
| 28 | 
            +
                    uses: actions/checkout@v3
         | 
| 29 29 |  | 
| 30 30 | 
             
                  - name: Set up Ruby
         | 
| 31 31 | 
             
                    uses: ruby/setup-ruby@v1
         | 
| @@ -40,6 +40,6 @@ jobs: | |
| 40 40 | 
             
                    run: bundle exec rspec
         | 
| 41 41 |  | 
| 42 42 | 
             
                  - name: Code Climate
         | 
| 43 | 
            -
                    uses: paambaati/codeclimate-action@v3. | 
| 43 | 
            +
                    uses: paambaati/codeclimate-action@v3.2.0
         | 
| 44 44 | 
             
                    env:
         | 
| 45 45 | 
             
                      CC_TEST_REPORTER_ID: d1116c05a48e27785cb11369bde3a5e7f9d9e5a114d294bcbefa19cd193b029c
         | 
    
        data/.rubocop.yml
    CHANGED
    
    | @@ -65,8 +65,14 @@ Metrics/BlockLength: | |
| 65 65 | 
             
            RSpec/MultipleExpectations:
         | 
| 66 66 | 
             
              Max: 13
         | 
| 67 67 |  | 
| 68 | 
            -
            RSpec/ | 
| 68 | 
            +
            RSpec/MultipleMemoizedHelpers:
         | 
| 69 | 
            +
              Description: Checks if example groups contain too many `let` and `subject` calls.
         | 
| 70 | 
            +
              Enabled: true
         | 
| 71 | 
            +
              AllowSubject: true
         | 
| 69 72 | 
             
              Max: 7
         | 
| 70 73 |  | 
| 74 | 
            +
            RSpec/NestedGroups:
         | 
| 75 | 
            +
              Max: 8
         | 
| 76 | 
            +
             | 
| 71 77 | 
             
            Style/StringLiterals:
         | 
| 72 78 | 
             
              ConsistentQuotesInMultiline: true
         | 
    
        data/.ruby-version
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.6 | 
| 1 | 
            +
            2.7.6
         | 
    
        data/.tool-versions
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            ruby 2.6 | 
| 1 | 
            +
            ruby 2.7.6
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,7 +1,25 @@ | |
| 1 1 | 
             
            # Changelog
         | 
| 2 2 |  | 
| 3 | 
            +
            ## [v0.3.0](https://github.com/texpert/ngrok-wrapper/tree/v0.3.0) (2022-11-19)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            [Full Changelog](https://github.com/texpert/ngrok-wrapper/compare/v0.2.0...v0.3.0)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Both Ngrok v2, and v3 are now supported.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Tested and working on Ubuntu Linux and macOS.
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            **Merged pull requests:**
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - Added compatibility with Ngrok v3.x \(specs also enhanced to test both 2 and 3 versions\) [\#24](https://github.com/texpert/ngrok-wrapper/pull/24) ([texpert](https://github.com/texpert))
         | 
| 14 | 
            +
            - Prepare for different ngrok versions params, still for version 2 [\#23](https://github.com/texpert/ngrok-wrapper/pull/23) ([texpert](https://github.com/texpert))
         | 
| 15 | 
            +
            - Allow region subdomains - modify Rails config.hosts example to parse the host from NGROK\_URL [\#22](https://github.com/texpert/ngrok-wrapper/pull/22) ([texpert](https://github.com/texpert))
         | 
| 16 | 
            +
            - Set main Ruby version to 2.7.6 [\#21](https://github.com/texpert/ngrok-wrapper/pull/21) ([texpert](https://github.com/texpert))
         | 
| 17 | 
            +
            - Bump actions/checkout from 2 to 3 [\#19](https://github.com/texpert/ngrok-wrapper/pull/19) ([texpert](https://github.com/texpert))
         | 
| 18 | 
            +
             | 
| 3 19 | 
             
            ## [v0.2.0](https://github.com/texpert/ngrok-wrapper/tree/v0.2.0) (2022-02-19)
         | 
| 4 20 |  | 
| 21 | 
            +
            [Full Changelog](https://github.com/texpert/ngrok-wrapper/compare/v0.1.0...v0.2.0)
         | 
| 22 | 
            +
             | 
| 5 23 | 
             
            ### Making Ngrok process survive server stop on Linux
         | 
| 6 24 |  | 
| 7 25 | 
             
            It was working OK on Mac OS on the 0.1.0 release, but not on Linux.
         | 
| @@ -10,7 +28,6 @@ It came out that `Process.setsid` should be applied to the spawned process to es | |
| 10 28 | 
             
            and process group leader. This is completely detaching it from the parent process, so it won't be killed when the 
         | 
| 11 29 | 
             
            parent will go down.
         | 
| 12 30 |  | 
| 13 | 
            -
            [Full Changelog](https://github.com/texpert/ngrok-wrapper/compare/v0.1.0...v0.2.0)
         | 
| 14 31 |  | 
| 15 32 | 
             
            **Merged pull requests:**
         | 
| 16 33 |  | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # Ngrok::Wrapper
         | 
| 2 2 |  | 
| 3 | 
            -
            Ngrok-wrapper gem is a ruby wrapper for ngrok v2.
         | 
| 3 | 
            +
            Ngrok-wrapper gem is a ruby wrapper for ngrok v2.x or v3.x.
         | 
| 4 4 |  | 
| 5 5 | 
             
            [](https://codeclimate.com/github/texpert/ngrok-wrapper/maintainability)
         | 
| 6 6 | 
             
            [](https://codeclimate.com/github/texpert/ngrok-wrapper/test_coverage)
         | 
| @@ -22,7 +22,9 @@ So, excuse me, [Anton Bogdanovich](https://github.com/bogdanovich), but I've dec | |
| 22 22 |  | 
| 23 23 | 
             
            ## Installation
         | 
| 24 24 |  | 
| 25 | 
            -
             | 
| 25 | 
            +
            **Pre-requisites:** You must have `ngrok` v2+ or v3+ installed available in your `PATH`.
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            **Upgrade Note:** Do not forget to run `ngrok config upgrade` after upgrading `ngrok` from v2.x to v3.x 
         | 
| 26 28 |  | 
| 27 29 | 
             
            Add this line to your application's Gemfile:
         | 
| 28 30 |  | 
| @@ -32,7 +34,7 @@ gem 'ngrok-wrapper' | |
| 32 34 |  | 
| 33 35 | 
             
            And then execute:
         | 
| 34 36 |  | 
| 35 | 
            -
                $ bundle
         | 
| 37 | 
            +
                $ bundle install
         | 
| 36 38 |  | 
| 37 39 | 
             
            Or install it yourself as:
         | 
| 38 40 |  | 
| @@ -139,8 +141,10 @@ end | |
| 139 141 | 
             
            - And in `config/environments/development.rb`:
         | 
| 140 142 |  | 
| 141 143 | 
             
            ```ruby
         | 
| 142 | 
            -
             | 
| 143 | 
            -
            config. | 
| 144 | 
            +
            if NGROK_ENABLED
         | 
| 145 | 
            +
              config.force_ssl = true
         | 
| 146 | 
            +
              config.hosts << URI.parse(NGROK_URL).host # for Rails >= 6.0.0
         | 
| 147 | 
            +
            end  
         | 
| 144 148 |  | 
| 145 149 | 
             
            config.action_mailer.default_url_options = {
         | 
| 146 150 | 
             
              host: NGROK_ENABLED ? NGROK_URL.delete_prefix('https://') : 'myapp.local',
         | 
    
        data/lib/ngrok/wrapper.rb
    CHANGED
    
    | @@ -4,7 +4,16 @@ require_relative 'wrapper/version' | |
| 4 4 | 
             
            require 'tempfile'
         | 
| 5 5 |  | 
| 6 6 | 
             
            module Ngrok
         | 
| 7 | 
            -
               | 
| 7 | 
            +
              VERSION_PARAMS = {
         | 
| 8 | 
            +
                '2' => {
         | 
| 9 | 
            +
                  flag_prefix:       '-',
         | 
| 10 | 
            +
                  http_tunnel_flags: %i[config authtoken bind_tls host_header hostname inspect region subdomain].freeze
         | 
| 11 | 
            +
                },
         | 
| 12 | 
            +
                '3' => {
         | 
| 13 | 
            +
                  flag_prefix:       '--',
         | 
| 14 | 
            +
                  http_tunnel_flags: %i[config authtoken scheme host_header hostname inspect region subdomain].freeze
         | 
| 15 | 
            +
                }
         | 
| 16 | 
            +
              }.freeze
         | 
| 8 17 |  | 
| 9 18 | 
             
              class NotFound < StandardError; end
         | 
| 10 19 | 
             
              class FetchUrlError < StandardError; end
         | 
| @@ -24,6 +33,9 @@ module Ngrok | |
| 24 33 |  | 
| 25 34 | 
             
                  def start(params = {})
         | 
| 26 35 | 
             
                    ensure_binary
         | 
| 36 | 
            +
                    @current_version_params = VERSION_PARAMS[@major_version]
         | 
| 37 | 
            +
                    @flag_prefix = @current_version_params[:flag_prefix]
         | 
| 38 | 
            +
             | 
| 27 39 | 
             
                    init(params)
         | 
| 28 40 |  | 
| 29 41 | 
             
                    persistent_ngrok = @params[:persistence] == true
         | 
| @@ -84,7 +96,7 @@ module Ngrok | |
| 84 96 | 
             
                  def raise_if_similar_ngroks(pid)
         | 
| 85 97 | 
             
                    other_ngrok_on_port = ngrok_process_status_lines.find do |line|
         | 
| 86 98 | 
             
                      # If found an Ngrok process with other pid, tunneling on the port, specified in Ngrok::Wrapper.start params
         | 
| 87 | 
            -
                      line.include?( | 
| 99 | 
            +
                      line.include?("ngrok http #{@flag_prefix}log") && !line.start_with?(pid || '') && line.end_with?(addr.to_s)
         | 
| 88 100 | 
             
                    end
         | 
| 89 101 |  | 
| 90 102 | 
             
                    raise Ngrok::Error, "ERROR: Other ngrok instances tunneling to port #{addr} found" if other_ngrok_on_port
         | 
| @@ -93,7 +105,7 @@ module Ngrok | |
| 93 105 |  | 
| 94 106 | 
             
                    tunnel_on_other_port = ngrok_process_status_lines.find do |line|
         | 
| 95 107 | 
             
                      # If the line starts with this pid, but the port is other than specified in Ngrok::Wrapper.start params
         | 
| 96 | 
            -
                      line.include?( | 
| 108 | 
            +
                      line.include?("ngrok http #{@flag_prefix}log") && line.start_with?(pid) && !line.end_with?(addr.to_s)
         | 
| 97 109 | 
             
                    end
         | 
| 98 110 |  | 
| 99 111 | 
             
                    return unless tunnel_on_other_port
         | 
| @@ -125,7 +137,7 @@ module Ngrok | |
| 125 137 | 
             
                  def ngrok_running?(pid)
         | 
| 126 138 | 
             
                    ngrok_process_status_lines.find do |line|
         | 
| 127 139 | 
             
                      # If found the Ngrok process with correct pid, tunneling on the port, specified in Ngrok::Wrapper.start params
         | 
| 128 | 
            -
                      line.include?( | 
| 140 | 
            +
                      line.include?("ngrok http #{@flag_prefix}log") && line.start_with?(pid) && line.end_with?(addr.to_s)
         | 
| 129 141 | 
             
                    end
         | 
| 130 142 | 
             
                  end
         | 
| 131 143 |  | 
| @@ -142,7 +154,7 @@ module Ngrok | |
| 142 154 | 
             
                      sleep 0.5
         | 
| 143 155 |  | 
| 144 156 | 
             
                      @pid = ngrok_process_status_lines(refetch: true)
         | 
| 145 | 
            -
                             .find { |line| line.include?( | 
| 157 | 
            +
                             .find { |line| line.include?("ngrok http #{@flag_prefix}log") && line.end_with?(addr.to_s) }.split[0]
         | 
| 146 158 | 
             
                    else
         | 
| 147 159 | 
             
                      @pid = Process.spawn("exec ngrok http #{ngrok_exec_params}")
         | 
| 148 160 | 
             
                      at_exit { Ngrok::Wrapper.stop }
         | 
| @@ -152,11 +164,11 @@ module Ngrok | |
| 152 164 | 
             
                  end
         | 
| 153 165 |  | 
| 154 166 | 
             
                  def ngrok_exec_params
         | 
| 155 | 
            -
                    exec_params = + | 
| 156 | 
            -
                     | 
| 157 | 
            -
                      exec_params << " | 
| 167 | 
            +
                    exec_params = +"#{@flag_prefix}log=stdout #{@flag_prefix}log-level=debug "
         | 
| 168 | 
            +
                    @current_version_params[:http_tunnel_flags].each do |flag|
         | 
| 169 | 
            +
                      exec_params << "#{@flag_prefix}#{flag.to_s.tr('_', '-')}=#{@params[flag]} " if @params.key?(flag)
         | 
| 158 170 | 
             
                    end
         | 
| 159 | 
            -
                    exec_params << " | 
| 171 | 
            +
                    exec_params << " #{@params[:addr]} > #{@params[:log].path}"
         | 
| 160 172 | 
             
                  end
         | 
| 161 173 |  | 
| 162 174 | 
             
                  def fetch_urls
         | 
| @@ -191,7 +203,7 @@ module Ngrok | |
| 191 203 | 
             
                  end
         | 
| 192 204 |  | 
| 193 205 | 
             
                  def ensure_binary
         | 
| 194 | 
            -
                    `ngrok version | 
| 206 | 
            +
                    @major_version, * = `ngrok version`.chomp.delete_prefix('ngrok version ').split('.')
         | 
| 195 207 | 
             
                  rescue Errno::ENOENT
         | 
| 196 208 | 
             
                    raise Ngrok::NotFound, 'Ngrok binary not found'
         | 
| 197 209 | 
             
                  end
         | 
    
        data/spec/ngrok/wrapper_spec.rb
    CHANGED
    
    | @@ -4,354 +4,369 @@ RSpec.describe 'Ngrok::Wrapper' do | |
| 4 4 | 
             
              let(:log) { File.read("#{RSPEC_ROOT}/fixtures/ngrok.sample.log") }
         | 
| 5 5 | 
             
              let(:fake_pid) { rand(99_999) }
         | 
| 6 6 |  | 
| 7 | 
            -
               | 
| 8 | 
            -
                allow(Ngrok::Wrapper).to receive(:ensure_binary)
         | 
| 9 | 
            -
                allow(Ngrok::Wrapper).to receive(:raise_if_similar_ngroks)
         | 
| 10 | 
            -
                allow(Process).to receive(:spawn).and_return(fake_pid)
         | 
| 11 | 
            -
                allow(Process).to receive(:kill)
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
              it 'has a version number' do
         | 
| 15 | 
            -
                expect(Ngrok::Wrapper::VERSION).not_to be nil
         | 
| 16 | 
            -
              end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
              describe 'Before start' do
         | 
| 19 | 
            -
                before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 7 | 
            +
              ngrok_versions = %w[2 3]
         | 
| 20 8 |  | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
                it 'is stopped' do
         | 
| 26 | 
            -
                  expect(Ngrok::Wrapper.stopped?).to be true
         | 
| 27 | 
            -
                end
         | 
| 9 | 
            +
              ngrok_versions.each do |ngrok_version|
         | 
| 10 | 
            +
                describe "Ngrok v#{ngrok_version}" do
         | 
| 11 | 
            +
                  let(:flag_prefix) { Ngrok::VERSION_PARAMS[ngrok_version][:flag_prefix] }
         | 
| 12 | 
            +
                  let(:config_path) { "#{flag_prefix}config /Users/thunder/.ngrok2/ngrok.yml" }
         | 
| 28 13 |  | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 14 | 
            +
                  before do
         | 
| 15 | 
            +
                    Ngrok::Wrapper.instance_variable_set(:@major_version, ngrok_version)
         | 
| 16 | 
            +
                    allow(Ngrok::Wrapper).to receive(:ensure_binary)
         | 
| 17 | 
            +
                    allow(Ngrok::Wrapper).to receive(:ngrok_process_status_lines)
         | 
| 18 | 
            +
                    allow(Ngrok::Wrapper).to receive(:raise_if_similar_ngroks)
         | 
| 19 | 
            +
                    allow(Process).to receive(:spawn).and_return(fake_pid)
         | 
| 20 | 
            +
                    allow(Process).to receive(:kill)
         | 
| 21 | 
            +
                  end
         | 
| 33 22 |  | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                   | 
| 23 | 
            +
                  it 'has a version number' do
         | 
| 24 | 
            +
                    expect(Ngrok::Wrapper::VERSION).not_to be nil
         | 
| 25 | 
            +
                  end
         | 
| 37 26 |  | 
| 38 | 
            -
                   | 
| 39 | 
            -
             | 
| 27 | 
            +
                  describe 'Before start' do
         | 
| 28 | 
            +
                    before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 40 29 |  | 
| 41 | 
            -
             | 
| 30 | 
            +
                    it 'is not running' do
         | 
| 31 | 
            +
                      expect(Ngrok::Wrapper.running?).to be false
         | 
| 32 | 
            +
                    end
         | 
| 42 33 |  | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 34 | 
            +
                    it 'is stopped' do
         | 
| 35 | 
            +
                      expect(Ngrok::Wrapper.stopped?).to be true
         | 
| 36 | 
            +
                    end
         | 
| 46 37 |  | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 38 | 
            +
                    it 'has :stopped status' do
         | 
| 39 | 
            +
                      expect(Ngrok::Wrapper.status).to eq :stopped
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 50 42 |  | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 43 | 
            +
                  describe 'After start' do
         | 
| 44 | 
            +
                    before do
         | 
| 45 | 
            +
                      allow_any_instance_of(Tempfile).to receive(:read).and_return(log)
         | 
| 54 46 |  | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                end
         | 
| 47 | 
            +
                      Ngrok::Wrapper.start
         | 
| 48 | 
            +
                    end
         | 
| 58 49 |  | 
| 59 | 
            -
             | 
| 60 | 
            -
                  expect(Ngrok::Wrapper.addr).to eq(3001)
         | 
| 61 | 
            -
                end
         | 
| 50 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 62 51 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 52 | 
            +
                    it 'is running' do
         | 
| 53 | 
            +
                      expect(Ngrok::Wrapper.running?).to be true
         | 
| 54 | 
            +
                    end
         | 
| 66 55 |  | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 56 | 
            +
                    it 'is not stopped' do
         | 
| 57 | 
            +
                      expect(Ngrok::Wrapper.stopped?).to be false
         | 
| 58 | 
            +
                    end
         | 
| 70 59 |  | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
              end
         | 
| 60 | 
            +
                    it 'has :running status' do
         | 
| 61 | 
            +
                      expect(Ngrok::Wrapper.status).to eq :running
         | 
| 62 | 
            +
                    end
         | 
| 75 63 |  | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 64 | 
            +
                    it 'has correct port property' do
         | 
| 65 | 
            +
                      expect(Ngrok::Wrapper.port).to eq(3001)
         | 
| 66 | 
            +
                    end
         | 
| 78 67 |  | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
                  expect(Ngrok::Wrapper.params[:log].path).to eq 'test.log'
         | 
| 83 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 84 | 
            -
                  expect(Ngrok::Wrapper.stopped?).to eq true
         | 
| 85 | 
            -
                end
         | 
| 86 | 
            -
              end
         | 
| 68 | 
            +
                    it 'has correct addr property' do
         | 
| 69 | 
            +
                      expect(Ngrok::Wrapper.addr).to eq(3001)
         | 
| 70 | 
            +
                    end
         | 
| 87 71 |  | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 72 | 
            +
                    it 'has valid ngrok_url' do
         | 
| 73 | 
            +
                      expect(Ngrok::Wrapper.ngrok_url).to be =~ %r{http://.*ngrok\.io$}
         | 
| 74 | 
            +
                    end
         | 
| 91 75 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 76 | 
            +
                    it 'has valid ngrok_url_https' do
         | 
| 77 | 
            +
                      expect(Ngrok::Wrapper.ngrok_url_https).to be =~ %r{https://.*ngrok\.io$}
         | 
| 78 | 
            +
                    end
         | 
| 94 79 |  | 
| 95 | 
            -
                     | 
| 80 | 
            +
                    it 'has correct pid property' do
         | 
| 81 | 
            +
                      expect(Ngrok::Wrapper.pid).to be > 0
         | 
| 82 | 
            +
                    end
         | 
| 96 83 | 
             
                  end
         | 
| 97 | 
            -
                end
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                describe 'when an invalid authtoken is specified in ngrok config file' do
         | 
| 100 | 
            -
                  let(:invalid_auth_log) { File.read("#{RSPEC_ROOT}/fixtures/ngrok.no_auth_token.log") }
         | 
| 101 84 |  | 
| 102 | 
            -
                   | 
| 103 | 
            -
                    allow_any_instance_of( | 
| 85 | 
            +
                  describe 'Custom log file' do
         | 
| 86 | 
            +
                    before { allow_any_instance_of(File).to receive(:read).and_return(log) }
         | 
| 104 87 |  | 
| 105 | 
            -
                     | 
| 106 | 
            -
                      Ngrok::Wrapper.start( | 
| 107 | 
            -
             | 
| 88 | 
            +
                    it 'uses custom log file' do
         | 
| 89 | 
            +
                      Ngrok::Wrapper.start(log: 'test.log')
         | 
| 90 | 
            +
                      expect(Ngrok::Wrapper.running?).to eq true
         | 
| 91 | 
            +
                      expect(Ngrok::Wrapper.params[:log].path).to eq 'test.log'
         | 
| 92 | 
            +
                      Ngrok::Wrapper.stop
         | 
| 93 | 
            +
                      expect(Ngrok::Wrapper.stopped?).to eq true
         | 
| 94 | 
            +
                    end
         | 
| 108 95 | 
             
                  end
         | 
| 109 | 
            -
                end
         | 
| 110 | 
            -
              end
         | 
| 111 96 |  | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 97 | 
            +
                  describe 'Invalid or missing authtoken' do
         | 
| 98 | 
            +
                    describe 'when no authtoken is specified in ngrok config file' do
         | 
| 99 | 
            +
                      let(:no_auth_log) { File.read("#{RSPEC_ROOT}/fixtures/ngrok.no_auth_token.log") }
         | 
| 114 100 |  | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
                  Ngrok::Wrapper.start(port: port)
         | 
| 118 | 
            -
                  expect(Ngrok::Wrapper.addr).to eq port
         | 
| 119 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 120 | 
            -
                end
         | 
| 101 | 
            +
                      it 'raises Ngrok::Error exception' do
         | 
| 102 | 
            +
                        allow_any_instance_of(Tempfile).to receive(:read).and_return(no_auth_log)
         | 
| 121 103 |  | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
                  expect(Ngrok::Wrapper.port).to eq 10_010
         | 
| 126 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 127 | 
            -
                end
         | 
| 104 | 
            +
                        expect { Ngrok::Wrapper.start }.to raise_error Ngrok::Error
         | 
| 105 | 
            +
                      end
         | 
| 106 | 
            +
                    end
         | 
| 128 107 |  | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
                  Ngrok::Wrapper.start(addr: addr)
         | 
| 132 | 
            -
                  expect(Ngrok::Wrapper.addr).to eq addr
         | 
| 133 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 134 | 
            -
                end
         | 
| 135 | 
            -
              end
         | 
| 108 | 
            +
                    describe 'when an invalid authtoken is specified in ngrok config file' do
         | 
| 109 | 
            +
                      let(:invalid_auth_log) { File.read("#{RSPEC_ROOT}/fixtures/ngrok.no_auth_token.log") }
         | 
| 136 110 |  | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 111 | 
            +
                      it 'fails with incorrect authtoken' do
         | 
| 112 | 
            +
                        allow_any_instance_of(Tempfile).to receive(:read).and_return(invalid_auth_log)
         | 
| 139 113 |  | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 114 | 
            +
                        expect do
         | 
| 115 | 
            +
                          Ngrok::Wrapper.start(authtoken: 'incorrect_token')
         | 
| 116 | 
            +
                        end.to raise_error Ngrok::Error
         | 
| 117 | 
            +
                      end
         | 
| 118 | 
            +
                    end
         | 
| 119 | 
            +
                  end
         | 
| 145 120 |  | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
                  Ngrok::Wrapper.start(region: region)
         | 
| 149 | 
            -
                  expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include("-region=#{region}")
         | 
| 150 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 151 | 
            -
                end
         | 
| 152 | 
            -
              end
         | 
| 121 | 
            +
                  describe 'Custom addr' do
         | 
| 122 | 
            +
                    before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 153 123 |  | 
| 154 | 
            -
             | 
| 155 | 
            -
                before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 124 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 156 125 |  | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 126 | 
            +
                    it 'maps port param to addr' do
         | 
| 127 | 
            +
                      port = 10_010
         | 
| 128 | 
            +
                      Ngrok::Wrapper.start(port: port)
         | 
| 129 | 
            +
                      expect(Ngrok::Wrapper.addr).to eq port
         | 
| 130 | 
            +
                    end
         | 
| 162 131 |  | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
                end
         | 
| 132 | 
            +
                    it 'returns just the port when the address contains a host' do
         | 
| 133 | 
            +
                      addr = '192.168.0.5:10010'
         | 
| 134 | 
            +
                      Ngrok::Wrapper.start(addr: addr)
         | 
| 135 | 
            +
                      expect(Ngrok::Wrapper.port).to eq 10_010
         | 
| 136 | 
            +
                    end
         | 
| 169 137 |  | 
| 170 | 
            -
             | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
              end
         | 
| 138 | 
            +
                    it 'supports remote addresses' do
         | 
| 139 | 
            +
                      addr = '192.168.0.5:10010'
         | 
| 140 | 
            +
                      Ngrok::Wrapper.start(addr: addr)
         | 
| 141 | 
            +
                      expect(Ngrok::Wrapper.addr).to eq addr
         | 
| 142 | 
            +
                    end
         | 
| 143 | 
            +
                  end
         | 
| 177 144 |  | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 145 | 
            +
                  describe 'Custom region' do
         | 
| 146 | 
            +
                    before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 180 147 |  | 
| 181 | 
            -
             | 
| 182 | 
            -
                  expect(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 183 | 
            -
                  Ngrok::Wrapper.start
         | 
| 184 | 
            -
                  expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).not_to include('-host-header=')
         | 
| 185 | 
            -
                end
         | 
| 148 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 186 149 |  | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
                  expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include("-host-header=#{host_header}")
         | 
| 192 | 
            -
                end
         | 
| 193 | 
            -
              end
         | 
| 150 | 
            +
                    it "doesn't include the -region parameter when it is not provided" do
         | 
| 151 | 
            +
                      Ngrok::Wrapper.start
         | 
| 152 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).not_to include('-region=')
         | 
| 153 | 
            +
                    end
         | 
| 194 154 |  | 
| 195 | 
            -
             | 
| 196 | 
            -
             | 
| 155 | 
            +
                    it 'includes the -region parameter with the correct value when it is provided' do
         | 
| 156 | 
            +
                      region = 'eu'
         | 
| 157 | 
            +
                      Ngrok::Wrapper.start(region: region)
         | 
| 158 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include("-region=#{region}")
         | 
| 159 | 
            +
                    end
         | 
| 160 | 
            +
                  end
         | 
| 197 161 |  | 
| 198 | 
            -
             | 
| 199 | 
            -
             | 
| 200 | 
            -
             | 
| 201 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 202 | 
            -
                end
         | 
| 162 | 
            +
                  describe 'Custom bind-tls' do
         | 
| 163 | 
            +
                    # It is 'bind_tls' for Ngrok v2, and 'scheme' for Ngrok v3
         | 
| 164 | 
            +
                    let(:bind_tls_flag) { Ngrok::VERSION_PARAMS[ngrok_version][:http_tunnel_flags][2] }
         | 
| 203 165 |  | 
| 204 | 
            -
             | 
| 205 | 
            -
                  Ngrok::Wrapper.start(inspect: true)
         | 
| 206 | 
            -
                  expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include('-inspect=true')
         | 
| 207 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 166 | 
            +
                    before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 208 167 |  | 
| 209 | 
            -
             | 
| 210 | 
            -
                  expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include('-inspect=false')
         | 
| 211 | 
            -
                  Ngrok::Wrapper.stop
         | 
| 212 | 
            -
                end
         | 
| 213 | 
            -
              end
         | 
| 168 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 214 169 |  | 
| 215 | 
            -
             | 
| 216 | 
            -
             | 
| 170 | 
            +
                    it "doesn't include the -bind-tls parameter when it is not provided" do
         | 
| 171 | 
            +
                      Ngrok::Wrapper.start
         | 
| 172 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params))
         | 
| 173 | 
            +
                        .not_to include("#{flag_prefix}#{bind_tls_flag.to_s.tr('_', '-')}=")
         | 
| 174 | 
            +
                    end
         | 
| 217 175 |  | 
| 218 | 
            -
             | 
| 219 | 
            -
             | 
| 220 | 
            -
             | 
| 221 | 
            -
             | 
| 222 | 
            -
                     | 
| 223 | 
            -
                  end
         | 
| 176 | 
            +
                    it 'includes the -bind-tls parameter with the correct value when it is true' do
         | 
| 177 | 
            +
                      Ngrok::Wrapper.start(bind_tls_flag => true)
         | 
| 178 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params))
         | 
| 179 | 
            +
                        .to include("#{flag_prefix}#{bind_tls_flag.to_s.tr('_', '-')}=true")
         | 
| 180 | 
            +
                    end
         | 
| 224 181 |  | 
| 225 | 
            -
             | 
| 226 | 
            -
             | 
| 227 | 
            -
                       | 
| 182 | 
            +
                    it 'includes the -bind-tls parameter with the correct value when it is false' do
         | 
| 183 | 
            +
                      Ngrok::Wrapper.start(bind_tls_flag => false)
         | 
| 184 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params))
         | 
| 185 | 
            +
                        .to include("#{flag_prefix}#{bind_tls_flag.to_s.tr('_', '-')}=false")
         | 
| 186 | 
            +
                    end
         | 
| 187 | 
            +
                  end
         | 
| 228 188 |  | 
| 229 | 
            -
             | 
| 230 | 
            -
             | 
| 231 | 
            -
                        expect(Ngrok::Wrapper).not_to receive(:raise_if_similar_ngroks)
         | 
| 232 | 
            -
                        expect(Ngrok::Wrapper).not_to receive(:ngrok_running?)
         | 
| 233 | 
            -
                        expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: true)
         | 
| 234 | 
            -
                        expect(File).to receive(:write)
         | 
| 189 | 
            +
                  describe 'Custom host header' do
         | 
| 190 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 235 191 |  | 
| 236 | 
            -
             | 
| 237 | 
            -
                       | 
| 192 | 
            +
                    it "doesn't include the -host-header parameter when it is not provided" do
         | 
| 193 | 
            +
                      expect(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 194 | 
            +
                      Ngrok::Wrapper.start
         | 
| 195 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).not_to include('-host-header=')
         | 
| 238 196 | 
             
                    end
         | 
| 239 197 |  | 
| 240 | 
            -
                     | 
| 241 | 
            -
                       | 
| 242 | 
            -
             | 
| 243 | 
            -
             | 
| 244 | 
            -
             | 
| 245 | 
            -
             | 
| 198 | 
            +
                    it 'includes the -host-header parameter with the correct value when it is provided' do
         | 
| 199 | 
            +
                      expect(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 200 | 
            +
                      host_header = 'foo.bar'
         | 
| 201 | 
            +
                      Ngrok::Wrapper.start(host_header: host_header)
         | 
| 202 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include("-host-header=#{host_header}")
         | 
| 203 | 
            +
                    end
         | 
| 204 | 
            +
                  end
         | 
| 246 205 |  | 
| 247 | 
            -
             | 
| 248 | 
            -
             | 
| 249 | 
            -
                          allow(Ngrok::Wrapper).to receive(:raise_if_similar_ngroks).and_call_original
         | 
| 250 | 
            -
                          allow(Ngrok::Wrapper).to receive(:ngrok_process_status_lines).and_return(ngrok_ps_lines)
         | 
| 206 | 
            +
                  describe 'Custom parameters provided' do
         | 
| 207 | 
            +
                    before { allow_any_instance_of(Tempfile).to receive(:read).and_return(log) }
         | 
| 251 208 |  | 
| 252 | 
            -
             | 
| 253 | 
            -
             | 
| 209 | 
            +
                    it "doesn't include the -inspect parameter when it is not provided" do
         | 
| 210 | 
            +
                      Ngrok::Wrapper.start
         | 
| 211 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).not_to include('-inspect=')
         | 
| 212 | 
            +
                      Ngrok::Wrapper.stop
         | 
| 213 | 
            +
                    end
         | 
| 254 214 |  | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
             | 
| 258 | 
            -
             | 
| 215 | 
            +
                    it 'includes the -inspect parameter with the correct value when it is provided' do
         | 
| 216 | 
            +
                      Ngrok::Wrapper.start(inspect: true)
         | 
| 217 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include('-inspect=true')
         | 
| 218 | 
            +
                      Ngrok::Wrapper.stop
         | 
| 259 219 |  | 
| 260 | 
            -
             | 
| 261 | 
            -
             | 
| 220 | 
            +
                      Ngrok::Wrapper.start(inspect: false)
         | 
| 221 | 
            +
                      expect(Ngrok::Wrapper.__send__(:ngrok_exec_params)).to include('-inspect=false')
         | 
| 222 | 
            +
                      Ngrok::Wrapper.stop
         | 
| 223 | 
            +
                    end
         | 
| 224 | 
            +
                  end
         | 
| 262 225 |  | 
| 263 | 
            -
             | 
| 226 | 
            +
                  describe '#start' do
         | 
| 227 | 
            +
                    after { Ngrok::Wrapper.stop }
         | 
| 264 228 |  | 
| 265 | 
            -
             | 
| 266 | 
            -
             | 
| 267 | 
            -
             | 
| 268 | 
            -
             | 
| 269 | 
            -
             | 
| 270 | 
            -
             | 
| 271 | 
            -
                        end
         | 
| 229 | 
            +
                    describe 'when persistence param is true' do
         | 
| 230 | 
            +
                      before do
         | 
| 231 | 
            +
                        allow(File).to receive(:write)
         | 
| 232 | 
            +
                        allow(Ngrok::Wrapper).to receive(:try_params_from_running_ngrok).and_call_original
         | 
| 233 | 
            +
                        allow(Ngrok::Wrapper).to receive(:parse_persistence_file).and_return(state)
         | 
| 234 | 
            +
                      end
         | 
| 272 235 |  | 
| 273 | 
            -
             | 
| 274 | 
            -
             | 
| 275 | 
            -
             | 
| 276 | 
            -
                          end
         | 
| 236 | 
            +
                      describe 'tries fetching params of an already running Ngrok and store Ngrok process data into a file' do
         | 
| 237 | 
            +
                        describe 'when fetching params returns nil' do
         | 
| 238 | 
            +
                          let(:state) { nil }
         | 
| 277 239 |  | 
| 278 | 
            -
                          it ' | 
| 279 | 
            -
                            expect(Ngrok::Wrapper). | 
| 240 | 
            +
                          it "doesn't check for similar ngroks running" do
         | 
| 241 | 
            +
                            expect(Ngrok::Wrapper).to receive(:try_params_from_running_ngrok)
         | 
| 242 | 
            +
                            expect(Ngrok::Wrapper).not_to receive(:raise_if_similar_ngroks)
         | 
| 243 | 
            +
                            expect(Ngrok::Wrapper).not_to receive(:ngrok_running?)
         | 
| 244 | 
            +
                            expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: true)
         | 
| 245 | 
            +
                            expect(File).to receive(:write)
         | 
| 280 246 |  | 
| 281 | 
            -
                             | 
| 282 | 
            -
                              .to raise_error(Ngrok::Error, 'ERROR: Other ngrok instances tunneling to port 3001 found')
         | 
| 247 | 
            +
                            Ngrok::Wrapper.start(persistence: true)
         | 
| 283 248 | 
             
                          end
         | 
| 284 249 | 
             
                        end
         | 
| 285 250 |  | 
| 286 | 
            -
                        describe 'when  | 
| 251 | 
            +
                        describe 'when fetching params returns a legit hash' do
         | 
| 287 252 | 
             
                          let(:ngrok_ps_lines) do
         | 
| 288 | 
            -
                            [ | 
| 253 | 
            +
                            ["795 ??  S   0:04.81 ngrok http #{flag_prefix}log -config #{config_path} https://localhost:3001"]
         | 
| 289 254 | 
             
                          end
         | 
| 290 255 |  | 
| 291 | 
            -
                           | 
| 292 | 
            -
                             | 
| 293 | 
            -
             | 
| 294 | 
            -
             | 
| 295 | 
            -
                              .to raise_error(Ngrok::Error, 'ERROR: Ngrok pid #795 tunneling on other port 3000')
         | 
| 296 | 
            -
                          end
         | 
| 297 | 
            -
                        end
         | 
| 298 | 
            -
             | 
| 299 | 
            -
                        describe 'when no Ngrok process with params from the persisted file or similar is running' do
         | 
| 300 | 
            -
                          let(:ngrok_ps_lines) do
         | 
| 301 | 
            -
                            ['834 ??  S   0:04.81 ngrok http -log -config /Users/thunder/.ngrok2/ngrok.yml https://localhost:5001']
         | 
| 256 | 
            +
                          let(:state) do
         | 
| 257 | 
            +
                            { 'pid'             => '795',
         | 
| 258 | 
            +
                              'ngrok_url'       => 'http://b1cd-109-185-141-9.ngrok.io',
         | 
| 259 | 
            +
                              'ngrok_url_https' => 'https://b1cd-109-185-141-9.ngrok.io' }
         | 
| 302 260 | 
             
                          end
         | 
| 303 261 |  | 
| 304 | 
            -
                           | 
| 305 | 
            -
             | 
| 262 | 
            +
                          before { allow(Ngrok::Wrapper).to receive(:ngrok_process_status_lines).and_return(ngrok_ps_lines) }
         | 
| 263 | 
            +
             | 
| 264 | 
            +
                          describe 'checking if a similar Ngrok is running' do
         | 
| 265 | 
            +
                            before do
         | 
| 266 | 
            +
                              allow(Ngrok::Wrapper).to receive(:raise_if_similar_ngroks).and_call_original
         | 
| 267 | 
            +
             | 
| 268 | 
            +
                              expect(Ngrok::Wrapper).to receive(:try_params_from_running_ngrok)
         | 
| 269 | 
            +
                            end
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                            describe 'when Ngrok process with params from the persisted file is running' do
         | 
| 272 | 
            +
                              it 'set Ngrok::Wrapper pid and status attributes' do
         | 
| 273 | 
            +
                                expect(Ngrok::Wrapper).not_to receive(:spawn_new_ngrok)
         | 
| 274 | 
            +
             | 
| 275 | 
            +
                                result = Ngrok::Wrapper.start(persistence: true)
         | 
| 276 | 
            +
             | 
| 277 | 
            +
                                expect(Ngrok::Wrapper.pid).to eql('795')
         | 
| 278 | 
            +
                                expect(Ngrok::Wrapper.status).to eql(:running)
         | 
| 279 | 
            +
                                expect(Ngrok::Wrapper.ngrok_url).to eql('http://b1cd-109-185-141-9.ngrok.io')
         | 
| 280 | 
            +
                                expect(Ngrok::Wrapper.ngrok_url_https).to eql('https://b1cd-109-185-141-9.ngrok.io')
         | 
| 281 | 
            +
                                expect(result).to eql('https://b1cd-109-185-141-9.ngrok.io')
         | 
| 282 | 
            +
                              end
         | 
| 283 | 
            +
                            end
         | 
| 284 | 
            +
             | 
| 285 | 
            +
                            describe 'when a similar Ngrok with other pid is already running' do
         | 
| 286 | 
            +
                              let(:ngrok_ps_lines) do
         | 
| 287 | 
            +
                                ["71986 ?? S  0:04.81 ngrok http #{flag_prefix}log -config #{config_path} https://localhost:3001"]
         | 
| 288 | 
            +
                              end
         | 
| 289 | 
            +
             | 
| 290 | 
            +
                              it 'raises exception' do
         | 
| 291 | 
            +
                                expect(Ngrok::Wrapper).not_to receive(:spawn_new_ngrok)
         | 
| 292 | 
            +
             | 
| 293 | 
            +
                                expect { Ngrok::Wrapper.start(persistence: true) }
         | 
| 294 | 
            +
                                  .to raise_error(Ngrok::Error, 'ERROR: Other ngrok instances tunneling to port 3001 found')
         | 
| 295 | 
            +
                              end
         | 
| 296 | 
            +
                            end
         | 
| 297 | 
            +
             | 
| 298 | 
            +
                            describe 'when Ngrok with the persisted pid is already running, but on a different port' do
         | 
| 299 | 
            +
                              let(:ngrok_ps_lines) do
         | 
| 300 | 
            +
                                ["795 ??  S   0:04.81 ngrok http #{flag_prefix}log -config #{config_path} https://localhost:3000"]
         | 
| 301 | 
            +
                              end
         | 
| 302 | 
            +
             | 
| 303 | 
            +
                              it 'raises exception' do
         | 
| 304 | 
            +
                                expect(Ngrok::Wrapper).not_to receive(:spawn_new_ngrok)
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                                expect { Ngrok::Wrapper.start(persistence: true) }
         | 
| 307 | 
            +
                                  .to raise_error(Ngrok::Error, 'ERROR: Ngrok pid #795 tunneling on other port 3000')
         | 
| 308 | 
            +
                              end
         | 
| 309 | 
            +
                            end
         | 
| 310 | 
            +
             | 
| 311 | 
            +
                            describe 'when no Ngrok process with params from the persisted file or similar is running' do
         | 
| 312 | 
            +
                              let(:ngrok_ps_lines) do
         | 
| 313 | 
            +
                                ["834 ??  S   0:04.81 ngrok http #{flag_prefix}log -config #{config_path} https://localhost:5001"]
         | 
| 314 | 
            +
                              end
         | 
| 315 | 
            +
             | 
| 316 | 
            +
                              let(:new_ngrok_ps_lines) do
         | 
| 317 | 
            +
                                ["835 ??  S   0:04.81 ngrok http #{flag_prefix}log -config #{config_path} https://localhost:3001"]
         | 
| 318 | 
            +
                              end
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                              it 'sets Ngrok::Wrapper pid and status attributes' do
         | 
| 321 | 
            +
                                allow(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: true).and_call_original
         | 
| 322 | 
            +
                                allow(Ngrok::Wrapper).to receive(:fork)
         | 
| 323 | 
            +
                                allow(Ngrok::Wrapper)
         | 
| 324 | 
            +
                                  .to receive(:ngrok_process_status_lines).with(refetch: true).and_return(new_ngrok_ps_lines)
         | 
| 325 | 
            +
                                allow(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 326 | 
            +
             | 
| 327 | 
            +
                                expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: true)
         | 
| 328 | 
            +
                                expect(Ngrok::Wrapper).to receive(:fork)
         | 
| 329 | 
            +
                                expect(Ngrok::Wrapper).to receive(:ngrok_process_status_lines).with(refetch: true)
         | 
| 330 | 
            +
                                allow(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                                Ngrok::Wrapper.start(persistence: true)
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                                expect(Ngrok::Wrapper.pid).to eql('835')
         | 
| 335 | 
            +
                                expect(Ngrok::Wrapper.status).to eql(:running)
         | 
| 336 | 
            +
                              end
         | 
| 337 | 
            +
                            end
         | 
| 306 338 | 
             
                          end
         | 
| 307 339 |  | 
| 308 | 
            -
                          it ' | 
| 309 | 
            -
                             | 
| 310 | 
            -
                             | 
| 311 | 
            -
                            allow(Ngrok::Wrapper)
         | 
| 312 | 
            -
                              .to receive(:ngrok_process_status_lines).with(refetch: true).and_return(new_ngrok_ps_lines)
         | 
| 313 | 
            -
                            allow(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 314 | 
            -
             | 
| 315 | 
            -
                            expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: true)
         | 
| 316 | 
            -
                            expect(Ngrok::Wrapper).to receive(:fork)
         | 
| 317 | 
            -
                            expect(Ngrok::Wrapper).to receive(:ngrok_process_status_lines).with(refetch: true)
         | 
| 318 | 
            -
                            allow(Ngrok::Wrapper).to receive(:fetch_urls)
         | 
| 340 | 
            +
                          it 'tries fetching params of an already running Ngrok and store Ngrok process data into a file' do
         | 
| 341 | 
            +
                            expect(Ngrok::Wrapper).to receive(:try_params_from_running_ngrok)
         | 
| 342 | 
            +
                            expect(File).to receive(:write)
         | 
| 319 343 |  | 
| 320 344 | 
             
                            Ngrok::Wrapper.start(persistence: true)
         | 
| 321 | 
            -
             | 
| 322 | 
            -
                            expect(Ngrok::Wrapper.pid).to eql('835')
         | 
| 323 | 
            -
                            expect(Ngrok::Wrapper.status).to eql(:running)
         | 
| 324 345 | 
             
                          end
         | 
| 325 346 | 
             
                        end
         | 
| 326 347 | 
             
                      end
         | 
| 348 | 
            +
                    end
         | 
| 349 | 
            +
             | 
| 350 | 
            +
                    describe 'when persistence param is not true' do
         | 
| 351 | 
            +
                      after { Ngrok::Wrapper.stop }
         | 
| 327 352 |  | 
| 328 | 
            -
                      it ' | 
| 329 | 
            -
                        expect(Ngrok::Wrapper). | 
| 330 | 
            -
                        expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok:  | 
| 331 | 
            -
                         | 
| 353 | 
            +
                      it "doesn't try to fetch params of an already running Ngrok" do
         | 
| 354 | 
            +
                        expect(Ngrok::Wrapper).not_to receive(:try_params_from_running_ngrok)
         | 
| 355 | 
            +
                        expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: false)
         | 
| 356 | 
            +
                        expect_any_instance_of(File).not_to receive(:write)
         | 
| 332 357 |  | 
| 333 | 
            -
                        Ngrok::Wrapper.start(persistence:  | 
| 358 | 
            +
                        Ngrok::Wrapper.start(persistence: false)
         | 
| 334 359 | 
             
                      end
         | 
| 335 360 | 
             
                    end
         | 
| 336 | 
            -
                  end
         | 
| 337 | 
            -
                end
         | 
| 338 | 
            -
             | 
| 339 | 
            -
                describe 'when persistence param is not true' do
         | 
| 340 | 
            -
                  it "doesn't try to fetch params of an already running Ngrok" do
         | 
| 341 | 
            -
                    expect(Ngrok::Wrapper).not_to receive(:try_params_from_running_ngrok)
         | 
| 342 | 
            -
                    expect(Ngrok::Wrapper).to receive(:spawn_new_ngrok).with(persistent_ngrok: false)
         | 
| 343 | 
            -
                    expect_any_instance_of(File).not_to receive(:write)
         | 
| 344 361 |  | 
| 345 | 
            -
                    Ngrok::Wrapper | 
| 346 | 
            -
             | 
| 347 | 
            -
             | 
| 362 | 
            +
                    describe 'when Ngrok::Wrapper is already running' do
         | 
| 363 | 
            +
                      it "doesn't try to spawn a new Ngrok process" do
         | 
| 364 | 
            +
                        allow(Ngrok::Wrapper).to receive(:stopped?).and_return(false)
         | 
| 365 | 
            +
                        expect(Ngrok::Wrapper).not_to receive(:spawn_new_ngrok)
         | 
| 348 366 |  | 
| 349 | 
            -
             | 
| 350 | 
            -
             | 
| 351 | 
            -
                     | 
| 352 | 
            -
                    expect(Ngrok::Wrapper).not_to receive(:spawn_new_ngrok)
         | 
| 353 | 
            -
             | 
| 354 | 
            -
                    Ngrok::Wrapper.start
         | 
| 367 | 
            +
                        Ngrok::Wrapper.start
         | 
| 368 | 
            +
                      end
         | 
| 369 | 
            +
                    end
         | 
| 355 370 | 
             
                  end
         | 
| 356 371 | 
             
                end
         | 
| 357 372 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ngrok-wrapper
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Anton Bogdanovich
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire:
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2022- | 
| 12 | 
            +
            date: 2022-11-19 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: github_changelog_generator
         | 
| @@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 151 151 | 
             
                - !ruby/object:Gem::Version
         | 
| 152 152 | 
             
                  version: '0'
         | 
| 153 153 | 
             
            requirements: []
         | 
| 154 | 
            -
            rubygems_version: 3. | 
| 154 | 
            +
            rubygems_version: 3.3.10
         | 
| 155 155 | 
             
            signing_key:
         | 
| 156 156 | 
             
            specification_version: 4
         | 
| 157 157 | 
             
            summary: Ngrok-wrapper gem is a ruby wrapper for ngrok2
         |