azure 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +36 -0
  3. data/README.md +3 -0
  4. data/Rakefile +81 -0
  5. data/azure.gemspec +20 -9
  6. data/lib/azure.rb +4 -0
  7. data/lib/azure/atom.rb +170 -0
  8. data/lib/azure/auth.rb +29 -0
  9. data/lib/azure/blobs.rb +620 -0
  10. data/lib/azure/blobs/blob.rb +360 -0
  11. data/lib/azure/blobs/container.rb +209 -0
  12. data/lib/azure/blobs/service.rb +396 -0
  13. data/lib/azure/blobs/shared_access_signature.rb +84 -0
  14. data/lib/azure/blobs/uri.rb +60 -0
  15. data/lib/azure/configuration.rb +121 -0
  16. data/lib/azure/core/auth/shared_key.rb +95 -0
  17. data/lib/azure/core/auth/shared_key_lite.rb +34 -0
  18. data/lib/azure/core/collection.rb +118 -0
  19. data/lib/azure/core/service.rb +43 -0
  20. data/lib/azure/core/signer.rb +32 -0
  21. data/lib/azure/core/utils/interval.rb +97 -0
  22. data/lib/azure/core/utils/queryable.rb +74 -0
  23. data/lib/azure/core/utils/storage_service_properties.rb +83 -0
  24. data/lib/azure/core/utils/string.rb +59 -0
  25. data/lib/azure/error.rb +72 -0
  26. data/lib/azure/queues.rb +272 -0
  27. data/lib/azure/queues/message.rb +174 -0
  28. data/lib/azure/queues/queue.rb +187 -0
  29. data/lib/azure/queues/service.rb +263 -0
  30. data/lib/azure/queues/service_properties.rb +152 -0
  31. data/lib/azure/queues/uri.rb +78 -0
  32. data/lib/azure/request.rb +102 -0
  33. data/lib/azure/response.rb +93 -0
  34. data/lib/azure/service_bus.rb +4 -0
  35. data/lib/azure/service_bus/auth/authorizer.rb +22 -0
  36. data/lib/azure/service_bus/auth/uri.rb +52 -0
  37. data/lib/azure/service_bus/auth/wrap.rb +37 -0
  38. data/lib/azure/service_bus/auth/wrap_service.rb +76 -0
  39. data/lib/azure/service_bus/auth/wrap_token.rb +45 -0
  40. data/lib/azure/service_bus/auth/wrap_token_manager.rb +46 -0
  41. data/lib/azure/service_bus/brokered_message.rb +139 -0
  42. data/lib/azure/service_bus/brokered_message_serializer.rb +113 -0
  43. data/lib/azure/service_bus/queues.rb +194 -0
  44. data/lib/azure/service_bus/queues/queue.rb +100 -0
  45. data/lib/azure/service_bus/queues/queue_serializer.rb +51 -0
  46. data/lib/azure/service_bus/queues/service.rb +154 -0
  47. data/lib/azure/service_bus/queues/uri.rb +80 -0
  48. data/lib/azure/service_bus/rules.rb +110 -0
  49. data/lib/azure/service_bus/rules/rule.rb +97 -0
  50. data/lib/azure/service_bus/rules/service.rb +122 -0
  51. data/lib/azure/service_bus/rules/uri.rb +39 -0
  52. data/lib/azure/service_bus/service_bus_service.rb +22 -0
  53. data/lib/azure/service_bus/subscriptions.rb +170 -0
  54. data/lib/azure/service_bus/subscriptions/service.rb +133 -0
  55. data/lib/azure/service_bus/subscriptions/subscription.rb +164 -0
  56. data/lib/azure/service_bus/subscriptions/subscription_serializer.rb +74 -0
  57. data/lib/azure/service_bus/subscriptions/uri.rb +71 -0
  58. data/lib/azure/service_bus/topics.rb +120 -0
  59. data/lib/azure/service_bus/topics/service.rb +98 -0
  60. data/lib/azure/service_bus/topics/topic.rb +122 -0
  61. data/lib/azure/service_bus/topics/topic_serializer.rb +44 -0
  62. data/lib/azure/service_bus/topics/uri.rb +58 -0
  63. data/lib/azure/service_runtime/client/goal_state_pipe_monitor.rb +21 -0
  64. data/lib/azure/service_runtime/client/goal_state_protocol.rb +18 -0
  65. data/lib/azure/service_runtime/client/runtime_client.rb +135 -0
  66. data/lib/azure/service_runtime/deployment.rb +24 -0
  67. data/lib/azure/service_runtime/local_resource.rb +15 -0
  68. data/lib/azure/service_runtime/role.rb +17 -0
  69. data/lib/azure/service_runtime/role_environment.rb +206 -0
  70. data/lib/azure/service_runtime/role_environment_change.rb +32 -0
  71. data/lib/azure/service_runtime/role_instance.rb +35 -0
  72. data/lib/azure/service_runtime/role_instance_endpoint.rb +14 -0
  73. data/lib/azure/tables.rb +215 -0
  74. data/lib/azure/tables/auth/shared_key.rb +71 -0
  75. data/lib/azure/tables/auth/shared_key_lite.rb +30 -0
  76. data/lib/azure/tables/entities_collection.rb +66 -0
  77. data/lib/azure/tables/entity.rb +127 -0
  78. data/lib/azure/tables/service.rb +211 -0
  79. data/lib/azure/tables/table.rb +129 -0
  80. data/lib/azure/tables/tables_collection.rb +62 -0
  81. data/lib/azure/tables/types.rb +65 -0
  82. data/lib/azure/tables/uri.rb +62 -0
  83. data/test/fixtures/32px-fulls-black.jpg +0 -0
  84. data/test/fixtures/all_containers.xml +20 -0
  85. data/test/fixtures/all_tables.xml +22 -0
  86. data/test/fixtures/create_table_response_entry.xml +15 -0
  87. data/test/fixtures/error.xml +5 -0
  88. data/test/fixtures/insert_entity_response_entry.xml +25 -0
  89. data/test/fixtures/messages.xml +12 -0
  90. data/test/fixtures/query_entities_empty_response.xml +7 -0
  91. data/test/fixtures/query_entities_response.xml +45 -0
  92. data/test/fixtures/queue_service_properties.xml +22 -0
  93. data/test/fixtures/queue_service_properties_original.xml +19 -0
  94. data/test/fixtures/queues.xml +16 -0
  95. data/test/fixtures/sb_default_create_queue_response.xml +23 -0
  96. data/test/fixtures/sb_default_create_topic_response.xml +18 -0
  97. data/test/fixtures/sb_get_access_token_response.txt +1 -0
  98. data/test/fixtures/sb_queues_runtime_peek_message_response_headers.txt +9 -0
  99. data/test/integration/blobs/auth_test.rb +19 -0
  100. data/test/integration/blobs/blob_test.rb +61 -0
  101. data/test/integration/blobs/clear_page_range_test.rb +19 -0
  102. data/test/integration/blobs/copy_test.rb +33 -0
  103. data/test/integration/blobs/create_blobs_test.rb +51 -0
  104. data/test/integration/blobs/create_container_test.rb +13 -0
  105. data/test/integration/blobs/create_snapshot_test.rb +17 -0
  106. data/test/integration/blobs/delete_blob_snapshots_test.rb +19 -0
  107. data/test/integration/blobs/delete_blobs_test.rb +25 -0
  108. data/test/integration/blobs/delete_container_test.rb +24 -0
  109. data/test/integration/blobs/delete_snapshot_test.rb +17 -0
  110. data/test/integration/blobs/get_blob_snapshot_test.rb +18 -0
  111. data/test/integration/blobs/get_blobs_test.rb +31 -0
  112. data/test/integration/blobs/get_page_range_test.rb +19 -0
  113. data/test/integration/blobs/list_blobs_test.rb +39 -0
  114. data/test/integration/blobs/list_containers_test.rb +28 -0
  115. data/test/integration/blobs/manage_blob_leases_test.rb +45 -0
  116. data/test/integration/blobs/manage_blob_metadata_test.rb +51 -0
  117. data/test/integration/blobs/manage_blob_properties_test.rb +25 -0
  118. data/test/integration/blobs/manage_blob_service_properties_test.rb +38 -0
  119. data/test/integration/blobs/manage_container_metadata_test.rb +46 -0
  120. data/test/integration/blobs/manage_container_permissions_test.rb +17 -0
  121. data/test/integration/blobs/update_page_range_test.rb +20 -0
  122. data/test/integration/queues/clear_messages_test.rb +22 -0
  123. data/test/integration/queues/create_queue_test.rb +13 -0
  124. data/test/integration/queues/delete_message_test.rb +42 -0
  125. data/test/integration/queues/delete_queue_test.rb +24 -0
  126. data/test/integration/queues/get_messages_test.rb +39 -0
  127. data/test/integration/queues/list_queues_test.rb +43 -0
  128. data/test/integration/queues/manage_queue_metadata_test.rb +45 -0
  129. data/test/integration/queues/manage_queue_service_properties_test.rb +27 -0
  130. data/test/integration/queues/peek_messages_test.rb +55 -0
  131. data/test/integration/queues/put_message_test.rb +31 -0
  132. data/test/integration/queues/update_message_test.rb +46 -0
  133. data/test/integration/service_bus/auth_test.rb +18 -0
  134. data/test/integration/service_bus/queues/create_queue_test.rb +25 -0
  135. data/test/integration/service_bus/queues/delete_message_from_queue_test.rb +29 -0
  136. data/test/integration/service_bus/queues/delete_queue_test.rb +25 -0
  137. data/test/integration/service_bus/queues/get_queue_test.rb +23 -0
  138. data/test/integration/service_bus/queues/list_queues_test.rb +39 -0
  139. data/test/integration/service_bus/queues/peek_message_from_queue_test.rb +34 -0
  140. data/test/integration/service_bus/queues/read_and_delete_message_from_queue_test.rb +31 -0
  141. data/test/integration/service_bus/queues/send_message_to_queue_test.rb +22 -0
  142. data/test/integration/service_bus/queues/unlock_message_from_queue_test.rb +36 -0
  143. data/test/integration/service_bus/rules/create_rule_test.rb +19 -0
  144. data/test/integration/service_bus/rules/delete_rule_test.rb +17 -0
  145. data/test/integration/service_bus/rules/get_rule_test.rb +21 -0
  146. data/test/integration/service_bus/rules/list_rules_test.rb +24 -0
  147. data/test/integration/service_bus/rules/rule_test.rb +16 -0
  148. data/test/integration/service_bus/subscriptions/create_subscription_test.rb +25 -0
  149. data/test/integration/service_bus/subscriptions/delete_message_from_subscription_test.rb +31 -0
  150. data/test/integration/service_bus/subscriptions/delete_subscription_test.rb +30 -0
  151. data/test/integration/service_bus/subscriptions/fetch_subscription_test.rb +28 -0
  152. data/test/integration/service_bus/subscriptions/list_subscriptions_test.rb +23 -0
  153. data/test/integration/service_bus/subscriptions/peek_lock_message_from_subscription_test.rb +42 -0
  154. data/test/integration/service_bus/subscriptions/read_delete_message_from_subscription_test.rb +36 -0
  155. data/test/integration/service_bus/subscriptions/subscription_test.rb +31 -0
  156. data/test/integration/service_bus/subscriptions/unlock_message_from_subscription_test.rb +43 -0
  157. data/test/integration/service_bus/topics/create_topic_test.rb +25 -0
  158. data/test/integration/service_bus/topics/delete_topic_test.rb +25 -0
  159. data/test/integration/service_bus/topics/get_topic_test.rb +23 -0
  160. data/test/integration/service_bus/topics/list_topics_test.rb +39 -0
  161. data/test/integration/service_bus/topics/send_message_to_topic_test.rb +23 -0
  162. data/test/integration/tables/auth_test.rb +29 -0
  163. data/test/integration/tables/creating_tables_test.rb +16 -0
  164. data/test/integration/tables/delete_entity_test.rb +39 -0
  165. data/test/integration/tables/deleting_table_test.rb +22 -0
  166. data/test/integration/tables/insert_entity_test.rb +23 -0
  167. data/test/integration/tables/merge_entity_test.rb +28 -0
  168. data/test/integration/tables/query_entities_test.rb +131 -0
  169. data/test/integration/tables/query_tables_test.rb +63 -0
  170. data/test/integration/tables/update_entity_test.rb +54 -0
  171. data/test/integration/test_helper.rb +14 -0
  172. data/test/support/blobs.rb +12 -0
  173. data/test/support/env.rb +5 -0
  174. data/test/support/fixtures.rb +22 -0
  175. data/test/support/stubs.rb +28 -0
  176. data/test/support/table_names.rb +44 -0
  177. data/test/test_helper.rb +10 -0
  178. data/test/unit/atom_test.rb +58 -0
  179. data/test/unit/auth_test.rb +24 -0
  180. data/test/unit/blobs/blob_test.rb +5 -0
  181. data/test/unit/blobs/container_test.rb +67 -0
  182. data/test/unit/blobs/service_test.rb +17 -0
  183. data/test/unit/blobs/shared_access_signature_test.rb +66 -0
  184. data/test/unit/blobs_test.rb +156 -0
  185. data/test/unit/core/service_test.rb +57 -0
  186. data/test/unit/core/utils/interval_test.rb +70 -0
  187. data/test/unit/core/utils/queryable_test.rb +69 -0
  188. data/test/unit/core/utils/storage_service_properties_test.rb +66 -0
  189. data/test/unit/error_test.rb +39 -0
  190. data/test/unit/queues/message_test.rb +40 -0
  191. data/test/unit/queues/queue_test.rb +64 -0
  192. data/test/unit/queues/service_properties.rb +35 -0
  193. data/test/unit/request_test.rb +38 -0
  194. data/test/unit/response_test.rb +43 -0
  195. data/test/unit/service_bus/auth/authorizer_test.rb +27 -0
  196. data/test/unit/service_bus/auth/wrap_token_test.rb +28 -0
  197. data/test/unit/service_bus/queues/queue_test.rb +38 -0
  198. data/test/unit/service_bus/topics/topic_test.rb +33 -0
  199. data/test/unit/service_runtime/data/goalstate.xml +9 -0
  200. data/test/unit/service_runtime/data/roleenvironmentdata.xml +29 -0
  201. data/test/unit/service_runtime/data/runtime.xml +6 -0
  202. data/test/unit/service_runtime/role_environment_test.rb +144 -0
  203. data/test/unit/tables/auth/shared_key_lite_test.rb +39 -0
  204. data/test/unit/tables/auth/shared_key_test.rb +45 -0
  205. data/test/unit/tables/entities_collection_test.rb +39 -0
  206. data/test/unit/tables/entity_test.rb +72 -0
  207. data/test/unit/tables/table_test.rb +57 -0
  208. data/test/unit/tables_test.rb +302 -0
  209. data/test/unit/types_test.rb +67 -0
  210. metadata +310 -47
  211. data/LICENSE +0 -0
  212. data/README +0 -0
