# typed: false # frozen_string_literal: true require "formula" require "service" describe Homebrew::Service do let(:klass) do Class.new(Formula) do url "https://brew.sh/test-1.0.tbz" end end let(:name) { "formula_name" } let(:path) { Formulary.core_path(name) } let(:spec) { :stable } let(:f) { klass.new(name, path, spec) } describe "#std_service_path_env" do it "returns valid std_service_path_env" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate environment_variables PATH: std_service_path_env error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" working_dir var keep_alive true end path = f.service.std_service_path_env expect(path).to eq("#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin") end end describe "#to_plist" do it "returns valid plist" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate environment_variables PATH: std_service_path_env error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" working_dir var keep_alive true end plist = f.service.to_plist expect(plist).to include("Label") expect(plist).to include("homebrew.mxcl.#{name}") expect(plist).to include("KeepAlive") expect(plist).to include("RunAtLoad") expect(plist).to include("ProgramArguments") expect(plist).to include("#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd") expect(plist).to include("WorkingDirectory") expect(plist).to include("#{HOMEBREW_PREFIX}/var") expect(plist).to include("StandardOutPath") expect(plist).to include("#{HOMEBREW_PREFIX}/var/log/beanstalkd.log") expect(plist).to include("StandardErrorPath") expect(plist).to include("#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log") expect(plist).to include("EnvironmentVariables") expect(plist).to include("PATH") expect(plist).to include("#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:") end it "returns valid partial plist" do f.class.service do run bin/"beanstalkd" run_type :immediate end plist = f.service.to_plist expect(plist).to include("homebrew.mxcl.#{name}") expect(plist).to include("Label") expect(plist).not_to include("KeepAlive") expect(plist).to include("RunAtLoad") expect(plist).to include("ProgramArguments") expect(plist).not_to include("WorkingDirectory") expect(plist).not_to include("StandardOutPath") expect(plist).not_to include("StandardErrorPath") expect(plist).not_to include("EnvironmentVariables") end end describe "#to_systemd_unit" do it "returns valid unit" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate environment_variables PATH: std_service_path_env error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" working_dir var keep_alive true end unit = f.service.to_systemd_unit expect(unit).to include("Description=Homebrew generated unit for formula_name") expect(unit).to include("Type=simple") expect(unit).to include("ExecStart=#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd") expect(unit).to include("Restart=always") expect(unit).to include("WorkingDirectory=#{HOMEBREW_PREFIX}/var") expect(unit).to include("StandardOutput=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.log") expect(unit).to include("StandardError=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log") std_path = "#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin" expect(unit).to include("Environment=\"PATH=#{std_path}\"") end it "returns valid partial unit" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate end unit = f.service.to_systemd_unit expect(unit).to include("Description=Homebrew generated unit for formula_name") expect(unit).to include("Type=simple") expect(unit).to include("ExecStart=#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd") expect(unit).not_to include("Restart=always") expect(unit).not_to include("WorkingDirectory=#{HOMEBREW_PREFIX}/var") expect(unit).not_to include("StandardOutput=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.log") expect(unit).not_to include("StandardError=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log") std_path = "#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin" expect(unit).not_to include("Environment=\"PATH=#{std_path}\"") end end describe "#command" do it "returns @run data" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate end command = f.service.command expect(command).to eq(["#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd"]) end end end