beaker-google 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.github/release.yml +41 -0
  3. data/.github/workflows/ci.yml +11 -8
  4. data/.github/workflows/release.yml +91 -17
  5. data/.rubocop.yml +2 -0
  6. data/.rubocop_todo.yml +20 -0
  7. data/CHANGELOG.md +32 -0
  8. data/Gemfile +8 -0
  9. data/README.md +2 -2
  10. data/Rakefile +7 -0
  11. data/beaker-google.gemspec +9 -6
  12. data/lib/beaker/hypervisor/google_compute.rb +4 -4
  13. data/lib/beaker/hypervisor/google_compute_helper.rb +15 -5
  14. data/lib/beaker-google/version.rb +1 -1
  15. data/spec/classes/beaker/google_compute_constants_and_defaults_spec.rb +141 -0
  16. data/spec/classes/beaker/google_compute_helper_api_version_spec.rb +37 -0
  17. data/spec/classes/beaker/google_compute_helper_configuration_validation_spec.rb +100 -0
  18. data/spec/classes/beaker/google_compute_helper_constants_and_defaults_spec.rb +66 -0
  19. data/spec/classes/beaker/google_compute_helper_edge_cases_spec.rb +173 -0
  20. data/spec/classes/beaker/google_compute_helper_error_handling_spec.rb +105 -0
  21. data/spec/classes/beaker/google_compute_helper_spec.rb +368 -0
  22. data/spec/classes/beaker/google_compute_helper_utilities_spec.rb +95 -0
  23. data/spec/classes/beaker/google_compute_initialization_spec.rb +52 -0
  24. data/spec/classes/beaker/google_compute_provision_spec.rb +68 -0
  25. data/spec/classes/beaker/google_compute_spec.rb +95 -0
  26. data/spec/classes/beaker/google_compute_ssh_key_management_spec.rb +115 -0
  27. data/spec/classes/beaker/google_spec.rb +68 -0
  28. data/spec/classes/beaker-google/beaker_google_version_spec.rb +19 -0
  29. data/spec/classes/beaker_integration_spec.rb +67 -0
  30. data/spec/spec_helper.rb +45 -0
  31. data/spec/support/google_compute_shared_setup.rb +138 -0
  32. data/spec/support/shared_mocks.rb +89 -0
  33. metadata +59 -15
  34. data/.github/workflows/codeql-analysis.yml +0 -70
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Beaker::GoogleCompute do
6
+ include FakeFS::SpecHelpers
7
+
8
+ subject(:google_compute) do
9
+ mock_google_services
10
+ described_class.new(hosts, options)
11
+ end
12
+
13
+ let(:logger) { instance_double(Beaker::Logger) }
14
+ let(:hosts) { [] }
15
+ let(:options) { { logger: logger, gce_project: 'test-project', gce_ports: [] } }
16
+
17
+ def mock_google_services
18
+ # Mock the authentication and service initialization
19
+ allow(Google::Auth).to receive(:get_application_default).and_return(double)
20
+
21
+ compute_service = double
22
+ allow(compute_service).to receive(:authorization=)
23
+ allow(compute_service).to receive(:request_options).and_return(Google::Apis::RequestOptions.new)
24
+ allow(Google::Apis::ComputeV1::ComputeService).to receive(:new).and_return(compute_service)
25
+
26
+ oslogin_service = double
27
+ allow(oslogin_service).to receive(:authorization=)
28
+ allow(Google::Apis::OsloginV1::CloudOSLoginService).to receive(:new).and_return(oslogin_service)
29
+
30
+ client_options = double
31
+ allow(client_options).to receive(:application_name=)
32
+ allow(client_options).to receive(:application_version=)
33
+ allow(Google::Apis::ClientOptions).to receive(:default).and_return(client_options)
34
+ end
35
+
36
+ describe '#find_google_ssh_private_key' do
37
+ let(:default_private_key) { File.join(Dir.home, '.ssh', 'google_compute_engine') }
38
+
39
+ context 'when default key exists' do
40
+ before do
41
+ FileUtils.mkdir_p(File.dirname(default_private_key))
42
+ File.write(default_private_key, 'private key content')
43
+ end
44
+
45
+ it 'returns the default private key path' do
46
+ expect(google_compute.find_google_ssh_private_key).to eq(default_private_key)
47
+ end
48
+ end
49
+
50
+ context 'when private key does not exist' do
51
+ it 'raises an error' do
52
+ expect { google_compute.find_google_ssh_private_key }.to raise_error(/Could not find GCE Private SSH key/)
53
+ end
54
+ end
55
+ end
56
+
57
+ describe '#find_google_ssh_private_key with custom key' do
58
+ subject(:google_compute) do
59
+ mock_google_services
60
+ described_class.new(hosts, options.merge(gce_ssh_private_key: custom_private_key))
61
+ end
62
+
63
+ let(:custom_private_key) { '/custom/path/to/key' }
64
+
65
+ context 'when custom key is specified in options' do
66
+ before do
67
+ FileUtils.mkdir_p(File.dirname(custom_private_key))
68
+ File.write(custom_private_key, 'private key content')
69
+ end
70
+
71
+ it 'returns the custom private key path' do
72
+ expect(google_compute.find_google_ssh_private_key).to eq(custom_private_key)
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#find_google_ssh_public_key' do
78
+ subject(:google_compute) do
79
+ mock_google_services
80
+ described_class.new(hosts, options)
81
+ end
82
+
83
+ context 'when public key exists' do
84
+ let(:private_key) { '/path/to/private_key' }
85
+ let(:public_key) { '/path/to/private_key.pub' }
86
+
87
+ before do
88
+ FileUtils.mkdir_p(File.dirname(private_key))
89
+ File.write(private_key, 'private key content')
90
+ File.write(public_key, 'public key content')
91
+ # Set up the private key path in options for this test
92
+ google_compute.instance_variable_get(:@options)[:gce_ssh_private_key] = private_key
93
+ end
94
+
95
+ it 'returns the public key path' do
96
+ expect(google_compute.find_google_ssh_public_key).to eq(public_key)
97
+ end
98
+ end
99
+
100
+ context 'when public key does not exist' do
101
+ let(:private_key) { '/path/to/private_key' }
102
+
103
+ before do
104
+ FileUtils.mkdir_p(File.dirname(private_key))
105
+ File.write(private_key, 'private key content')
106
+ # Set up the private key path in options for this test
107
+ google_compute.instance_variable_get(:@options)[:gce_ssh_private_key] = private_key
108
+ end
109
+
110
+ it 'raises an error' do
111
+ expect { google_compute.find_google_ssh_public_key }.to raise_error(/Could not find GCE Public SSH key/)
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ # Mock the Google Compute classes to avoid dependency issues
6
+ module Beaker
7
+ class Google < Beaker::GoogleCompute
8
+ end
9
+ end
10
+
11
+ RSpec.describe Beaker::Google do
12
+ let(:hosts) { [] }
13
+ let(:options) { { gce_project: 'test', logger: instance_double(Beaker::Logger) } }
14
+
15
+ # Mock Google authentication and services to avoid actual authentication
16
+ before do
17
+ # Mock the authentication components
18
+ allow(Google::Auth).to receive(:get_application_default).and_return(
19
+ instance_double(Google::Auth::ServiceAccountCredentials),
20
+ )
21
+ allow(Google::Auth::ServiceAccountCredentials).to receive(:from_env).and_return(
22
+ instance_double(Google::Auth::ServiceAccountCredentials),
23
+ )
24
+
25
+ # Mock the Google API client options
26
+ client_options = instance_double(Google::Apis::ClientOptions)
27
+ allow(client_options).to receive(:application_name=)
28
+ allow(client_options).to receive(:application_version=)
29
+ allow(Google::Apis::ClientOptions).to receive(:default).and_return(client_options)
30
+
31
+ # Mock the Google Compute and OS Login services
32
+ compute_service = instance_double(Google::Apis::ComputeV1::ComputeService)
33
+ allow(compute_service).to receive(:authorization=)
34
+ allow(compute_service).to receive(:request_options).and_return(Google::Apis::RequestOptions.new)
35
+ allow(Google::Apis::ComputeV1::ComputeService).to receive(:new).and_return(compute_service)
36
+
37
+ oslogin_service = instance_double(Google::Apis::OsloginV1::CloudOSLoginService)
38
+ allow(oslogin_service).to receive(:authorization=)
39
+ allow(Google::Apis::OsloginV1::CloudOSLoginService).to receive(:new).and_return(oslogin_service)
40
+
41
+ # Mock environment variables that might be checked
42
+ allow(ENV).to receive(:[]).and_call_original
43
+ allow(ENV).to receive(:fetch).and_call_original
44
+ allow(ENV).to receive(:[]).with('GOOGLE_APPLICATION_CREDENTIALS').and_return(nil)
45
+ allow(ENV).to receive(:[]).with('GOOGLE_CLOUD_UNIVERSE_DOMAIN').and_return(nil)
46
+ allow(ENV).to receive(:[]).with('GOOGLE_CLOUD_PROJECT').and_return(nil)
47
+ allow(ENV).to receive(:[]).with('GCLOUD_PROJECT').and_return(nil)
48
+ allow(ENV).to receive(:[]).with('BEAKER_gce_project').and_return(nil)
49
+ allow(ENV).to receive(:[]).with('BEAKER_gce_ssh_public_key').and_return(nil)
50
+ allow(ENV).to receive(:[]).with('BEAKER_gce_ssh_private_key').and_return(nil)
51
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_zone', anything).and_return('us-central1-a')
52
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_network', anything).and_return('default')
53
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_subnetwork', anything).and_return(nil)
54
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_ports', anything).and_return('')
55
+ end
56
+
57
+ describe 'class hierarchy' do
58
+ it 'inherits from GoogleCompute' do
59
+ expect(described_class.superclass).to eq(Beaker::GoogleCompute)
60
+ end
61
+ end
62
+
63
+ describe 'instantiation' do
64
+ it 'can be instantiated' do
65
+ expect { described_class.new(hosts, options) }.not_to raise_error
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe BeakerGoogle do
6
+ describe 'VERSION' do
7
+ it 'has a version number' do
8
+ expect(BeakerGoogle::VERSION).not_to be_nil
9
+ end
10
+
11
+ it 'is a string' do
12
+ expect(BeakerGoogle::VERSION).to be_a(String)
13
+ end
14
+
15
+ it 'follows semantic versioning pattern' do
16
+ expect(BeakerGoogle::VERSION).to match(/\A\d+\.\d+\.\d+\z/)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Beaker do
6
+ context 'when testing Google integration' do
7
+ describe 'basic integration test' do
8
+ let(:logger) { instance_double(Beaker::Logger) }
9
+ let(:test_options) { { logger: logger, gce_project: 'test-project', gce_ports: [] } }
10
+
11
+ def mock_google_services
12
+ # Mock the authentication and service initialization
13
+ allow(Google::Auth).to receive(:get_application_default).and_return(double)
14
+
15
+ compute_service = double
16
+ allow(compute_service).to receive(:authorization=)
17
+ allow(compute_service).to receive(:request_options).and_return(Google::Apis::RequestOptions.new)
18
+ allow(Google::Apis::ComputeV1::ComputeService).to receive(:new).and_return(compute_service)
19
+
20
+ oslogin_service = double
21
+ allow(oslogin_service).to receive(:authorization=)
22
+ allow(Google::Apis::OsloginV1::CloudOSLoginService).to receive(:new).and_return(oslogin_service)
23
+
24
+ client_options = double
25
+ allow(client_options).to receive(:application_name=)
26
+ allow(client_options).to receive(:application_version=)
27
+ allow(Google::Apis::ClientOptions).to receive(:default).and_return(client_options)
28
+ end
29
+
30
+ before do
31
+ mock_google_services
32
+ end
33
+
34
+ it 'loads the beaker-google version' do
35
+ expect(BeakerGoogle::VERSION).to be_a(String)
36
+ end
37
+
38
+ it 'can create GoogleComputeHelper instances' do
39
+ expect do
40
+ Beaker::GoogleComputeHelper.new(test_options)
41
+ end.not_to raise_error
42
+ end
43
+
44
+ it 'can create GoogleCompute instances' do
45
+ expect do
46
+ Beaker::GoogleCompute.new([], test_options)
47
+ end.not_to raise_error
48
+ end
49
+
50
+ it 'has proper class inheritance' do
51
+ expect(Beaker::GoogleCompute).to be < Beaker::Hypervisor
52
+ end
53
+
54
+ it 'loads ComputeV1 API' do
55
+ expect(defined?(Google::Apis::ComputeV1)).to be_truthy
56
+ end
57
+
58
+ it 'loads OsloginV1 API' do
59
+ expect(defined?(Google::Apis::OsloginV1)).to be_truthy
60
+ end
61
+
62
+ it 'loads Google Auth' do
63
+ expect(defined?(Google::Auth)).to be_truthy
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec'
4
+ require 'rspec/its'
5
+ require 'fakefs/spec_helpers'
6
+ require 'simplecov'
7
+
8
+ # Start SimpleCov if coverage is enabled
9
+ SimpleCov.start if ENV['BEAKER_GOOGLE_COVERAGE']
10
+
11
+ # Require beaker first to establish the base classes
12
+ require 'beaker'
13
+
14
+ # Only require the version module directly
15
+ require 'beaker-google/version'
16
+
17
+ # Require the hypervisor classes
18
+ require 'beaker/hypervisor/google_compute_helper'
19
+ require 'beaker/hypervisor/google_compute'
20
+ require 'beaker/hypervisor/google'
21
+
22
+ # Load shared mock classes
23
+ require_relative 'support/shared_mocks'
24
+
25
+ RSpec.configure do |config|
26
+ config.expect_with :rspec do |expectations|
27
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
28
+ end
29
+
30
+ config.mock_with :rspec do |mocks|
31
+ mocks.verify_partial_doubles = true
32
+ end
33
+
34
+ config.shared_context_metadata_behavior = :apply_to_host_groups
35
+ config.filter_run_when_matching :focus
36
+ config.disable_monkey_patching!
37
+ config.warnings = true
38
+
39
+ config.default_formatter = 'doc' if config.files_to_run.one?
40
+
41
+ config.profile_examples = 10
42
+ config.order = :random
43
+
44
+ Kernel.srand config.seed
45
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Shared setup for Google Compute tests to avoid multiple memoized helpers
4
+ module GoogleComputeSharedSetup
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+ end
8
+
9
+ module ClassMethods
10
+ def setup_google_compute_mocks
11
+ let(:mock_gce_helper) { instance_double(Beaker::GoogleComputeHelper) }
12
+ let(:mock_network) { MockNetwork.new }
13
+ let(:mock_machine_type) { MockMachineType.new }
14
+ let(:mock_image) { MockImage.new }
15
+ let(:mock_instance) do
16
+ instance_double(Google::Apis::ComputeV1::Instance).tap do |instance|
17
+ allow(instance).to receive(:network_interfaces)
18
+ .and_return([
19
+ instance_double(Google::Apis::ComputeV1::NetworkInterface).tap do |interface|
20
+ allow(interface).to receive(:access_configs)
21
+ .and_return([
22
+ instance_double(Google::Apis::ComputeV1::AccessConfig).tap do |config|
23
+ allow(config).to receive(:nat_ip).and_return('1.2.3.4')
24
+ end,
25
+ ])
26
+ end,
27
+ ])
28
+ end
29
+ end
30
+ let(:mock_operation) do
31
+ instance_double(Google::Apis::ComputeV1::Operation).tap do |operation|
32
+ allow(operation).to receive(:error).and_return(nil)
33
+ end
34
+ end
35
+
36
+ let(:logger) { instance_double(Beaker::Logger, debug: nil, info: nil, warn: nil, error: nil) }
37
+
38
+ before do
39
+ # Mock the GoogleComputeHelper initialization to avoid authentication
40
+ allow(Beaker::GoogleComputeHelper).to receive(:new).and_return(mock_gce_helper)
41
+
42
+ # Mock all the GoogleComputeHelper methods
43
+ allow(mock_gce_helper).to receive_messages(
44
+ get_network: mock_network,
45
+ get_machine_type: mock_machine_type,
46
+ get_image: mock_image,
47
+ get_latest_image_from_family: mock_image,
48
+ get_instance: mock_instance,
49
+ create_firewall: mock_operation,
50
+ delete_firewall: mock_operation,
51
+ create_instance: mock_operation,
52
+ delete_instance: mock_operation,
53
+ add_instance_tag: mock_operation,
54
+ set_metadata_on_instance: mock_operation,
55
+ options: options,
56
+ )
57
+
58
+ # Set up environment variables for testing
59
+ allow(ENV).to receive(:fetch).and_call_original
60
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_machine_type', anything).and_return('n1-standard-1')
61
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_ssh_private_key',
62
+ anything).and_return(File.join(Dir.home, '.ssh', 'google_compute_engine'))
63
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_zone', anything).and_return('us-central1-a')
64
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_network', anything).and_return('default')
65
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_subnetwork', anything).and_return(nil)
66
+ allow(ENV).to receive(:fetch).with('BEAKER_gce_ports', anything).and_return('80/tcp,443/tcp')
67
+ allow(ENV).to receive(:[]).with('BEAKER_gce_project').and_return('test-project')
68
+ allow(ENV).to receive(:[]).with('BEAKER_gce_ssh_public_key').and_return(nil)
69
+ allow(ENV).to receive(:[]).with('BEAKER_gce_ssh_private_key').and_return(nil)
70
+
71
+ # Mock the image disk size
72
+ allow(mock_image).to receive(:disk_size_gb).and_return(20)
73
+ end
74
+ end
75
+
76
+ def setup_test_hosts
77
+ let(:primary_host) do
78
+ {
79
+ 'name' => 'test-host-1',
80
+ 'user' => 'root',
81
+ 'options' => { 'ssh' => { 'keys' => [] } },
82
+ 'gce_machine_type' => 'n1-standard-1',
83
+ :image => 'ubuntu-1804-lts',
84
+ 'volume_size' => nil,
85
+ 'disable_root_ssh' => nil,
86
+ }.tap do |host|
87
+ # Add methods needed by the gem
88
+ def host.close; end
89
+
90
+ def host.name
91
+ self['name']
92
+ end
93
+
94
+ def host.options
95
+ self['options']
96
+ end
97
+ end
98
+ end
99
+
100
+ let(:secondary_host) do
101
+ {
102
+ 'name' => 'test-host-2',
103
+ 'user' => 'root',
104
+ 'options' => { 'ssh' => { 'keys' => [] } },
105
+ 'gce_machine_type' => 'n1-standard-1',
106
+ :image => 'ubuntu-1804-lts',
107
+ 'volume_size' => nil,
108
+ 'disable_root_ssh' => nil,
109
+ }.tap do |host|
110
+ # Add methods needed by the gem
111
+ def host.close; end
112
+
113
+ def host.name
114
+ self['name']
115
+ end
116
+
117
+ def host.options
118
+ self['options']
119
+ end
120
+ end
121
+ end
122
+
123
+ let(:hosts) { [primary_host, secondary_host] }
124
+ end
125
+
126
+ def setup_test_options
127
+ let(:options) do
128
+ {
129
+ gce_project: 'test-project',
130
+ gce_zone: 'us-central1-a',
131
+ gce_network: 'default',
132
+ gce_ports: ['80/tcp', '443/tcp'],
133
+ logger: logger,
134
+ }
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ # Add mutex_m requirement for Ruby 3.4.0 compatibility
6
+ begin
7
+ require 'mutex_m'
8
+ rescue LoadError
9
+ # mutex_m is not available on all Ruby versions
10
+ end
11
+
12
+ # Mock external classes that we don't want to test
13
+ class MockNetwork
14
+ def initialize
15
+ @name = 'test-network'
16
+ @self_link = 'https://www.googleapis.com/compute/v1/projects/test-project/global/networks/test-network'
17
+ end
18
+
19
+ attr_reader :name, :self_link
20
+ end
21
+
22
+ class MockSubnetwork
23
+ def initialize
24
+ @name = 'test-subnetwork'
25
+ @self_link = 'https://www.googleapis.com/compute/v1/projects/test-project/regions/us-central1/subnetworks/test-subnetwork'
26
+ end
27
+
28
+ attr_reader :name, :self_link
29
+ end
30
+
31
+ class MockMachineType
32
+ def initialize
33
+ @name = 'n1-standard-1'
34
+ @memory_mb = 3840
35
+ @guest_cpus = 1
36
+ end
37
+
38
+ attr_reader :name, :memory_mb, :guest_cpus
39
+ end
40
+
41
+ class MockImage
42
+ def initialize
43
+ @name = 'test-image'
44
+ @self_link = 'https://www.googleapis.com/compute/v1/projects/test-project/global/images/test-image'
45
+ @disk_size_gb = 20
46
+ end
47
+
48
+ attr_reader :name, :self_link, :disk_size_gb
49
+ end
50
+
51
+ class MockInstance
52
+ def initialize
53
+ @name = 'test-instance'
54
+ @status = 'RUNNING'
55
+ @tags = MockTags.new
56
+ @metadata = MockMetadata.new
57
+ @fingerprint = 'test-fingerprint'
58
+ end
59
+
60
+ attr_reader :name, :status, :tags, :metadata, :fingerprint
61
+ end
62
+
63
+ class MockTags
64
+ def initialize
65
+ @items = []
66
+ @fingerprint = 'test-fingerprint'
67
+ end
68
+
69
+ attr_reader :items, :fingerprint
70
+ end
71
+
72
+ class MockMetadata
73
+ def initialize
74
+ @items = []
75
+ @fingerprint = 'test-fingerprint'
76
+ end
77
+
78
+ attr_accessor :items
79
+ attr_reader :fingerprint
80
+ end
81
+
82
+ class MockOperation
83
+ def initialize
84
+ @name = 'test-operation'
85
+ @status = 'RUNNING'
86
+ end
87
+
88
+ attr_reader :name, :status
89
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-google
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet
8
8
  - Voxpupuli
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-06-07 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: fakefs
@@ -101,34 +100,34 @@ dependencies:
101
100
  requirements:
