fog-google 1.6.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codecov.yml +2 -0
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +51 -0
- data/CONTRIBUTING.md +85 -17
- data/CONTRIBUTORS.md +6 -4
- data/Gemfile +6 -0
- data/MIGRATING.md +1 -11
- data/README.md +15 -4
- data/ci/credentials.yml.template +2 -0
- data/ci/docker-image/Dockerfile +1 -3
- data/ci/pipeline.yml +117 -12
- data/ci/tasks/run-int.sh +3 -2
- data/ci/tasks/run-int.yml +1 -1
- data/examples/create_instance.rb +40 -25
- data/examples/get_list_images.rb +1 -1
- data/examples/load-balance.rb +1 -1
- data/examples/metadata.rb +1 -1
- data/examples/network.rb +1 -1
- data/fog-google.gemspec +8 -6
- data/lib/fog/compute/google/models/address.rb +1 -1
- data/lib/fog/compute/google/models/backend_service.rb +1 -1
- data/lib/fog/compute/google/models/disk.rb +2 -2
- data/lib/fog/compute/google/models/firewall.rb +23 -3
- data/lib/fog/compute/google/models/forwarding_rule.rb +1 -1
- data/lib/fog/compute/google/models/global_address.rb +1 -1
- data/lib/fog/compute/google/models/global_forwarding_rule.rb +1 -1
- data/lib/fog/compute/google/models/http_health_check.rb +2 -2
- data/lib/fog/compute/google/models/image.rb +1 -1
- data/lib/fog/compute/google/models/instance_group_manager.rb +1 -1
- data/lib/fog/compute/google/models/instance_template.rb +1 -1
- data/lib/fog/compute/google/models/route.rb +1 -1
- data/lib/fog/compute/google/models/server.rb +59 -5
- data/lib/fog/compute/google/models/servers.rb +1 -1
- data/lib/fog/compute/google/models/ssl_certificate.rb +1 -1
- data/lib/fog/compute/google/models/subnetwork.rb +1 -1
- data/lib/fog/compute/google/models/target_http_proxy.rb +1 -1
- data/lib/fog/compute/google/models/target_https_proxy.rb +14 -1
- data/lib/fog/compute/google/models/target_instance.rb +1 -1
- data/lib/fog/compute/google/models/target_pool.rb +1 -1
- data/lib/fog/compute/google/models/url_map.rb +1 -1
- data/lib/fog/compute/google/requests/insert_server.rb +1 -1
- data/lib/fog/dns/google/models/record.rb +1 -1
- data/lib/fog/google/models/sql/instance.rb +1 -1
- data/lib/fog/google/models/sql/user.rb +1 -1
- data/lib/fog/google/version.rb +1 -1
- data/lib/fog/storage/google_json.rb +4 -1
- data/lib/fog/storage/google_json/mock.rb +3 -0
- data/lib/fog/storage/google_json/models/file.rb +2 -2
- data/lib/fog/storage/google_json/models/files.rb +2 -2
- data/lib/fog/storage/google_json/real.rb +3 -0
- data/lib/fog/storage/google_json/requests/get_object_http_url.rb +6 -7
- data/lib/fog/storage/google_json/requests/get_object_https_url.rb +6 -7
- data/lib/fog/storage/google_json/requests/get_object_url.rb +4 -4
- data/lib/fog/storage/google_json/utils.rb +7 -1
- data/lib/fog/storage/google_xml/models/file.rb +2 -2
- data/lib/fog/storage/google_xml/models/files.rb +4 -4
- data/lib/fog/storage/google_xml/requests/get_object_http_url.rb +8 -7
- data/lib/fog/storage/google_xml/requests/get_object_https_url.rb +7 -7
- data/lib/fog/storage/google_xml/requests/get_object_url.rb +5 -4
- data/lib/fog/storage/google_xml/utils.rb +7 -1
- data/tasks/test.rake +45 -23
- data/test/helpers/integration_test_helper.rb +67 -0
- data/test/helpers/test_helper.rb +14 -10
- data/test/integration/compute/core_compute/test_coverage.rb +6 -0
- data/test/integration/compute/{test_disk_types.rb → core_compute/test_disk_types.rb} +0 -0
- data/test/integration/compute/{disks/test_compute_disk_models.rb → core_compute/test_disks.rb} +0 -0
- data/test/integration/compute/{test_images.rb → core_compute/test_images.rb} +0 -0
- data/test/integration/compute/core_compute/test_machine_types.rb +42 -0
- data/test/integration/compute/core_compute/test_operations.rb +27 -0
- data/test/integration/compute/core_compute/test_projects.rb +19 -0
- data/test/integration/compute/{test_regions.rb → core_compute/test_regions.rb} +0 -0
- data/test/integration/compute/core_compute/test_servers.rb +109 -0
- data/test/integration/compute/{test_snapshots.rb → core_compute/test_snapshots.rb} +0 -0
- data/test/integration/compute/core_compute/test_zones.rb +35 -0
- data/test/integration/compute/core_networking/test_addresses.rb +84 -0
- data/test/integration/compute/core_networking/test_coverage.rb +6 -0
- data/test/integration/compute/core_networking/test_firewalls.rb +11 -0
- data/test/integration/compute/core_networking/test_networks.rb +41 -0
- data/test/integration/compute/core_networking/test_routes.rb +26 -0
- data/test/integration/compute/core_networking/test_subnetworks.rb +11 -0
- data/test/integration/compute/instance_groups/test_coverage.rb +6 -0
- data/test/integration/compute/{test_instance_group_managers.rb → instance_groups/test_instance_group_managers.rb} +0 -0
- data/test/integration/compute/instance_groups/test_instance_groups.rb +11 -0
- data/test/integration/compute/{test_instance_templates.rb → instance_groups/test_instance_templates.rb} +0 -0
- data/test/integration/compute/{test_backend_services.rb → loadbalancing/test_backend_services.rb} +0 -0
- data/test/integration/compute/loadbalancing/test_coverage.rb +6 -0
- data/test/integration/compute/{test_forwarding_rules.rb → loadbalancing/test_forwarding_rules.rb} +0 -0
- data/test/integration/compute/loadbalancing/test_global_addresses.rb +11 -0
- data/test/integration/compute/{test_global_forwarding_rules.rb → loadbalancing/test_global_forwarding_rules.rb} +0 -0
- data/test/integration/compute/{test_http_health_checks.rb → loadbalancing/test_http_health_checks.rb} +0 -0
- data/test/integration/compute/loadbalancing/test_ssl_certificates.rb +11 -0
- data/test/integration/compute/{test_target_http_proxies.rb → loadbalancing/test_target_http_proxies.rb} +0 -0
- data/test/integration/compute/loadbalancing/test_target_https_proxies.rb +11 -0
- data/test/integration/compute/{test_target_instances.rb → loadbalancing/test_target_instances.rb} +0 -0
- data/test/integration/compute/loadbalancing/test_target_pools.rb +55 -0
- data/test/integration/compute/{test_url_maps.rb → loadbalancing/test_url_maps.rb} +0 -0
- data/test/integration/factories/addresses_factory.rb +16 -0
- data/test/integration/factories/collection_factory.rb +24 -3
- data/test/integration/factories/disks_factory.rb +1 -0
- data/test/integration/factories/firewalls_factory.rb +13 -0
- data/test/integration/factories/global_addresses_factory.rb +15 -0
- data/test/integration/factories/instance_groups_factory.rb +16 -0
- data/test/integration/factories/instance_template_factory.rb +1 -0
- data/test/integration/factories/networks_factory.rb +16 -0
- data/test/integration/factories/ssl_certificates_factory.rb +13 -0
- data/test/integration/factories/subnetworks_factory.rb +22 -0
- data/test/integration/factories/target_https_proxies_factory.rb +26 -0
- data/test/integration/factories/target_pools_factory.rb +2 -2
- data/test/integration/monitoring/test_coverage.rb +6 -0
- data/test/integration/monitoring/test_timeseries.rb +1 -1
- data/test/integration/pubsub/test_coverage.rb +6 -0
- data/test/integration/sql/{test_common_flags.rb → sqlv1/test_common_flags.rb} +0 -0
- data/test/integration/sql/{test_common_tiers.rb → sqlv1/test_common_tiers.rb} +0 -0
- data/test/integration/sql/sqlv1/test_coverage.rb +6 -0
- data/test/integration/sql/{test_v1_certs.rb → sqlv1/test_v1_certs.rb} +0 -0
- data/test/integration/sql/{test_v1_instances.rb → sqlv1/test_v1_instances.rb} +0 -0
- data/test/integration/sql/{test_v1_users.rb → sqlv1/test_v1_users.rb} +0 -0
- data/test/integration/sql/sqlv2/test_coverage.rb +6 -0
- data/test/integration/sql/{test_v2_instances.rb → sqlv2/test_v2_instances.rb} +0 -0
- data/test/integration/storage/test_coverage.rb +6 -0
- data/test/unit/storage/test_json_requests.rb +45 -0
- data/test/unit/storage/test_xml_requests.rb +20 -0
- metadata +115 -92
- data/test/integration/compute/addresses/addresses_shared.rb +0 -59
- data/test/integration/compute/addresses/test_compute_address_models.rb +0 -105
- data/test/integration/compute/addresses/test_compute_address_requests.rb +0 -52
- data/test/integration/compute/disks/test_compute_disk_requests.rb +0 -92
- data/test/integration/compute/test_compute_addresses_collection.rb +0 -75
- data/test/integration/compute/test_compute_networks_collection.rb +0 -69
- data/test/integration/compute/test_servers.rb +0 -54
- data/test/integration/compute/test_target_pools.rb +0 -38
@@ -5,12 +5,19 @@ require "helpers/test_collection"
|
|
5
5
|
# XXX not sure if this will work on Travis CI or not
|
6
6
|
Fog.credential = :test
|
7
7
|
|
8
|
+
# Enable test debugging, providing additional information in some methods
|
9
|
+
DEBUG = ENV['FOG_TEST_DEBUG'] || false
|
10
|
+
|
8
11
|
# Helpers
|
9
12
|
|
13
|
+
TEST_PROJECT = Fog.credentials[:google_project]
|
14
|
+
|
10
15
|
TEST_ZONE = "us-central1-f".freeze
|
11
16
|
TEST_REGION = "us-central1".freeze
|
12
17
|
TEST_SIZE_GB = 10
|
13
18
|
TEST_MACHINE_TYPE = "n1-standard-1".freeze
|
19
|
+
TEST_IMAGE = "debian-9-stretch-v20180611".freeze
|
20
|
+
|
14
21
|
# XXX This depends on a public image in gs://fog-test-bucket; there may be a better way to do this
|
15
22
|
# The image was created like so: https://cloud.google.com/compute/docs/images#export_an_image_to_google_cloud_storage
|
16
23
|
TEST_RAW_DISK_SOURCE = "http://storage.googleapis.com/fog-test-bucket/fog-test-raw-disk-source.image.tar.gz".freeze
|
@@ -21,6 +28,66 @@ TEST_SQL_REGION_FIRST = "us-central".freeze
|
|
21
28
|
TEST_SQL_TIER_SECOND = "db-n1-standard-1".freeze
|
22
29
|
TEST_SQL_REGION_SECOND = TEST_REGION
|
23
30
|
|
31
|
+
# Test certificate/key for SSL Proxy tests, generated via:
|
32
|
+
# $ openssl genrsa -out example.key 2048
|
33
|
+
# $ openssl req -new -key example.key -out example.csr
|
34
|
+
# ...
|
35
|
+
# Common Name (eg, fully qualified host name) []:example.com
|
36
|
+
# Email Address []:admin@example.com
|
37
|
+
# ...
|
38
|
+
# $ openssl x509 -req -in example.csr -signkey example.key -out example.crt
|
39
|
+
|
40
|
+
TEST_PEM_CERTIFICATE = <<CERT
|
41
|
+
-----BEGIN CERTIFICATE-----
|
42
|
+
MIIC7DCCAdQCCQCDSZQ3PYJW6zANBgkqhkiG9w0BAQUFADA4MRQwEgYDVQQDDAtl
|
43
|
+
eGFtcGxlLmNvbTEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20wHhcN
|
44
|
+
MTgwNjI4MDEzMzA5WhcNMTgwNzI4MDEzMzA5WjA4MRQwEgYDVQQDDAtleGFtcGxl
|
45
|
+
LmNvbTEgMB4GCSqGSIb3DQEJARYRYWRtaW5AZXhhbXBsZS5jb20wggEiMA0GCSqG
|
46
|
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2DQkr6HBIoVsi7I+uHtmmge1KvbWP4nwg
|
47
|
+
tmKe8FtprjyaBcY729Sc0LTgkOh0krVem9nsxd/Lea47jHTV/vM03xsOuEKRKy3S
|
48
|
+
Horlr0TBRvB7tSmZCH0jn4x+V/k2qdLKhiDAtbLZ1UC3SWu3OjbE9ozf3fNPmssT
|
49
|
+
bK2sNesa2XlydzL8wyZMajGLs8CEHVqpZwLSPTeGB3LAhdRjfzJLijqe124otVIb
|
50
|
+
3+tbxYZVY5GLVQIIR/DlwRzZLxptPALvHq3t3eOfC3eZImXqUzGmoug6nDrdKuEs
|
51
|
+
C8yaoCNC3sSecoaV5Kyy70Hae+wFV7ocZGejm9AtuHXF1pgM4outAgMBAAEwDQYJ
|
52
|
+
KoZIhvcNAQEFBQADggEBAFRYuOe7nwR8Sn7TDyzPcqau3yF2qYATtrDIzo7xmh3o
|
53
|
+
T18FYCeX9gu/M9ytziM2lb/+WRqvcu55FrQiBz434E4wYH/IGUZK849V03dCro10
|
54
|
+
Po5Hhayt5+tv5Ti0JqmJoC/HN0hNF+WQA8kikiteTTohIDj9rVX2uULA61rnHXSZ
|
55
|
+
h6ZZRce3PdRKIUjOcQ4pIoI8QXSIToBsdY+Cieg9PHCt8mZhevU7COE1lfPFtdlY
|
56
|
+
HJhg5xhHVUt40qsahpvUjnPBU8rJPPE06ougf5qjr0D8ZoYeuUQT0VJYwwacfpeb
|
57
|
+
hs6AFOH5IAj6gjdIRhOWzYSxBYeyzJGfiPSbK4rowFM=
|
58
|
+
-----END CERTIFICATE-----
|
59
|
+
CERT
|
60
|
+
|
61
|
+
TEST_PEM_CERTIFICATE_PRIVATE_KEY = <<KEY
|
62
|
+
-----BEGIN RSA PRIVATE KEY-----
|
63
|
+
MIIEpAIBAAKCAQEAtg0JK+hwSKFbIuyPrh7ZpoHtSr21j+J8ILZinvBbaa48mgXG
|
64
|
+
O9vUnNC04JDodJK1XpvZ7MXfy3muO4x01f7zNN8bDrhCkSst0h6K5a9EwUbwe7Up
|
65
|
+
mQh9I5+Mflf5NqnSyoYgwLWy2dVAt0lrtzo2xPaM393zT5rLE2ytrDXrGtl5cncy
|
66
|
+
/MMmTGoxi7PAhB1aqWcC0j03hgdywIXUY38yS4o6ntduKLVSG9/rW8WGVWORi1UC
|
67
|
+
CEfw5cEc2S8abTwC7x6t7d3jnwt3mSJl6lMxpqLoOpw63SrhLAvMmqAjQt7EnnKG
|
68
|
+
leSssu9B2nvsBVe6HGRno5vQLbh1xdaYDOKLrQIDAQABAoIBAD5GA0cjwZT2rQgr
|
69
|
+
R5LWNrmAZD1W246WeMNv4BhiO8LQuSYup3q+XeIuelD/AKUvsh7kzQzzOvSNcQ4p
|
70
|
+
o6W4ClWho83LNeoWjRv9GqIq7Cf5LjYC6HHSt4vB/fsR+Mu8F8DzVKzW+pENI5AO
|
71
|
+
62vH3AhQFixV7e7jEmhYmqf34a5S9U3+0OkzRRbFVA5rBxKK4xLqrX/app4/TKs6
|
72
|
+
msn+qCJUAVxggcKIACF0slzbGuKfCSOyfPM4dmKV1n857wDu2YB9QwaaI+aHtR9S
|
73
|
+
rassm1TCcqirUIOsTcAaZ5szjkhAhH+pg/xVjl/2ppz1W/m9cfNQ4zwle1YuUmpS
|
74
|
+
OxyqUcECgYEA8jQ0zZG4J7MOX29o2F+D4VI5I1kp6uLsfhb8KztEgpgdMy+nGNsK
|
75
|
+
wlOd2fJU3hK51dg82HKSSEzHHPud7O39pWEo3iSmgdZ+pXhjXe95x+bVPfP01eSp
|
76
|
+
CSyMP8t6c9RxVtpVU1IbrjMXROuwEIxaIzMhT4YYDGOoSj2xLn43N9kCgYEAwGuv
|
77
|
+
MJeCDMI2Zr+OA1N3FUk6Py8q1zxJN3Wt3CwSjp57K3g2LaqN6gwgIbN3d1fEV9cM
|
78
|
+
ATtjjsFC+toFrP8BZ1wj3DY8Q4OsOmXng1V4bw4Y5xsT6SxXh7E0gU2L8MCjUdri
|
79
|
+
WUUu++yRRcUpWUGRRMYx6cN529HPNbAPm5Y8QfUCgYAGpCHShS1cgU9ilIZ2cGAI
|
80
|
+
XJ3Od1Jr6176shyl/tEJF6ytS6A0UUVBQNOyNy/WiwLndy9r6/BQ5TIMfGW/KmNr
|
81
|
+
FnftZ2ndY4lDdkKbP8bCEXVFZpwPBV8RLlSGJ0krReb5r7DpQPYbV7FKpX/FZGPQ
|
82
|
+
VUWTjaS5Kj5iEsD5+mH/OQKBgQCKhftc8/V/0eDwHz7RTikQfeMc0Yv530CmWGWN
|
83
|
+
d3z0h0sMhEIcpgf8UjZfjJ+YnuqOghX2XRbTEnZxuLsVS49rJX37bl/8CrLWZ74/
|
84
|
+
YiyNZoyu82NmHbH10bCG1ZjE/SmWKAmDUrb8TdZXcBTQWM+Hv1b3fu4fPe/6KoFR
|
85
|
+
9Nn0cQKBgQC8BViTyfPTSuTEb8z7uzLEQk13MH+LTHFngFevWoq3OStEsmsIYK1K
|
86
|
+
GcF1N9ZzPH024uwdcLjjwpul/avUHqzfp5ZILuI83Z/OqYYLiCQ0BbAQno7Cp5Be
|
87
|
+
wLjafhPTSAIS0jijglJ7uzaSbFUW11fw1/EIqIFNe0R0Xf9lsyPxFA==
|
88
|
+
-----END RSA PRIVATE KEY-----
|
89
|
+
KEY
|
90
|
+
|
24
91
|
class FogIntegrationTest < MiniTest::Test
|
25
92
|
def namespaced_name
|
26
93
|
"#{self.class}_#{name}"
|
data/test/helpers/test_helper.rb
CHANGED
@@ -1,19 +1,23 @@
|
|
1
|
-
#
|
2
|
-
#
|
3
|
-
# See https://github.com/seattlerb/minitest/#install
|
4
|
-
gem "minitest"
|
5
|
-
|
6
|
-
require "minitest/autorun"
|
7
|
-
|
1
|
+
# Configure simplecov for coverage tests
|
2
|
+
# Note: needs to be done _before_ requiring minitest!
|
8
3
|
if ENV["COVERAGE"]
|
9
|
-
require "coveralls"
|
10
4
|
require "simplecov"
|
11
5
|
|
6
|
+
require 'codecov'
|
7
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
8
|
+
|
12
9
|
SimpleCov.start do
|
13
10
|
add_filter "/test/"
|
14
11
|
end
|
15
12
|
end
|
16
13
|
|
17
|
-
|
14
|
+
# The next line was added to squelch a warning message in Ruby 1.9.
|
15
|
+
# It ensures we're using the gem, not the built-in Minitest
|
16
|
+
# See https://github.com/seattlerb/minitest/#install
|
17
|
+
gem "minitest"
|
18
|
+
require "minitest/autorun"
|
19
|
+
# Custom formatters
|
20
|
+
require "minitest/reporters"
|
21
|
+
Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
|
18
22
|
|
19
|
-
|
23
|
+
require File.join(File.dirname(__FILE__), "../../lib/fog/google")
|
@@ -0,0 +1,6 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
|
3
|
+
# This is a simple coverage helper that helps differentiate
|
4
|
+
# the tests when run in parallel so the final coverage report
|
5
|
+
# can be properly combined together from multiple runners
|
6
|
+
SimpleCov.command_name "test:compute-core_compute" if ENV["COVERAGE"]
|
File without changes
|
data/test/integration/compute/{disks/test_compute_disk_models.rb → core_compute/test_disks.rb}
RENAMED
File without changes
|
File without changes
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
|
3
|
+
class TestMachineTypes < FogIntegrationTest
|
4
|
+
# List of machine types - not a complete sampling since beefier ones do not
|
5
|
+
# exist in all zones (list last updated June 2018)
|
6
|
+
NAMES = %w(f1-micro g1-small n1-highcpu-16 n1-highcpu-2 n1-highcpu-4
|
7
|
+
n1-highcpu-8 n1-highmem-16 n1-highmem-2 n1-highmem-32 n1-highmem-4
|
8
|
+
n1-highmem-8 n1-standard-1 n1-standard-16 n1-standard-2
|
9
|
+
n1-standard-32 n1-standard-4 n1-standard-8 ).freeze
|
10
|
+
|
11
|
+
# Testing in one random zone per region (list last updated May 2018)
|
12
|
+
ZONES = %w(asia-east1-a asia-northeast1-b asia-south1-c asia-southeast1-a
|
13
|
+
australia-southeast1-b europe-west1-c europe-west2-a europe-west3-b
|
14
|
+
europe-west4-c northamerica-northeast1-a southamerica-east1-b
|
15
|
+
us-central1-c us-east1-b us-east4-a us-west1-c).freeze
|
16
|
+
|
17
|
+
def setup
|
18
|
+
@subject = Fog::Compute[:google].machine_types
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_all
|
22
|
+
assert_operator(@subject.all.size, :>=, NAMES.size * ZONES.size,
|
23
|
+
"Number of all machine types should be greater or equal to test zones * machine_types")
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_get
|
27
|
+
# This tests only in last zone since not all zones contain all machine types
|
28
|
+
NAMES.each do |name|
|
29
|
+
ZONES.each do |zone|
|
30
|
+
refute_nil @subject.get(name, zone)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_bad_get
|
36
|
+
assert_nil @subject.get("bad-name", ZONES.first)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_enumerable
|
40
|
+
assert_respond_to @subject, :each
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
|
3
|
+
class TestRoutes < FogIntegrationTest
|
4
|
+
def setup
|
5
|
+
@subject = Fog::Compute[:google].operations
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_all
|
9
|
+
# TODO: what if this test runs first on a brand new project?
|
10
|
+
assert_operator(@subject.all.size, :>=, 2,
|
11
|
+
"There should be at least 2 operations in the project")
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_get
|
15
|
+
@subject.all do |operation|
|
16
|
+
refute_nil @subject.get(operation.name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_bad_get
|
21
|
+
assert_nil @subject.get("bad-name")
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_enumerable
|
25
|
+
assert_respond_to @subject, :each
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
|
3
|
+
class TestProjects < FogIntegrationTest
|
4
|
+
def setup
|
5
|
+
@subject = Fog::Compute[:google].projects
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_get
|
9
|
+
assert @subject.get(TEST_PROJECT)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_bad_get
|
13
|
+
assert_nil @subject.get("bad-name")
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_enumerable
|
17
|
+
assert_respond_to @subject, :each
|
18
|
+
end
|
19
|
+
end
|
File without changes
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
require "integration/factories/servers_factory"
|
3
|
+
require "integration/factories/disks_factory"
|
4
|
+
require "resolv"
|
5
|
+
|
6
|
+
class TestServers < FogIntegrationTest
|
7
|
+
include TestCollection
|
8
|
+
|
9
|
+
# Cleanup is handled by TestCollection
|
10
|
+
def setup
|
11
|
+
@subject = Fog::Compute[:google].servers
|
12
|
+
@factory = ServersFactory.new(namespaced_name)
|
13
|
+
@servers = ServersFactory.new(namespaced_name)
|
14
|
+
@disks = DisksFactory.new(namespaced_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
# Clean up the server resources used in testing
|
19
|
+
@servers.cleanup
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_set_metadata
|
24
|
+
server = @factory.create
|
25
|
+
server.wait_for { ready? }
|
26
|
+
server.set_metadata({ "foo" => "bar", "baz" => "foo" }, false)
|
27
|
+
assert_equal [{ :key => "foo", :value => "bar" },
|
28
|
+
{ :key => "baz", :value => "foo" }], server.metadata[:items]
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_bootstrap
|
32
|
+
key = "ssh-rsa IAMNOTAREALSSHKEYAMA== user@host.subdomain.example.com"
|
33
|
+
user = "username"
|
34
|
+
|
35
|
+
File.stub :read, key do
|
36
|
+
# XXX Small hack - name is set this way so it will be cleaned up by CollectionFactory
|
37
|
+
# Bootstrap is special so this is something that needs to be done only for this method
|
38
|
+
# Public_key_path is set to avoid stubbing out File.exist?
|
39
|
+
server = @subject.bootstrap(:name => "#{CollectionFactory.new(nil,namespaced_name).resource_name}",
|
40
|
+
:username => user,
|
41
|
+
:public_key_path => "foo")
|
42
|
+
boot_disk = server.disks.detect { |disk| disk[:boot] }
|
43
|
+
|
44
|
+
assert_equal("RUNNING", server.status, "Bootstrapped server should be running")
|
45
|
+
assert_equal(key, server.public_key, "Bootstrapped server should have a public key set")
|
46
|
+
assert_equal(user, server.username, "Bootstrapped server should have user set to #{user}")
|
47
|
+
assert(boot_disk[:auto_delete], "Bootstrapped server should have disk set to autodelete")
|
48
|
+
|
49
|
+
network_adapter = server.network_interfaces.detect { |x| x.has_key?(:access_configs) }
|
50
|
+
|
51
|
+
refute_nil(network_adapter[:access_configs].detect { |x| x[:nat_ip] },
|
52
|
+
"Bootstrapped server should have an external ip by default")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_bootstrap_fail
|
57
|
+
# Pretend the ssh key does not exist
|
58
|
+
File.stub :exist?, nil do
|
59
|
+
assert_raises(Fog::Errors::Error) {
|
60
|
+
# XXX Small hack - name is set this way so it will be cleaned up by CollectionFactory
|
61
|
+
# Bootstrap is special so this is something that needs to be done only for this method
|
62
|
+
@subject.bootstrap(:name => "#{CollectionFactory.new(nil,namespaced_name).resource_name}",
|
63
|
+
:public_key_path => nil)
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_image_name
|
69
|
+
server = @factory.create
|
70
|
+
assert_equal(TEST_IMAGE, server.image_name.split("/")[-1])
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_ip_address_methods
|
74
|
+
# Create a server with ephemeral external IP address
|
75
|
+
server = @factory.create(:network_interfaces => [{ :network => "global/networks/default",
|
76
|
+
:access_configs => [{
|
77
|
+
:name => "External NAT",
|
78
|
+
:type => "ONE_TO_ONE_NAT"
|
79
|
+
}] }])
|
80
|
+
assert_match(Resolv::IPv4::Regex, server.public_ip_address,
|
81
|
+
"Server.public_ip_address should return a valid IP address")
|
82
|
+
refute_empty(server.public_ip_addresses)
|
83
|
+
assert_match(Resolv::IPv4::Regex, server.public_ip_addresses.pop)
|
84
|
+
|
85
|
+
assert_match(Resolv::IPv4::Regex, server.private_ip_address,
|
86
|
+
"Server.public_ip_address should return a valid IP address")
|
87
|
+
refute_empty(server.private_ip_addresses)
|
88
|
+
assert_match(Resolv::IPv4::Regex, server.private_ip_addresses.pop)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_start_stop_reboot
|
92
|
+
server = @factory.create
|
93
|
+
|
94
|
+
server.stop
|
95
|
+
server.wait_for { stopped? }
|
96
|
+
|
97
|
+
assert server.stopped?
|
98
|
+
|
99
|
+
server.start
|
100
|
+
server.wait_for { ready? }
|
101
|
+
|
102
|
+
assert server.ready?
|
103
|
+
|
104
|
+
server.reboot
|
105
|
+
server.wait_for { ready? }
|
106
|
+
|
107
|
+
assert server.ready?
|
108
|
+
end
|
109
|
+
end
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
|
3
|
+
class TestZones < FogIntegrationTest
|
4
|
+
# Testing one random zone per region (list last updated May 2018)
|
5
|
+
ZONES = %w(asia-east1-a asia-northeast1-b asia-south1-c asia-southeast1-a
|
6
|
+
australia-southeast1-b europe-west1-c europe-west2-a europe-west3-b
|
7
|
+
europe-west4-c northamerica-northeast1-a southamerica-east1-b
|
8
|
+
us-central1-c us-east1-b us-east4-a us-west1-c).freeze
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@subject = Fog::Compute[:google].zones
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_all
|
15
|
+
assert_operator(@subject.all.size, :>=, ZONES.size,
|
16
|
+
"Number of all zones should be greater than test zones")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_get
|
20
|
+
# This tests only in last zone since not all zones contain all machine types
|
21
|
+
ZONES.each do |name|
|
22
|
+
zone = @subject.get(name)
|
23
|
+
refute_nil(zone, "zones.get() should not return nil")
|
24
|
+
assert(zone.up?, "zones.up? should return up, unless there's an outage")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_bad_get
|
29
|
+
assert_nil @subject.get("bad-name")
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_enumerable
|
33
|
+
assert_respond_to @subject, :each
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require "helpers/integration_test_helper"
|
2
|
+
require "integration/factories/addresses_factory"
|
3
|
+
require "integration/factories/servers_factory"
|
4
|
+
|
5
|
+
class TestAddresses < FogIntegrationTest
|
6
|
+
include TestCollection
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@subject = Fog::Compute[:google].addresses
|
10
|
+
@servers = ServersFactory.new(namespaced_name)
|
11
|
+
@factory = AddressesFactory.new(namespaced_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
# Clean up the server resources used in testing
|
16
|
+
@servers.cleanup
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_run_instance
|
21
|
+
address = @factory.create
|
22
|
+
server = @servers.create(:external_ip => address.address)
|
23
|
+
|
24
|
+
assert_equal(
|
25
|
+
address.address,
|
26
|
+
server.network_interfaces[0][:access_configs][0][:nat_ip],
|
27
|
+
"Created server should have the correct address after initialization"
|
28
|
+
)
|
29
|
+
|
30
|
+
assert_equal(
|
31
|
+
"IN_USE",
|
32
|
+
@subject.get(address.name, TEST_REGION).status,
|
33
|
+
"Address should now be in use"
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_bad_get
|
38
|
+
assert_nil @subject.get("bad-name", TEST_REGION)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_valid_range
|
42
|
+
address = @factory.create
|
43
|
+
|
44
|
+
octet = /\d{,2}|1\d{2}|2[0-4]\d|25[0-5]/
|
45
|
+
re = /\A#{octet}\.#{octet}\.#{octet}\.#{octet}\z/
|
46
|
+
|
47
|
+
assert_match(re, address.address,
|
48
|
+
"Adress should be a valid ipv4 address")
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_addresses_get_address_by_ip
|
52
|
+
address = @factory.create
|
53
|
+
found = @subject.get_by_ip_address(address.address)
|
54
|
+
|
55
|
+
assert_equal(address.name, found.name, "address should have same name")
|
56
|
+
assert_equal(address.address, found.address, "addresses should match")
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_addresses_get_address_by_name
|
60
|
+
address = @factory.create
|
61
|
+
found = @subject.get_by_name(address.name)
|
62
|
+
|
63
|
+
assert_equal(address.name, found.name, "address should have same name")
|
64
|
+
assert_equal(address.address, found.address, "addresses should match")
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_addresses_get_by_ip_address_or_name
|
68
|
+
# Ensure we find the same addresses through both codepaths
|
69
|
+
address = @factory.create
|
70
|
+
with_name = @subject.get_by_ip_address_or_name(address.name)
|
71
|
+
with_ip = @subject.get_by_ip_address_or_name(address.address)
|
72
|
+
|
73
|
+
assert_equal(address.name, with_name.name, "address should have same name")
|
74
|
+
assert_equal(address.address, with_name.address, "addresses should match")
|
75
|
+
|
76
|
+
assert_equal(address.name, with_ip.name, "address should have same name")
|
77
|
+
assert_equal(address.address, with_ip.address, "addresses should match")
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_addresses_in_use
|
81
|
+
address = @factory.create
|
82
|
+
assert_equal(false, address.in_use?, "example address should not be in use")
|
83
|
+
end
|
84
|
+
end
|