161
161
c.Assert(observed, Equals, expected)
164
type TestSign struct{}
166
var _ = Suite(&TestSign{})
168
func (suite *TestSign) TestSign(c *C) {
169
key := base64.StdEncoding.EncodeToString([]byte("dummykey"))
170
signable := "a-string-to-sign"
172
observed := sign(key, signable)
173
expected := "5j1DSsm07IEh3u9JQQd0KPwtM6pEGChzrAF7Zf/LxLc="
174
c.Assert(observed, Equals, expected)
164
177
type TestComposeAuthHeader struct{}
166
179
var _ = Suite(&TestComposeAuthHeader{})
303
316
"http://"+url.QueryEscape(account)+".blob.core.windows.net/"+url.QueryEscape(container)+"/"+url.QueryEscape(file))
319
func (suite *TestStorageContext) TestGetSignedFileURL(c *C) {
321
container := "container"
323
key := base64.StdEncoding.EncodeToString([]byte("dummykey"))
324
context := StorageContext{Account: account, Key: key}
325
expires := time.Now()
327
signedURL := context.GetAnonymousFileURL(container, file, expires)
328
// The only difference with the non-anon URL is the query string.
329
parsed, err := url.Parse(signedURL)
331
fileURL, err := url.Parse(context.GetFileURL(container, file))
333
c.Check(parsed.Scheme, Equals, fileURL.Scheme)
334
c.Check(parsed.Host, Equals, fileURL.Host)
335
c.Check(parsed.Path, Equals, fileURL.Path)
337
values, err := url.ParseQuery(parsed.RawQuery)
339
signature := values.Get("sig")
340
expectedSignature := getReadBlobAccessValues(container, file, account, key, expires).Get("sig")
341
c.Check(signature, Equals, expectedSignature)
306
344
func (suite *TestStorageContext) TestGetClientReturnsDefaultClient(c *C) {
307
345
context := &StorageContext{client: nil}
308
346
c.Assert(context.getClient(), Equals, http.DefaultClient)