Merge branch 'master' into 2257-inequality-conditions
[arvados.git] / services / api / test / unit / blob_test.rb
1 require 'test_helper'
2
3 class BlobTest < ActiveSupport::TestCase
4   @@api_token = rand(2**512).to_s(36)[0..49]
5   @@key = rand(2**2048).to_s(36)
6   @@blob_data = 'foo'
7   @@blob_locator = Digest::MD5.hexdigest(@@blob_data) +
8     '+' + @@blob_data.size.to_s
9
10   test 'correct' do
11     signed = Blob.sign_locator @@blob_locator, api_token: @@api_token, key: @@key
12     assert_equal true, Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
13   end
14
15   test 'expired' do
16     signed = Blob.sign_locator @@blob_locator, api_token: @@api_token, key: @@key, ttl: -1
17     assert_raise Blob::InvalidSignatureError do
18       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
19     end
20   end
21
22   test 'expired, but no raise' do
23     signed = Blob.sign_locator @@blob_locator, api_token: @@api_token, key: @@key, ttl: -1
24     assert_equal false, Blob.verify_signature(signed,
25                                               api_token: @@api_token,
26                                               key: @@key)
27   end
28
29   test 'bogus, wrong block hash' do
30     signed = Blob.sign_locator @@blob_locator, api_token: @@api_token, key: @@key
31     assert_raise Blob::InvalidSignatureError do
32       Blob.verify_signature!(signed.sub('acbd','abcd'), api_token: @@api_token, key: @@key)
33     end
34   end
35
36   test 'bogus, expired' do
37     signed = 'acbd18db4cc2f85cedef654fccc4a4d8+3+Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@531641bf'
38     assert_raises Blob::InvalidSignatureError do
39       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
40     end
41   end
42
43   test 'bogus, wrong key' do
44     signed = Blob.sign_locator(@@blob_locator,
45                                api_token: @@api_token,
46                                key: (@@key+'x'))
47     assert_raise Blob::InvalidSignatureError do
48       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
49     end
50   end
51
52   test 'bogus, wrong api token' do
53     signed = Blob.sign_locator(@@blob_locator,
54                                api_token: @@api_token.reverse,
55                                key: @@key)
56     assert_raise Blob::InvalidSignatureError do
57       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
58     end
59   end
60
61   test 'bogus, signature format 1' do
62     signed = 'acbd18db4cc2f85cedef654fccc4a4d8+3+Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@'
63     assert_raise Blob::InvalidSignatureError do
64       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
65     end
66   end
67
68   test 'bogus, signature format 2' do
69     signed = 'acbd18db4cc2f85cedef654fccc4a4d8+3+A@531641bf'
70     assert_raise Blob::InvalidSignatureError do
71       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
72     end
73   end
74
75   test 'bogus, signature format 3' do
76     signed = 'acbd18db4cc2f85cedef654fccc4a4d8+3+Axyzzy@531641bf'
77     assert_raise Blob::InvalidSignatureError do
78       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
79     end
80   end
81
82   test 'bogus, timestamp format' do
83     signed = 'acbd18db4cc2f85cedef654fccc4a4d8+3+Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@xyzzy'
84     assert_raise Blob::InvalidSignatureError do
85       Blob.verify_signature!(signed, api_token: @@api_token, key: @@key)
86     end
87   end
88
89   test 'no signature at all' do
90     assert_raise Blob::InvalidSignatureError do
91       Blob.verify_signature!(@@blob_locator, api_token: @@api_token, key: @@key)
92     end
93   end
94 end