fog-google 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/CHANGELOG.md +53 -0
  4. data/CONTRIBUTING.md +9 -1
  5. data/MIGRATING.md +11 -0
  6. data/README.md +16 -2
  7. data/ci/pipeline.yml +31 -1
  8. data/examples/bootstrap.rb +18 -9
  9. data/lib/fog/compute/google/models/server.rb +9 -0
  10. data/lib/fog/compute/google/models/servers.rb +21 -12
  11. data/lib/fog/compute/google/models/ssl_certificate.rb +1 -1
  12. data/lib/fog/google/models/sql/instance.rb +19 -4
  13. data/lib/fog/google/models/sql/user.rb +9 -3
  14. data/lib/fog/google/requests/sql/insert_instance.rb +2 -2
  15. data/lib/fog/google/version.rb +1 -1
  16. data/lib/fog/storage/google_xml/utils.rb +1 -1
  17. data/tasks/lint.rake +6 -0
  18. data/tasks/test.rake +21 -8
  19. data/test/helpers/integration_test_helper.rb +1 -1
  20. data/test/integration/compute/test_disk_types.rb +6 -11
  21. data/test/integration/compute/test_servers.rb +35 -1
  22. data/test/integration/factories/sql_v1_certs_factory.rb +20 -0
  23. data/test/integration/factories/sql_v1_instances_factory.rb +19 -0
  24. data/test/integration/factories/sql_v1_users_factory.rb +20 -0
  25. data/test/integration/factories/sql_v2_instances_factory.rb +19 -0
  26. data/test/integration/monitoring/test_timeseries.rb +6 -8
  27. data/test/integration/sql/{test_flags.rb → test_common_flags.rb} +1 -1
  28. data/test/integration/sql/{test_tiers.rb → test_common_tiers.rb} +5 -13
  29. data/test/integration/sql/test_v1_certs.rb +50 -0
  30. data/test/integration/sql/test_v1_instances.rb +31 -0
  31. data/test/integration/sql/test_v1_users.rb +37 -0
  32. data/test/integration/sql/test_v2_instances.rb +81 -0
  33. data/test/unit/compute/test_server.rb +28 -0
  34. data/test/unit/storage/test_xml_requests.rb +24 -0
  35. metadata +27 -12
  36. data/test/integration/sql/sql_instances_shared.rb +0 -57
  37. data/test/integration/sql/test_instances.rb +0 -97
  38. data/test/integration/sql/test_instances_second_gen.rb +0 -88
