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 @@
1
+ wrap_access_token=net.windows.servicebus.action%3dListen%252cManage%252cSend%26http%253a%252f%252fschemas.microsoft.com%252faccesscontrolservice%252f2010%252f07%252fclaims%252fidentityprovider%3dhttps%253a%252f%252fgmonfort-sb.accesscontrol.windows.net%252f%26Audience%3dhttp%253a%252f%252fgmonfort.servicebus.windows.net%252f%2524Resources%252fQueues%26ExpiresOn%3d1338862002%26Issuer%3dhttps%253a%252f%252fgmonfort-sb.accesscontrol.windows.net%252f%26HMACSHA256%3dCFydD48JENdtcaha7TAcH8X4jXRKgFW6X7sRfbbrWBE%253d&wrap_access_token_expires_in=1199
@@ -0,0 +1,9 @@
1
+ {
2
+ "transfer-encoding" => "chunked",
3
+ "content-type" => "text/plain",
4
+ "location" => "https://gmonfort.servicebus.windows.net/fgdutifgta/messages/1/670b782c-7dff-4ac1-9858-fa412a66f9b0",
5
+ "server" => "Microsoft-HTTPAPI/2.0",
6
+ "brokerproperties" => '"DeliveryCount":1,"LockToken":"670b782c-7dff-4ac1-9858-fa412a66f9b0","LockedUntilUtc":"Tue, 12 Jun 2012 07:25:45 GMT","MessageId":"383598482f704d87bee3ea26a92b9ac0","SequenceNumber":1,"TimeToLive":922337203685.47754,"To":"yo"}',
7
+ "date" => "Tue, 12 Jun 2012 07:24:45 GMT",
8
+ "connection" => "close"
9
+ }
@@ -0,0 +1,19 @@
1
+ require "integration/test_helper"
2
+ require "azure/core/auth/shared_key"
3
+
4
+ describe "Authorizing against the server" do
5
+ let :uri do
6
+ URI(Azure.config.blob_host + "/?comp=list")
7
+ end
8
+
9
+ it "can make a simple request using SharedKey" do
10
+ auth = Azure::Auth.new
11
+ signer = Azure::Core::Auth::SharedKey.new
12
+
13
+ request = Azure::Request.new(:get, uri)
14
+ auth.sign(request, signer)
15
+ response = request.request!
16
+
17
+ response.code.must_equal 200
18
+ end
19
+ end
@@ -0,0 +1,61 @@
1
+ require "integration/test_helper"
2
+
3
+ describe Azure::Blobs::Blob do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ end
7
+
8
+ after do
9
+ ContainerNameHelper.clean
10
+ end
11
+
12
+ it "uploads a file in blocks of 1024 bytes from string filename" do
13
+ blob = create_block_blob(:filename => nil, :container => @container, :metadata => {:meta => "data"})
14
+ filename = File.expand_path("./test/fixtures/32px-fulls-black.jpg")
15
+ blob.update(filename, "image/jpeg", 1024).must_equal true
16
+ end
17
+
18
+ it "uploads a file in blocks of 1024 bytes from an io stream" do
19
+ blob = create_block_blob(:filename => nil, :container => @container, :metadata => {:meta => "data"})
20
+ filename = File.expand_path("./test/fixtures/32px-fulls-black.jpg")
21
+ file = File.open(filename)
22
+ blob.update(file, "image/jpeg", 1024).must_equal true
23
+ file.close
24
+ end
25
+
26
+ describe "Page Blobs" do
27
+ it "should update a range of pages" do
28
+ stream = "Hello World!" + (" " * (1024 - 12))
29
+ blob = Azure::Blobs.create_page_blob(@container, "myBlob")
30
+ blob.update_range(0, 1023, stream).must_equal true
31
+ end
32
+
33
+ it "should be able to clear a page range" do
34
+ stream = "Hello World!" + (" " * (1024 - 12))
35
+ blob = Azure::Blobs.create_page_blob(@container, "myBlob")
36
+ blob.update_range(0, 1023, stream).must_equal true
37
+ blob.clear_range(0, 1023).must_equal true
38
+ end
39
+
40
+ it "should retrive page range list" do
41
+ stream = "Hello World!" + (" " * (1024 - 12))
42
+ blob = Azure::Blobs.create_page_blob(@container, "myBlob")
43
+ blob.update_range(0, 1023, stream).must_equal true
44
+ blob.get_range.must_equal [0..1023]
45
+ end
46
+ end
47
+
48
+ it "should be able to create a snapshot from a blob" do
49
+ filename = File.expand_path("./test/fixtures/32px-fulls-black.jpg")
50
+ blob = Azure::Blobs.create_block_blob(@container, "myBlob", filename)
51
+ snapshot = blob.create_snapshot
52
+ snapshot.must_be :kind_of?, Azure::Blobs::Snapshot
53
+ end
54
+
55
+ it "should be able to delete blob snapshots" do
56
+ filename = File.expand_path("./test/fixtures/32px-fulls-black.jpg")
57
+ blob = Azure::Blobs.create_block_blob(@container, "myBlob", filename)
58
+ snapshot = blob.create_snapshot
59
+ snapshot.delete.must_equal true
60
+ end
61
+ end
@@ -0,0 +1,19 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Clear Page Range" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ end
8
+
9
+ after do
10
+ ContainerNameHelper.clean
11
+ end
12
+
13
+ it "should be able to clear a range of bytes" do
14
+ stream = "Hello World!" + (" " * (1024 - 12))
15
+
16
+ Azure::Blobs.update_page_range(@blob, 0, 1023, stream).must_equal true
17
+ Azure::Blobs.clear_page_range(@blob, 0, 1023).must_equal true
18
+ end
19
+ end
@@ -0,0 +1,33 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Copy Blobs" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @container_2 = Azure::Blobs.create_container(ContainerNameHelper.name)
7
+
8
+ @page_blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
9
+ @block_blob = Azure::Blobs.create_block_blob(@container, "myBlob2", Fixtures["32px-fulls-black.jpg"].to_path)
10
+ end
11
+
12
+ after do
13
+ ContainerNameHelper.clean
14
+ end
15
+
16
+ it "should be able to copy a page blob" do
17
+ result = Azure::Blobs.copy(@page_blob, @container_2, "myPageBlob", {"origin" => "copied"})
18
+ result.must_be :kind_of?, Azure::Blobs::PageBlob
19
+ result.metadata["origin"].must_equal "copied"
20
+ end
21
+
22
+ it "should be able to copy a block blob" do
23
+ result = Azure::Blobs.copy(@block_blob, @container_2, "myBlockBlob", {"origin" => "copied"})
24
+ result.must_be :kind_of?, Azure::Blobs::BlockBlob
25
+ result.metadata["origin"].must_equal "copied"
26
+ end
27
+
28
+ it "should be able to copy a blob snapshot" do
29
+ result = Azure::Blobs.copy(@block_blob.create_snapshot, @container_2, "myCopiedSnapshot", {"origin" => "copied"})
30
+ result.must_be :kind_of?, Azure::Blobs::Blob
31
+ result.metadata["origin"].must_equal "copied"
32
+ end
33
+ end
@@ -0,0 +1,51 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Creating a Blob" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ end
7
+
8
+ after do
9
+ ContainerNameHelper.clean
10
+ end
11
+
12
+ describe "Block Blobs" do
13
+ it "creates a small block blob" do
14
+ blob = create_block_blob
15
+ blob.must_be :kind_of?, Azure::Blobs::BlockBlob
16
+ end
17
+
18
+ it "putting a block in a blob" do
19
+ blob = create_block_blob(:filename => nil)
20
+
21
+ filename = File.expand_path("./test/fixtures/32px-fulls-black.jpg")
22
+ blockid = Base64.strict_encode64("#{blob.name}#{Time.now.to_f}")
23
+
24
+ res = Azure::Blobs.put_block(blob, File.open(filename) {|f| f.read}, blockid)
25
+
26
+ res.must_equal true
27
+ end
28
+
29
+ it "list exitent blobs" do
30
+ create_block_blob
31
+
32
+ res = Azure::Blobs.blobs(@container)
33
+
34
+ res.must_be :kind_of?, Array
35
+ res.size.must_equal 1
36
+ res.first.properties["BlobType"].must_equal "BlockBlob"
37
+ end
38
+
39
+ it "creates a blob with metadata" do
40
+ blob = create_block_blob(:metadata => {"name" => "John"})
41
+ blob.metadata["name"].must_equal "John"
42
+ end
43
+ end
44
+
45
+ describe "Page Blobs" do
46
+ it "creates a page block blob" do
47
+ blob = create_page_blob(@container)
48
+ blob.must_be :kind_of?, Azure::Blobs::PageBlob
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,13 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Creating a container" do
4
+ after do
5
+ ContainerNameHelper.clean
6
+ end
7
+
8
+ it "returns the container" do
9
+ container = Azure::Blobs.create_container(ContainerNameHelper.name)
10
+ container.must_be_kind_of Azure::Blobs::Container
11
+ assert container.valid?, "must be valid"
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Create Blob Snapshots" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ end
8
+
9
+ after do
10
+ ContainerNameHelper.clean
11
+ end
12
+
13
+ it "should be able to get a range of bytes" do
14
+ result = Azure::Blobs.create_snapshot(@blob)
15
+ result.must_be :kind_of?, Azure::Blobs::Snapshot
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Delete Blob Snapshots" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ end
8
+
9
+ after do
10
+ ContainerNameHelper.clean
11
+ end
12
+
13
+ it "should be able to delete only the snapshots belonging to this blob" do
14
+ snapshot = Azure::Blobs.create_snapshot(@blob)
15
+ Azure::Blobs.delete_blob_snapshots(@blob).must_equal true
16
+ blob = Azure::Blobs.get_blob(@container, @blob.name)
17
+ blob.error.must_be_nil
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Delete Blobs" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ end
7
+
8
+ after do
9
+ ContainerNameHelper.clean
10
+ end
11
+
12
+ it "should delete a blob without snapshots" do
13
+ blob = create_block_blob
14
+ blob.delete.must_equal true
15
+ end
16
+
17
+ it "should delete a blob with snapshots" do
18
+ blob = create_block_blob
19
+ snapshot = Azure::Blobs.create_snapshot(blob)
20
+ Azure::Blobs.delete_blob(blob, true).must_equal true
21
+ blob = Azure::Blobs.get_blob(@container, blob.name)
22
+ blob.error.wont_be_nil
23
+ end
24
+ end
25
+
@@ -0,0 +1,24 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Deleting a container" do
4
+ after do
5
+ ContainerNameHelper.clean
6
+ end
7
+
8
+ it "should return false if the container cannot be deleted" do
9
+ container = Azure::Blobs::Container.new(ContainerNameHelper.name)
10
+ response = container.delete
11
+
12
+ response.must_equal false
13
+ refute container.valid?
14
+ refute container.frozen?
15
+ end
16
+
17
+ it "should return true if the container can be deleted" do
18
+ container = Azure::Blobs.create_container(ContainerNameHelper.name)
19
+ response = container.delete
20
+
21
+ response.must_equal true
22
+ assert container.frozen?
23
+ end
24
+ end
@@ -0,0 +1,17 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Delete Snapshots" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ end
8
+
9
+ after do
10
+ ContainerNameHelper.clean
11
+ end
12
+
13
+ it "should be able to delete a snapshot" do
14
+ snapshot = Azure::Blobs.create_snapshot(@blob)
15
+ Azure::Blobs.delete_snapshot(snapshot).must_equal true
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Get Blob Snapshot" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ end
8
+
9
+ after do
10
+ ContainerNameHelper.clean
11
+ end
12
+
13
+ it "should be able to fetch a snapshot from a blob snapshot id" do
14
+ snapshot = Azure::Blobs.create_snapshot(@blob)
15
+ snapshot = Azure::Blobs.get_snapshot(@container, @blob.name, snapshot.id)
16
+ snapshot.must_be :kind_of?, Azure::Blobs::Snapshot
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Get Blobs" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ end
7
+
8
+ after do
9
+ ContainerNameHelper.clean
10
+ end
11
+
12
+ it "should get a blob" do
13
+ create_block_blob(:filename => Fixtures["32px-fulls-black.jpg"].to_path)
14
+ blob = Azure::Blobs.get_blob(@container, "myblob")
15
+
16
+ blob.must_be :kind_of?, Azure::Blobs::Blob
17
+ file_content = Base64.strict_encode64(Fixtures["32px-fulls-black.jpg"].read)
18
+ Base64.strict_encode64(blob.content).must_equal file_content
19
+ end
20
+
21
+ it "should fetch blob properties" do
22
+ blob = create_block_blob(:name => "myblob")
23
+ blob = Azure::Blobs.get_blob(@container, "myblob")
24
+ blob.properties["etag"].wont_be_nil
25
+ blob.properties["content-length"].wont_be_nil
26
+ blob.properties["content-type"].wont_be_nil
27
+ blob.properties["last-modified"].wont_be_nil
28
+ blob.properties["etag"].wont_be_nil
29
+ blob.properties["x-ms-lease-status"].wont_be_nil
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Get Page Range" do
4
+ before do
5
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ @blob = Azure::Blobs.create_page_blob(@container, "myBlob", 2048)
7
+ stream = "Hello World!" + (" " * (1024 - 12))
8
+ Azure::Blobs.update_page_range(@blob, 0, 1023, stream).must_equal true
9
+ end
10
+
11
+ after do
12
+ ContainerNameHelper.clean
13
+ end
14
+
15
+ it "should be able to get a range of bytes" do
16
+ result = Azure::Blobs.get_page_range(@blob)
17
+ result.must_be :kind_of?, Array
18
+ end
19
+ end
@@ -0,0 +1,39 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Listing blobs" do
4
+ let :container do
5
+ Azure::Blobs.create_container(ContainerNameHelper.name)
6
+ end
7
+
8
+ after do
9
+ ContainerNameHelper.clean
10
+ end
11
+
12
+ it "returns an empty list if there are no blobs in the container" do
13
+ blobs = container.blobs
14
+ blobs.must_be_empty
15
+ end
16
+
17
+ it "returns a list of blobs if one or more exist" do
18
+ blob_1 = create_block_blob(container: container, name: "blob_1.jpg")
19
+ blob_2 = create_block_blob(container: container, name: "blob_2.jpg")
20
+
21
+ blobs = container.blobs
22
+ blobs.must_include(blob_1)
23
+ blobs.must_include(blob_2)
24
+ end
25
+
26
+ it "includes the properties of the blobs" do
27
+ create_block_blob(:container => container)
28
+
29
+ blob = container.blobs.first
30
+ blob.properties.wont_be_empty
31
+ end
32
+
33
+ it "includes any metadata set in the blob" do
34
+ create_block_blob(:container => container, :metadata => {"Key" => "Value"})
35
+
36
+ blob = container.blobs.first
37
+ blob.metadata["Key"].must_equal "Value"
38
+ end
39
+ end
@@ -0,0 +1,28 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Listing containers" do
4
+ after do
5
+ ContainerNameHelper.clean
6
+ end
7
+
8
+ it "returns an empty list if there are no containers" do
9
+ all_containers = Azure::Blobs.containers
10
+ all_containers.must_be_empty
11
+ end
12
+
13
+ it "returns a list of containers if one or more exist" do
14
+ container_1 = Azure::Blobs.create_container(ContainerNameHelper.name)
15
+ container_2 = Azure::Blobs.create_container(ContainerNameHelper.name)
16
+
17
+ all_containers = Azure::Blobs.containers
18
+ all_containers.must_include(container_1)
19
+ all_containers.must_include(container_2)
20
+ end
21
+
22
+ it "loads the properties of each container" do
23
+ Azure::Blobs.create_container(ContainerNameHelper.name)
24
+ container = Azure::Blobs.containers.first
25
+
26
+ container.properties.wont_be_empty
27
+ end
28
+ end