@@ -0,0 +1,54 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Updating Entities" do
4
+ after do
5
+ TableNameHelper.clean
6
+ end
7
+
8
+ before do
9
+ @table = Azure::Tables::Table.create(TableNameHelper.name)
10
+ @entity = Azure::Tables::Entity.new(
11
+ "PartitionKey" => "part1",
12
+ "RowKey" => "row1",
13
+ "Address" => "Mountain View",
14
+ "FirstName" => "John",
15
+ "Email" => "john@example.com"
16
+ )
17
+ @table.insert(@entity)
18
+ end
19
+
20
+ it "should be able to update the entity from the entity itself" do
21
+ result = @entity.update(
22
+ "PartitionKey" => "part1",
23
+ "RowKey" => "row1",
24
+ "Address" => "New York"
25
+ )
26
+
27
+ result.must_equal true
28
+
29
+ @entity["Address"].must_equal "New York"
30
+ @entity["FirstName"].must_equal nil
31
+
32
+ # TODO: Load the Entity to check if the properties were updated.
33
+ end
34
+
35
+ it "fails when it tries to update a stale entity" do
36
+ stale_entity = @entity.dup
37
+
38
+ @entity.update(
39
+ "PartitionKey" => "part1",
40
+ "RowKey" => "row1",
41
+ "Address" => "New York"
42
+ )
43
+
44
+ result = stale_entity.update(
45
+ "PartitionKey" => "part1",
46
+ "RowKey" => "row1",
47
+ "Address" => "Chicago"
48
+ )
49
+ result.must_equal false
50
+
51
+ refute stale_entity.valid?
52
+ stale_entity.error.code.must_equal 412
53
+ end
54
+ end
@@ -0,0 +1,14 @@
1
+ require "test_helper"
2
+ require "azure"
3
+
4
+ Azure.configure do |config|
5
+ config.access_key = ENV.fetch("AZURE_ACCESS_KEY")
6
+ config.account_name = ENV.fetch("AZURE_ACCOUNT_NAME")
7
+ config.table_host = ENV.fetch("AZURE_TABLE_HOST")
8
+ config.blob_host = ENV.fetch("AZURE_BLOB_HOST")
9
+ config.queue_host = ENV.fetch("AZURE_QUEUE_HOST")
10
+
11
+ config.acs_namespace = ENV.fetch("AZURE_ACS_NAMESPACE")
12
+ config.sb_access_key = ENV.fetch("AZURE_SB_ACCESS_KEY")
13
+ config.sb_issuer = ENV.fetch("AZURE_SB_ISSUER")
14
+ end
@@ -0,0 +1,12 @@
1
+ def create_block_blob(options={})
2
+ metadata = options.fetch(:metadata, {})
3
+ filename = options.fetch(:filename, Fixtures["32px-fulls-black.jpg"].to_path)
4
+ name = options.fetch(:name, "myblob")
5
+ container = options.fetch(:container, @container)
6
+
7
+ Azure::Blobs.create_block_blob(container, name, filename, metadata)
8
+ end
9
+
10
+ def create_page_blob(container)
11
+ Azure::Blobs.create_page_blob(container, "myblob", {:size => 8192})
12
+ end
@@ -0,0 +1,5 @@
1
+ def skip_if_emulator
2
+ if Azure.config.table_host =~ /localhost/
3
+ skip "This test will only run in Live environment"
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ require "pathname"
2
+
3
+ Fixtures = Hash.new do |hash, fixture|
4
+ if path = Fixtures.xml?(fixture)
5
+ hash[fixture] = path.read
6
+ elsif path = Fixtures.file?(fixture)
7
+ hash[fixture] = path
8
+ end
9
+ end
10
+
11
+ def Fixtures.root
12
+ Pathname("../../fixtures").expand_path(__FILE__)
13
+ end
14
+
15
+ def Fixtures.file?(fixture)
16
+ path = root.join(fixture)
17
+ path.file? && path
18
+ end
19
+
20
+ def Fixtures.xml?(fixture)
21
+ file?("#{fixture}.xml")
22
+ end
@@ -0,0 +1,28 @@
1
+ require "ostruct"
2
+
3
+ module Stubs
4
+ def double(messages={})
5
+ OpenStruct.new(messages)
6
+ end
7
+ end
8
+
9
+ class MiniTest::Mock
10
+ def stub(name, value=nil)
11
+ metaclass = class << self; self; end
12
+ metaclass.send :define_method, name do |*args|
13
+ value
14
+ end
15
+ end
16
+
17
+ alias_method :expect_without_stub_support, :expect
18
+
19
+ def expect(name, *args)
20
+ metaclass = class << self; self; end
21
+ metaclass.send :undef_method, name if respond_to?(name)
22
+ expect_without_stub_support(name, *args)
23
+ end
24
+ end
25
+
26
+ class MiniTest::Unit::TestCase
27
+ include Stubs
28
+ end
@@ -0,0 +1,44 @@
1
+ class NameGenerator
2
+ def initialize(&cleanup_proc)
3
+ @cleanup_proc = cleanup_proc
4
+ @names = []
5
+ end
6
+
7
+ def name
8
+ alpha = ("a".."z").to_a
9
+ name = 10.times.map { alpha[Random.rand(alpha.size)]}.join
10
+ @names << name
11
+ name
12
+ end
13
+
14
+ def clean
15
+ @names.reject! do |name|
16
+ @cleanup_proc.call(name)
17
+ end
18
+ end
19
+ end
20
+
21
+ TableNameHelper = NameGenerator.new do |name|
22
+ table = Azure::Tables::Table.new(name)
23
+ Azure::Tables.delete(table)
24
+ end
25
+
26
+ ContainerNameHelper = NameGenerator.new do |name|
27
+ container = Azure::Blobs::Container.new(name)
28
+ container.delete
29
+ end
30
+
31
+ QueueNameHelper = NameGenerator.new do |name|
32
+ queue = Azure::Queues::Queue.new(name)
33
+ queue.delete
34
+ end
35
+
36
+ ServiceBusQueueNameHelper = NameGenerator.new do |name|
37
+ queue = Azure::ServiceBus::Queues::Queue.new(name)
38
+ queue.delete
39
+ end
40
+
41
+ ServiceBusTopicNameHelper = NameGenerator.new do |name|
42
+ topic = Azure::ServiceBus::Topics::Topic.new(name)
43
+ topic.delete
44
+ end
@@ -0,0 +1,10 @@
1
+ require "minitest/autorun"
2
+
3
+ begin
4
+ require "purdytest"
5
+ rescue LoadError
6
+ # Oh well, no colorized tests for you. You can always use minitest/pride if
7
+ # you want :P
8
+ end
9
+
10
+ Dir["./test/support/**/*.rb"].each { |dep| require dep }
@@ -0,0 +1,58 @@
1
+ require "test_helper"
2
+ require "azure/atom"
3
+
4
+ describe "Generating Atom entries with property lists" do
5
+ it "lists the properties in the node" do
6
+ entry = Atom::Entry.new do |entry|
7
+ entry.properties do |props|
8
+ props["Prop1Name"] = "Prop1Value"
9
+ props["Prop2Name"] = "Prop2Value"
10
+ end
11
+ end
12
+
13
+ entry.properties.first.name.must_equal "d:Prop1Name"
14
+ entry.properties.first.content.must_equal "Prop1Value"
15
+
16
+ entry.properties.last.name.must_equal "d:Prop2Name"
17
+ entry.properties.last.content.must_equal "Prop2Value"
18
+ end
19
+
20
+ it "can bulk-update a property list" do
21
+ entry = Atom::Entry.new do |entry|
22
+ entry.properties.merge(a: 1, b: 2, c: 3)
23
+ end
24
+
25
+ doc = XML::Parser.string(entry.to_xml).parse
26
+ doc.find("//d:a[text() = '1']").wont_be_empty
27
+ doc.find("//d:b[text() = '2']").wont_be_empty
28
+ doc.find("//d:c[text() = '3']").wont_be_empty
29
+ end
30
+
31
+ it "can set properties in several ways" do
32
+ entry = Atom::Entry.new do |entry|
33
+ entry.properties["a"] = 1
34
+ entry.properties.merge(b: 2, c: 3)
35
+ entry.properties do |props|
36
+ props["d"] = 4
37
+ end
38
+ end
39
+
40
+ doc = XML::Parser.string(entry.to_xml).parse
41
+ doc.find("//d:a[text() = '1']").wont_be_empty
42
+ doc.find("//d:b[text() = '2']").wont_be_empty
43
+ doc.find("//d:c[text() = '3']").wont_be_empty
44
+ doc.find("//d:d[text() = '4']").wont_be_empty
45
+ end
46
+
47
+ it "generates properties with the given data type" do
48
+ node = Azure::Atom::Property.new("name", "value")
49
+ node["m:type"].must_equal "Edm.String"
50
+ end
51
+
52
+ it "generates properties with the given data name" do
53
+ node = Azure::Atom::Property.new("firstName", "value")
54
+ node.name.must_equal "d:firstName"
55
+ node = Azure::Atom::Property.new(:firstName, "value")
56
+ node.name.must_equal "d:firstName"
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ require "test_helper"
2
+ require "azure/auth"
3
+
4
+ describe Azure::Auth do
5
+ before do
6
+ uri = double(path: "/path")
7
+
8
+ @signer = MiniTest::Mock.new
9
+ @signer.stub(:name, "SharedKey")
10
+ @signer.stub(:sign, "Base64String==")
11
+
12
+ @request = MiniTest::Mock.new
13
+ @request.stub(:method, :get)
14
+ @request.stub(:uri, uri)
15
+ @request.stub(:headers, {})
16
+ end
17
+
18
+ it "generates a proper Authorization header" do
19
+ auth = Azure::Auth.new("account-name")
20
+ auth.sign(@request, @signer)
21
+
22
+ @request.headers["Authorization"].must_equal "SharedKey account-name:Base64String=="
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ require "test_helper"
2
+ require "azure/blobs/blob"
3
+
4
+ describe Azure::Blobs::Blob do
5
+ end
@@ -0,0 +1,67 @@
1
+ require "test_helper"
2
+ require "azure/blobs/container"
3
+
4
+ describe Azure::Blobs::Container do
5
+ describe ".from_node" do
6
+ let :node do
7
+ Nokogiri::XML(Fixtures[:all_containers]) % "Container"
8
+ end
9
+
10
+ subject do
11
+ Azure::Blobs::Container.from_node(node)
12
+ end
13
+
14
+ it "gets the name out of the node" do
15
+ subject.name.must_equal "container-name"
16
+ end
17
+
18
+ it "gets the url out of the node" do
19
+ subject.url.must_equal URI("http://myaccount.blob.core.windows.net/container-name")
20
+ end
21
+
22
+ it "gets the properties out of the node" do
23
+ subject.properties["Last-Modified"].must_equal "date/time-value"
24
+ subject.properties["Etag"].must_equal "etag"
25
+ end
26
+
27
+ it "gets the metadata out of the node" do
28
+ subject.metadata["metadata-name"].must_equal "value"
29
+ end
30
+ end
31
+
32
+ let :service do
33
+ MiniTest::Mock.new
34
+ end
35
+
36
+ let :container do
37
+ Azure::Blobs::Container.new(
38
+ "name",
39
+ Azure::Blobs::URI.container("name"),
40
+ service
41
+ )
42
+ end
43
+
44
+ describe "#delete" do
45
+ it "delegates to the service's #delete_container implementation" do
46
+ service.expect(:delete_container, true, [container])
47
+ container.delete
48
+ service.verify
49
+ end
50
+ end
51
+
52
+ describe "#load_metadata!" do
53
+ it "delegates to the service's #load_container_metadata implementation" do
54
+ service.expect(:load_container_metadata, {}, [container])
55
+ container.load_metadata!
56
+ service.verify
57
+ end
58
+ end
59
+
60
+ describe "#save_metadata!" do
61
+ it "delegates to the service's #save_container_metadata implementation" do
62
+ service.expect(:save_container_metadata, {}, [container])
63
+ container.save_metadata!
64
+ service.verify
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+ require 'azure/blobs/service'
3
+
4
+ describe "Blob Services" do
5
+ describe "CreateBlockBlob" do
6
+ it "should raise an error if the file is bigger than 64 Mb" do
7
+ file_class = MiniTest::Mock.new
8
+ file_class.stub(:size, 100000000)
9
+
10
+ service = Azure::Blobs::Services::CreateBlockBlob.new("fake-access-key")
11
+
12
+ proc {
13
+ service.call("container_name", "blob_name", "filename", {}, file_class)
14
+ }.must_raise ArgumentError, "File exceeded 64Mb limit."
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ require "test_helper"
2
+ require "azure/blobs/shared_access_signature"
3
+
4
+ describe Azure::Blobs::SharedAccessSignature do
5
+ let :signer do
6
+ signer = MiniTest::Mock.new
7
+ signer.stub(:sign, "SignedString==")
8
+ signer
9
+ end
10
+
11
+ let :from do
12
+ double(iso8601: "from")
13
+ end
14
+
15
+ let :to do
16
+ double(iso8601: "to")
17
+ end
18
+
19
+ let :resource do
20
+ resource = MiniTest::Mock.new
21
+ resource.stub(:resource_type, "c")
22
+ resource.stub(:url, URI("http://example.org/path"))
23
+ resource
24
+ end
25
+
26
+ def build(permissions, from, to, id=nil)
27
+ Azure::Blobs::SharedAccessSignature.new(
28
+ permissions, from, to, id, "account_name", signer
29
+ )
30
+ end
31
+
32
+ it "generates the URI based on the resource's URI" do
33
+ sas = build("r", from, to)
34
+
35
+ uri = sas.url(resource)
36
+ query = sas.query_params(resource)
37
+
38
+ uri.host.must_equal resource.url.host
39
+ uri.query.must_equal ::URI.encode_www_form(query)
40
+ end
41
+
42
+ it "includes the specified permission string, start, and expiry date" do
43
+ params = build("r", from, to).query_params(resource)
44
+
45
+ params["sp"].must_equal "r"
46
+ params["st"].must_equal "from"
47
+ params["se"].must_equal "to"
48
+ end
49
+
50
+ it "includes the signedidentifier only if an identifier was provided" do
51
+ params = build("r", from, to).query_params(resource)
52
+ refute params.key?("si")
53
+
54
+ params = build("r", from, to, "id").query_params(resource)
55
+ params["si"].must_equal "id"
56
+ end
57
+
58
+ it "signs the provided parameters" do
59
+ signer.expect(:sign, "SignedString==", ["r\nfrom\nto\n/account_name/path\nid"])
60
+
61
+ params = build("r", from, to, "id").query_params(resource)
62
+ params["sig"].must_equal "SignedString=="
63
+
64
+ signer.verify
65
+ end
66
+ end