Skip to content

Commit

Permalink
Merge pull request #16903 from apainintheneck/prevent-unexpected-netw…
Browse files Browse the repository at this point in the history
…ork-calls-in-tests

Prevent unexpected network calls in tests
  • Loading branch information
apainintheneck committed Mar 21, 2024
2 parents 0e981bd + 74aea8e commit 7b2bfee
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 23 deletions.
8 changes: 6 additions & 2 deletions Library/Homebrew/cli/named_args.rb
Expand Up @@ -256,11 +256,15 @@ def to_paths(only: parent&.only_formula_or_cask, recurse_tap: false)
paths = []

if formula_path.exist? ||
(!CoreTap.instance.installed? && Homebrew::API::Formula.all_formulae.key?(path.basename.to_s))
(!Homebrew::EnvConfig.no_install_from_api? &&
!CoreTap.instance.installed? &&
Homebrew::API::Formula.all_formulae.key?(path.basename.to_s))
paths << formula_path
end
if cask_path.exist? ||
(!CoreCaskTap.instance.installed? && Homebrew::API::Cask.all_casks.key?(path.basename.to_s))
(!Homebrew::EnvConfig.no_install_from_api? &&
!CoreCaskTap.instance.installed? &&
Homebrew::API::Cask.all_casks.key?(path.basename.to_s))
paths << cask_path
end

Expand Down
Expand Up @@ -22,11 +22,7 @@
describe ".can_load?" do
include_context "with API setup", "test-opera"

context "when not using the API" do
before do
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
end

context "when not using the API", :no_api do
it "returns false" do
expect(described_class.try_new(token)).to be_nil
end
Expand Down
12 changes: 2 additions & 10 deletions Library/Homebrew/test/cask/cask_loader_spec.rb
Expand Up @@ -30,11 +30,7 @@
.and_return(cask_renames)
end

context "when not using the API" do
before do
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
end

context "when not using the API", :no_api do
it "warns when using the short token" do
expect do
expect(described_class.for("version-newest")).to be_a Cask::CaskLoader::FromPathLoader
Expand Down Expand Up @@ -67,11 +63,7 @@
end
end

context "when not using the API" do
before do
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
end

context "when not using the API", :no_api do
context "when a cask is migrated" do
let(:token) { "local-caffeine" }

Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/test/cask/cask_spec.rb
Expand Up @@ -46,13 +46,13 @@
expect(c.token).to eq("caffeine")
end

it "returns an instance of the Cask from a URL" do
it "returns an instance of the Cask from a URL", :needs_utils_curl, :no_api do
c = Cask::CaskLoader.load("file://#{tap_path}/Casks/local-caffeine.rb")
expect(c).to be_a(described_class)
expect(c.token).to eq("local-caffeine")
end

it "raises an error when failing to download a Cask from a URL" do
it "raises an error when failing to download a Cask from a URL", :needs_utils_curl, :no_api do
expect do
Cask::CaskLoader.load("file://#{tap_path}/Casks/notacask.rb")
end.to raise_error(Cask::CaskUnavailableError)
Expand Down
5 changes: 5 additions & 0 deletions Library/Homebrew/test/cask/info_spec.rb
Expand Up @@ -3,6 +3,11 @@
require "utils"

RSpec.describe Cask::Info, :cask do
before do
# Prevent unnecessary network requests in `Utils::Analytics.cask_output`
ENV["HOMEBREW_NO_ANALYTICS"] = "1"
end

it "displays some nice info about the specified Cask" do
expect do
described_class.info(Cask::CaskLoader.load("local-transmission"))
Expand Down
6 changes: 5 additions & 1 deletion Library/Homebrew/test/formulary_spec.rb
Expand Up @@ -119,7 +119,7 @@ class Wrong#{described_class.class_s(formula_name)} < Formula
expect(described_class.factory(formula_path)).to be_a(Formula)
end

it "returns a Formula when given a URL" do
it "returns a Formula when given a URL", :needs_utils_curl, :no_api do
formula = described_class.factory("file://#{formula_path}")
expect(formula).to be_a(Formula)
end
Expand Down Expand Up @@ -383,6 +383,10 @@ def formula_json_contents(extra_items = {})
before do
ENV.delete("HOMEBREW_NO_INSTALL_FROM_API")

# avoid unnecessary network calls
allow(Homebrew::API::Formula).to receive_messages(all_aliases: {}, all_renames: {})
allow(CoreTap.instance).to receive(:tap_migrations).and_return({})

# don't try to load/fetch gcc/glibc
allow(DevelopmentTools).to receive_messages(needs_libc_formula?: false, needs_compiler_formula?: false)
end
Expand Down
13 changes: 13 additions & 0 deletions Library/Homebrew/test/spec_helper.rb
Expand Up @@ -165,6 +165,19 @@
skip "Requires network connection." unless ENV["HOMEBREW_TEST_ONLINE"]
end

config.before do |example|
next if example.metadata.key?(:needs_network)
next if example.metadata.key?(:needs_utils_curl)

allow(Utils::Curl).to receive(:curl_executable).and_raise(<<~ERROR)
Unexpected call to Utils::Curl.curl_executable without setting :needs_network or :needs_utils_curl.
ERROR
end

config.before(:each, :no_api) do
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
end

config.before(:each, :needs_svn) do
svn_shim = HOMEBREW_SHIMS_PATH/"shared/svn"
skip "Subversion is not installed." unless quiet_system svn_shim, "--version"
Expand Down
5 changes: 2 additions & 3 deletions Library/Homebrew/test/tap_spec.rb
Expand Up @@ -192,7 +192,7 @@ def setup_completion(link:)
end

describe "#remote" do
it "returns the remote URL" do
it "returns the remote URL", :needs_network do
setup_git_repo

expect(homebrew_foo_tap.remote).to eq("https://github.com/Homebrew/homebrew-foo")
Expand Down Expand Up @@ -488,8 +488,7 @@ def setup_completion(link:)
expect(described_class.to_a).to include(CoreTap.instance)
end

it "omits the core tap without the api" do
ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1"
it "omits the core tap without the api", :no_api do
expect(described_class.to_a).not_to include(CoreTap.instance)
end
end
Expand Down

0 comments on commit 7b2bfee

Please sign in to comment.