fog-google 0.4.2 → 0.5.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.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/fog/compute/google/mock.rb +1 -1
- data/lib/fog/compute/google/models/server.rb +18 -6
- data/lib/fog/compute/google/models/target_pool.rb +10 -2
- data/lib/fog/compute/google/requests/get_target_pool_health.rb +14 -4
- data/lib/fog/compute/google/requests/insert_server.rb +57 -1
- data/lib/fog/google/shared.rb +6 -3
- data/lib/fog/google/version.rb +1 -1
- data/lib/fog/storage/google_json/models/directories.rb +1 -1
- data/lib/fog/storage/google_json/models/directory.rb +1 -1
- data/lib/fog/storage/google_json/models/file.rb +1 -1
- data/lib/fog/storage/google_json/models/files.rb +2 -2
- data/lib/fog/storage/google_xml/models/file.rb +3 -4
- data/test/integration/compute/test_regions.rb +1 -1
- data/test/integration/pubsub/test_pubsub_requests.rb +166 -0
- data/test/unit/compute/test_server.rb +20 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dc1f39d88b02301c3862a372a55a6086209a845
|
4
|
+
data.tar.gz: 756283b7749001656eb11ecebdf31bf3417796de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 021a04a4a181e6ad9853c5f76ba17ad8dbceb2a1792b7b3708331ed1fe006d68b68f6e44bc0ea564fcc383dd64f94298671aeb910baf25cb5d09ad8537b49ae0
|
7
|
+
data.tar.gz: 18c9ff430a290e8f226aeb7f28f00f81a07eb9fbf05e266fd7388062d8b741d2d3f70abf130f493bfa08b1baadb05b4fe709586363c106de662c13818e4cc352
|
data/README.md
CHANGED
@@ -6,6 +6,9 @@ The main maintainers for the Google sections are @icco, @Temikus and @plribeiro3
|
|
6
6
|
|
7
7
|
**As of v0.1.1, Google no longer supports Ruby versions less than 2.0.0.**
|
8
8
|
|
9
|
+
**Currently, `fog-google` does not support versions of `google-api-client` >= 0.9 or <= 0.8.5.**
|
10
|
+
|
11
|
+
|
9
12
|
## Storage
|
10
13
|
|
11
14
|
There are two ways to access [Google Cloud Storage](https://cloud.google.com/storage/). The old S3 API and the new JSON API. `Fog::Storage::Google` will automatically direct you to the appropriate API based on the credentials you provide it.
|
@@ -250,7 +250,7 @@ module Fog
|
|
250
250
|
"fingerprint" => "5_hasd_gC3E=",
|
251
251
|
"items" => [
|
252
252
|
{
|
253
|
-
"key" => "
|
253
|
+
"key" => "ssh-keys",
|
254
254
|
"value" => "sysadmin:ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA1zc7mx+0H8Roywet/L0aVX6MUdkDfzd/17kZhprAbpUXYOILv9AG4lIzQk6xGxDIltghytjfVGme/4A42Sb0Z9LN0pxB4KnWTNoOSHPJtp6jbXpq6PdN9r3Z5NKQg0A/Tfw7gt2N0GDsj6vpK8VbHHdW78JAVUxql18ootJxjaksdocsiHNK8iA6/v9qiLRhX3fOgtK7KpxxdZxLRzFg9vkp8jcGISgpZt27kOgXWhR5YLhi8pRJookzphO5O4yhflgoHoAE65XkfrsRCe0HU5QTbY2jH88rBVkq0KVlZh/lEsuwfmG4d77kEqaCGGro+j1Wrvo2K3DSQ+rEcvPp2CYRUySjhaeLF18UzQLtxNeoN14QOYqlm9ITdkCnmq5w4Wn007MjSOFp8LEq2RekrnddGXjg1/vgmXtaVSGzJAlXwtVfZor3dTRmF0JCpr7DsiupBaDFtLUlGFFlSKmPDVMPOOB5wajexmcvSp2Vu4U3yP8Lai/9/ZxMdsGPhpdCsWVL83B5tF4oYj1HVIycbYIxIIfFqOxZcCru3CMfe9jmzKgKLv2UtkfOS8jpS/Os2gAiB3wPweH3agvtwYAYBVMDwt5cnrhgHYWoOz7ABD8KgmCrD7Y9HikiCqIUNkgUFd9YmjcYi5FkU5rFXIawN7efs341lsdf923lsdf923fs= johndoe@acme"
|
255
255
|
}
|
256
256
|
]
|
@@ -162,9 +162,17 @@ module Fog
|
|
162
162
|
data.body["contents"]
|
163
163
|
end
|
164
164
|
|
165
|
-
def set_disk_auto_delete(auto_delete, device_name)
|
165
|
+
def set_disk_auto_delete(auto_delete, device_name = nil)
|
166
166
|
requires :identity, :zone
|
167
167
|
|
168
|
+
unless device_name
|
169
|
+
if disks.count <= 1
|
170
|
+
device_name = disks[0]["deviceName"]
|
171
|
+
else
|
172
|
+
raise ArgumentError.new("Device name required if multiple disks are attached")
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
168
176
|
data = service.set_server_disk_auto_delete(identity, zone_name, auto_delete, device_name)
|
169
177
|
Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], data.body["zone"])
|
170
178
|
end
|
@@ -201,13 +209,17 @@ module Fog
|
|
201
209
|
def add_ssh_key(username, key)
|
202
210
|
self.metadata = Hash.new("") if metadata.nil?
|
203
211
|
|
212
|
+
# The key "sshKeys" is deprecated and will be unsupported in the
|
213
|
+
# future - for now defer to using 'ssh-keys' unless the user is
|
214
|
+
# already using the deprecated version
|
215
|
+
# https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#deprecated
|
216
|
+
metadata_key = metadata.key?("sshKeys") ? "sshKeys" : "ssh-keys"
|
217
|
+
|
204
218
|
# You can have multiple SSH keys, seperated by newlines.
|
205
219
|
# https://developers.google.com/compute/docs/console?hl=en#sshkeys
|
206
|
-
metadata[
|
207
|
-
|
208
|
-
metadata[
|
209
|
-
|
210
|
-
metadata["sshKeys"] += "#{username}:#{key.strip}"
|
220
|
+
metadata[metadata_key] = "" unless metadata[metadata_key]
|
221
|
+
metadata[metadata_key] += "\n" unless metadata[metadata_key].empty?
|
222
|
+
metadata[metadata_key] += "#{username}:#{key.strip}"
|
211
223
|
|
212
224
|
metadata
|
213
225
|
end
|
@@ -73,8 +73,16 @@ module Fog
|
|
73
73
|
reload
|
74
74
|
end
|
75
75
|
|
76
|
-
def get_health
|
77
|
-
|
76
|
+
def get_health(instance_name = nil)
|
77
|
+
if instance_name
|
78
|
+
instance = service.servers.get(instance_name)
|
79
|
+
health_results = [service.get_target_pool_health(self, instance.self_link)]
|
80
|
+
else
|
81
|
+
health_results = instances.map do |instance_selflink|
|
82
|
+
service.get_target_pool_health(self, instance_selflink)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
Hash[health_results]
|
78
86
|
end
|
79
87
|
|
80
88
|
def ready?
|
@@ -2,13 +2,13 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class Google
|
4
4
|
class Mock
|
5
|
-
def get_target_pool_health(_target_pool)
|
5
|
+
def get_target_pool_health(_target_pool, _instance)
|
6
6
|
Fog::Mock.not_implemented
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
10
|
class Real
|
11
|
-
def get_target_pool_health(target_pool)
|
11
|
+
def get_target_pool_health(target_pool, instance = nil)
|
12
12
|
api_method = @compute.target_pools.get_health
|
13
13
|
parameters = {
|
14
14
|
"project" => @project,
|
@@ -16,12 +16,22 @@ module Fog
|
|
16
16
|
"region" => target_pool.region.split("/")[-1]
|
17
17
|
}
|
18
18
|
|
19
|
-
|
19
|
+
if instance
|
20
20
|
body = { "instance" => instance }
|
21
21
|
resp = request(api_method, parameters, body_object = body)
|
22
22
|
[instance, resp.data[:body]["healthStatus"]]
|
23
|
+
else
|
24
|
+
# TODO: Remove (introduced after 0.4.2)
|
25
|
+
Fog::Logger.deprecation(
|
26
|
+
"Do not use raw requests, use Fog::Compute::Google::TargetPool.get_health instead [light_black](#{caller.first})[/]"
|
27
|
+
)
|
28
|
+
health_results = target_pool.instances.map do |instance_object|
|
29
|
+
body = { "instance" => instance_object }
|
30
|
+
resp = request(api_method, parameters, body_object = body)
|
31
|
+
[instance_object, resp.data[:body]["healthStatus"]]
|
32
|
+
end
|
33
|
+
Hash[health_results]
|
23
34
|
end
|
24
|
-
Hash[health_results]
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -23,6 +23,7 @@ module Fog
|
|
23
23
|
disks
|
24
24
|
end
|
25
25
|
|
26
|
+
# (see Fog::Compute::Google::Real#insert_server)
|
26
27
|
def insert_server(server_name, zone_name, options = {}, *_deprecated_args)
|
27
28
|
# check that zone exists
|
28
29
|
get_zone(zone_name)
|
@@ -62,7 +63,7 @@ module Fog
|
|
62
63
|
"fingerprint" => "5_hasd_gC3E=",
|
63
64
|
"items" => [
|
64
65
|
{
|
65
|
-
"key" => "
|
66
|
+
"key" => "ssh-keys",
|
66
67
|
"value" => "sysadmin:ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEA1zc7mx+0H8Roywet/L0aVX6MUdkDfzd/17kZhprAbpUXYOILv9AG4lIzQk6xGxDIltghytjfVGme/4A42Sb0Z9LN0pxB4KnWTNoOSHPJtp6jbXpq6PdN9r3Z5NKQg0A/Tfw7gt2N0GDsj6vpK8VbHHdW78JAVUxql18ootJxjaksdocsiHNK8iA6/v9qiLRhX3fOgtK7KpxxdZxLRzFg9vkp8jcGISgpZt27kOgXWhR5YLhi8pRJookzphO5O4yhflgoHoAE65XkfrsRCe0HU5QTbY2jH88rBVkq0KVlZh/lEsuwfmG4d77kEqaCGGro+j1Wrvo2K3DSQ+rEcvPp2CYRUySjhaeLF18UzQLtxNeoN14QOYqlm9ITdkCnmq5w4Wn007MjSOFp8LEq2RekrnddGXjg1/vgmXtaVSGzJAlXwtVfZor3dTRmF0JCpr7DsiupBaDFtLUlGFFlSKmPDVMPOOB5wajexmcvSp2Vu4U3yP8Lai/9/ZxMdsGPhpdCsWVL83B5tF4oYj1HVIycbYIxIIfFqOxZcCru3CMfe9jmzKgKLv2UtkfOS8jpS/Os2gAiB3wPweH3agvtwYAYBVMDwt5cnrhgHYWoOz7ABD8KgmCrD7Y9HikiCqIUNkgUFd9YmjcYi5FkU5rFXIawN7efs341lsdf923lsdf923fs= johndoe@acme"
|
67
68
|
}
|
68
69
|
]
|
@@ -113,6 +114,61 @@ module Fog
|
|
113
114
|
{ "items" => metadata.map { |k, v| { "key" => k, "value" => v } } }
|
114
115
|
end
|
115
116
|
|
117
|
+
##
|
118
|
+
# Create a new instance (virtual machine). You can provision a server
|
119
|
+
# using low-level request options via this method (if you don't need to
|
120
|
+
# modify low-level request options, consider using the 'servers'
|
121
|
+
# collection object instead - see Fog::Compute::Google::Servers).
|
122
|
+
# This method should directly take any of the API parameters/options for
|
123
|
+
# the GCP endpoint (passed through the +options+ parameter).
|
124
|
+
#
|
125
|
+
# @see https://cloud.google.com/compute/docs/reference/latest/instances/insert
|
126
|
+
# @example minimal server creation
|
127
|
+
# require 'fog/google'
|
128
|
+
# client = Fog::Compute::Google.new
|
129
|
+
# my_result = client.insert_server('my-server',
|
130
|
+
# 'us-central1-b',
|
131
|
+
# 'machineType' => 'f1-micro',
|
132
|
+
# 'disks' => [
|
133
|
+
# 'initializeParams' => {
|
134
|
+
# 'sourceImage' => 'projects/debian-cloud/global/images/family/debian-8'
|
135
|
+
# }
|
136
|
+
# ])
|
137
|
+
#
|
138
|
+
# @param server_name [String] Name to assign to the created server. Must
|
139
|
+
# be unique within the specified zone.
|
140
|
+
# @param zone_name [String] Name of zone containing the created server.
|
141
|
+
# See Fog::Compute::Google#zones for a list of available zones.
|
142
|
+
# @param options [Hash] options to use when creating a server. You can
|
143
|
+
# use any of the options documented at
|
144
|
+
# https://cloud.google.com/compute/docs/reference/latest/instances/insert.
|
145
|
+
# Additionally accepts some nonstandard parameters documented below.
|
146
|
+
# @option options [String] 'machineType' Required: the machine type to use - see
|
147
|
+
# https://cloud.google.com/compute/docs/machine-types for a list.
|
148
|
+
# @option options [String] 'externalIp' An IP address to assign to the
|
149
|
+
# server. See
|
150
|
+
# https://cloud.google.com/compute/docs/configure-instance-ip-addresses
|
151
|
+
# for more information about assigning instance ip addresses.
|
152
|
+
# @option options [Boolean] 'auto_restart' (false) if true, then the
|
153
|
+
# server will be automatically restarted if terminated by Google Compute
|
154
|
+
# Engine. Note that this value cannot be set to true if the VM is
|
155
|
+
# preemptible.
|
156
|
+
# @option options [Boolean] 'preemptible' (false) if true, then the
|
157
|
+
# created server will be preemptible and therefore only run for at
|
158
|
+
# most 24 hours. See
|
159
|
+
# https://cloud.google.com/compute/docs/instances/preemptible for more
|
160
|
+
# information about preemptible instances.
|
161
|
+
# @option options ["MIGRATE", "TERMINATE"] 'on_host_maintenance' if
|
162
|
+
# "MIGRATE", then the VM will be migrated to different hardware during
|
163
|
+
# a maintenance event. If "TERMINATE", then the VM will be terminated.
|
164
|
+
# Note that if the VM is preemptible, then this option MUST be
|
165
|
+
# "TERMINATE".
|
166
|
+
# @option options [Boolean] 'can_ip_forward' (false) if true, then the
|
167
|
+
# created instance will allow forwarding packets that don't originate
|
168
|
+
# with the assigned host ip address. See
|
169
|
+
# https://cloud.google.com/compute/docs/networking#canipforward for
|
170
|
+
# more information.
|
171
|
+
# @return [Excon::Response] response object that represents the result.
|
116
172
|
def insert_server(server_name, zone_name, options = {}, *deprecated_args)
|
117
173
|
if deprecated_args.length > 0 || !options.is_a?(Hash)
|
118
174
|
raise ArgumentError.new "Too many parameters specified. This may be the cause of code written for an outdated"\
|
data/lib/fog/google/shared.rb
CHANGED
@@ -29,6 +29,7 @@ module Fog
|
|
29
29
|
# @option options [String] :app_name The app name to set in the user agent
|
30
30
|
# @option options [String] :app_version The app version to set in the user agent
|
31
31
|
# @option options [Google::APIClient] :google_client Existing Google API Client
|
32
|
+
# @option options [Hash] :google_client_options A hash to send adition options to Google API Client
|
32
33
|
# @return [Google::APIClient] Google API Client
|
33
34
|
# @raises [ArgumentError] If there is any missing argument
|
34
35
|
def initialize_google_client(options)
|
@@ -62,7 +63,8 @@ module Fog
|
|
62
63
|
signing_key,
|
63
64
|
options[:google_api_scope_url],
|
64
65
|
options[:app_name],
|
65
|
-
options[:app_version]
|
66
|
+
options[:app_version],
|
67
|
+
options[:google_client_options]
|
66
68
|
)
|
67
69
|
end
|
68
70
|
|
@@ -109,7 +111,7 @@ module Fog
|
|
109
111
|
# @param [String] app_name The app name to set in the user agent
|
110
112
|
# @param [String] app_version The app version to set in the user agent
|
111
113
|
# @return [Google::APIClient] Google API Client
|
112
|
-
def new_pk12_google_client(google_client_email, signing_key, google_api_scope_url, app_name = nil, app_version = nil)
|
114
|
+
def new_pk12_google_client(google_client_email, signing_key, google_api_scope_url, app_name = nil, app_version = nil, google_client_options = [])
|
113
115
|
application_name = app_name.nil? ? "fog" : "#{app_name}/#{app_version || '0.0.0'} fog"
|
114
116
|
api_client_options = {
|
115
117
|
:application_name => application_name,
|
@@ -124,7 +126,8 @@ module Fog
|
|
124
126
|
:issuer => google_client_email,
|
125
127
|
:scope => google_api_scope_url,
|
126
128
|
:signing_key => signing_key,
|
127
|
-
:token_credential_uri => "https://accounts.google.com/o/oauth2/token"
|
129
|
+
:token_credential_uri => "https://accounts.google.com/o/oauth2/token",
|
130
|
+
:google_client_options => google_client_options
|
128
131
|
)
|
129
132
|
client.authorization.fetch_access_token!
|
130
133
|
|
data/lib/fog/google/version.rb
CHANGED
@@ -47,7 +47,7 @@ module Fog
|
|
47
47
|
file_data.merge!(:body => data.body,
|
48
48
|
:key => key)
|
49
49
|
new(file_data)
|
50
|
-
rescue
|
50
|
+
rescue Fog::Errors::NotFound
|
51
51
|
nil
|
52
52
|
end
|
53
53
|
|
@@ -61,7 +61,7 @@ module Fog
|
|
61
61
|
data = service.head_object(directory.key, key, options)
|
62
62
|
file_data = data.headers.merge(:key => key)
|
63
63
|
new(file_data)
|
64
|
-
rescue
|
64
|
+
rescue Fog::Errors::NotFound
|
65
65
|
nil
|
66
66
|
end
|
67
67
|
|
@@ -54,11 +54,10 @@ module Fog
|
|
54
54
|
|
55
55
|
def destroy
|
56
56
|
requires :directory, :key
|
57
|
-
|
58
|
-
service.delete_object(directory.key, key)
|
59
|
-
rescue Excon::Errors::NotFound
|
60
|
-
end
|
57
|
+
service.delete_object(directory.key, key)
|
61
58
|
true
|
59
|
+
rescue Excon::Errors::NotFound
|
60
|
+
false
|
62
61
|
end
|
63
62
|
|
64
63
|
remove_method :metadata
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "helpers/integration_test_helper"
|
2
2
|
|
3
3
|
class TestRegions < FogIntegrationTest
|
4
|
-
NAMES = %w(asia-east1 europe-west1 us-central1 us-
|
4
|
+
NAMES = %w(asia-east1 asia-northeast1 europe-west1 us-central1 us-east1 us-west1).freeze
|
5
5
|
|
6
6
|
def setup
|
7
7
|
@subject = Fog::Compute[:google].regions
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
require "securerandom"
|
3
|
+
require "base64"
|
4
|
+
|
5
|
+
class TestPubsubRequests < FogIntegrationTest
|
6
|
+
def setup
|
7
|
+
@client = Fog::Google::Pubsub.new
|
8
|
+
# Ensure any resources we create with test prefixes are removed
|
9
|
+
Minitest.after_run do
|
10
|
+
delete_test_resources
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete_test_resources
|
15
|
+
topics = @client.list_topics[:body]["topics"]
|
16
|
+
unless topics.nil?
|
17
|
+
topics.
|
18
|
+
map { |t| t["name"] }.
|
19
|
+
select { |t| t.start_with?(topic_resource_prefix) }.
|
20
|
+
each { |t| @client.delete_topic(t) }
|
21
|
+
end
|
22
|
+
|
23
|
+
subscriptions = @client.list_subscriptions[:body]["subscriptions"]
|
24
|
+
unless subscriptions.nil?
|
25
|
+
subscriptions.
|
26
|
+
map { |s| s["name"] }.
|
27
|
+
select { |s| s.start_with?(subscription_resource_prefix) }.
|
28
|
+
each { |s| @client.delete_subscription(s) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def topic_resource_prefix
|
33
|
+
"projects/#{@client.project}/topics/fog-integration-test"
|
34
|
+
end
|
35
|
+
|
36
|
+
def subscription_resource_prefix
|
37
|
+
"projects/#{@client.project}/subscriptions/fog-integration-test"
|
38
|
+
end
|
39
|
+
|
40
|
+
def new_topic_name
|
41
|
+
"#{topic_resource_prefix}-#{SecureRandom.uuid}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def new_subscription_name
|
45
|
+
"#{subscription_resource_prefix}-#{SecureRandom.uuid}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def some_topic_name
|
49
|
+
# create lazily to speed tests up
|
50
|
+
@some_topic ||= new_topic_name.tap do |t|
|
51
|
+
@client.create_topic(t)
|
52
|
+
end
|
53
|
+
@some_topic
|
54
|
+
end
|
55
|
+
|
56
|
+
def some_subscription_name
|
57
|
+
# create lazily to speed tests up
|
58
|
+
@some_subscription ||= new_subscription_name.tap do |s|
|
59
|
+
@client.create_subscription(s, some_topic_name)
|
60
|
+
end
|
61
|
+
@some_subscription
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_create_topic
|
65
|
+
result = @client.create_topic(new_topic_name)
|
66
|
+
|
67
|
+
assert_equal(200, result.status, "request should be successful")
|
68
|
+
assert_includes(result[:body].keys, "name", "resulting body should contain expected keys")
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_get_topic
|
72
|
+
result = @client.get_topic(some_topic_name)
|
73
|
+
|
74
|
+
assert_equal(200, result.status, "request should be successful")
|
75
|
+
assert_includes(result[:body].keys, "name", "resulting body should contain expected keys")
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_list_topics
|
79
|
+
# Force a topic to be created just so we have at least 1 to list
|
80
|
+
@client.create_topic(new_topic_name)
|
81
|
+
result = @client.list_topics
|
82
|
+
|
83
|
+
assert_equal(200, result.status, "request should be successful")
|
84
|
+
assert_includes(result[:body].keys, "topics", "resulting body should contain expected keys")
|
85
|
+
assert_operator(result[:body]["topics"].size, :>, 0, "topic count should be positive")
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_delete_topic
|
89
|
+
topic_to_delete = new_topic_name
|
90
|
+
@client.create_topic(topic_to_delete)
|
91
|
+
|
92
|
+
result = @client.delete_topic(topic_to_delete)
|
93
|
+
assert_equal(200, result.status, "request should be successful")
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_publish_topic
|
97
|
+
result = @client.publish_topic(some_topic_name, [:data => Base64.strict_encode64("some message")])
|
98
|
+
|
99
|
+
assert_equal(200, result.status, "request should be successful")
|
100
|
+
assert_includes(result[:body].keys, "messageIds", "resulting body should contain expected keys")
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_create_subscription
|
104
|
+
push_config = {}
|
105
|
+
ack_deadline_seconds = 18
|
106
|
+
|
107
|
+
result = @client.create_subscription(new_subscription_name, some_topic_name, push_config, ack_deadline_seconds)
|
108
|
+
|
109
|
+
assert_equal(200, result.status, "request should be successful")
|
110
|
+
assert((%w{name topic pushConfig ackDeadlineSeconds} - result[:body].keys).empty?,
|
111
|
+
"resulting body should contain expected keys")
|
112
|
+
assert_equal(18, result[:body]["ackDeadlineSeconds"], "ackDeadlineSeconds should be 18")
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_get_subscription
|
116
|
+
result = @client.get_subscription(some_subscription_name)
|
117
|
+
|
118
|
+
assert_equal(200, result.status, "request should be successful")
|
119
|
+
assert(%w{name topic pushConfig ackDeadlineSeconds} - result[:body].keys,
|
120
|
+
"resulting body should contain expected keys")
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_list_subscriptions
|
124
|
+
# Force a subscription to be created just so we have at least 1 to list
|
125
|
+
@client.create_subscription(new_subscription_name, some_topic_name)
|
126
|
+
result = @client.list_subscriptions
|
127
|
+
|
128
|
+
assert_equal(200, result.status, "request should be successful")
|
129
|
+
assert_includes(result[:body].keys, "subscriptions", "resulting body should contain expected keys")
|
130
|
+
assert_operator(result[:body]["subscriptions"].size, :>, 0, "subscription count should be positive")
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_delete_subscription
|
134
|
+
subscription_to_delete = new_subscription_name
|
135
|
+
@client.create_subscription(subscription_to_delete, some_topic_name)
|
136
|
+
|
137
|
+
result = @client.delete_subscription(subscription_to_delete)
|
138
|
+
assert_equal(200, result.status, "request should be successful")
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_pull_subscription
|
142
|
+
subscription = new_subscription_name
|
143
|
+
@client.create_subscription(subscription, some_topic_name)
|
144
|
+
@client.publish_topic(some_topic_name, [:data => Base64.strict_encode64("some message")])
|
145
|
+
|
146
|
+
result = @client.pull_subscription(subscription)
|
147
|
+
|
148
|
+
assert_equal(200, result.status, "request should be successful")
|
149
|
+
assert_includes(result[:body].keys, "receivedMessages", "resulting body should contain expected keys")
|
150
|
+
assert_equal(1, result[:body]["receivedMessages"].size, "we should have received a message")
|
151
|
+
assert_equal("some message",
|
152
|
+
Base64.strict_decode64(result[:body]["receivedMessages"][0]["message"]["data"]),
|
153
|
+
"received message should be the same as what we sent")
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_acknowledge_subscription
|
157
|
+
subscription = new_subscription_name
|
158
|
+
@client.create_subscription(subscription, some_topic_name)
|
159
|
+
@client.publish_topic(some_topic_name, [:data => Base64.strict_encode64("some message")])
|
160
|
+
pull_result = @client.pull_subscription(subscription)
|
161
|
+
|
162
|
+
result = @client.acknowledge_subscription(subscription, pull_result[:body]["receivedMessages"][0]["ackId"])
|
163
|
+
|
164
|
+
assert_equal(200, result.status, "request should be successful")
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "helpers/test_helper"
|
2
|
+
require File.expand_path("../../../../lib/fog/compute/google/models/server", __FILE__)
|
3
|
+
|
4
|
+
class UnitTestServer < MiniTest::Test
|
5
|
+
def test_metadata_uses_deprecated_sshKeys_if_exists
|
6
|
+
server = Fog::Compute::Google::Server.new(:metadata => { "sshKeys" => "existing_user:existing_key" })
|
7
|
+
server.add_ssh_key("my_username", "my_key")
|
8
|
+
|
9
|
+
assert_match(/my_username/, server.metadata["sshKeys"])
|
10
|
+
assert_match(/my_key/, server.metadata["sshKeys"])
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_add_ssh_key_uses_ssh_keys_by_default
|
14
|
+
server = Fog::Compute::Google::Server.new
|
15
|
+
server.add_ssh_key("my_username", "my_key")
|
16
|
+
|
17
|
+
assert_match(/my_username/, server.metadata["ssh-keys"])
|
18
|
+
assert_match(/my_key/, server.metadata["ssh-keys"])
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-google
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nat Welch
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-
|
14
|
+
date: 2016-12-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: fog-core
|
@@ -628,11 +628,13 @@ files:
|
|
628
628
|
- test/integration/factories/target_instances_factory.rb
|
629
629
|
- test/integration/factories/target_pools_factory.rb
|
630
630
|
- test/integration/factories/url_maps_factory.rb
|
631
|
+
- test/integration/pubsub/test_pubsub_requests.rb
|
631
632
|
- test/integration/storage/test_buckets.rb
|
632
633
|
- test/integration/storage/test_directories.rb
|
633
634
|
- test/integration/storage/test_files.rb
|
634
635
|
- test/integration/storage/test_objects.rb
|
635
636
|
- test/integration/test_authentication.rb
|
637
|
+
- test/unit/compute/test_server.rb
|
636
638
|
- tests/helper.rb
|
637
639
|
- tests/helpers/collection_helper.rb
|
638
640
|
- tests/helpers/compute/flavors_helper.rb
|
@@ -753,8 +755,10 @@ test_files:
|
|
753
755
|
- test/integration/factories/target_instances_factory.rb
|
754
756
|
- test/integration/factories/target_pools_factory.rb
|
755
757
|
- test/integration/factories/url_maps_factory.rb
|
758
|
+
- test/integration/pubsub/test_pubsub_requests.rb
|
756
759
|
- test/integration/storage/test_buckets.rb
|
757
760
|
- test/integration/storage/test_directories.rb
|
758
761
|
- test/integration/storage/test_files.rb
|
759
762
|
- test/integration/storage/test_objects.rb
|
760
763
|
- test/integration/test_authentication.rb
|
764
|
+
- test/unit/compute/test_server.rb
|