@@ -0,0 +1,37 @@
1
+ require "helpers/integration_test_helper"
2
+ require "integration/factories/sql_v1_instances_factory"
3
+ require "integration/factories/sql_v1_users_factory"
4
+
5
+ class TestSQLV1Users < FogIntegrationTest
6
+ # This test doesn't include TestCollection as Users is not a
7
+ # classical Fog model, as it's tied to a particular instance
8
+ # I.e.:
9
+ # - Fog::Google::SQL.users.all() requires an instance
10
+ # - API doesn't provide a GET request for Users model
11
+ # See: https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/users
12
+
13
+ def setup
14
+ @subject = Fog::Google[:sql].users
15
+ @factory = SqlV1UsersFactory.new(namespaced_name)
16
+ end
17
+
18
+ def teardown
19
+ @factory.cleanup
20
+ end
21
+
22
+ def test_users
23
+ # Create user
24
+ user = @factory.create
25
+
26
+ # Check user was created
27
+ users = @subject.all(user.instance).select { |u| u.name == user.name }
28
+ assert_equal(1, users.size, "expected user to have been created")
29
+
30
+ # Delete user
31
+ users.first.destroy(:async => false)
32
+ assert_empty(
33
+ @subject.all(user.instance).select { |u| u.name == user.name },
34
+ "expected no user #{user.name}"
35
+ )
36
+ end
37
+ end
@@ -0,0 +1,81 @@
1
+ require "helpers/integration_test_helper"
2
+ require "integration/factories/sql_v2_instances_factory"
3
+ # Client helper is imported for `wait_until_complete`
4
+ # TODO: Remove when fog-google#339 or fog-google#340 is resolved
5
+ require "helpers/client_helper"
6
+
7
+ class TestSQLV2Instances < FogIntegrationTest
8
+ include TestCollection
9
+ # TODO: Remove when fog-google#339 or fog-google#340 is resolved
10
+ include ClientHelper
11
+ attr_reader :client
12
+
13
+ def setup
14
+ @subject = Fog::Google[:sql].instances
15
+ @factory = SqlV2InstancesFactory.new(namespaced_name)
16
+ @backup_runs = Fog::Google[:sql].backup_runs
17
+ # TODO: Remove after BackupRuns get save/reload - fog-google#339
18
+ # See https://github.com/fog/fog-google/issues/339
19
+ @client = Fog::Google::SQL.new
20
+ end
21
+
22
+ def test_restore_backup_run
23
+ instance = @factory.create
24
+
25
+ data = { :description => "test", :instance => instance.name }
26
+ wait_until_complete { @client.insert_backup_run(instance.name, data) }
27
+
28
+ backup_run = @backup_runs.all(instance.name).first
29
+
30
+ # Wait for backup operation to be finished
31
+ # or fail if it never finishes.
32
+ instance.restore_backup(backup_run.id, :async => false)
33
+ end
34
+
35
+ def test_backup_runs
36
+ # TODO: This probably can get pulled into the test above as those tests
37
+ # very expensive time-wize (5 minutes or so each)
38
+ instance = @factory.create
39
+
40
+ description = "test backup run"
41
+ operation = wait_until_complete do
42
+ @client.insert_backup_run(
43
+ instance.name,
44
+ :description => description
45
+ )
46
+ end
47
+
48
+ assert_equal(operation.operation_type, "BACKUP_VOLUME")
49
+ runs = @backup_runs.all(instance.name)
50
+ assert_operator(runs.size, :>, 0, "expected at least one backup run")
51
+ assert_equal(description, runs.first.description)
52
+
53
+ created_run = @backup_runs.get(instance.name, runs.first.id)
54
+ assert_equal(created_run, runs.first)
55
+
56
+ wait_until_complete do
57
+ @client.delete_backup_run(instance.name, runs.first.id)
58
+ end
59
+
60
+ deleted_run = @backup_runs.get(instance.name, runs.first.id)
61
+ assert_equal("DELETED", deleted_run.status)
62
+ end
63
+
64
+ def test_clone
65
+ instance = @factory.create
66
+ instance.clone("#{instance.name}-clone", :async => false)
67
+ cloned = @client.instances.get("#{instance.name}-clone")
68
+
69
+ # Sanity check some attributes
70
+ compare = %i(current_disk_size project region ip_configuration_require_ssl activation_policy)
71
+ compare.each do |k|
72
+ v = instance.attributes[k]
73
+ cloned_v = cloned.attributes[k]
74
+ if v.nil?
75
+ assert_nil(cloned_v)
76
+ else
77
+ assert_equal(v, cloned_v, "attribute #{k} in original instance is #{v}, cloned = #{cloned_v}")
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,28 @@
1
+ require "helpers/test_helper"
2
+
3
+ class UnitTestServer < MiniTest::Test
4
+ def setup
5
+ Fog.mock!
6
+ @client = Fog::Compute.new(:provider => "Google", :google_project => "foo")
7
+ end
8
+
9
+ def teardown
10
+ Fog.unmock!
11
+ end
12
+
13
+ def test_if_server_accepts_ssh_keys
14
+ key = "ssh-rsa IAMNOTAREALSSHKEYAMA== user@host.subdomain.example.com"
15
+
16
+ File.stub :read, key do
17
+ server = Fog::Compute::Google::Server.new(
18
+ :name => "foo",
19
+ :machine_type => "bar",
20
+ :disks => ["baz"],
21
+ :zone => "foo",
22
+ :public_key_path => key
23
+ )
24
+ assert_equal(server.public_key, key,
25
+ "Fog::Compute::Google::Server loads public_key properly")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ require "helpers/test_helper"
2
+
3
+ class UnitTestXMLRequests < MiniTest::Test
4
+ def setup
5
+ Fog.mock!
6
+ @client = Fog::Storage.new(provider: "google",
7
+ google_storage_access_key_id: "",
8
+ google_storage_secret_access_key: "")
9
+ end
10
+
11
+ def teardown
12
+ Fog.unmock!
13
+ end
14
+
15
+ def test_put_url_path_is_properly_escaped
16
+ url = @client.put_object_url("bucket",
17
+ "just some file.json",
18
+ Time.now + 2 * 60,
19
+ "Content-Type" => "application/json")
20
+
21
+ assert_match(/just%20some%20file\.json/, url,
22
+ "space should be escaped with '%20'")
23
+ end
24
+ 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: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nat Welch
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-06-16 00:00:00.000000000 Z
12
+ date: 2018-06-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog-core
@@ -256,6 +256,7 @@ files:
256
256
  - CONTRIBUTORS.md
