From 186c52b31a7b526194205b4435291c0b39ef7ad3 Mon Sep 17 00:00:00 2001 From: Brice Burgess Date: Wed, 28 Jan 2026 16:24:00 -0700 Subject: [PATCH] WIP: cli fix to support SOLID_QUEUE_SUPERVISOR_MODE envar --- lib/solid_queue/cli.rb | 4 ++-- test/unit/cli_test.rb | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 test/unit/cli_test.rb diff --git a/lib/solid_queue/cli.rb b/lib/solid_queue/cli.rb index a2b5ba5e9..c6cb99cf4 100644 --- a/lib/solid_queue/cli.rb +++ b/lib/solid_queue/cli.rb @@ -8,8 +8,8 @@ class Cli < Thor desc: "Path to config file (default: #{Configuration::DEFAULT_CONFIG_FILE_PATH}).", banner: "SOLID_QUEUE_CONFIG" - class_option :mode, type: :string, default: "fork", enum: %w[ fork async ], - desc: "Whether to fork processes for workers and dispatchers (fork) or to run these in the same process as the supervisor (async) (default: fork).", + class_option :mode, type: :string, enum: %w[ fork async ], + desc: "Whether to fork processes for workers and dispatchers (fork) or to run these in the same process as the supervisor (async). Can also be set via SOLID_QUEUE_SUPERVISOR_MODE env var (default: fork).", banner: "SOLID_QUEUE_SUPERVISOR_MODE" class_option :recurring_schedule_file, type: :string, diff --git a/test/unit/cli_test.rb b/test/unit/cli_test.rb new file mode 100644 index 000000000..52bd56e43 --- /dev/null +++ b/test/unit/cli_test.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require "test_helper" +require "solid_queue/cli" + +class CliTest < ActiveSupport::TestCase + test "mode defaults to fork when no env var or argument" do + with_env("SOLID_QUEUE_SUPERVISOR_MODE" => nil) do + config = configuration_from_cli + assert config.mode.fork? + end + end + + test "mode respects SOLID_QUEUE_SUPERVISOR_MODE env var" do + with_env("SOLID_QUEUE_SUPERVISOR_MODE" => "async") do + config = configuration_from_cli + assert config.mode.async? + end + end + + test "mode argument overrides env var" do + with_env("SOLID_QUEUE_SUPERVISOR_MODE" => "async") do + config = configuration_from_cli(mode: "fork") + assert config.mode.fork? + end + end + + test "mode argument works without env var" do + with_env("SOLID_QUEUE_SUPERVISOR_MODE" => nil) do + config = configuration_from_cli(mode: "async") + assert config.mode.async? + end + end + + private + def configuration_from_cli(**cli_options) + cli = SolidQueue::Cli.new([], cli_options) + options = cli.options.symbolize_keys.compact + SolidQueue::Configuration.new(**options) + end +end