hammer_cli_csv 2.0.0 → 2.1.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 +5 -13
- data/config/cli_config.yml +9 -24
- data/lib/hammer_cli_csv/activation_keys.rb +220 -95
- data/lib/hammer_cli_csv/architectures.rb +7 -11
- data/lib/hammer_cli_csv/base.rb +67 -41
- data/lib/hammer_cli_csv/compute_profiles.rb +11 -15
- data/lib/hammer_cli_csv/compute_resources.rb +11 -15
- data/lib/hammer_cli_csv/containers.rb +10 -12
- data/lib/hammer_cli_csv/content_hosts.rb +285 -203
- data/lib/hammer_cli_csv/content_view_filters.rb +32 -36
- data/lib/hammer_cli_csv/content_views.rb +33 -37
- data/lib/hammer_cli_csv/csv.rb +17 -1
- data/lib/hammer_cli_csv/domains.rb +15 -19
- data/lib/hammer_cli_csv/export.rb +13 -5
- data/lib/hammer_cli_csv/host_collections.rb +20 -22
- data/lib/hammer_cli_csv/host_groups.rb +73 -65
- data/lib/hammer_cli_csv/hosts.rb +30 -34
- data/lib/hammer_cli_csv/import.rb +24 -10
- data/lib/hammer_cli_csv/installation_media.rb +74 -0
- data/lib/hammer_cli_csv/job_templates.rb +37 -41
- data/lib/hammer_cli_csv/lifecycle_environments.rb +15 -19
- data/lib/hammer_cli_csv/locations.rb +4 -6
- data/lib/hammer_cli_csv/operating_systems.rb +17 -21
- data/lib/hammer_cli_csv/organizations.rb +11 -13
- data/lib/hammer_cli_csv/partition_tables.rb +17 -21
- data/lib/hammer_cli_csv/products.rb +200 -92
- data/lib/hammer_cli_csv/provisioning_templates.rb +19 -23
- data/lib/hammer_cli_csv/puppet_environments.rb +8 -12
- data/lib/hammer_cli_csv/puppet_facts.rb +20 -24
- data/lib/hammer_cli_csv/puppet_reports.rb +47 -51
- data/lib/hammer_cli_csv/reports.rb +6 -10
- data/lib/hammer_cli_csv/roles.rb +12 -16
- data/lib/hammer_cli_csv/settings.rb +8 -6
- data/lib/hammer_cli_csv/smart_proxies.rb +9 -13
- data/lib/hammer_cli_csv/splice.rb +1 -3
- data/lib/hammer_cli_csv/subnets.rb +24 -28
- data/lib/hammer_cli_csv/subscriptions.rb +39 -91
- data/lib/hammer_cli_csv/sync_plans.rb +20 -24
- data/lib/hammer_cli_csv/users.rb +25 -29
- data/lib/hammer_cli_csv/utils/subscriptions.rb +130 -0
- data/lib/hammer_cli_csv/version.rb +1 -1
- data/lib/hammer_cli_csv.rb +2 -2
- data/test/csv_test.rb +32 -0
- data/test/csv_test_helper.rb +17 -2
- data/test/data/content-hosts.csv +3 -2
- data/test/data/hosts.csv +0 -11
- data/test/data/settings.csv +1 -0
- data/test/data/setup/content-hosts.csv +1 -0
- data/test/data/setup/content-views.csv +2 -0
- data/test/data/setup/lifecycle-environments.csv +5 -0
- data/test/data/setup/locations.csv +6 -0
- data/test/data/setup/organizations.csv +2 -0
- data/test/data/setup/subscriptions.csv +5 -0
- data/test/data/subscriptions.csv +15 -17
- data/test/export_test.rb +27 -0
- data/test/fixtures/vcr_cassettes/apipie.yml +18528 -0
- data/test/fixtures/vcr_cassettes/resources/activation_keys_import/create_and_update.yml +38033 -0
- data/test/fixtures/vcr_cassettes/resources/content_hosts_export/export.yml +18846 -0
- data/test/fixtures/vcr_cassettes/resources/content_hosts_export/export_subscriptions.yml +323 -0
- data/test/fixtures/vcr_cassettes/resources/content_hosts_import/create_and_update.yml +41884 -0
- data/test/fixtures/vcr_cassettes/resources/content_hosts_import/import_single_line.yml +38248 -0
- data/test/fixtures/vcr_cassettes/resources/settings_import/update_settings.yml +18832 -0
- data/test/fixtures/vcr_cassettes/resources/settings_import/update_settings_continue.yml +316 -0
- data/test/fixtures/vcr_cassettes/resources/subscriptions_import/manifest_does_not_exist.yml +18785 -0
- data/test/fixtures/vcr_cassettes/setup/setup_content_views/setup.yml +19090 -0
- data/test/fixtures/vcr_cassettes/setup/setup_lifecycle_environments/setup.yml +924 -0
- data/test/fixtures/vcr_cassettes/setup/setup_locations/setup.yml +21102 -0
- data/test/fixtures/vcr_cassettes/setup/setup_organizations/setup.yml +19278 -0
- data/test/fixtures/vcr_cassettes/setup/setup_subscriptions/setup.yml +419 -0
- data/test/import_test.rb +20 -25
- data/test/resources/activation_keys_test.rb +72 -0
- data/test/resources/content_hosts_test.rb +132 -0
- data/test/resources/settings_test.rb +81 -0
- data/test/resources/subscriptions_test.rb +56 -0
- data/test/setup/setup_content_views.rb +17 -0
- data/test/setup/setup_lifecycle_environments.rb +17 -0
- data/test/setup/setup_locations.rb +17 -0
- data/test/setup/setup_organizations.rb +17 -0
- data/test/setup/setup_subscriptions.rb +20 -0
- data/test/setup/setup_test.rb +10 -0
- data/test/test_runner.rb +175 -0
- data/test/vcr_setup.rb +54 -0
- metadata +77 -13
- data/lib/hammer_cli_csv/exception_handler.rb +0 -42
- data/lib/hammer_cli_csv/installation_medias.rb +0 -77
- data/test/content_hosts_test.rb +0 -61
- data/test/settings_test.rb +0 -30
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Resources
|
|
5
|
+
class TestContentHostsUsage < MiniTest::Unit::TestCase
|
|
6
|
+
def test_usage
|
|
7
|
+
start_vcr
|
|
8
|
+
set_user 'admin'
|
|
9
|
+
|
|
10
|
+
stdout,stderr = capture {
|
|
11
|
+
hammer.run(%W{csv content-hosts --help})
|
|
12
|
+
}
|
|
13
|
+
assert_equal '', stderr
|
|
14
|
+
assert_equal stdout, <<-HELP
|
|
15
|
+
Usage:
|
|
16
|
+
csv content-hosts [OPTIONS]
|
|
17
|
+
|
|
18
|
+
Options:
|
|
19
|
+
--continue-on-error Continue processing even if individual resource error
|
|
20
|
+
--export Export current data instead of importing
|
|
21
|
+
--file FILE_NAME CSV file (default to /dev/stdout with --export, otherwise required)
|
|
22
|
+
--itemized-subscriptions Export one subscription per row, only process update subscriptions on import
|
|
23
|
+
--organization ORGANIZATION Only process organization matching this name
|
|
24
|
+
-h, --help print help
|
|
25
|
+
-v, --verbose be verbose
|
|
26
|
+
HELP
|
|
27
|
+
stop_vcr
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class TestContentHostsImport < MiniTest::Unit::TestCase
|
|
32
|
+
def test_create_and_update
|
|
33
|
+
start_vcr
|
|
34
|
+
set_user 'admin'
|
|
35
|
+
|
|
36
|
+
@hostname = "testhost1"
|
|
37
|
+
|
|
38
|
+
file = Tempfile.new('content_hosts_test')
|
|
39
|
+
file.write("Name,Count,Organization,Environment,Content View,Host Collections,Virtual,Host,OS,Arch,Sockets,RAM,Cores,SLA,Products,Subscriptions\n")
|
|
40
|
+
file.write("#{@hostname},1,Test Corporation,Library,Default Organization View,,No,,RHEL 6.4,x86_64,1,4,1,,,\n")
|
|
41
|
+
file.rewind
|
|
42
|
+
|
|
43
|
+
stdout,stderr = capture {
|
|
44
|
+
hammer.run(%W{csv content-hosts --verbose --file #{file.path}})
|
|
45
|
+
}
|
|
46
|
+
assert_equal '', stderr
|
|
47
|
+
assert_equal stdout[0..-2], "Creating content host '#{@hostname}'...done"
|
|
48
|
+
|
|
49
|
+
file.rewind
|
|
50
|
+
|
|
51
|
+
stdout,stderr = capture {
|
|
52
|
+
hammer.run(%W{csv content-hosts --verbose --file #{file.path}})
|
|
53
|
+
}
|
|
54
|
+
assert_equal '', stderr
|
|
55
|
+
assert_equal stdout[0..-2], "Updating content host '#{@hostname}'...done"
|
|
56
|
+
file.unlink
|
|
57
|
+
|
|
58
|
+
stdout,stderr = capture {
|
|
59
|
+
hammer.run(%W(host list --search name=#{@hostname}))
|
|
60
|
+
}
|
|
61
|
+
assert_equal '', stderr
|
|
62
|
+
assert_equal stdout.split("\n").length, 5
|
|
63
|
+
host_delete(@hostname)
|
|
64
|
+
|
|
65
|
+
stop_vcr
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class TestContentHostsExport < MiniTest::Unit::TestCase
|
|
70
|
+
def test_export
|
|
71
|
+
start_vcr
|
|
72
|
+
set_user 'admin'
|
|
73
|
+
|
|
74
|
+
stdout,stderr = capture {
|
|
75
|
+
hammer.run(%W{csv content-hosts --export --organization Test\ Corporation})
|
|
76
|
+
}
|
|
77
|
+
assert_equal '', stderr
|
|
78
|
+
assert_equal stdout.split("\n")[0], "Name,Organization,Environment,Content View,Host Collections,Virtual,Host,OS,Arch,Sockets,RAM,Cores,SLA,Products,Subscriptions"
|
|
79
|
+
stop_vcr
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_export_subscriptions
|
|
83
|
+
start_vcr
|
|
84
|
+
set_user 'admin'
|
|
85
|
+
|
|
86
|
+
stdout,stderr = capture {
|
|
87
|
+
hammer.run(%W{csv content-hosts --export --itemized-subscriptions --organization Test\ Corporation})
|
|
88
|
+
}
|
|
89
|
+
assert_equal '', stderr
|
|
90
|
+
|
|
91
|
+
# rubocop:disable LineLength
|
|
92
|
+
assert_equal stdout.split("\n")[0], "Name,Organization,Environment,Content View,Host Collections,Virtual,Host,OS,Arch,Sockets,RAM,Cores,SLA,Products,Subscription Name,Subscription Type,Subscription Quantity,Subscription SKU,Subscription Contract,Subscription Account,Subscription Start,Subscription End"
|
|
93
|
+
# rubocop:enable LineLength
|
|
94
|
+
stop_vcr
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
class TestContentHostsImport < MiniTest::Unit::TestCase
|
|
99
|
+
# import a single line, testing that subscription is added
|
|
100
|
+
def test_import_single_line
|
|
101
|
+
start_vcr
|
|
102
|
+
set_user 'admin'
|
|
103
|
+
|
|
104
|
+
@hostname = 'testhypervisor1'
|
|
105
|
+
|
|
106
|
+
file = Tempfile.new('content_hosts_test')
|
|
107
|
+
# rubocop:disable LineLength
|
|
108
|
+
file.write("Name,Organization,Environment,Content View,Host Collections,Virtual,Host,OS,Arch,Sockets,RAM,Cores,SLA,Products,Subscriptions\n")
|
|
109
|
+
file.write("#{@hostname},Test Corporation,Library,Default Organization View,\"\",Yes,,RHEL 7.2,x86_64,2,3882752,1,\"\",\"69|Red Hat Enterprise Linux Server,290|Red Hat OpenShift Enterprise\",\"\"\"1|RH00001|Red Hat Enterprise Linux for Virtual Datacenters, Premium\"\"\"\n")
|
|
110
|
+
# rubocop:enable LineLength
|
|
111
|
+
file.rewind
|
|
112
|
+
|
|
113
|
+
stdout,stderr = capture {
|
|
114
|
+
hammer.run(%W{csv content-hosts --verbose --file #{file.path}})
|
|
115
|
+
}
|
|
116
|
+
assert_equal '', stderr
|
|
117
|
+
assert_equal "Creating content host '#{@hostname}'...done\n", stdout
|
|
118
|
+
|
|
119
|
+
stdout,stderr = capture {
|
|
120
|
+
hammer.run(%W{csv content-hosts --export --organization Test\ Corporation})
|
|
121
|
+
}
|
|
122
|
+
assert_equal '', stderr
|
|
123
|
+
lines = stdout.split("\n")
|
|
124
|
+
assert_equal 2, lines.count
|
|
125
|
+
assert_match(/.*Test Corporation,Library,Default Organization View,"",Yes,,RHEL 7.2,x86_64,2,3882752,1.*/, lines[1])
|
|
126
|
+
assert_match(/.*1|RH00001|Red Hat Enterprise Linux for Virtual Datacenters, Premium.*/, lines[1])
|
|
127
|
+
host_delete(@hostname)
|
|
128
|
+
|
|
129
|
+
stop_vcr
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Resources
|
|
5
|
+
class TestSettingsUsage < MiniTest::Unit::TestCase
|
|
6
|
+
def test_usage
|
|
7
|
+
start_vcr
|
|
8
|
+
set_user 'admin'
|
|
9
|
+
|
|
10
|
+
stdout,stderr = capture {
|
|
11
|
+
hammer.run(%W{csv settings --help})
|
|
12
|
+
}
|
|
13
|
+
assert_equal '', stderr
|
|
14
|
+
assert_equal stdout, <<-HELP
|
|
15
|
+
Usage:
|
|
16
|
+
csv settings [OPTIONS]
|
|
17
|
+
|
|
18
|
+
Options:
|
|
19
|
+
--continue-on-error Continue processing even if individual resource error
|
|
20
|
+
--export Export current data instead of importing
|
|
21
|
+
--file FILE_NAME CSV file (default to /dev/stdout with --export, otherwise required)
|
|
22
|
+
--organization ORGANIZATION Only process organization matching this name
|
|
23
|
+
-h, --help print help
|
|
24
|
+
-v, --verbose be verbose
|
|
25
|
+
HELP
|
|
26
|
+
stop_vcr
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class TestSettingsImport < MiniTest::Unit::TestCase
|
|
31
|
+
def test_update_settings
|
|
32
|
+
start_vcr
|
|
33
|
+
set_user 'admin'
|
|
34
|
+
|
|
35
|
+
name = "settings#{rand(10000)}"
|
|
36
|
+
|
|
37
|
+
file = Tempfile.new('settings_test')
|
|
38
|
+
# rubocop:disable LineLength
|
|
39
|
+
file.write <<-FILE
|
|
40
|
+
Name,Count,Value
|
|
41
|
+
idle_timeout,1,60000
|
|
42
|
+
FILE
|
|
43
|
+
file.rewind
|
|
44
|
+
|
|
45
|
+
stdout,stderr = capture {
|
|
46
|
+
hammer.run(%W{csv settings --verbose --file #{file.path}})
|
|
47
|
+
}
|
|
48
|
+
stderr.must_equal ''
|
|
49
|
+
lines = stdout.split("\n")
|
|
50
|
+
assert_equal "Updating setting 'idle_timeout'...done", lines[0]
|
|
51
|
+
file.unlink
|
|
52
|
+
stop_vcr
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_update_settings_continue
|
|
56
|
+
start_vcr
|
|
57
|
+
set_user 'admin'
|
|
58
|
+
|
|
59
|
+
name = "settings#{rand(10000)}"
|
|
60
|
+
|
|
61
|
+
file = Tempfile.new('settings_test')
|
|
62
|
+
# rubocop:disable LineLength
|
|
63
|
+
file.write <<-FILE
|
|
64
|
+
Name,Count,Value
|
|
65
|
+
badsetting,1,1234
|
|
66
|
+
idle_timeout,1,60000
|
|
67
|
+
FILE
|
|
68
|
+
file.rewind
|
|
69
|
+
|
|
70
|
+
stdout,stderr = capture {
|
|
71
|
+
hammer.run(%W{csv settings --verbose --continue-on-error --file #{file.path}})
|
|
72
|
+
}
|
|
73
|
+
stderr.must_equal "Error: Setting 'badsetting' not found\nbadsetting,1,1234\n"
|
|
74
|
+
lines = stdout.split("\n")
|
|
75
|
+
assert_equal lines[0], "Updating setting 'idle_timeout'...done"
|
|
76
|
+
file.unlink
|
|
77
|
+
stop_vcr
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Resources
|
|
5
|
+
class TestSubscriptionsUsage < MiniTest::Unit::TestCase
|
|
6
|
+
def test_usage
|
|
7
|
+
start_vcr
|
|
8
|
+
set_user 'admin'
|
|
9
|
+
|
|
10
|
+
stdout,stderr = capture {
|
|
11
|
+
hammer.run(%W{csv subscriptions --help})
|
|
12
|
+
}
|
|
13
|
+
assert_equal '', stderr
|
|
14
|
+
assert_equal stdout, <<-HELP
|
|
15
|
+
Usage:
|
|
16
|
+
csv subscriptions [OPTIONS]
|
|
17
|
+
|
|
18
|
+
Options:
|
|
19
|
+
--continue-on-error Continue processing even if individual resource error
|
|
20
|
+
--export Export current data instead of importing
|
|
21
|
+
--file FILE_NAME CSV file (default to /dev/stdout with --export, otherwise required)
|
|
22
|
+
--organization ORGANIZATION Only process organization matching this name
|
|
23
|
+
-h, --help print help
|
|
24
|
+
-v, --verbose be verbose
|
|
25
|
+
HELP
|
|
26
|
+
stop_vcr
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class TestSubscriptionsImport < MiniTest::Unit::TestCase
|
|
31
|
+
def test_manifest_does_not_exist
|
|
32
|
+
start_vcr
|
|
33
|
+
set_user 'admin'
|
|
34
|
+
|
|
35
|
+
file = Tempfile.new('subscriptions_test')
|
|
36
|
+
# rubocop:disable LineLength
|
|
37
|
+
file.write <<-FILE
|
|
38
|
+
Name,Organization,Manifest File,Subscription Name,Quantity,Product SKU,Contract Number,Account Number
|
|
39
|
+
Manifest,Test Corporation,./test/data/doesnotexist.zip
|
|
40
|
+
# Manifest Name,Test Corporation,ExampleCorp
|
|
41
|
+
# Manifest URL,Test Corporation,https://access.stage.redhat.com/management/distributors/1234
|
|
42
|
+
FILE
|
|
43
|
+
file.rewind
|
|
44
|
+
|
|
45
|
+
stdout,stderr = capture {
|
|
46
|
+
hammer.run(%W{csv subscriptions --verbose --file #{file.path}})
|
|
47
|
+
}
|
|
48
|
+
assert_equal '', stdout
|
|
49
|
+
lines = stderr.split("\n")
|
|
50
|
+
assert_equal "Manifest upload failed:", lines[0]
|
|
51
|
+
assert_match(/.*Error: No such file or directory.*/, lines[1])
|
|
52
|
+
file.unlink
|
|
53
|
+
stop_vcr
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
class SetupContentViews < MiniTest::Unit::TestCase
|
|
6
|
+
def test_setup
|
|
7
|
+
start_vcr
|
|
8
|
+
|
|
9
|
+
stdout,stderr = capture {
|
|
10
|
+
hammer.run(%W{csv content-views --verbose --file test/data/setup/content-views.csv})
|
|
11
|
+
}
|
|
12
|
+
assert_equal stderr, ''
|
|
13
|
+
|
|
14
|
+
stop_vcr
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
class SetupLifecycleEnvironments < MiniTest::Unit::TestCase
|
|
6
|
+
def test_setup
|
|
7
|
+
start_vcr
|
|
8
|
+
|
|
9
|
+
stdout,stderr = capture {
|
|
10
|
+
hammer.run(%W{csv lifecycle-environments --verbose --file test/data/setup/lifecycle-environments.csv})
|
|
11
|
+
}
|
|
12
|
+
assert_equal stderr, ''
|
|
13
|
+
|
|
14
|
+
stop_vcr
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
class SetupLocations < MiniTest::Unit::TestCase
|
|
6
|
+
def test_setup
|
|
7
|
+
start_vcr
|
|
8
|
+
|
|
9
|
+
stdout,stderr = capture {
|
|
10
|
+
hammer.run(%W{csv locations --verbose --file test/data/setup/locations.csv})
|
|
11
|
+
}
|
|
12
|
+
assert_equal stderr, ''
|
|
13
|
+
|
|
14
|
+
stop_vcr
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
class SetupOrganizations < MiniTest::Unit::TestCase
|
|
6
|
+
def test_setup
|
|
7
|
+
start_vcr
|
|
8
|
+
|
|
9
|
+
stdout,stderr = capture {
|
|
10
|
+
hammer.run(%W{csv organizations --verbose --file test/data/setup/organizations.csv})
|
|
11
|
+
}
|
|
12
|
+
assert_equal stderr, ''
|
|
13
|
+
|
|
14
|
+
stop_vcr
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
class SetupSubscriptions < MiniTest::Unit::TestCase
|
|
6
|
+
def test_setup
|
|
7
|
+
start_vcr
|
|
8
|
+
|
|
9
|
+
stdout,stderr = capture {
|
|
10
|
+
hammer.run(%W{csv subscriptions --export --organization Test\ Corporation})
|
|
11
|
+
}
|
|
12
|
+
assert_equal stderr, ''
|
|
13
|
+
assert_equal 5, stdout.split("\n").length
|
|
14
|
+
assert_match(/.*"Red Hat Enterprise Linux for Virtual Datacenters, Premium",1,RH00001.*/, stdout)
|
|
15
|
+
assert_match(/.*"Red Hat Enterprise Linux for Virtual Datacenters, Standard",1,RH00002.*/, stdout)
|
|
16
|
+
|
|
17
|
+
stop_vcr
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require './test/csv_test_helper'
|
|
2
|
+
require './lib/hammer_cli_csv'
|
|
3
|
+
|
|
4
|
+
module Setup
|
|
5
|
+
require './test/setup/setup_organizations'
|
|
6
|
+
require './test/setup/setup_subscriptions'
|
|
7
|
+
require './test/setup/setup_locations'
|
|
8
|
+
require './test/setup/setup_lifecycle_environments'
|
|
9
|
+
require './test/setup/setup_content_views'
|
|
10
|
+
end
|
data/test/test_runner.rb
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
if RUBY_VERSION > "2.2"
|
|
2
|
+
# Coverage - Keep these two lines at the top of this file
|
|
3
|
+
require 'simplecov'
|
|
4
|
+
require 'coveralls'
|
|
5
|
+
|
|
6
|
+
SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter,
|
|
7
|
+
Coveralls::SimpleCov::Formatter]
|
|
8
|
+
SimpleCov.start do
|
|
9
|
+
minimum_coverage 36
|
|
10
|
+
maximum_coverage_drop 0.1
|
|
11
|
+
refuse_coverage_drop
|
|
12
|
+
track_files "lib/**/*.rb"
|
|
13
|
+
add_filter '/test/'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
require 'rubygems'
|
|
18
|
+
require 'logger'
|
|
19
|
+
require 'minitest/unit'
|
|
20
|
+
require 'minitest/autorun'
|
|
21
|
+
require 'mocha/setup'
|
|
22
|
+
|
|
23
|
+
require './test/vcr_setup'
|
|
24
|
+
|
|
25
|
+
begin
|
|
26
|
+
require 'debugger'
|
|
27
|
+
rescue LoadError
|
|
28
|
+
puts 'Debugging not enabled.'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
module MiniTest
|
|
32
|
+
class Unit
|
|
33
|
+
class TestCase
|
|
34
|
+
def cassette_name
|
|
35
|
+
test_name = self.__name__.gsub('test_', '')
|
|
36
|
+
parent = (self.class.name.split('::')[-2] || '').underscore
|
|
37
|
+
self_class = self.class.name.split('::')[-1].underscore.gsub('test_', '')
|
|
38
|
+
"#{parent}/#{self_class}/#{test_name}"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def start_vcr
|
|
42
|
+
options = self.class.respond_to?(:cassette_options) ? self.class.cassette_options : {}
|
|
43
|
+
VCR.insert_cassette(cassette_name, options)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def stop_vcr
|
|
47
|
+
VCR.eject_cassette
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class << self
|
|
51
|
+
attr_accessor :support
|
|
52
|
+
|
|
53
|
+
def suite_cassette_name
|
|
54
|
+
parent = (self.name.split('::')[-2] || '').underscore
|
|
55
|
+
self_class = self.name.split('::')[-1].underscore.gsub('test_', '')
|
|
56
|
+
"#{parent}/#{self_class}/suite"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class CustomMiniTestRunner
|
|
64
|
+
class Unit < MiniTest::Unit
|
|
65
|
+
def before_suites
|
|
66
|
+
# code to run before the first test
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def after_suites
|
|
70
|
+
# code to run after the last test
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def _run_suites(suites, type)
|
|
74
|
+
if ENV['suite']
|
|
75
|
+
suites = suites.select do |suite|
|
|
76
|
+
suite.name == ENV['suite']
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
before_suites
|
|
80
|
+
super(suites, type)
|
|
81
|
+
ensure
|
|
82
|
+
after_suites
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def _run_suite(suite, type)
|
|
86
|
+
options = suite.respond_to?(:cassette_options) ? suite.cassette_options : {}
|
|
87
|
+
if logging?
|
|
88
|
+
puts "Running Suite #{suite.inspect} - #{type.inspect} "
|
|
89
|
+
end
|
|
90
|
+
if suite.respond_to?(:before_suite)
|
|
91
|
+
VCR.use_cassette(suite.suite_cassette_name, options) do
|
|
92
|
+
suite.before_suite
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
super(suite, type)
|
|
96
|
+
ensure
|
|
97
|
+
if suite.respond_to?(:after_suite)
|
|
98
|
+
VCR.use_cassette(suite.suite_cassette_name, options) do
|
|
99
|
+
suite.after_suite
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
if logging?
|
|
103
|
+
puts "Completed Running Suite #{suite.inspect} - #{type.inspect} "
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def logging?
|
|
108
|
+
ENV['logging']
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class CsvMiniTestRunner
|
|
114
|
+
def run_tests(suite, options = {})
|
|
115
|
+
mode = options[:mode] || 'none'
|
|
116
|
+
test_name = options[:test_name] || nil
|
|
117
|
+
logging = options[:logging] || false
|
|
118
|
+
|
|
119
|
+
MiniTest::Unit.runner = CustomMiniTestRunner::Unit.new
|
|
120
|
+
|
|
121
|
+
vcr_config(mode)
|
|
122
|
+
|
|
123
|
+
if test_name && File.exist?(test_name)
|
|
124
|
+
require test_name
|
|
125
|
+
elsif test_name
|
|
126
|
+
require "./test/#{test_name}_test.rb"
|
|
127
|
+
else
|
|
128
|
+
Dir["./test/#{suite}/*_test.rb"].each { |file| require file }
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def vcr_config(mode)
|
|
133
|
+
load_config_settings
|
|
134
|
+
if mode == 'all'
|
|
135
|
+
configure_vcr(:all)
|
|
136
|
+
elsif mode == 'new_episodes'
|
|
137
|
+
configure_vcr(:new_episodes)
|
|
138
|
+
elsif mode == 'once'
|
|
139
|
+
configure_vcr(:once)
|
|
140
|
+
else
|
|
141
|
+
configure_vcr(:none)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def load_config_settings
|
|
146
|
+
if File.exists? 'test/config.yml'
|
|
147
|
+
HammerCLI::Settings.load_from_file 'test/config.yml'
|
|
148
|
+
else
|
|
149
|
+
HammerCLI::Settings.load({
|
|
150
|
+
:ui => {
|
|
151
|
+
:interactive => true,
|
|
152
|
+
:per_page => 20,
|
|
153
|
+
:history_file => './log/history'
|
|
154
|
+
},
|
|
155
|
+
:watch_plain => true,
|
|
156
|
+
:log_dir => './log',
|
|
157
|
+
:log_level => 'error',
|
|
158
|
+
:log_api_calls => false,
|
|
159
|
+
:log_size => 5,
|
|
160
|
+
:csv => {
|
|
161
|
+
:enable_module => true
|
|
162
|
+
},
|
|
163
|
+
:foreman => {
|
|
164
|
+
:enable_module => true,
|
|
165
|
+
:host => 'https://localhost',
|
|
166
|
+
:username => 'admin',
|
|
167
|
+
:password => 'changeme'
|
|
168
|
+
},
|
|
169
|
+
:katello => {
|
|
170
|
+
:enable_module => true
|
|
171
|
+
}
|
|
172
|
+
})
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
data/test/vcr_setup.rb
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'vcr'
|
|
3
|
+
require 'hammer_cli'
|
|
4
|
+
|
|
5
|
+
def configure_vcr(mode = :none)
|
|
6
|
+
if ENV['record'] == 'false' && mode == :none
|
|
7
|
+
fail "Record flag is not applicable for mode 'none', please use with 'mode=all'"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
VCR.configure do |c|
|
|
11
|
+
c.cassette_library_dir = 'test/fixtures/vcr_cassettes'
|
|
12
|
+
c.hook_into :webmock
|
|
13
|
+
|
|
14
|
+
if ENV['record'] == 'false' && mode != :none
|
|
15
|
+
server = HammerCLI::Settings.get(:csv, :host) ||
|
|
16
|
+
HammerCLI::Settings.get(:katello, :host) ||
|
|
17
|
+
HammerCLI::Settings.get(:foreman, :host)
|
|
18
|
+
uri = URI.parse(server)
|
|
19
|
+
c.ignore_hosts uri.host
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
c.default_cassette_options = {
|
|
23
|
+
:record => mode,
|
|
24
|
+
:match_requests_on => [:method, :path, :params, :body_json],
|
|
25
|
+
:decode_compressed_response => true
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# rubocop:disable HandleExceptions
|
|
29
|
+
begin
|
|
30
|
+
c.register_request_matcher :body_json do |request_1, request_2|
|
|
31
|
+
begin
|
|
32
|
+
json_1 = JSON.parse(request_1.body)
|
|
33
|
+
json_2 = JSON.parse(request_2.body)
|
|
34
|
+
|
|
35
|
+
json_1 == json_2
|
|
36
|
+
rescue
|
|
37
|
+
#fallback incase there is a JSON parse error
|
|
38
|
+
request_1.body == request_2.body
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
rescue
|
|
42
|
+
#ignore the warning thrown about this matcher already being resgistered
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
begin
|
|
46
|
+
c.register_request_matcher :params do |request_1, request_2|
|
|
47
|
+
URI(request_1.uri).query == URI(request_2.uri).query
|
|
48
|
+
end
|
|
49
|
+
rescue
|
|
50
|
+
#ignore the warning thrown about this matcher already being resgistered
|
|
51
|
+
end
|
|
52
|
+
# rubocop:enable HandleExceptions
|
|
53
|
+
end
|
|
54
|
+
end
|