mirror of
				https://github.com/aler9/gortsplib
				synced 2025-11-01 02:52:36 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package headers
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/require"
 | |
| 
 | |
| 	"github.com/bluenviron/gortsplib/v4/pkg/base"
 | |
| )
 | |
| 
 | |
| var casesAuthorization = []struct {
 | |
| 	name string
 | |
| 	vin  base.HeaderValue
 | |
| 	vout base.HeaderValue
 | |
| 	h    Authorization
 | |
| }{
 | |
| 	{
 | |
| 		"basic",
 | |
| 		base.HeaderValue{"Basic bXl1c2VyOm15cGFzcw=="},
 | |
| 		base.HeaderValue{"Basic bXl1c2VyOm15cGFzcw=="},
 | |
| 		Authorization{
 | |
| 			Method:    AuthBasic,
 | |
| 			BasicUser: "myuser",
 | |
| 			BasicPass: "mypass",
 | |
| 		},
 | |
| 	},
 | |
| 	{
 | |
| 		"digest",
 | |
| 		base.HeaderValue{`Digest username="Mufasa", realm="testrealm@host.com", ` +
 | |
| 			`nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", ` +
 | |
| 			`uri="/dir/index.html", response="e966c932a9242554e42c8ee200cec7f6", opaque="5ccc069c403ebaf9f0171e9517f40e41"`},
 | |
| 		base.HeaderValue{`Digest username="Mufasa", realm="testrealm@host.com", ` +
 | |
| 			`nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", uri="/dir/index.html", ` +
 | |
| 			`response="e966c932a9242554e42c8ee200cec7f6", opaque="5ccc069c403ebaf9f0171e9517f40e41", algorithm="MD5"`},
 | |
| 		Authorization{
 | |
| 			Method:   AuthDigestMD5,
 | |
| 			Username: "Mufasa",
 | |
| 			Realm:    "testrealm@host.com",
 | |
| 			Nonce:    "dcd98b7102dd2f0e8b11d0f600bfb0c093",
 | |
| 			URI:      "/dir/index.html",
 | |
| 			Response: "e966c932a9242554e42c8ee200cec7f6",
 | |
| 			Opaque:   stringPtr("5ccc069c403ebaf9f0171e9517f40e41"),
 | |
| 		},
 | |
| 	},
 | |
| 	{
 | |
| 		"digest with empty field",
 | |
| 		base.HeaderValue{`Digest username="", realm="IPCAM", ` +
 | |
| 			`nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", ` +
 | |
| 			`response="c072ae90eb4a27f4cdcb90d62266b2a1"`},
 | |
| 		base.HeaderValue{`Digest username="", realm="IPCAM", ` +
 | |
| 			`nonce="5d17cd12b9fa8a85ac5ceef0926ea5a6", uri="rtsp://localhost:8554/mystream", ` +
 | |
| 			`response="c072ae90eb4a27f4cdcb90d62266b2a1", algorithm="MD5"`},
 | |
| 		Authorization{
 | |
| 			Method:   AuthDigestMD5,
 | |
| 			Username: "",
 | |
| 			Realm:    "IPCAM",
 | |
| 			Nonce:    "5d17cd12b9fa8a85ac5ceef0926ea5a6",
 | |
| 			URI:      "rtsp://localhost:8554/mystream",
 | |
| 			Response: "c072ae90eb4a27f4cdcb90d62266b2a1",
 | |
| 		},
 | |
| 	},
 | |
| 	{
 | |
| 		"digest sha256",
 | |
| 		base.HeaderValue{`Digest username="admin", realm="IP Camera(AB705)", ` +
 | |
| 			`nonce="1ad195c2b2ca5a03784e53f88e16f579", uri="rtsp://192.168.80.76/", ` +
 | |
| 			`response="9e2324f104f3ce507d17e44a78fc1293001fe84805bde65d2aaa9be97a5a8913", algorithm="SHA-256"`},
 | |
| 		base.HeaderValue{`Digest username="admin", realm="IP Camera(AB705)", ` +
 | |
| 			`nonce="1ad195c2b2ca5a03784e53f88e16f579", uri="rtsp://192.168.80.76/", ` +
 | |
| 			`response="9e2324f104f3ce507d17e44a78fc1293001fe84805bde65d2aaa9be97a5a8913", algorithm="SHA-256"`},
 | |
| 		Authorization{
 | |
| 			Method:   AuthDigestSHA256,
 | |
| 			Username: "admin",
 | |
| 			Realm:    "IP Camera(AB705)",
 | |
| 			Nonce:    "1ad195c2b2ca5a03784e53f88e16f579",
 | |
| 			URI:      "rtsp://192.168.80.76/",
 | |
| 			Response: "9e2324f104f3ce507d17e44a78fc1293001fe84805bde65d2aaa9be97a5a8913",
 | |
| 		},
 | |
| 	},
 | |
| }
 | |
| 
 | |
| func TestAuthorizationUnmarshal(t *testing.T) {
 | |
| 	for _, ca := range casesAuthorization {
 | |
| 		t.Run(ca.name, func(t *testing.T) {
 | |
| 			var h Authorization
 | |
| 			err := h.Unmarshal(ca.vin)
 | |
| 			require.NoError(t, err)
 | |
| 			require.Equal(t, ca.h, h)
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestAuthorizationMarshal(t *testing.T) {
 | |
| 	for _, ca := range casesAuthorization {
 | |
| 		t.Run(ca.name, func(t *testing.T) {
 | |
| 			vout := ca.h.Marshal()
 | |
| 			require.Equal(t, ca.vout, vout)
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func FuzzAuthorizationUnmarshal(f *testing.F) {
 | |
| 	for _, ca := range casesAuthorization {
 | |
| 		f.Add(ca.vin[0])
 | |
| 	}
 | |
| 
 | |
| 	f.Fuzz(func(t *testing.T, b string) {
 | |
| 		var h Authorization
 | |
| 		h.Unmarshal(base.HeaderValue{b}) //nolint:errcheck
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func TestAuthorizationAdditionalErrors(t *testing.T) {
 | |
| 	func() {
 | |
| 		var h Authorization
 | |
| 		err := h.Unmarshal(base.HeaderValue{})
 | |
| 		require.Error(t, err)
 | |
| 	}()
 | |
| 
 | |
| 	func() {
 | |
| 		var h Authorization
 | |
| 		err := h.Unmarshal(base.HeaderValue{"a", "b"})
 | |
| 		require.Error(t, err)
 | |
| 	}()
 | |
| }
 | 
