# 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 "#manual_command" do it "returns valid manual_command" do f.class.service do run "#{HOMEBREW_PREFIX}/bin/beanstalkd" run_type :immediate environment_variables PATH: std_service_path_env, ETC_DIR: etc/"beanstalkd" error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" working_dir var keep_alive true end path = f.service.manual_command expect(path).to eq("ETC_DIR=\"#{HOMEBREW_PREFIX}/etc/beanstalkd\" #{HOMEBREW_PREFIX}/bin/beanstalkd") end it "returns valid manual_command without variables" 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.manual_command expect(path).to eq("#{HOMEBREW_PREFIX}/opt/formula_name/bin/beanstalkd") end end describe "#to_plist" do it "returns valid plist" do f.class.service do run [opt_bin/"beanstalkd", "test"] run_type :immediate environment_variables PATH: std_service_path_env, FOO: "BAR", ETC_DIR: etc/"beanstalkd" error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" input_path var/"in/beanstalkd" root_dir var working_dir var keep_alive true restart_delay 30 macos_legacy_timers true end plist = f.service.to_plist plist_expect = <<~EOS \tEnvironmentVariables \t \t\tETC_DIR \t\t#{HOMEBREW_PREFIX}/etc/beanstalkd \t\tFOO \t\tBAR \t\tPATH \t\t#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin \t \tKeepAlive \t \tLabel \thomebrew.mxcl.formula_name \tLegacyTimers \t \tProgramArguments \t \t\t#{HOMEBREW_PREFIX}/opt/formula_name/bin/beanstalkd \t\ttest \t \tRootDirectory \t#{HOMEBREW_PREFIX}/var \tRunAtLoad \t \tStandardErrorPath \t#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log \tStandardInPath \t#{HOMEBREW_PREFIX}/var/in/beanstalkd \tStandardOutPath \t#{HOMEBREW_PREFIX}/var/log/beanstalkd.log \tTimeOut \t30 \tWorkingDirectory \t#{HOMEBREW_PREFIX}/var EOS expect(plist).to eq(plist_expect) end it "returns valid partial plist" do f.class.service do run opt_bin/"beanstalkd" run_type :immediate end plist = f.service.to_plist plist_expect = <<~EOS \tLabel \thomebrew.mxcl.formula_name \tProgramArguments \t \t\t#{HOMEBREW_PREFIX}/opt/formula_name/bin/beanstalkd \t \tRunAtLoad \t EOS expect(plist).to eq(plist_expect) end end describe "#to_systemd_unit" do it "returns valid unit" do f.class.service do run [opt_bin/"beanstalkd", "test"] run_type :immediate environment_variables PATH: std_service_path_env, FOO: "BAR" error_log_path var/"log/beanstalkd.error.log" log_path var/"log/beanstalkd.log" input_path var/"in/beanstalkd" root_dir var working_dir var keep_alive true restart_delay 30 macos_legacy_timers true end unit = f.service.to_systemd_unit std_path = "#{HOMEBREW_PREFIX}/bin:#{HOMEBREW_PREFIX}/sbin:/usr/bin:/bin:/usr/sbin:/sbin" unit_expect = <<~EOS [Unit] Description=Homebrew generated unit for formula_name [Install] WantedBy=multi-user.target [Service] Type=simple ExecStart=#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd test Restart=always RestartSec=30 WorkingDirectory=#{HOMEBREW_PREFIX}/var RootDirectory=#{HOMEBREW_PREFIX}/var StandardInput=file:#{HOMEBREW_PREFIX}/var/in/beanstalkd StandardOutput=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.log StandardError=append:#{HOMEBREW_PREFIX}/var/log/beanstalkd.error.log Environment=\"PATH=#{std_path}\" Environment=\"FOO=BAR\" EOS expect(unit).to eq(unit_expect.strip) 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 unit_expect = <<~EOS [Unit] Description=Homebrew generated unit for formula_name [Install] WantedBy=multi-user.target [Service] Type=simple ExecStart=#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd EOS expect(unit).to eq(unit_expect) end end describe "#command" do it "returns @run data" do f.class.service do run [opt_bin/"beanstalkd", "test"] run_type :immediate end command = f.service.command expect(command).to eq(["#{HOMEBREW_PREFIX}/opt/#{name}/bin/beanstalkd", "test"]) end end end