ops_manager_ui_drivers 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE +13 -0
- data/README.md +39 -0
- data/Rakefile +12 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/ci/run_specs.sh +11 -0
- data/lib/ops_manager_ui_drivers.rb +10 -0
- data/lib/ops_manager_ui_drivers/page_helpers.rb +52 -0
- data/lib/ops_manager_ui_drivers/version.rb +3 -0
- data/lib/ops_manager_ui_drivers/version11/api_1_1.rb +40 -0
- data/lib/ops_manager_ui_drivers/version11/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/install_progress.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/login.rb +24 -0
- data/lib/ops_manager_ui_drivers/version11/network_configuration.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/ntp_servers.rb +28 -0
- data/lib/ops_manager_ui_drivers/version11/ops_manager_director.rb +27 -0
- data/lib/ops_manager_ui_drivers/version11/product_dashboard.rb +73 -0
- data/lib/ops_manager_ui_drivers/version11/vcenter_credentials.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/vsphere_configuration.rb +31 -0
- data/lib/ops_manager_ui_drivers/version11/web_ui.rb +34 -0
- data/lib/ops_manager_ui_drivers/version12/api_1_2.rb +40 -0
- data/lib/ops_manager_ui_drivers/version12/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/install_progress.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/login.rb +24 -0
- data/lib/ops_manager_ui_drivers/version12/network_configuration.rb +32 -0
- data/lib/ops_manager_ui_drivers/version12/ntp_servers.rb +28 -0
- data/lib/ops_manager_ui_drivers/version12/ops_manager_director.rb +27 -0
- data/lib/ops_manager_ui_drivers/version12/product_dashboard.rb +73 -0
- data/lib/ops_manager_ui_drivers/version12/vcenter_credentials.rb +31 -0
- data/lib/ops_manager_ui_drivers/version12/vsphere_configuration.rb +30 -0
- data/lib/ops_manager_ui_drivers/version12/web_ui.rb +34 -0
- data/lib/ops_manager_ui_drivers/version13/api_1_3.rb +40 -0
- data/lib/ops_manager_ui_drivers/version13/availability_zones.rb +55 -0
- data/lib/ops_manager_ui_drivers/version13/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version13/iaas_configuration.rb +65 -0
- data/lib/ops_manager_ui_drivers/version13/install_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version13/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version13/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version13/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version13/networks.rb +83 -0
- data/lib/ops_manager_ui_drivers/version13/ops_manager_director.rb +140 -0
- data/lib/ops_manager_ui_drivers/version13/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version13/product_dashboard.rb +157 -0
- data/lib/ops_manager_ui_drivers/version13/product_logs.rb +53 -0
- data/lib/ops_manager_ui_drivers/version13/product_resource_configuration.rb +46 -0
- data/lib/ops_manager_ui_drivers/version13/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version13/setup.rb +40 -0
- data/lib/ops_manager_ui_drivers/version13/web_ui.rb +106 -0
- data/lib/ops_manager_ui_drivers/version14/api_1_4.rb +40 -0
- data/lib/ops_manager_ui_drivers/version14/availability_zones.rb +59 -0
- data/lib/ops_manager_ui_drivers/version14/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version14/iaas_configuration.rb +89 -0
- data/lib/ops_manager_ui_drivers/version14/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version14/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version14/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version14/networks.rb +58 -0
- data/lib/ops_manager_ui_drivers/version14/ops_manager_director.rb +252 -0
- data/lib/ops_manager_ui_drivers/version14/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version14/product_configuration.rb +34 -0
- data/lib/ops_manager_ui_drivers/version14/product_dashboard.rb +175 -0
- data/lib/ops_manager_ui_drivers/version14/product_form.rb +47 -0
- data/lib/ops_manager_ui_drivers/version14/product_logs.rb +38 -0
- data/lib/ops_manager_ui_drivers/version14/product_resource_configuration.rb +46 -0
- data/lib/ops_manager_ui_drivers/version14/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version14/setup.rb +40 -0
- data/lib/ops_manager_ui_drivers/version14/state_change_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version14/web_ui.rb +104 -0
- data/lib/ops_manager_ui_drivers/version15/availability_zones.rb +59 -0
- data/lib/ops_manager_ui_drivers/version15/available_products.rb +24 -0
- data/lib/ops_manager_ui_drivers/version15/iaas_configuration.rb +105 -0
- data/lib/ops_manager_ui_drivers/version15/job_availability_zone_mapping_helper.rb +70 -0
- data/lib/ops_manager_ui_drivers/version15/job_network_mapping_helper.rb +47 -0
- data/lib/ops_manager_ui_drivers/version15/job_status_helper.rb +17 -0
- data/lib/ops_manager_ui_drivers/version15/networks.rb +55 -0
- data/lib/ops_manager_ui_drivers/version15/ops_manager_director.rb +261 -0
- data/lib/ops_manager_ui_drivers/version15/product_availability_zones.rb +38 -0
- data/lib/ops_manager_ui_drivers/version15/product_configuration.rb +34 -0
- data/lib/ops_manager_ui_drivers/version15/product_dashboard.rb +176 -0
- data/lib/ops_manager_ui_drivers/version15/product_form.rb +47 -0
- data/lib/ops_manager_ui_drivers/version15/product_logs.rb +38 -0
- data/lib/ops_manager_ui_drivers/version15/product_resource_configuration.rb +63 -0
- data/lib/ops_manager_ui_drivers/version15/product_status_helper.rb +64 -0
- data/lib/ops_manager_ui_drivers/version15/setup.rb +44 -0
- data/lib/ops_manager_ui_drivers/version15/state_change_progress.rb +43 -0
- data/lib/ops_manager_ui_drivers/version15/web_ui.rb +104 -0
- data/lib/ops_manager_ui_drivers/wait_helper.rb +51 -0
- data/ops_manager_ui_drivers.gemspec +29 -0
- metadata +233 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version12
|
|
3
|
+
class WebUi
|
|
4
|
+
def initialize(browser:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def login_page
|
|
9
|
+
@login_page ||= Version12::Login.new(browser: browser)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def product_dashboard
|
|
13
|
+
@product_dashboard ||= Version12::ProductDashboard.new(browser: browser)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def available_products
|
|
17
|
+
@available_products ||= Version12::AvailableProducts.new(browser: browser)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def ops_manager_director
|
|
21
|
+
@ops_manager_director ||= Version12::OpsManagerDirector.new(browser: browser)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def install_progress
|
|
25
|
+
@install_progress ||= Version12::InstallProgress.new(browser: browser)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
attr_reader :browser
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'net/https'
|
|
2
|
+
|
|
3
|
+
module OpsManagerUiDrivers
|
|
4
|
+
module Version13
|
|
5
|
+
class Api
|
|
6
|
+
def initialize(host: nil, user: nil, password: nil)
|
|
7
|
+
@host = host
|
|
8
|
+
@user = user
|
|
9
|
+
@password = password
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def export_installation
|
|
13
|
+
response = http.request(get('installation_asset_collection'))
|
|
14
|
+
|
|
15
|
+
Tempfile.new('installation.zip').tap do |tempfile|
|
|
16
|
+
tempfile.write(response.body)
|
|
17
|
+
tempfile.close
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def http
|
|
24
|
+
uri = URI(@host)
|
|
25
|
+
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
|
26
|
+
http.use_ssl = true
|
|
27
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
28
|
+
http.read_timeout = 900
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def get(endpoint)
|
|
33
|
+
uri = URI("#{@host}/api/#{endpoint}")
|
|
34
|
+
Net::HTTP::Get.new(uri.request_uri).tap do |get|
|
|
35
|
+
get.basic_auth(@user, @password)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class AvailabilityZones
|
|
4
|
+
def initialize(browser:, product:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
@product = product
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def add_az(name, cluster, resource_pool)
|
|
10
|
+
open_form('availability_zones')
|
|
11
|
+
|
|
12
|
+
browser.click_on 'Add'
|
|
13
|
+
set_fields(
|
|
14
|
+
fields: {
|
|
15
|
+
'name' => name,
|
|
16
|
+
'cluster' => cluster,
|
|
17
|
+
'resource_pool' => resource_pool,
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
save_form
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
attr_reader(
|
|
25
|
+
:browser,
|
|
26
|
+
:product,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
def save_form
|
|
30
|
+
browser.click_on 'Save'
|
|
31
|
+
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def open_form(form)
|
|
35
|
+
browser.visit '/'
|
|
36
|
+
browser.click_on "show-#{product}-configure-action"
|
|
37
|
+
browser.click_on "show-#{form}-action"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def set_fields(fields:)
|
|
41
|
+
fields.each do |field, value|
|
|
42
|
+
set_field(field, value)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def set_field(field, value)
|
|
47
|
+
last_field(field).set(value)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def last_field(field)
|
|
51
|
+
browser.all(:field, "availability_zones[availability_zones][][#{field}]").last
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class AvailableProducts
|
|
4
|
+
def initialize(browser:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def add_product_to_install(product_name)
|
|
9
|
+
browser.visit '/'
|
|
10
|
+
browser.click_on "add-#{product_name}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def product_added?(product_name)
|
|
14
|
+
browser.visit '/'
|
|
15
|
+
browser.all("#show-configure-#{product_name}-action").any?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
attr_reader :browser
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class IaasConfiguration
|
|
4
|
+
def initialize(browser:, product:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
@product = product
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def configure_iaas
|
|
10
|
+
open_form('iaas_configuration')
|
|
11
|
+
|
|
12
|
+
yield
|
|
13
|
+
|
|
14
|
+
save_form
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def set_vsphere_credentials(vcenter_ip:, username:, password:)
|
|
18
|
+
set_field('vcenter_ip', vcenter_ip)
|
|
19
|
+
set_field('vcenter_username', username)
|
|
20
|
+
set_field('vcenter_password', password)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_vcloud_credentials(vcd_url:, organization:, user:, password:)
|
|
24
|
+
set_field('vcd_url', vcd_url)
|
|
25
|
+
set_field('organization', organization)
|
|
26
|
+
set_field('vcd_username', user)
|
|
27
|
+
set_field('vcd_password', password)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def set_datacenter(datacenter)
|
|
32
|
+
set_field('datacenter', datacenter)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def set_datastores(datastores)
|
|
36
|
+
set_field('datastores_string', datastores)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def set_storage_profile(storage_profile)
|
|
40
|
+
set_field('storage_profile', storage_profile)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
attr_reader(
|
|
45
|
+
:browser,
|
|
46
|
+
:product,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
def save_form
|
|
50
|
+
browser.click_on 'Save'
|
|
51
|
+
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def open_form(form)
|
|
55
|
+
browser.visit '/'
|
|
56
|
+
browser.click_on "show-#{product}-configure-action"
|
|
57
|
+
browser.click_on "show-#{form}-action"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def set_field(field, value)
|
|
61
|
+
browser.find_field("iaas_configuration[#{field}]").set(value)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class InstallProgress
|
|
4
|
+
def initialize(browser:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def install_success?
|
|
9
|
+
open_install_progress
|
|
10
|
+
browser.all('#install-success-modal').any?
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def errand_ran?(errand_name)
|
|
14
|
+
open_install_progress
|
|
15
|
+
browser.find('#install-output .output', visible: false).text(:all).
|
|
16
|
+
include?("Errand `#{errand_name}' completed successfully (exit code 0)")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def errand_ran_with_text?(errand_name)
|
|
20
|
+
{
|
|
21
|
+
errand_ran: errand_ran?(errand_name),
|
|
22
|
+
output: browser.find('#install-output .output', visible: false).text(:all),
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def open_install_progress
|
|
29
|
+
browser.visit '/install' unless install_progress_open?
|
|
30
|
+
browser.fail_early('Install probably aborted immediately') unless install_progress_open?
|
|
31
|
+
browser.fail_early('Install failed') if browser.all('#install-failure-modal').any?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def install_progress_open?
|
|
35
|
+
browser.current_path == '/install'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
attr_reader :browser
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class JobAvailabilityZoneMappingHelper
|
|
4
|
+
def initialize(product_name: nil, browser: nil)
|
|
5
|
+
@product_name = product_name
|
|
6
|
+
@browser = browser
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
SINGLETON_AVAILABILITY_ZONE_INPUT_SELECTOR = "input[name='product[singleton_availability_zone_reference]']"
|
|
10
|
+
AVAILABILITY_ZONE_INPUT_SELECTOR = "input[name='product[availability_zone_references][]']"
|
|
11
|
+
|
|
12
|
+
def assign_availability_zones!(singleton_availability_zone:, availability_zones:)
|
|
13
|
+
open_form
|
|
14
|
+
|
|
15
|
+
browser.all(AVAILABILITY_ZONE_INPUT_SELECTOR).each do |checkbox|
|
|
16
|
+
checkbox.set(false)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
availability_zones.each do |az_name|
|
|
20
|
+
browser.check("#{az_name}")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
browser.choose("#{singleton_availability_zone}")
|
|
24
|
+
|
|
25
|
+
save_form
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def singleton_availability_zone
|
|
29
|
+
open_form
|
|
30
|
+
|
|
31
|
+
selected_options = browser.all("#{SINGLETON_AVAILABILITY_ZONE_INPUT_SELECTOR}[selected='selected']").map do |radio|
|
|
32
|
+
browser.find("label[for='#{radio[:id]}']").text
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
raise ArgumentError, 'availability_zone not selected' if selected_options.empty?
|
|
36
|
+
selected_options.first
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def availability_zones
|
|
40
|
+
open_form
|
|
41
|
+
|
|
42
|
+
browser.all("#{AVAILABILITY_ZONE_INPUT_SELECTOR}[checked='checked']").map do |checkbox|
|
|
43
|
+
browser.find("label[for='#{checkbox[:id]}']").text
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
attr_reader :browser, :product_name
|
|
50
|
+
|
|
51
|
+
def open_form
|
|
52
|
+
browser.visit '/'
|
|
53
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
54
|
+
browser.click_on "show-#{product_name}-job-availability-zone-assignment-action"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def save_form
|
|
58
|
+
browser.click_on 'Save'
|
|
59
|
+
|
|
60
|
+
unless browser.has_css?('.flash-message.success')
|
|
61
|
+
if browser.has_css?('.flash-message.error')
|
|
62
|
+
raise browser.find('.flash-message.error').text
|
|
63
|
+
else
|
|
64
|
+
raise 'unexpected failure'
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class JobNetworkMappingHelper
|
|
4
|
+
PRODUCT_NETWORK_FIELD_NAME = 'product_network_assignment'
|
|
5
|
+
|
|
6
|
+
def initialize(product_name:, browser:)
|
|
7
|
+
@product_name = product_name
|
|
8
|
+
@browser = browser
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def assign_product_to_network(network)
|
|
12
|
+
open_form
|
|
13
|
+
browser.find_field(PRODUCT_NETWORK_FIELD_NAME).find(:option, text: network).select_option
|
|
14
|
+
save_form
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def product_network
|
|
18
|
+
open_form
|
|
19
|
+
selected_options = browser.find_field(PRODUCT_NETWORK_FIELD_NAME).all('option[selected]')
|
|
20
|
+
raise ArgumentError, "#{PRODUCT_NETWORK_FIELD_NAME} not selected" if selected_options.empty?
|
|
21
|
+
selected_options.first.text
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
attr_reader :product_name, :browser
|
|
27
|
+
|
|
28
|
+
def open_form
|
|
29
|
+
browser.visit '/'
|
|
30
|
+
browser.click_on "show-#{product_name}-configure-action"
|
|
31
|
+
browser.click_on "show-#{product_name}-job-network-assignment-action"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def save_form
|
|
35
|
+
browser.click_on 'Save'
|
|
36
|
+
|
|
37
|
+
unless browser.has_css?('.flash-message.success')
|
|
38
|
+
if browser.has_css?('.flash-message.error')
|
|
39
|
+
raise browser.find('.flash-message.error').text
|
|
40
|
+
else
|
|
41
|
+
raise 'unexpected failure'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class JobStatusHelper
|
|
4
|
+
def self.from_job_row(job_row)
|
|
5
|
+
ips_string = job_row.find('.actual-ips').text
|
|
6
|
+
ips = ips_string.split(', ')
|
|
7
|
+
new(ips: ips)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def initialize(ips:)
|
|
11
|
+
@ips = ips
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_reader :ips
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module OpsManagerUiDrivers
|
|
2
|
+
module Version13
|
|
3
|
+
class Networks
|
|
4
|
+
def initialize(browser:, product:)
|
|
5
|
+
@browser = browser
|
|
6
|
+
@product = product
|
|
7
|
+
|
|
8
|
+
@allowed_ignorable_errors = []
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add_network(name:, iaas_network_identifier:, subnet:, dns:, gateway:, reserved_ip_ranges:)
|
|
12
|
+
open_form('network')
|
|
13
|
+
|
|
14
|
+
browser.click_on 'Add'
|
|
15
|
+
set_fields(
|
|
16
|
+
fields: {
|
|
17
|
+
'name' => name,
|
|
18
|
+
'iaas_network_identifier' => iaas_network_identifier,
|
|
19
|
+
'subnet' => subnet,
|
|
20
|
+
'dns' => dns,
|
|
21
|
+
'gateway' => gateway,
|
|
22
|
+
'reserved_ip_ranges' => reserved_ip_ranges,
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
allow_network_not_found_errors
|
|
27
|
+
save_form
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
attr_reader :browser, :product
|
|
33
|
+
|
|
34
|
+
def allow_network_not_found_errors
|
|
35
|
+
network_not_found = /not found in datacenter/
|
|
36
|
+
return if @allowed_ignorable_errors.include?(network_not_found)
|
|
37
|
+
|
|
38
|
+
@allowed_ignorable_errors << network_not_found
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def expect_allowed_ignorable_errors
|
|
42
|
+
flash_errors = browser.all('.flash-message.error')
|
|
43
|
+
|
|
44
|
+
if flash_errors.any?
|
|
45
|
+
unexpected_errors = flash_errors.reject do |error|
|
|
46
|
+
@allowed_ignorable_errors.select do |expected_error|
|
|
47
|
+
error.text =~ expected_error
|
|
48
|
+
end.any?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
fail "Unexepcted ignorable errors: #{unexpected_errors.map(&:text).inspect}" unless unexpected_errors.empty?
|
|
52
|
+
else
|
|
53
|
+
browser.expect(browser.page).to browser.have_css('.flash-message.success')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def save_form
|
|
58
|
+
browser.click_on 'Save'
|
|
59
|
+
expect_allowed_ignorable_errors
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def open_form(form)
|
|
63
|
+
browser.visit '/'
|
|
64
|
+
browser.click_on "show-#{product}-configure-action"
|
|
65
|
+
browser.click_on "show-#{form}-action"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def set_fields(fields:)
|
|
69
|
+
fields.each do |field, value|
|
|
70
|
+
set_field(field, value)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def set_field(field, value)
|
|
75
|
+
last_field(field).set(value)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def last_field(field)
|
|
79
|
+
browser.all(:field, "network[networks][][#{field}]").last
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|