add internal/infra/icecast_test.go
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package infra
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestIcecastSourceRequest(t *testing.T) {
|
||||
req := buildSourceRequest("hackme", SourceMeta{
|
||||
Mount: "/ai-radio.mp3",
|
||||
Name: "AI Radio",
|
||||
Genre: "AI Generated",
|
||||
Bitrate: "128",
|
||||
URL: "http://example.com",
|
||||
Description: "Endless AI radio",
|
||||
})
|
||||
if !strings.HasPrefix(req, "SOURCE hackme\r\n") {
|
||||
t.Fatalf("request must start with SOURCE <password>: %q", req[:40])
|
||||
}
|
||||
for _, want := range []string{
|
||||
"mount: /ai-radio.mp3\r\n",
|
||||
"ice-name: AI Radio\r\n",
|
||||
"ice-genre: AI Generated\r\n",
|
||||
"ice-bitrate: 128\r\n",
|
||||
"ice-public: 1\r\n",
|
||||
"content-type: audio/mpeg\r\n",
|
||||
} {
|
||||
if !strings.Contains(req, want) {
|
||||
t.Fatalf("missing header %q in:\n%s", want, req)
|
||||
}
|
||||
}
|
||||
// must terminate with blank line
|
||||
if !strings.HasSuffix(req, "\r\n\r\n") {
|
||||
t.Fatal("request must end with CRLF CRLF")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseIcecastResponse(t *testing.T) {
|
||||
ok, msg := parseSourceResponse("HTTP/1.1 200 OK\r\nicestreamid: abc\r\n\r\n")
|
||||
if !ok {
|
||||
t.Fatalf("200 should be accepted: %s", msg)
|
||||
}
|
||||
ok, msg = parseSourceResponse("HTTP/1.1 401 Unauthorized\r\n\r\n")
|
||||
if ok {
|
||||
t.Fatalf("401 must be rejected: %s", msg)
|
||||
}
|
||||
ok, _ = parseSourceResponse("HTTP/1.0 200 OK\r\n")
|
||||
if !ok {
|
||||
t.Fatal("HTTP/1.0 200 should be accepted")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user