Sha256: 8b594f18c8dca45c4699a50c939a4e1b144e0c8475a59d5097701e8310b96dea

Contents?: true

Size: 1.83 KB

Versions: 40

Compression:

Stored size: 1.83 KB

Contents

require "spec_helper"
require "protobuf/zmq"

::RSpec.describe ::Protobuf::Rpc::Connectors::Ping do
  subject { described_class.new("google.com", 80) }

  let(:host) { "google.com" }
  let(:port) { 80 }

  describe ".new" do
    it "assigns host" do
      expect(subject.host).to eq(host)
    end

    it "assigns port" do
      expect(subject.port).to eq(port)
    end
  end

  describe "#online?" do
    it "closes the socket" do
      socket = double(:close => nil, :setsockopt => nil)
      allow(subject).to receive(:tcp_socket).and_return(socket)
      expect(socket).to receive(:close)
      expect(subject).to be_online
    end

    context "when a socket can connect" do
      let(:socket) { double(:close => nil, :setsockopt => nil) }
      before { allow(subject).to receive(:tcp_socket).and_return(socket) }

      it "returns true" do
        expect(subject).to be_online
      end
    end

    context "when a socket error is raised" do
      before { allow(subject).to receive(:tcp_socket).and_raise(::Errno::ECONNREFUSED) }

      it "returns false" do
        expect(subject).to_not be_online
      end
    end

    context "when a select timeout is fired" do
      let(:wait_writable_class) { ::Class.new(StandardError) { include ::IO::WaitWritable } }
      before { expect_any_instance_of(::Socket).to receive(:connect_nonblock).and_raise(wait_writable_class) }

      it "returns false" do
        expect(::IO).to receive(:select).and_return(false)
        expect(subject).to_not be_online
      end
    end
  end

  describe "#timeout" do
    it "uses the default value" do
      expect(subject.timeout).to eq(0.2)
    end

    context "when environment variable is set" do
      before { ::ENV["PB_RPC_PING_PORT_TIMEOUT"] = "100" }

      it "uses the environmet variable" do
        expect(subject.timeout).to eq(0.1)
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 3 rubygems

Version Path
protobuf-3.10.9 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.8 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.7 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.6 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.5 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.4 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-cucumber-3.10.8 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-cucumber-3.10.7 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-cucumber-3.10.6 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-cucumber-3.10.5 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-cucumber-3.10.4 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.3 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.2 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.1 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.0 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.10.0.pre0 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.9.0 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.9.0.pre2 spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.9.0.pre spec/lib/protobuf/rpc/connectors/ping_spec.rb
protobuf-3.8.5 spec/lib/protobuf/rpc/connectors/ping_spec.rb