add .nvmrc
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import { describe, it, expect, beforeEach, afterEach } from "bun:test";
|
||||
import { RtmpPush } from "../src/RtmpPush.js";
|
||||
import {describe, it, expect, beforeEach, afterEach} from 'bun:test';
|
||||
import {RtmpPush} from '../src/RtmpPush.js';
|
||||
|
||||
describe("RtmpPush Integration Tests", () => {
|
||||
describe('RtmpPush Integration Tests', () => {
|
||||
let rtmpPush: RtmpPush;
|
||||
const testMediaSourceUri = "https://storage.googleapis.com/phenix-testing-assets/timecodes/haivision-with-sei-system-source-timecodes-utc-conversion-counting-mode-h264-constrained-baseline-1920x1080p-cbr-8700kbps-60fps-aac-lc-48000hz-stereo-124kbps-5m00s.ts";
|
||||
const testRtmpIngestUri = "rtmp://ingest-stg.phenixrts.com:80/ingest";
|
||||
const testMediaSourceUri =
|
||||
'https://storage.googleapis.com/phenix-testing-assets/timecodes/haivision-with-sei-system-source-timecodes-utc-conversion-counting-mode-h264-constrained-baseline-1920x1080p-cbr-8700kbps-60fps-aac-lc-48000hz-stereo-124kbps-5m00s.ts';
|
||||
const testRtmpIngestUri = 'rtmp://ingest-stg.phenixrts.com:80/ingest';
|
||||
|
||||
beforeEach(() => {
|
||||
rtmpPush = new RtmpPush(testMediaSourceUri, testRtmpIngestUri);
|
||||
@@ -17,45 +18,45 @@ describe("RtmpPush Integration Tests", () => {
|
||||
}
|
||||
});
|
||||
|
||||
describe("Real Process Management", () => {
|
||||
it("should create instance with real URIs", () => {
|
||||
describe('Real Process Management', () => {
|
||||
it('should create instance with real URIs', () => {
|
||||
expect(rtmpPush).toBeInstanceOf(RtmpPush);
|
||||
expect(rtmpPush.mediaSourceUri).toBe(testMediaSourceUri);
|
||||
expect(rtmpPush.rtmpIngestUri).toBe(testRtmpIngestUri);
|
||||
});
|
||||
|
||||
it("should start and stop process (if ffmpeg is available)", () => {
|
||||
it('should start and stop process (if ffmpeg is available)', () => {
|
||||
// This test will only pass if ffmpeg is installed on the system
|
||||
const streamKey = "test-integration-stream";
|
||||
const capabilities = ["h264", "aac"];
|
||||
|
||||
const streamKey = 'test-integration-stream';
|
||||
const capabilities = ['h264', 'aac'];
|
||||
|
||||
try {
|
||||
rtmpPush.start(streamKey, capabilities);
|
||||
|
||||
|
||||
// Give it a moment to start
|
||||
Bun.sleepSync(100);
|
||||
|
||||
|
||||
expect(rtmpPush.isRunning()).toBe(true);
|
||||
|
||||
|
||||
rtmpPush.stop();
|
||||
|
||||
|
||||
// Give it a moment to stop
|
||||
Bun.sleepSync(100);
|
||||
|
||||
|
||||
expect(rtmpPush.isRunning()).toBe(false);
|
||||
} catch (error) {
|
||||
// If ffmpeg is not available, this test should be skipped
|
||||
console.log("Skipping integration test - ffmpeg may not be available:", error);
|
||||
console.log('Skipping integration test - ffmpeg may not be available:', error);
|
||||
expect(true).toBe(true); // Mark as passed
|
||||
}
|
||||
});
|
||||
|
||||
it("should handle invalid ffmpeg gracefully", () => {
|
||||
it('should handle invalid ffmpeg gracefully', () => {
|
||||
// Test with a non-existent command
|
||||
const invalidRtmpPush = new RtmpPush("invalid://uri", "invalid://rtmp");
|
||||
|
||||
const invalidRtmpPush = new RtmpPush('invalid://uri', 'invalid://rtmp');
|
||||
|
||||
try {
|
||||
invalidRtmpPush.start("test", ["h264"]);
|
||||
invalidRtmpPush.start('test', ['h264']);
|
||||
expect(invalidRtmpPush.isRunning()).toBe(false);
|
||||
} catch (error) {
|
||||
// Expected to fail
|
||||
@@ -64,48 +65,40 @@ describe("RtmpPush Integration Tests", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("URI Construction", () => {
|
||||
it("should construct valid RTMP URIs", () => {
|
||||
const streamKey = "test-stream-key";
|
||||
const capabilities = ["h264", "aac", "stereo"];
|
||||
|
||||
describe('URI Construction', () => {
|
||||
it('should construct valid RTMP URIs', () => {
|
||||
const streamKey = 'test-stream-key';
|
||||
const capabilities = ['h264', 'aac', 'stereo'];
|
||||
|
||||
const expectedUri = `${testRtmpIngestUri}/${streamKey};capabilities=${capabilities.join(',')};tags=`;
|
||||
|
||||
|
||||
// The URI should be properly formatted
|
||||
expect(expectedUri).toContain(streamKey);
|
||||
expect(expectedUri).toContain(capabilities.join(','));
|
||||
expect(expectedUri).toContain(";capabilities=");
|
||||
expect(expectedUri).toContain(";tags=");
|
||||
expect(expectedUri).toContain(';capabilities=');
|
||||
expect(expectedUri).toContain(';tags=');
|
||||
});
|
||||
|
||||
it("should handle various stream key formats", () => {
|
||||
const testCases = [
|
||||
"simple-key",
|
||||
"key_with_underscores",
|
||||
"key-with-dashes",
|
||||
"key123",
|
||||
"key!@#$%^&*()",
|
||||
"key with spaces",
|
||||
"key.with.dots"
|
||||
];
|
||||
|
||||
it('should handle various stream key formats', () => {
|
||||
const testCases = ['simple-key', 'key_with_underscores', 'key-with-dashes', 'key123', 'key!@#$%^&*()', 'key with spaces', 'key.with.dots'];
|
||||
|
||||
testCases.forEach(streamKey => {
|
||||
const capabilities = ["h264"];
|
||||
const capabilities = ['h264'];
|
||||
const expectedUri = `${testRtmpIngestUri}/${streamKey};capabilities=${capabilities.join(',')};tags=`;
|
||||
|
||||
|
||||
expect(expectedUri).toContain(streamKey);
|
||||
expect(expectedUri).toContain(";capabilities=h264;tags=");
|
||||
expect(expectedUri).toContain(';capabilities=h264;tags=');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("Error Handling", () => {
|
||||
it("should handle network errors gracefully", () => {
|
||||
const invalidMediaUri = "https://invalid-domain-that-does-not-exist.com/video.ts";
|
||||
describe('Error Handling', () => {
|
||||
it('should handle network errors gracefully', () => {
|
||||
const invalidMediaUri = 'https://invalid-domain-that-does-not-exist.com/video.ts';
|
||||
const invalidRtmpPush = new RtmpPush(invalidMediaUri, testRtmpIngestUri);
|
||||
|
||||
|
||||
try {
|
||||
invalidRtmpPush.start("test", ["h264"]);
|
||||
invalidRtmpPush.start('test', ['h264']);
|
||||
// If it doesn't throw, it should at least not be running
|
||||
expect(invalidRtmpPush.isRunning()).toBe(false);
|
||||
} catch (error) {
|
||||
@@ -114,12 +107,12 @@ describe("RtmpPush Integration Tests", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("should handle invalid RTMP URIs", () => {
|
||||
const invalidRtmpUri = "invalid://rtmp-uri";
|
||||
it('should handle invalid RTMP URIs', () => {
|
||||
const invalidRtmpUri = 'invalid://rtmp-uri';
|
||||
const invalidRtmpPush = new RtmpPush(testMediaSourceUri, invalidRtmpUri);
|
||||
|
||||
|
||||
try {
|
||||
invalidRtmpPush.start("test", ["h264"]);
|
||||
invalidRtmpPush.start('test', ['h264']);
|
||||
// If it doesn't throw, it should at least not be running
|
||||
expect(invalidRtmpPush.isRunning()).toBe(false);
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user