From c1cd32257f377fdeb7b49c88c58b9a1fc4ca7d2e Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Mon, 26 Apr 2021 19:39:20 +0200 Subject: [PATCH] headers: add negative unit tests --- pkg/headers/auth.go | 2 +- pkg/headers/auth_test.go | 7 ++++- pkg/headers/rtpinfo_test.go | 5 +++- pkg/headers/session_test.go | 5 +++- pkg/headers/transport.go | 4 +-- pkg/headers/transport_test.go | 55 ++++++++++++++++++++++++++++++++++- 6 files changed, 71 insertions(+), 7 deletions(-) diff --git a/pkg/headers/auth.go b/pkg/headers/auth.go index 97585dd7..1e86a558 100644 --- a/pkg/headers/auth.go +++ b/pkg/headers/auth.go @@ -63,7 +63,7 @@ func (h *Auth) Read(v base.HeaderValue) error { i := strings.IndexByte(v0, ' ') if i < 0 { - return fmt.Errorf("unable to split between method and keys (%v)", v) + return fmt.Errorf("unable to split between method and keys (%v)", v0) } method, v0 := v0[:i], v0[i+1:] diff --git a/pkg/headers/auth_test.go b/pkg/headers/auth_test.go index 82f7610f..048fb391 100644 --- a/pkg/headers/auth_test.go +++ b/pkg/headers/auth_test.go @@ -196,28 +196,33 @@ func TestAuthReadError(t *testing.T) { for _, ca := range []struct { name string hv base.HeaderValue + err string }{ { "empty", base.HeaderValue{}, + "value not provided", }, { "2 values", base.HeaderValue{"a", "b"}, + "value provided multiple times ([a b])", }, { "no keys", base.HeaderValue{"Basic"}, + "unable to split between method and keys (Basic)", }, { "invalid method", base.HeaderValue{"Testing key1=val1"}, + "invalid method (Testing)", }, } { t.Run(ca.name, func(t *testing.T) { var h Auth err := h.Read(ca.hv) - require.Error(t, err) + require.Equal(t, ca.err, err.Error()) }) } } diff --git a/pkg/headers/rtpinfo_test.go b/pkg/headers/rtpinfo_test.go index 7a1ebb6e..9c4917b4 100644 --- a/pkg/headers/rtpinfo_test.go +++ b/pkg/headers/rtpinfo_test.go @@ -191,20 +191,23 @@ func TestRTPInfoReadError(t *testing.T) { for _, ca := range []struct { name string hv base.HeaderValue + err string }{ { "empty", base.HeaderValue{}, + "value not provided", }, { "2 values", base.HeaderValue{"a", "b"}, + "value provided multiple times ([a b])", }, } { t.Run(ca.name, func(t *testing.T) { var h RTPInfo err := h.Read(ca.hv) - require.Error(t, err) + require.Equal(t, ca.err, err.Error()) }) } } diff --git a/pkg/headers/session_test.go b/pkg/headers/session_test.go index 20b2acf3..f944a6f7 100644 --- a/pkg/headers/session_test.go +++ b/pkg/headers/session_test.go @@ -72,20 +72,23 @@ func TestSessionReadError(t *testing.T) { for _, ca := range []struct { name string hv base.HeaderValue + err string }{ { "empty", base.HeaderValue{}, + "value not provided", }, { "2 values", base.HeaderValue{"a", "b"}, + "value provided multiple times ([a b])", }, } { t.Run(ca.name, func(t *testing.T) { var h Session err := h.Read(ca.hv) - require.Error(t, err) + require.Equal(t, ca.err, err.Error()) }) } } diff --git a/pkg/headers/transport.go b/pkg/headers/transport.go index e0b5b466..d1d1ac1e 100644 --- a/pkg/headers/transport.go +++ b/pkg/headers/transport.go @@ -117,7 +117,7 @@ func (h *Transport) Read(v base.HeaderValue) error { h.Protocol = base.StreamProtocolTCP default: - return fmt.Errorf("invalid protocol (%v)", v) + return fmt.Errorf("invalid protocol (%v)", v0) } i = strings.IndexByte(v0, ';') @@ -137,7 +137,7 @@ func (h *Transport) Read(v base.HeaderValue) error { h.Delivery = &v default: - // cast is optional, go back + // delivery is optional, go back v0 = part + ";" + v0 } diff --git a/pkg/headers/transport_test.go b/pkg/headers/transport_test.go index 0ef7719c..c2a43790 100644 --- a/pkg/headers/transport_test.go +++ b/pkg/headers/transport_test.go @@ -137,20 +137,73 @@ func TestTransportReadError(t *testing.T) { for _, ca := range []struct { name string hv base.HeaderValue + err string }{ { "empty", base.HeaderValue{}, + "value not provided", }, { "2 values", base.HeaderValue{"a", "b"}, + "value provided multiple times ([a b])", + }, + { + "missing delivery", + base.HeaderValue{`RTP/AVP`}, + "unable to find key (;)", + }, + { + "invalid protocol", + base.HeaderValue{`invalid;unicast;client_port=14186-14187`}, + "invalid protocol (unicast;client_port=14186-14187)", + }, + { + "invalid client port 1", + base.HeaderValue{`RTP/AVP;unicast;client_port=aa-14187`}, + "invalid ports (aa-14187)", + }, + { + "invalid client port 2", + base.HeaderValue{`RTP/AVP;unicast;client_port=14186-aa`}, + "invalid ports (14186-aa)", + }, + { + "invalid server port 1", + base.HeaderValue{`RTP/AVP;unicast;server_port=aa-14187`}, + "invalid ports (aa-14187)", + }, + { + "invalid server port 2", + base.HeaderValue{`RTP/AVP;unicast;server_port=14186-aa`}, + "invalid ports (14186-aa)", + }, + { + "invalid interleaved port 1", + base.HeaderValue{`RTP/AVP;unicast;interleaved=aa-14187`}, + "invalid ports (aa-14187)", + }, + { + "invalid interleaved port 2", + base.HeaderValue{`RTP/AVP;unicast;interleaved=14186-aa`}, + "invalid ports (14186-aa)", + }, + { + "invalid ttl", + base.HeaderValue{`RTP/AVP;unicast;ttl=aa`}, + "strconv.ParseUint: parsing \"aa\": invalid syntax", + }, + { + "invalid mode", + base.HeaderValue{`RTP/AVP;unicast;mode=aa`}, + "invalid transport mode: 'aa'", }, } { t.Run(ca.name, func(t *testing.T) { var h Transport err := h.Read(ca.hv) - require.Error(t, err) + require.Equal(t, ca.err, err.Error()) }) } }