|
- package icecast
-
- import (
- "bytes"
- "io"
- "testing"
- )
-
- func TestParseICYMetadataExtractsStreamTitle(t *testing.T) {
- meta := parseICYMetadata([]byte("StreamTitle='Artist - Track';StreamUrl='';"))
- if meta.StreamTitle != "Artist - Track" {
- t.Fatalf("streamTitle=%q want %q", meta.StreamTitle, "Artist - Track")
- }
- }
-
- func TestICYReaderStripsMetadataAndEmitsTitle(t *testing.T) {
- block := buildICYMetadataBlock("StreamTitle='Unit Test';")
- wire := append([]byte("ABCD"), byte(len(block)/16))
- wire = append(wire, block...)
- wire = append(wire, []byte("EFGH")...)
-
- var got icyMetadata
- r := newICYReader(bytes.NewReader(wire), 4, func(meta icyMetadata) {
- got = meta
- })
-
- audio, err := io.ReadAll(r)
- if err != nil {
- t.Fatalf("read: %v", err)
- }
- if string(audio) != "ABCDEFGH" {
- t.Fatalf("audio=%q want %q", string(audio), "ABCDEFGH")
- }
- if got.StreamTitle != "Unit Test" {
- t.Fatalf("streamTitle=%q want %q", got.StreamTitle, "Unit Test")
- }
- }
-
- func TestParseICYMetaInt(t *testing.T) {
- tests := []struct {
- name string
- in string
- want int
- wantErr bool
- }{
- {name: "empty", in: "", want: 0},
- {name: "valid", in: "16000", want: 16000},
- {name: "invalid", in: "x", wantErr: true},
- {name: "negative", in: "-1", wantErr: true},
- }
- for _, tc := range tests {
- tc := tc
- t.Run(tc.name, func(t *testing.T) {
- got, err := parseICYMetaInt(tc.in)
- if tc.wantErr {
- if err == nil {
- t.Fatalf("expected error for %q", tc.in)
- }
- return
- }
- if err != nil {
- t.Fatalf("parse: %v", err)
- }
- if got != tc.want {
- t.Fatalf("got=%d want %d", got, tc.want)
- }
- })
- }
- }
-
- func buildICYMetadataBlock(raw string) []byte {
- b := []byte(raw)
- if rem := len(b) % 16; rem != 0 {
- b = append(b, bytes.Repeat([]byte{0x00}, 16-rem)...)
- }
- return b
- }
|