streaming

Media streaming and broadcast systems in Go
Log | Files | Refs | README | LICENSE

m3u8_test.go (1420B)


      1 package m3u8
      2 
      3 import (
      4 	"bytes"
      5 	"strings"
      6 	"testing"
      7 )
      8 
      9 func TestWriteSessionData(t *testing.T) {
     10 	var cases = []struct {
     11 		name  string
     12 		sd    SessionData
     13 		want  string
     14 		valid bool
     15 	}{
     16 		{
     17 			"all attributes set",
     18 			SessionData{ID: "1234", Value: "5678", Language: "indonesian"},
     19 			`#EXT-X-SESSION-DATA:DATA-ID="1234",VALUE="5678",LANGUAGE="indonesian"`,
     20 			true,
     21 		},
     22 		{
     23 			"language is optional",
     24 			SessionData{ID: "1234", URI: "hello/hi.json"},
     25 			`#EXT-X-SESSION-DATA:DATA-ID="1234",URI="hello/hi.json"`,
     26 			true,
     27 		},
     28 		{
     29 			"required attributes set(id, value or uri)",
     30 			SessionData{ID: "1234", Value: "5678"},
     31 			`#EXT-X-SESSION-DATA:DATA-ID="1234",VALUE="5678"`,
     32 			true,
     33 		},
     34 		{
     35 			"empty id",
     36 			SessionData{URI: "hello/hi.json"},
     37 			"",
     38 			false,
     39 		},
     40 		{
     41 			"both URI and Value set",
     42 			SessionData{ID: "1234", URI: "hello/hi.json", Value: "5678"},
     43 			"",
     44 			false,
     45 		},
     46 	}
     47 	for _, tt := range cases {
     48 		t.Run(tt.name, func(t *testing.T) {
     49 			buf := &bytes.Buffer{}
     50 			_, err := writeSessionData(buf, tt.sd)
     51 			if err == nil && !tt.valid {
     52 				t.Fatalf("nil error on invalid session data %v", tt.sd)
     53 			} else if err != nil && tt.valid {
     54 				t.Fatalf("non-nil error %v on valid session data", err)
     55 			}
     56 			got := strings.TrimSpace(buf.String()) // strip newlines
     57 			if got != tt.want {
     58 				t.Errorf("unexpected session data text")
     59 				t.Log("got:", got)
     60 				t.Log("want:", tt.want)
     61 			}
     62 		})
     63 	}
     64 }