257
257
  - Gemfile
258
258
  - LICENSE.md
259
+ - MIGRATING.md
259
260
  - README.md
260
261
  - Rakefile
261
262
  - ci/.gitignore
@@ -729,6 +730,10 @@ files:
729
730
  - test/integration/factories/instance_group_manager_factory.rb
730
731
  - test/integration/factories/instance_template_factory.rb
731
732
  - test/integration/factories/servers_factory.rb
733
+ - test/integration/factories/sql_v1_certs_factory.rb
734
+ - test/integration/factories/sql_v1_instances_factory.rb
735
+ - test/integration/factories/sql_v1_users_factory.rb
736
+ - test/integration/factories/sql_v2_instances_factory.rb
732
737
  - test/integration/factories/target_http_proxies_factory.rb
733
738
  - test/integration/factories/target_instances_factory.rb
734
739
  - test/integration/factories/target_pools_factory.rb
@@ -739,11 +744,12 @@ files:
739
744
  - test/integration/pubsub/pubsub_shared.rb
740
745
  - test/integration/pubsub/test_pubsub_models.rb
741
746
  - test/integration/pubsub/test_pubsub_requests.rb
742
- - test/integration/sql/sql_instances_shared.rb
743
- - test/integration/sql/test_flags.rb
744
- - test/integration/sql/test_instances.rb
745
- - test/integration/sql/test_instances_second_gen.rb
746
- - test/integration/sql/test_tiers.rb
747
+ - test/integration/sql/test_common_flags.rb
748
+ - test/integration/sql/test_common_tiers.rb
749
+ - test/integration/sql/test_v1_certs.rb
750
+ - test/integration/sql/test_v1_instances.rb
751
+ - test/integration/sql/test_v1_users.rb
752
+ - test/integration/sql/test_v2_instances.rb
747
753
  - test/integration/storage/storage_shared.rb
748
754
  - test/integration/storage/test_buckets.rb
749
755
  - test/integration/storage/test_directories.rb
@@ -752,6 +758,8 @@ files:
752
758
  - test/integration/test_authentication.rb
753
759
  - test/unit/compute/test_common_collections.rb
754
760
  - test/unit/compute/test_common_models.rb
761
+ - test/unit/compute/test_server.rb
762
+ - test/unit/storage/test_xml_requests.rb
755
763
  homepage: https://github.com/fog/fog-google
756
764
  licenses:
757
765
  - MIT
@@ -813,6 +821,10 @@ test_files:
813
821
  - test/integration/factories/instance_group_manager_factory.rb
814
822
  - test/integration/factories/instance_template_factory.rb
815
823
  - test/integration/factories/servers_factory.rb
824
+ - test/integration/factories/sql_v1_certs_factory.rb
825
+ - test/integration/factories/sql_v1_instances_factory.rb
826
+ - test/integration/factories/sql_v1_users_factory.rb
827
+ - test/integration/factories/sql_v2_instances_factory.rb
816
828
  - test/integration/factories/target_http_proxies_factory.rb
817
829
  - test/integration/factories/target_instances_factory.rb
818
830
  - test/integration/factories/target_pools_factory.rb
@@ -823,11 +835,12 @@ test_files:
823
835
  - test/integration/pubsub/pubsub_shared.rb
824
836
  - test/integration/pubsub/test_pubsub_models.rb
825
837
  - test/integration/pubsub/test_pubsub_requests.rb
826
- - test/integration/sql/sql_instances_shared.rb
827
- - test/integration/sql/test_flags.rb
828
- - test/integration/sql/test_instances.rb
829
- - test/integration/sql/test_instances_second_gen.rb
830
- - test/integration/sql/test_tiers.rb
838
+ - test/integration/sql/test_common_flags.rb
839
+ - test/integration/sql/test_common_tiers.rb
840
+ - test/integration/sql/test_v1_certs.rb
841
+ - test/integration/sql/test_v1_instances.rb
842
+ - test/integration/sql/test_v1_users.rb
843
+ - test/integration/sql/test_v2_instances.rb
831
844
  - test/integration/storage/storage_shared.rb
832
845
  - test/integration/storage/test_buckets.rb
833
846
  - test/integration/storage/test_directories.rb
@@ -836,3 +849,5 @@ test_files:
836
849
  - test/integration/test_authentication.rb
837
850
  - test/unit/compute/test_common_collections.rb
838
851
  - test/unit/compute/test_common_models.rb