102
101
  - - "~>"
103
102
  - !ruby/object:Gem::Version
104
- version: 2.7.0
103
+ version: 3.1.0
105
104
  type: :development
106
105
  prerelease: false
107
106
  version_requirements: !ruby/object:Gem::Requirement
108
107
  requirements:
109
108
  - - "~>"
110
109
  - !ruby/object:Gem::Version
111
- version: 2.7.0
110
+ version: 3.1.0
112
111
  - !ruby/object:Gem::Dependency
113
112
  name: thin
114
113
  requirement: !ruby/object:Gem::Requirement
115
114
  requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: '1.8'
119
115
  - - ">="
120
116
  - !ruby/object:Gem::Version
121
117
  version: 1.8.2
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: '3'
122
121
  type: :development
123
122
  prerelease: false
124
123
  version_requirements: !ruby/object:Gem::Requirement
125
124
  requirements:
126
- - - "~>"
127
- - !ruby/object:Gem::Version
128
- version: '1.8'
129
125
  - - ">="
130
126
  - !ruby/object:Gem::Version
131
127
  version: 1.8.2
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '3'
132
131
  - !ruby/object:Gem::Dependency
133
132
  name: yard
134
133
  requirement: !ruby/object:Gem::Requirement
@@ -199,6 +198,34 @@ dependencies:
199
198
  - - "~>"
