Files
MatchLiveTv/backend/spec/services/streams/node_health_spec.rb
T
eminuxandCursor b87a0f7bc0 Fix race create sessione su CPX: ready solo dopo MediaMTX.
I nodi cloud restano in provisioning finché :9997 risponde; retry su create_path e 503 retryable se l’ingest è ancora irraggiungibile.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-21 14:06:47 +02:00

40 lines
1.2 KiB
Ruby

# frozen_string_literal: true
require "rails_helper"
RSpec.describe Streams::NodeHealth do
let!(:node) do
StreamNode.create!(
slug: "ingest-health-01",
hostname: "ingest-health-01.mltv-stream.net",
role: "cloud",
status: "provisioning",
provider: "hetzner",
rtmp_base_url: "rtmp://h:1935",
hls_base_url: "https://h/hls",
api_base_url: "http://203.0.113.10:9997",
max_publishers: 4,
max_relays: 4
)
end
after { node.destroy }
it "promotes provisioning node when MediaMTX is reachable" do
client = instance_double(Mediamtx::Client, reachable?: true)
allow(Mediamtx::Client).to receive(:new).with(base_url: node.api_base_url).and_return(client)
expect(described_class.promote_if_healthy!(node)).to eq(true)
expect(node.reload.status).to eq("ready")
expect(node.last_health_at).to be_present
end
it "does not promote when MediaMTX is down" do
client = instance_double(Mediamtx::Client, reachable?: false)
allow(Mediamtx::Client).to receive(:new).with(base_url: node.api_base_url).and_return(client)
expect(described_class.promote_if_healthy!(node)).to eq(false)
expect(node.reload.status).to eq("provisioning")
end
end