Prepara l'architettura multi-nodo (MediaMTX+ffmpeg) con assignment URL per sessione, admin di provision/drain e provider Cloud/DNS astratti verso mltv-stream.net. Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
1.5 KiB
Ruby
42 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
RSpec.describe "Streams::NodeProvisioner cloud" do
|
|
it "registers a cloud node using injected providers" do
|
|
cloud = instance_double(
|
|
Streams::CloudProviders::Hetzner,
|
|
create_node: Streams::CloudProviders::Instance.new(
|
|
id: "99",
|
|
name: "mltv-stream-ingest-01",
|
|
public_ip: "49.13.9.9",
|
|
private_ip: "10.0.0.9",
|
|
status: "running",
|
|
raw: {}
|
|
)
|
|
)
|
|
dns = instance_double(Streams::DnsProviders::Hetzner)
|
|
allow(dns).to receive(:upsert_a)
|
|
|
|
ENV["MEDIAMTX_API_URL"] = "http://mtx-home:9997"
|
|
ENV["MEDIAMTX_RTMP_URL"] = "rtmp://home.example:1935"
|
|
ENV["HLS_PUBLIC_URL"] = "https://home.example/hls"
|
|
ENV["STREAM_CLOUD_DNS_SUFFIX"] = "mltv-stream.net"
|
|
ENV["STREAM_CLOUD_MAX_PUBLISHERS"] = "4"
|
|
|
|
node = Streams::NodeProvisioner.new(cloud: cloud, dns: dns).provision_cloud!
|
|
expect(node.slug).to eq("ingest-01")
|
|
expect(node.role).to eq("cloud")
|
|
expect(node.provider).to eq("hetzner")
|
|
expect(node.hostname).to eq("ingest-01.mltv-stream.net")
|
|
expect(node.rtmp_base_url).to eq("rtmp://ingest-01.mltv-stream.net:1935")
|
|
expect(node.api_base_url).to eq("http://10.0.0.9:9997")
|
|
expect(dns).to have_received(:upsert_a).with("ingest-01.mltv-stream.net", "49.13.9.9")
|
|
ensure
|
|
%w[
|
|
MEDIAMTX_API_URL MEDIAMTX_RTMP_URL HLS_PUBLIC_URL
|
|
STREAM_CLOUD_DNS_SUFFIX STREAM_CLOUD_MAX_PUBLISHERS
|
|
].each { |k| ENV.delete(k) }
|
|
end
|
|
end
|