852
+ - test/unit/compute/test_server.rb
853
+ - test/unit/storage/test_xml_requests.rb
@@ -1,57 +0,0 @@
1
- require "helpers/integration_test_helper"
2
- require "helpers/client_helper"
3
-
4
- class TestSqlInstancesShared < FogIntegrationTest
5
- include ClientHelper
6
- attr_reader :client
7
-
8
- INSTANCE_NAME = "fogtest-#{Fog::Mock.random_letters(8)}".freeze
9
-
10
- def setup
11
- @client = Fog::Google::SQL.new
12
- Minitest.after_run do
13
- delete_test_resources
14
- end
15
- end
16
-
17
- def delete_test_resources
18
- try_delete_instance(INSTANCE_NAME)
19
- end
20
-
21
- def some_instance_name
22
- # Create one test instance per generation per test suite.
23
- INSTANCE_NAME.tap do |name|
24
- begin
25
- @client.get_instance(name)
26
- rescue ::Google::Apis::ClientError
27
- create_test_instance(INSTANCE_NAME,
28
- TEST_SQL_TIER_FIRST,
29
- TEST_SQL_REGION_FIRST)
30
- end
31
- end
32
- end
33
-
34
- def some_clone_name
35
- "#{INSTANCE_NAME}-clone"
36
- end
37
-
38
- def create_test_instance(instance_name, tier, region)
39
- # Create one test instance per generation per test suite.
40
- Fog::Logger.debug("creating test SQL instance...")
41
- # Create test instance if it hasn't been created yet
42
- @client = Fog::Google::SQL.new
43
- wait_until_complete do
44
- @client.insert_instance(instance_name, tier, :region => region)
45
- end
46
- end
47
-
48
- def try_delete_instance(instance)
49
- @client = Fog::Google::SQL.new
50
- wait_until_complete { @client.delete_instance(instance) }
51
- rescue ::Google::Apis::ClientError => e
52
- # 409: Invalid state
53
- # 404: Not found
54
- raise e unless e.status_code == 404 || e.status_code == 409
55
- Fog::Logger.warning("ignoring error in try_delete_instance")
56
- end
57
- end
@@ -1,97 +0,0 @@
1
- require "helpers/integration_test_helper"
2
- require "helpers/client_helper"
3
- require "integration/sql/sql_instances_shared"
4
-
5
- class TestFirstGenInstances < TestSqlInstancesShared
6
- def test_all
7
- test_name = some_instance_name
8
- instances = @client.instances.all
9
- assert_operator(instances.size, :>=, 1,
10
- "expected at least one instance")
11
-
12
- filtered = instances.select { |i| i.name == test_name }
13
- assert_equal(1, filtered.size, "expected instance with name #{test_name}")
14
- end
15
-
16
- def test_update
17
- instance = @client.instances.get(some_instance_name)
18
- settings_version = instance.settings_version
19
- labels = {
20
- :foo => "bar"
21
- }
22
- instance.settings[:user_labels] = labels
23
- instance.save
24
-
25
- updated = @client.instances.get(some_instance_name)
26
- assert_equal(labels, updated.settings[:user_labels])
27
- assert_operator(updated.settings_version, :>, settings_version)
28
- end
29
-
30
- def test_users
31
- # Create user
32
- username = "test_user"
33
-
34
- wait_until_complete do
35
- @client.insert_user(some_instance_name, :name => username)
36
- end
37
-
38
- # Check user was created
39
- users = @client.users.all(some_instance_name)
40
- .select { |u| u.name == username }
41
- assert_equal(1, users.size, "expected user to have been created")
42
-
43
- # Delete user
44
- users.first.destroy(:async => false)
45
- assert_empty(
46
- @client.users.all(some_instance_name).select { |u| u.name == username },
47
- "expected no user #{username}"
48
- )
49
- end
50
-
51
- def test_operations
52
- operations = @client.operations.all(some_instance_name)
53
- operations.select do |op|
54
- op.operation_type == "CREATE"
55
- end
56
-
57
- create_op = @client.operations.get(operations.first.name)
58
- assert(create_op.ready?)
59
- end
60
-
61
- def test_ssl_certs
62
- list_result = @client.ssl_certs.all(some_instance_name)
63
- # initial Count
64
- cert_cnt = list_result.size
65
- assert_equal(0, cert_cnt, "new instance should have 0 initial ssl certs")
66
-
67
- # create new certs
68
- ssl_certs = (0..1).map do
69
- name = Fog::Mock.random_letters(16)
70
- create_resp = @client.insert_ssl_cert(some_instance_name, name)
71
- wait_until_complete { create_resp.operation }
72
- fingerprint = create_resp.client_cert.cert_info.sha1_fingerprint
73
- # verify it was created
74
- @client.ssl_certs.get(some_instance_name, fingerprint).tap do |result|
75
- assert_equal(name, result.common_name)
76
- assert_equal("sql#sslCert", result.kind)
77
- end
78
- end
79
-
80
- # check i1 was created
81
- list_result = @client.ssl_certs.all(some_instance_name)
82
- assert_equal(ssl_certs.size, list_result.size,
83
- "expected #{ssl_certs.size} SSL certs")
84
-
85
- # delete one cert
86
- ssl_certs.first.destroy(:async => false)
87
- list_result = @client.ssl_certs.all(some_instance_name)
88
- assert_equal(ssl_certs.size - 1, list_result.size,
89
- "expected one less SSL cert after deletion")
90
-
91
- # Reset SSL config
92
- instance = @client.instances.get(some_instance_name)
93
- instance.reset_ssl_config(:async => false)
94
- assert_equal(0, @client.ssl_certs.all(some_instance_name).size,
95
- "expected no SSL certs after reset")
96
- end
97
- end
@@ -1,88 +0,0 @@
1
- require "helpers/integration_test_helper"
2
- require "helpers/client_helper"
3
- require "integration/sql/sql_instances_shared"
4
-
5
- ##
6
- # Tests requests and resources specific to 2nd generation instances.
7
-
8
- class TestSecondGenInstances < TestSqlInstancesShared
9
- # Test
10
- INSTANCE_NAME = "fogtest2ndgen-#{Fog::Mock.random_letters(8)}".freeze
11
-
12
- def some_clone_name
13
- "#{INSTANCE_NAME}-clone"
14
- end
15
-
16
- def some_instance_name
17
- # Create one test instance per generation per test suite.
18
- INSTANCE_NAME.tap do |name|
19
- begin
20
- @client.get_instance(name)
21
- rescue ::Google::Apis::ClientError
22
- create_test_instance(INSTANCE_NAME,
23
- TEST_SQL_TIER_SECOND,
24
- TEST_SQL_REGION_SECOND)
25
- end
26
- end
27
- end
28
-
29
- def delete_test_resources
30
- super
31
- try_delete_instance(some_clone_name)
32
- end
33
-
34
- def test_restore_backup_run
35
- data = { :description => "test", :instance => some_instance_name }
36
- wait_until_complete { @client.insert_backup_run(some_instance_name, data) }
37
-
38
- backup_run = @client.backup_runs.all(some_instance_name).first
39
- instance = @client.instances.get(some_instance_name)
40
-
41
- # Wait for backup operation to be finished
42
- # or fail if it never finishes.
43
- instance.restore_backup(backup_run.id, :async => false)
44
- end
45
-
46
- def test_backup_runs
47
- description = "test backup run"
48
- op = wait_until_complete do
49
- @client.insert_backup_run(
50
- some_instance_name,
51
- :description => description
52
- )
53
- end
54
-
55
- assert_equal(op.operation_type, "BACKUP_VOLUME")
56
- runs = @client.backup_runs.all(some_instance_name)
57
- assert_operator(runs.size, :>, 0, "expected at least one backup run")
58
- assert_equal(description, runs.first.description)
59
-
60
- created_run = @client.backup_runs.get(some_instance_name, runs.first.id)
61
- assert_equal(created_run, runs.first)
62
-
63
- wait_until_complete do
64
- @client.delete_backup_run(some_instance_name, runs.first.id)
65
- end
66
-
67
- deleted_run = @client.backup_runs.get(some_instance_name, runs.first.id)
68
- assert_equal("DELETED", deleted_run.status)
69
- end
70
-
71
- def test_clone
72
- instance = @client.instances.get(some_instance_name)
73
- instance.clone(some_clone_name, :async => false)
74
- cloned = @client.instances.get(some_clone_name)
75
-
76
- # Sanity check some attributes
77
- compare = %i(current_disk_size tier project region ip_configuration_require_ssl activation_policy)
78
- compare.each do |k|
79
- v = instance.attributes[k]
80
- cloned_v = cloned.attributes[k]
81
- if v.nil?
82
- assert_nil(cloned_v)
83
- else
84
- assert_equal(v, cloned_v, "attribute #{k} in original instance is #{v}, cloned = #{cloned_v}")
85
- end
86
- end
87
- end
88
- end