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 }