200
199
  - !ruby/object:Gem::Version
201
200
  version: '1.2'
201
+ - !ruby/object:Gem::Dependency
202
+ name: logger
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '1.4'
208
+ type: :runtime
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '1.4'
215
+ - !ruby/object:Gem::Dependency
216
+ name: ostruct
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '0.2'
222
+ type: :runtime
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '0.2'
202
229
  description: Google Compute Engine support for the Beaker acceptance testing tool.
203
230
  email:
204
231
  - voxpupuli@groups.io
@@ -208,11 +235,12 @@ extensions: []
208
235
  extra_rdoc_files: []
209
236
  files:
210
237
  - ".github/dependabot.yml"
238
+ - ".github/release.yml"
211
239
  - ".github/workflows/ci.yml"
212
- - ".github/workflows/codeql-analysis.yml"
213
240
  - ".github/workflows/release.yml"
214
241
  - ".gitignore"
215
242
  - ".rubocop.yml"
243
+ - ".rubocop_todo.yml"
216
244
  - ".simplecov"
217
245
  - CHANGELOG.md
218
246
  - Gemfile
@@ -226,11 +254,28 @@ files:
226
254
  - lib/beaker/hypervisor/google.rb
227
255
  - lib/beaker/hypervisor/google_compute.rb
228
256
  - lib/beaker/hypervisor/google_compute_helper.rb
