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,23 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Deleting a Topic" do
4
+
5
+ after do
6
+ ServiceBusTopicNameHelper.clean
7
+ end
8
+
9
+ it "should be able to get a topic by name" do
10
+ topic_name = ServiceBusTopicNameHelper.name
11
+ topic = Azure::ServiceBus::Topics.create(topic_name)
12
+
13
+ result = Azure::ServiceBus::Topics.get(topic_name)
14
+
15
+ result.must_equal topic
16
+ end
17
+
18
+ it "if the topic doesn't exists I should get a list of links to immediate child nodes" do
19
+ result = Azure::ServiceBus::Topics.get('inexistent')
20
+
21
+ result.must_be_nil
22
+ end
23
+ end
@@ -0,0 +1,39 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Listing Topics" do
4
+
5
+ after do
6
+ ServiceBusTopicNameHelper.clean
7
+ end
8
+
9
+ it "should be able to get a list of topics" do
10
+ t1 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
11
+ t2 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
12
+
13
+ result = Azure::ServiceBus::Topics.list
14
+
15
+ result.must_be :kind_of?, Array
16
+ result.count.must_equal 2
17
+ result.must_include t1
18
+ result.must_include t2
19
+ end
20
+
21
+ it "should be able to use $skip" do
22
+ t1 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
23
+ t2 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
24
+ t3 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
25
+
26
+ result = Azure::ServiceBus::Topics.list(:skip => 1)
27
+
28
+ result.count.must_equal 2
29
+ end
30
+
31
+ it "should be able to use $top" do
32
+ t1 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
33
+ t2 = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
34
+
35
+ result = Azure::ServiceBus::Topics.list(:top => 1)
36
+
37
+ result.count.must_equal 1
38
+ end
39
+ end
@@ -0,0 +1,23 @@
1
+ require "integration/test_helper"
2
+ require "azure/service_bus/topics"
3
+ require "azure/service_bus/brokered_message"
4
+
5
+ describe "Sending a Message to a Topic" do
6
+
7
+ after do
8
+ ServiceBusTopicNameHelper.clean
9
+ end
10
+
11
+ before do
12
+ @topic = Azure::ServiceBus::Topics.create(ServiceBusTopicNameHelper.name)
13
+ end
14
+
15
+ it "should be able to send a message to a topic" do
16
+ message = Azure::ServiceBus::BrokeredMessage.new("some text", :prop1 => "val1") do |m|
17
+ m.to = "me"
18
+ m.label = 'my_label'
19
+ end
20
+ res = Azure::ServiceBus::Topics.send_message_to_topic(@topic, message)
21
+ res.must_equal true
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Authorizing against the server" do
4
+ let :uri do
5
+ URI(Azure.config.table_host + "/Tables")
6
+ end
7
+
8
+ it "can make a simple request using SharedKey" do
9
+ auth = Azure::Auth.new
10
+ signer = Azure::Tables::Auth::SharedKey.new
11
+
12
+ request = Azure::Request.new(:get, uri)
13
+ auth.sign(request, signer)
14
+ response = request.request!
15
+
16
+ response.code.must_equal 200
17
+ end
18
+
19
+ it "can make a simple request using SharedKeyLite" do
20
+ auth = Azure::Auth.new
21
+ signer = Azure::Tables::Auth::SharedKeyLite.new
22
+
23
+ request = Azure::Request.new(:get, uri)
24
+ auth.sign(request, signer)
25
+ response = request.request!
26
+
27
+ response.code.must_equal 200
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Creating tables" do
4
+ after do
5
+ TableNameHelper.clean
6
+ end
7
+
8
+ it "creates a table with a valid name" do
9
+ table = Azure::Tables::Table.create(TableNameHelper.name)
10
+ table.must_be :kind_of?, Azure::Tables::Table
11
+
12
+ # FIXME: for some reason MiniTest fails if we do table.must_be :valid?, but
13
+ # only if we run rake, not if we run this test in isolation.
14
+ assert table.valid?
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Deleting Entities" do
4
+ after do
5
+ TableNameHelper.clean
6
+ end
7
+
8
+ before do
9
+ @table_name = TableNameHelper.name
10
+ @table = Azure::Tables::Table.create(TableNameHelper.name)
11
+ @entity = Azure::Tables::Entity.new(
12
+ "PartitionKey" => "part1",
13
+ "RowKey" => "row1",
14
+ "Address" => "Mountain View",
15
+ "FirstName" => "John",
16
+ "Email" => "john@example.com"
17
+ )
18
+ @table.insert(@entity)
19
+ end
20
+
21
+ it "should return false if the entity doesn't exists" do
22
+ entity = Azure::Tables::Entity.new do |e|
23
+ e.reset(@entity)
24
+ e["PartitionKey"] = "Foo"
25
+ e.url = URI(e.url.to_s.gsub("part1", "Foo"))
26
+ end
27
+
28
+ result = entity.delete
29
+ result.must_equal false
30
+ end
31
+
32
+ it "should be able to delete the entity" do
33
+ result = @entity.delete
34
+ result.must_equal true
35
+
36
+ entity = Azure::Tables.query_entity(@table, "part1", "row1")
37
+ entity.must_be_nil
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Deleting a Tables" do
4
+ table_name = TableNameHelper.name
5
+
6
+ after do
7
+ TableNameHelper.clean
8
+ end
9
+
10
+ let :table do
11
+ Azure::Tables::Table.new(table_name)
12
+ end
13
+
14
+ it "should return false if the table cannot be deleted" do
15
+ Azure::Tables.delete(table).must_equal false
16
+ end
17
+
18
+ it "should return true if the table were deleted" do
19
+ table = Azure::Tables::Table.create(table_name)
20
+ Azure::Tables.delete(table).must_equal true
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Inserting Entities" do
4
+ after do
5
+ TableNameHelper.clean
6
+ end
7
+
8
+ it "should be able to insert an entity" 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
+
18
+ table.insert(entity)
19
+
20
+ assert entity.valid?
21
+ entity.url.wont_be_nil
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Meging 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 merge the entity directly against Table Service and preserve old not updated fields" do
21
+ result = @entity.merge("Address" => "New York")
22
+
23
+ result.must_equal true
24
+
25
+ @entity["Address"].must_equal "New York"
26
+ @entity["FirstName"].wont_be_nil
27
+ end
28
+ end
@@ -0,0 +1,131 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Query 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
+ end
18
+
19
+ it "returns an empty list of entities if the table is empty" do
20
+ entities = @table.entities
21
+ entities.must_be :kind_of?, Azure::Tables::EntitiesCollection
22
+ entities.must_be_empty
23
+ end
24
+
25
+ it "lists all entities in a table" do
26
+ @table.insert(@entity)
27
+
28
+ entities = @table.entities
29
+ entities.must_include @entity
30
+ end
31
+
32
+ it "can find a specific entity in a table" do
33
+ @table.insert(@entity)
34
+
35
+ entity = @table.entities(
36
+ partition_key: @entity["PartitionKey"],
37
+ row_key: @entity["RowKey"]
38
+ )
39
+
40
+ entity.must_equal @entity
41
+ end
42
+
43
+ it "returns nil if a specific entity is not in the table" do
44
+ entity = @table.entities(
45
+ partition_key: "not_there",
46
+ row_key: "not_there"
47
+ )
48
+
49
+ entity.must_be_nil
50
+ end
51
+
52
+ it "should be able to select which fields should be returned" do
53
+ skip_if_emulator
54
+
55
+ @table.insert(@entity)
56
+
57
+ entity = @table.entities(
58
+ partition_key: "part1",
59
+ row_key: "row1",
60
+ select: ["FirstName", "Email"]
61
+ )
62
+
63
+ entity.wont_be_nil
64
+ entity["Address"].must_be_nil
65
+ end
66
+
67
+ it "should be able to filter queries" do
68
+ @table.insert(@entity)
69
+
70
+ entity_b = Azure::Tables::Entity.new(
71
+ "PartitionKey" => "part1",
72
+ "RowKey" => "row2",
73
+ "Address" => "New York",
74
+ "FirstName" => "John",
75
+ "Email" => "john@example.com"
76
+ )
77
+
78
+ @table.insert(entity_b)
79
+
80
+ entities = @table.entities(
81
+ :filter => "Address eq 'New York'"
82
+ )
83
+
84
+ entities.size.must_equal 1
85
+ entities.first["Address"].to_s.must_equal "New York"
86
+ end
87
+
88
+ it "should be able to set top of results" do
89
+ @table.insert(@entity)
90
+
91
+ entity_b = Azure::Tables::Entity.new(
92
+ "PartitionKey" => "part1",
93
+ "RowKey" => "row2",
94
+ "Address" => "New York",
95
+ "FirstName" => "John",
96
+ "Email" => "john@example.com"
97
+ )
98
+
99
+ @table.insert(entity_b)
100
+
101
+ entities = @table.entities(:top => 1)
102
+ entities.size.must_equal 1
103
+
104
+ entities = @table.entities(:top => 2)
105
+ entities.size.must_equal 2
106
+ end
107
+
108
+ it "should be able to paginate" do
109
+ ["New York", "Alabama", "Miami"].each_with_index do |city, i|
110
+ entity = Azure::Tables::Entity.new(
111
+ "PartitionKey" => "part1",
112
+ "RowKey" => "row#{i}",
113
+ "Address" => city
114
+ )
115
+
116
+ @table.insert(entity)
117
+ end
118
+
119
+ entities = @table.entities(:top => 2)
120
+
121
+ entities.size.must_equal 2
122
+ entities.first["Address"].to_s.must_equal "New York"
123
+ entities.last["Address"].to_s.must_equal "Alabama"
124
+
125
+ other_entities = entities.next
126
+ other_entities.must_be :kind_of?, Azure::Tables::EntitiesCollection
127
+
128
+ other_entities.size.must_equal 1
129
+ other_entities.first["Address"].to_s.must_equal "Miami"
130
+ end
131
+ end
@@ -0,0 +1,63 @@
1
+ require "integration/test_helper"
2
+
3
+ describe "Obtaining a list of tables" do
4
+ after do
5
+ TableNameHelper.clean
6
+ end
7
+
8
+ it "returns a list of tables if there are any" do
9
+ table = Azure::Tables.create(TableNameHelper.name)
10
+
11
+ all_tables = Azure::Tables.all
12
+
13
+ all_tables.must_be :kind_of?, Azure::Tables::TablesCollection
14
+ all_tables.must_include table
15
+ end
16
+
17
+ it "should be able to set a top of table " do
18
+ Azure::Tables::Table.create(TableNameHelper.name)
19
+ Azure::Tables::Table.create(TableNameHelper.name)
20
+
21
+ Azure::Tables.all(:top => 1).size.must_equal 1
22
+ Azure::Tables.all(:top => 2).size.must_equal 2
23
+ end
24
+
25
+ it "should be able to paginate result" do
26
+ Azure::Tables::Table.create(TableNameHelper.name)
27
+ Azure::Tables::Table.create(TableNameHelper.name)
28
+ Azure::Tables::Table.create(TableNameHelper.name)
29
+ Azure::Tables::Table.create(TableNameHelper.name)
30
+
31
+ tables = Azure::Tables.all(:top => 2)
32
+ tables.size.must_equal 2
33
+
34
+ other_tables = tables.next
35
+ other_tables.must_be :kind_of?, Azure::Tables::TablesCollection
36
+
37
+ other_tables.size.must_equal 2
38
+
39
+ tables.concat(other_tables).uniq.size.must_equal 4
40
+ end
41
+
42
+ it "should be able to fetch a single table by name" do
43
+ name = TableNameHelper.name
44
+
45
+ created_table = Azure::Tables::Table.create(name)
46
+ fetched_table = Azure::Tables::Table.fetch(name)
47
+
48
+ fetched_table.must_equal created_table
49
+ end
50
+
51
+ it "invokes the given block when a table isn't found by #fetch" do
52
+ result = Azure::Tables::Table.fetch("doesntexist") { 42 }
53
+ result.must_equal 42
54
+ end
55
+
56
+ it "fails with ArgumentError when a table isn't found by #fetch and no block is provided" do
57
+ proc { Azure::Tables::Table.fetch("doesntexist") }.must_raise ArgumentError
58
+ end
59
+
60
+ it "should be able to filter tables" do
61
+ skip
62
+ end
63
+ end