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
 |