mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

We previously were trying to pass through invalid environment variable names so let's fix these up and query those instead.
116 lines
4.4 KiB
Ruby
116 lines
4.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "bundle"
|
|
require "bundle/brew_services"
|
|
|
|
RSpec.describe Homebrew::Bundle::BrewServices do
|
|
describe ".started_services" do
|
|
before do
|
|
described_class.reset!
|
|
end
|
|
|
|
it "returns started services" do
|
|
allow(Utils).to receive(:safe_popen_read).and_return <<~EOS
|
|
nginx started homebrew.mxcl.nginx.plist
|
|
apache stopped homebrew.mxcl.apache.plist
|
|
mysql started homebrew.mxcl.mysql.plist
|
|
EOS
|
|
expect(described_class.started_services).to contain_exactly("nginx", "mysql")
|
|
end
|
|
end
|
|
|
|
context "when brew-services is installed" do
|
|
context "when the service is stopped" do
|
|
it "when the service is started" do
|
|
allow(described_class).to receive(:started_services).and_return(%w[nginx])
|
|
expect(Homebrew::Bundle).to receive(:system).with(HOMEBREW_BREW_FILE, "services", "stop", "nginx",
|
|
verbose: false).and_return(true)
|
|
expect(described_class.stop("nginx")).to be(true)
|
|
expect(described_class.started_services).not_to include("nginx")
|
|
end
|
|
|
|
it "when the service is already stopped" do
|
|
allow(described_class).to receive(:started_services).and_return(%w[])
|
|
expect(Homebrew::Bundle).not_to receive(:system).with(HOMEBREW_BREW_FILE, "services", "stop", "nginx",
|
|
verbose: false)
|
|
expect(described_class.stop("nginx")).to be(true)
|
|
expect(described_class.started_services).not_to include("nginx")
|
|
end
|
|
end
|
|
|
|
it "starts the service" do
|
|
allow(described_class).to receive(:started_services).and_return([])
|
|
expect(Homebrew::Bundle).to receive(:system).with(HOMEBREW_BREW_FILE, "services", "start", "nginx",
|
|
verbose: false).and_return(true)
|
|
expect(described_class.start("nginx")).to be(true)
|
|
expect(described_class.started_services).to include("nginx")
|
|
end
|
|
|
|
it "runs the service" do
|
|
allow(described_class).to receive(:started_services).and_return([])
|
|
expect(Homebrew::Bundle).to receive(:system).with(HOMEBREW_BREW_FILE, "services", "run", "nginx",
|
|
verbose: false).and_return(true)
|
|
expect(described_class.run("nginx")).to be(true)
|
|
expect(described_class.started_services).to include("nginx")
|
|
end
|
|
|
|
it "restarts the service" do
|
|
allow(described_class).to receive(:started_services).and_return([])
|
|
expect(Homebrew::Bundle).to receive(:system).with(HOMEBREW_BREW_FILE, "services", "restart", "nginx",
|
|
verbose: false).and_return(true)
|
|
expect(described_class.restart("nginx")).to be(true)
|
|
expect(described_class.started_services).to include("nginx")
|
|
end
|
|
end
|
|
|
|
describe ".versioned_service_file" do
|
|
let(:foo) do
|
|
instance_double(
|
|
Formula,
|
|
name: "fooformula",
|
|
version: "1.0",
|
|
rack: HOMEBREW_CELLAR/"fooformula",
|
|
plist_name: "homebrew.mxcl.fooformula",
|
|
service_name: "fooformula",
|
|
)
|
|
end
|
|
|
|
shared_examples "returns the versioned service file" do
|
|
it "returns the versioned service file" do
|
|
expect(Formula).to receive(:[]).with(foo.name).and_return(foo)
|
|
expect(Homebrew::Bundle).to receive(:formula_versions_from_env).with(foo.name).and_return(foo.version)
|
|
|
|
prefix = foo.rack/"1.0"
|
|
allow(FileTest).to receive(:directory?).and_call_original
|
|
expect(FileTest).to receive(:directory?).with(prefix.to_s).and_return(true)
|
|
|
|
service_file = prefix/service_basename
|
|
allow(FileTest).to receive(:file?).and_call_original
|
|
expect(FileTest).to receive(:file?).with(service_file.to_s).and_return(true)
|
|
|
|
expect(described_class.versioned_service_file(foo.name)).to eq(service_file)
|
|
end
|
|
end
|
|
|
|
context "with launchctl" do
|
|
before do
|
|
allow(Homebrew::Services::System).to receive(:launchctl?).and_return(true)
|
|
end
|
|
|
|
let(:service_basename) { "#{foo.plist_name}.plist" }
|
|
|
|
include_examples "returns the versioned service file"
|
|
end
|
|
|
|
context "with systemd" do
|
|
before do
|
|
allow(Homebrew::Services::System).to receive(:launchctl?).and_return(false)
|
|
end
|
|
|
|
let(:service_basename) { "#{foo.service_name}.service" }
|
|
|
|
include_examples "returns the versioned service file"
|
|
end
|
|
end
|
|
end
|