github.com/qiniu/go-sdk/v7@v7.27.0/pili/url_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package pili
     5  
     6  import (
     7  	"fmt"
     8  	"net/url"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func TestManager_URL(t *testing.T) {
    15  	ast := assert.New(t)
    16  	manager := NewManager(ManagerConfig{AccessKey: "mockAK", SecretKey: "mockSK"})
    17  
    18  	url1 := manager.url("/v2/hubs")
    19  	ast.Equal("http://pili.qiniuapi.com/v2/hubs", url1)
    20  
    21  	url1 = manager.url("/v2/hubs/%s/streams", "test")
    22  	ast.Equal("http://pili.qiniuapi.com/v2/hubs/test/streams", url1)
    23  
    24  	query := url.Values{}
    25  	setQuery(query, "foo", "bar")
    26  	setQuery(query, "num", 0)
    27  	setQuery(query, "boolean", false)
    28  	url1 = manager.url("/v2/hubs/%s/streams", "test", query)
    29  	ast.Equal("http://pili.qiniuapi.com/v2/hubs/test/streams?foo=bar", url1)
    30  
    31  	url1 = manager.url("/v2/hubs/%s/streams", "test", query)
    32  	ast.Equal("http://pili.qiniuapi.com/v2/hubs/test/streams?foo=bar", url1)
    33  
    34  	url1 = manager.url("/v2/hubs/%s/security", "test")
    35  	ast.Equal("http://pili.qiniuapi.com/v2/hubs/test/security", url1)
    36  
    37  	url1 = manager.url("/v2/hubs/%s/domains/%s", "test", "testDomain")
    38  	ast.Equal("http://pili.qiniuapi.com/v2/hubs/test/domains/testDomain", url1)
    39  }
    40  
    41  func TestGenerateURL(t *testing.T) {
    42  	ast := assert.New(t)
    43  	hub := "hub"
    44  	domain := "domain.com"
    45  	streamTitle := "streamTitle"
    46  
    47  	publishURL := RTMPPublishURL(hub, domain, streamTitle)
    48  	ast.Equal("rtmp://domain.com/hub/streamTitle", publishURL)
    49  
    50  	publishURL = SRTPublishURL(hub, domain, streamTitle)
    51  	ast.Equal("srt://domain.com:1935?streamid=#!::h=hub/streamTitle,m=publish,domain=domain.com", publishURL)
    52  
    53  	playURL := RTMPPlayURL(hub, domain, streamTitle)
    54  	ast.Equal("rtmp://domain.com/hub/streamTitle", playURL)
    55  
    56  	playURL = HLSPlayURL(hub, domain, streamTitle)
    57  	ast.Equal("https://domain.com/hub/streamTitle.m3u8", playURL)
    58  
    59  	playURL = HDLPlayURL(hub, domain, streamTitle)
    60  	ast.Equal("https://domain.com/hub/streamTitle.flv", playURL)
    61  }
    62  
    63  func TestSignPublishURL(t *testing.T) {
    64  	ast := assert.New(t)
    65  
    66  	type instance struct {
    67  		publishURL         string
    68  		signPublishURLArgs SignPublishURLArgs
    69  		resultURL          string
    70  		err                error
    71  	}
    72  
    73  	instances := []instance{
    74  		{
    75  			// 静态鉴权
    76  			publishURL: "rtmp://publish.domain.com/hub/streamTitle?xyz=custom&key=abc",
    77  			signPublishURLArgs: SignPublishURLArgs{
    78  				SecurityType: SecurityTypeStatic,
    79  				PublishKey:   "test123",
    80  			},
    81  			resultURL: "rtmp://publish.domain.com/hub/streamTitle?key=test123&xyz=custom",
    82  			err:       nil,
    83  		},
    84  		{
    85  			// 限时鉴权
    86  			publishURL: "rtmp://publish.domain.com/hub/streamTitle?xyz=custom&token=abc",
    87  			signPublishURLArgs: SignPublishURLArgs{
    88  				SecurityType: SecurityTypeExpiry,
    89  				PublishKey:   "test123",
    90  				ExpireAt:     1634745600,
    91  			},
    92  			resultURL: "rtmp://publish.domain.com/hub/streamTitle?expire=1634745600&xyz=custom&token=fH7U5UgXdClDfeGmUKc6wrNzlho=",
    93  			err:       nil,
    94  		},
    95  		{
    96  			// 限时鉴权SK
    97  			publishURL: "rtmp://publish.domain.com/testhub/teststreamtitle",
    98  			signPublishURLArgs: SignPublishURLArgs{
    99  				SecurityType: SecurityTypeExpirySK,
   100  				ExpireAt:     1584522520,
   101  				AccessKey:    "7O7hf7Ld1RrC_fpZdFvU8aCgOPuhw2K4eapYOdII",
   102  				SecretKey:    "312ae9gd2BrCfpTdF4U8aIg9Puh62K4eEGY72Ea_",
   103  			},
   104  			resultURL: "rtmp://publish.domain.com/testhub/teststreamtitle?e=1584522520&token=7O7hf7Ld1RrC_fpZdFvU8aCgOPuhw2K4eapYOdII:NfI2OWGCMdFDTLOfeUd-zSPVrFY=",
   105  			err:       nil,
   106  		},
   107  		{
   108  			// 动态鉴权
   109  			publishURL: "rtmp://publish.domain.com/hub/streamTitle",
   110  			signPublishURLArgs: SignPublishURLArgs{
   111  				SecurityType: SecurityTypeDynamic,
   112  				PublishKey:   "test123",
   113  				Nonce:        123,
   114  			},
   115  			resultURL: "rtmp://publish.domain.com/hub/streamTitle?nonce=123&token=NFFIx_Hi5MdyJGj3Aubsf6jbma8=",
   116  			err:       nil,
   117  		},
   118  		{
   119  			// SRT + 限时鉴权
   120  			publishURL: "srt://publish.domain.com?streamid=#!::h=hub/streamTitle,m=publish,domain=publish.domain.com,xyz=custom",
   121  			signPublishURLArgs: SignPublishURLArgs{
   122  				SecurityType: SecurityTypeExpiry,
   123  				PublishKey:   "test123",
   124  				ExpireAt:     1634745600,
   125  			},
   126  			resultURL: "srt://publish.domain.com:1935?streamid=#!::h=hub/streamTitle,domain=publish.domain.com,expire=1634745600,m=publish,xyz=custom,token=GSmK7wau9MZ0rBCV-jDLmG4fUhM=",
   127  			err:       nil,
   128  		},
   129  	}
   130  
   131  	for i, inst := range instances {
   132  		resultURL, err := SignPublishURL(inst.publishURL, inst.signPublishURLArgs)
   133  		ast.Equal(inst.err, err, fmt.Sprintf("index:%d args:%v", i, inst))
   134  		if err == nil {
   135  			ast.Equal(inst.resultURL, resultURL, fmt.Sprintf("index:%d args:%v", i, inst))
   136  		}
   137  	}
   138  }
   139  
   140  func TestSignPlayURL(t *testing.T) {
   141  	ast := assert.New(t)
   142  
   143  	type instance struct {
   144  		playURL         string
   145  		signPlayURLArgs SignPlayURLArgs
   146  		resultURL       string
   147  		err             error
   148  	}
   149  
   150  	instances := []instance{
   151  		{
   152  			// 时间戳防盗链开始时间限制
   153  			playURL: "https://play.domain.com/hub/streamTitle",
   154  			signPlayURLArgs: SignPlayURLArgs{
   155  				SecurityType: SecurityTypeTsStartMD5,
   156  				Key:          "test123",
   157  				Timestamp:    1634745600,
   158  				Rule:         "$(key)$(path)$(_t)",
   159  				TsPart:       "t",
   160  				SignPart:     "sign",
   161  			},
   162  			resultURL: "https://play.domain.com/hub/streamTitle?sign=b1a151275da51ce22f50dd97df3cdc86&t=61703d00",
   163  			err:       nil,
   164  		},
   165  		{
   166  			// 时间戳防盗链结束时间限制
   167  			playURL: "https://play.domain.com/hub/streamTitle",
   168  			signPlayURLArgs: SignPlayURLArgs{
   169  				SecurityType: SecurityTypeTsExpireMD5,
   170  				Key:          "test123",
   171  				Timestamp:    1634745600,
   172  				Rule:         "$(key)$(path)$(_t)",
   173  				TsPart:       "t",
   174  				TsBase:       10,
   175  				SignPart:     "sign",
   176  			},
   177  			resultURL: "https://play.domain.com/hub/streamTitle?sign=2ddebda4405e928153a80163f6c49ee0&t=1634745600",
   178  			err:       nil,
   179  		},
   180  	}
   181  
   182  	for i, inst := range instances {
   183  		resultURL, err := SignPlayURL(inst.playURL, inst.signPlayURLArgs)
   184  		ast.Equal(inst.err, err, fmt.Sprintf("index:%d args:%v", i, inst))
   185  		if err == nil {
   186  			ast.Equal(inst.resultURL, resultURL, fmt.Sprintf("index:%d args:%v", i, inst))
   187  		}
   188  	}
   189  }