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,45 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Manage Blob Leases" do
4
+
5
+ before do
6
+ @container = Azure::Blobs.create_container(ContainerNameHelper.name)
7
+ @blob = Azure::Blobs.create_block_blob(@container, "myBlob", nil)
8
+ end
9
+
10
+ after do
11
+ ContainerNameHelper.clean
12
+ end
13
+
14
+ it "should be able to acquire a lease" do
15
+ Azure::Blobs.lease(@blob, :acquire)
16
+ @blob.error.must_be_nil
17
+ @blob.lease_id.wont_be_nil
18
+ end
19
+
20
+ it "should fail trying to acquire a lease in a blob with an active lease" do
21
+ Azure::Blobs.lease(@blob, :acquire)
22
+ Azure::Blobs.lease(@blob, :acquire)
23
+ @blob.error.wont_be_nil
24
+ end
25
+
26
+ it "should be able to renew a lease" do
27
+ Azure::Blobs.lease(@blob, :acquire)
28
+ Azure::Blobs.lease(@blob, :renew)
29
+ @blob.error.must_be_nil
30
+ end
31
+
32
+ it "should be able to release a lease" do
33
+ Azure::Blobs.lease(@blob, :acquire)
34
+ Azure::Blobs.lease(@blob, :release)
35
+ Azure::Blobs.lease(@blob, :acquire)
36
+ @blob.error.must_be_nil
37
+ end
38
+
39
+ it "should be able to break a lease" do
40
+ Azure::Blobs.lease(@blob, :acquire)
41
+ Azure::Blobs.lease(@blob, :break)
42
+ Azure::Blobs.lease(@blob, :acquire)
43
+ @blob.error.wont_be_nil
44
+ end
45
+ end
@@ -0,0 +1,51 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Managing the blob's metadata" 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 "can set the metadata on blob creation (but changes key casing)" do
13
+ blob = Azure::Blobs.create_block_blob(
14
+ container,
15
+ "myblob.jpg",
16
+ Fixtures["32px-fulls-black.jpg"].to_path,
17
+ "Key" => "Value"
18
+ )
19
+
20
+ blob.metadata.clear
21
+ blob.load_metadata!
22
+ blob.metadata["key"].must_equal "Value"
23
+ end
24
+
25
+ it "gets the metadata when listing blobs" do
26
+ create_block_blob(:container => container, :metadata => {"Key" => "Value"})
27
+
28
+ blob = Azure::Blobs.blobs(container).first
29
+ blob.metadata["Key"].must_equal "Value"
30
+ end
31
+
32
+ it "force-loads the metadata when calling #load_metadata!" do
33
+ blob = create_block_blob(:container => container, :metadata => {"name" => "Xara"})
34
+ blob.metadata["name"] = "NotXara" # change the metadata locally
35
+ blob.load_metadata! # it gets replaced by the metadata on the server
36
+
37
+ blob.metadata["name"].must_equal "Xara"
38
+ end
39
+
40
+ it "can update the metadata on the server after you modify the hash" do
41
+ blob = create_block_blob(:container => container)
42
+ blob.metadata.update("name" => "Manu")
43
+
44
+ result = blob.save_metadata!
45
+ result.must_equal true
46
+
47
+ blob.metadata["name"] = "NotManu"
48
+ metadata = blob.load_metadata!
49
+ blob.metadata["name"].must_equal "Manu"
50
+ end
51
+ end
@@ -0,0 +1,25 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Managing the blob's properties" 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 set blob properties" do
13
+ # FIXME: Why do this if we're not checking for any property getting set?
14
+ blob = create_block_blob(:container => @container)
15
+ result = blob.save_properties!
16
+ result.must_equal true
17
+ end
18
+
19
+ it "force-loads the properties" do
20
+ blob = create_block_blob(:container => @container)
21
+ blob.properties.clear
22
+ blob.load_properties!
23
+ blob.properties["etag"].wont_be_nil
24
+ end
25
+ end
@@ -0,0 +1,38 @@
1
+ require "integration/test_helper"
2
+ require "azure/core/utils/storage_service_properties"
3
+
4
+ describe "Manage Blob Service Properties" do
5
+ it "should be able to set blob service properties" do
6
+
7
+ properties = {
8
+ "Logging" => {
9
+ "Version" => "1.0",
10
+ "Delete" => "true",
11
+ "Read" => "true",
12
+ "Write" => "true",
13
+ "RetentionPolicy" => {
14
+ "Enabled" => true,
15
+ "Days" => 7
16
+ }
17
+ },
18
+ "Metrics"=> {
19
+ "Version" => "1.0",
20
+ "Enabled" => "true",
21
+ "IncludeAPIs" => "false",
22
+ "RetentionPolicy" => {
23
+ "Enabled" => true,
24
+ "Days" => 7
25
+ }
26
+ }
27
+ }
28
+
29
+ Azure::Blobs.set_service_properties(properties).must_equal true
30
+ end
31
+
32
+ it "should be able to get blob service properties" do
33
+ response = Azure::Blobs.get_service_properties
34
+ response.must_be :kind_of?, Hash
35
+ response["Metrics"].must_be :kind_of?, Hash
36
+ response["Metrics"]["Version"].must_equal "1.0"
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Managing the container's metadata" do
4
+ after do
5
+ ContainerNameHelper.clean
6
+ end
7
+
8
+ it "sets metadata on container creation (Azure changes the casing of metadata keys)" do
9
+ Azure::Blobs.create_container(
10
+ ContainerNameHelper.name,
11
+ "UppercaseKey" => "U", "downcaseKey" => "D"
12
+ )
13
+
14
+ # FIXME: Change this once we have a way of finding a container by name.
15
+ container = Azure::Blobs.containers.first
16
+
17
+ container.metadata["Uppercasekey"].must_equal "U"
18
+ container.metadata["Downcasekey"].must_equal "D"
19
+ end
20
+
21
+ it "gets metadata when listing containers" do
22
+ Azure::Blobs.create_container(ContainerNameHelper.name, "Key" => "Value")
23
+
24
+ # FIXME: Change this once we have a way of finding a container by name.
25
+ container = Azure::Blobs.containers.first
26
+ container.metadata["Key"].must_equal "Value"
27
+ end
28
+
29
+ it "force-loads the metadata when calling #metadata!" do
30
+ container = Azure::Blobs.create_container(ContainerNameHelper.name, "Key" => "Value")
31
+
32
+ container.metadata.must_be_empty
33
+ container.load_metadata!.wont_be_empty
34
+ container.metadata.wont_be_empty
35
+ end
36
+
37
+ it "saves the metadata in the server if you modify the metadata hash" do
38
+ container = Azure::Blobs.create_container(ContainerNameHelper.name)
39
+ container.metadata["Key"] = "Value"
40
+ container.save_metadata!
41
+
42
+ # FIXME: Change this once we have a way of finding a container by name.
43
+ loaded_container = Azure::Blobs.containers.first
44
+ loaded_container.metadata["Key"].must_equal "Value"
45
+ end
46
+ end
@@ -0,0 +1,17 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Managing a container's permissions" do
4
+ after do
5
+ ContainerNameHelper.clean
6
+ end
7
+
8
+ it "can grant temporary anonymous access to a blob via shared access signstures" do
9
+ container = Azure::Blobs.create_container(ContainerNameHelper.name)
10
+ blob = create_block_blob(:container => container)
11
+
12
+ url = blob.shared_access_signature("r", 10 * 60) # read permissions, 10 minutes
13
+
14
+ response = Net::HTTP.get_response(url)
15
+ response.code.must_equal "200"
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Update 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 update a range of bytes" do
14
+ stream = "Hello World!" + (" " * (1024 - 12))
15
+
16
+ stream.bytesize.must_equal 1024
17
+
18
+ Azure::Blobs.update_page_range(@blob, 0, 1023, stream).must_equal true
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Clear Messages" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ before do
9
+ @queue = Azure::Queues.create(QueueNameHelper.name)
10
+ end
11
+
12
+ it "should be able to delete all messages from the queue" do
13
+ @queue << "message 1"
14
+ @queue << "message 2"
15
+
16
+ result = @queue.clear
17
+ result.must_equal true
18
+
19
+ messages = @queue.get(5)
20
+ messages.must_be_empty
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Create queues" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ it "should be able to create a new queue" do
9
+ queue = Azure::Queues.create(QueueNameHelper.name)
10
+ queue.must_be_kind_of Azure::Queues::Queue
11
+ assert queue.valid?, "must be valid"
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Delete Messages" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ before do
9
+ @queue = Azure::Queues.create(QueueNameHelper.name)
10
+ @queue << "some sample text"
11
+ end
12
+
13
+ it "should be able to delete a message from the queue" do
14
+ message = @queue.pop
15
+ response = message.delete
16
+ response.must_equal true
17
+ assert message.frozen?
18
+ end
19
+
20
+ describe "Invalid delete operations" do
21
+ it "shouldn't be able to delete an expired message" do
22
+ skip "Docs say so but in fact this test it's not passing as of now"
23
+
24
+ Azure::Queues::Message.new("some sample text") do |message|
25
+ message.ttl = 1
26
+ end
27
+
28
+ message = @queue.pop
29
+ sleep 1
30
+
31
+ response = message.delete
32
+ response.must_equal false
33
+ end
34
+
35
+ it "shouldn't be able to delete an already deleted message" do
36
+ message = @queue.pop
37
+ message.delete
38
+
39
+ proc { message.delete }.must_raise RuntimeError
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,24 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Deleting a queue" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ it "should return false if the queue cannot be deleted" do
9
+ queue = Azure::Queues::Queue.new(QueueNameHelper.name)
10
+ response = queue.delete
11
+
12
+ response.must_equal false
13
+ refute queue.valid?
14
+ refute queue.frozen?
15
+ end
16
+
17
+ it "should return true if the queue can be deleted" do
18
+ queue = Azure::Queues.create(QueueNameHelper.name)
19
+ response = queue.delete
20
+
21
+ response.must_equal true
22
+ assert queue.frozen?
23
+ end
24
+ end
@@ -0,0 +1,39 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Get Messages" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ before do
9
+ @queue = Azure::Queues.create(QueueNameHelper.name)
10
+ end
11
+
12
+ it "gets the last message when calling #pop" do
13
+ @queue << "message 1"
14
+ @queue << "message 2"
15
+
16
+ message = @queue.pop
17
+ message.text.must_equal "message 1"
18
+ end
19
+
20
+ it "can get more than once message at a time" do
21
+ @queue << "message 1"
22
+ @queue << "message 2"
23
+
24
+ messages = @queue.get(5)
25
+ messages.must_respond_to :each
26
+ messages.size.must_equal 2
27
+ end
28
+
29
+ it "can reset the visibilitytimeout option for retrieved messages" do
30
+ @queue << "message 1"
31
+
32
+ message = @queue.pop(visibilitytimeout: 10)
33
+
34
+ next_visible_at = message.time_next_visible.to_i
35
+ inserted_at = message.insertion_time.to_i
36
+
37
+ next_visible_at.must_be_close_to(inserted_at + 10, 2.0)
38
+ end
39
+ end
@@ -0,0 +1,43 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Obtaining a list of queues" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ it "returns a list of queues" do
9
+ queue = Azure::Queues.create(QueueNameHelper.name)
10
+
11
+ all_queues = Azure::Queues.all
12
+ all_queues.must_include queue
13
+ end
14
+
15
+ it "should be able to use maxresults" do
16
+ Azure::Queues.create(QueueNameHelper.name)
17
+ Azure::Queues.create(QueueNameHelper.name)
18
+
19
+ all_queues = Azure::Queues.all(:maxresults => 1).size.must_equal 1
20
+ all_queues = Azure::Queues.all(:maxresults => 2).size.must_equal 2
21
+ end
22
+
23
+ it "should be able to use the prefix option when listing" do
24
+ Azure::Queues.create(QueueNameHelper.name)
25
+ Azure::Queues.create(QueueNameHelper.name)
26
+ q3 = Azure::Queues.create(QueueNameHelper.name)
27
+
28
+ prefixed_queues = Azure::Queues.all(:prefix => q3.name)
29
+ prefixed_queues.size.must_equal 1
30
+ prefixed_queues.first.must_equal q3
31
+ end
32
+
33
+ it "should be able to use the marker option when listing" do
34
+ skip
35
+ end
36
+
37
+ it "should be able to use the include metadata option when listing" do
38
+ Azure::Queues.create(QueueNameHelper.name, "Somekey" => "Somevalue")
39
+ queue = Azure::Queues.all(:include => 'metadata').first
40
+ queue.metadata["Somekey"].must_equal "Somevalue"
41
+ end
42
+
43
+ end
@@ -0,0 +1,45 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Managing the queue's metadata" do
4
+ after do
5
+ QueueNameHelper.clean
6
+ end
7
+
8
+ it "sets metadata on queue creation (Azure changes the casing of metadata keys)" do
9
+ Azure::Queues.create(
10
+ QueueNameHelper.name,
11
+ "UppercaseKey" => "U", "downcaseKey" => "D"
12
+ )
13
+
14
+ queue = Azure::Queues.all(:include => 'metadata').first
15
+
16
+ queue.metadata["Uppercasekey"].must_equal "U"
17
+ queue.metadata["Downcasekey"].must_equal "D"
18
+ end
19
+
20
+ it "#load_metadata! reloads the queue metadata" do
21
+ queue = Azure::Queues.create(QueueNameHelper.name, "Key" => "Value")
22
+ queue.metadata.must_be_empty
23
+
24
+ queue.load_metadata!.wont_be_empty
25
+ queue.metadata.wont_be_empty
26
+ end
27
+
28
+ it "saves the metadata in the server if you modify the metadata hash" do
29
+ queue = Azure::Queues.create(QueueNameHelper.name)
30
+ queue.metadata["Key"] = "Value"
31
+ queue.save_metadata!
32
+
33
+ loaded_queue = Azure::Queues.all(:include => 'metadata').first
34
+ loaded_queue.metadata["Key"].must_equal "Value"
35
+ end
36
+
37
+ it "deletes all metadata when setting queue.metadata to an empty hash" do
38
+ queue = Azure::Queues.create(QueueNameHelper.name, "Key" => "Value")
39
+ queue.metadata = {}
40
+ queue.save_metadata!
41
+
42
+ loaded_queue = Azure::Queues.all(:include => 'metadata').first
43
+ loaded_queue.metadata.must_be_empty
44
+ end
45
+ end