streaming

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

time_test.go (2569B)


      1 package sdp
      2 
      3 import (
      4 	"reflect"
      5 	"testing"
      6 	"time"
      7 )
      8 
      9 func TestParseTimes(t *testing.T) {
     10 	var cases = []struct {
     11 		when string
     12 		want [2]time.Time
     13 	}{
     14 		{"0 0", [2]time.Time{time.Time{}, time.Time{}}},
     15 		{
     16 			"3930082049 0",
     17 			[2]time.Time{
     18 				time.Date(2024, time.July, 16, 1, 27, 29, 0, time.UTC),
     19 				time.Time{},
     20 			},
     21 		},
     22 		{
     23 			"3724394400 3724398000",
     24 			[2]time.Time{
     25 				time.Date(2018, time.January, 8, 10, 0, 0, 0, time.UTC),
     26 				time.Date(2018, time.January, 8, 11, 0, 0, 0, time.UTC),
     27 			},
     28 		},
     29 		{
     30 			"3724484400 3724488000",
     31 			[2]time.Time{
     32 				time.Date(2018, time.January, 9, 11, 0, 0, 0, time.UTC),
     33 				time.Date(2018, time.January, 9, 12, 0, 0, 0, time.UTC),
     34 			},
     35 		},
     36 	}
     37 
     38 	for _, tt := range cases {
     39 		got, err := parseTimes(tt.when)
     40 		if err != nil {
     41 			t.Fatal(err)
     42 		}
     43 		if got != tt.want {
     44 			t.Errorf("parseTimes(%q) = %v, want %v", tt.when, got, tt.want)
     45 		}
     46 	}
     47 }
     48 
     49 // TODO(otl): tests for invalid repeat lines, e.g. missing fields, negative values
     50 
     51 func TestParseRepeat(t *testing.T) {
     52 	line := "604800 3600 0 90000"
     53 	want := Repeat{7 * 24 * time.Hour, time.Hour, []time.Duration{0, 25 * time.Hour}}
     54 	got, err := parseRepeat(line)
     55 	if err != nil {
     56 		t.Fatal(err)
     57 	}
     58 	if !reflect.DeepEqual(got, want) {
     59 		t.Errorf("parse repeat %s: got %v, want %v", line, got, want)
     60 	}
     61 }
     62 
     63 func TestDuration(t *testing.T) {
     64 	var cases = []struct{
     65 		s string
     66 		want time.Duration
     67 	}{
     68 		{"2d", 48*time.Hour},
     69 		{"-1d", -24*time.Hour},
     70 	}
     71 	for _, tt := range cases {
     72 		got, err := parseDuration(tt.s)
     73 		if err != nil {
     74 			t.Fatalf("parse %q: %v", tt.s, err)
     75 		}
     76 		if got != tt.want {
     77 			t.Errorf("parseDuration(%q) = %s, want %s", tt.s, got, tt.want)
     78 		}
     79 	}
     80 }
     81 
     82 func TestParseAdjustments(t *testing.T) {
     83 	var cases = []struct {
     84 		name    string
     85 		line    string
     86 		want    []TimeAdjustment
     87 		wantErr bool
     88 	}{
     89 		{"uneven", "3730922900 -2h 123456789", nil, true},
     90 		{"missing offset", "3730922900 ", nil, true},
     91 		{"garbage", "hello world!", nil, true},
     92 		{
     93 			"from rfc",
     94 			"3730928400 -1h 3749680800 0",
     95 			[]TimeAdjustment{
     96 				{time.Date(2018, time.March, 25, 1, 0, 0, 0, time.UTC), -time.Hour},
     97 				{time.Date(2018, time.October, 28, 2, 0, 0, 0, time.UTC), 0},
     98 			},
     99 			false,
    100 		},
    101 	}
    102 	for _, tt := range cases {
    103 		t.Run(tt.name, func(t *testing.T) {
    104 			got, err := parseAdjustments(tt.line)
    105 			if err != nil && !tt.wantErr {
    106 				t.Fatal(err)
    107 			} else if err == nil && tt.wantErr {
    108 				t.Error("unexpected nil error")
    109 			}
    110 			if !reflect.DeepEqual(got, tt.want) {
    111 				t.Errorf("parseAdjustments(%q) = %v, want %v", tt.line, got, tt.want)
    112 			}
    113 		})
    114 	}
    115 }