257
+ - spec/classes/beaker-google/beaker_google_version_spec.rb
258
+ - spec/classes/beaker/google_compute_constants_and_defaults_spec.rb
259
+ - spec/classes/beaker/google_compute_helper_api_version_spec.rb
260
+ - spec/classes/beaker/google_compute_helper_configuration_validation_spec.rb
261
+ - spec/classes/beaker/google_compute_helper_constants_and_defaults_spec.rb
262
+ - spec/classes/beaker/google_compute_helper_edge_cases_spec.rb
263
+ - spec/classes/beaker/google_compute_helper_error_handling_spec.rb
264
+ - spec/classes/beaker/google_compute_helper_spec.rb
265
+ - spec/classes/beaker/google_compute_helper_utilities_spec.rb
266
+ - spec/classes/beaker/google_compute_initialization_spec.rb
267
+ - spec/classes/beaker/google_compute_provision_spec.rb
268
+ - spec/classes/beaker/google_compute_spec.rb
269
+ - spec/classes/beaker/google_compute_ssh_key_management_spec.rb
270
+ - spec/classes/beaker/google_spec.rb
271
+ - spec/classes/beaker_integration_spec.rb
272
+ - spec/spec_helper.rb
273
+ - spec/support/google_compute_shared_setup.rb
274
+ - spec/support/shared_mocks.rb
229
275
  homepage: https://github.com/voxpupuli/beaker-google
230
276
  licenses:
231
277
  - Apache-2.0
232
278
  metadata: {}
233
- post_install_message:
234
279
  rdoc_options: []
235
280
  require_paths:
236
281
  - lib
@@ -245,8 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
245
290
  - !ruby/object:Gem::Version
246
291
  version: '0'
247
292
  requirements: []
248
- rubygems_version: 3.3.27
249
- signing_key:
293
+ rubygems_version: 4.0.20
250
294
  specification_version: 4
251
295
  summary: Beaker DSL Extension Helpers!
252
296
  test_files: []