fog-google 0.4.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|