kpm 0.7.2 → 0.10.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 -5
- data/.gitignore +2 -0
- data/.rubocop.yml +138 -0
- data/Gemfile +2 -0
- data/README.adoc +144 -107
- data/Rakefile +2 -1
- data/bin/kpm +4 -2
- data/kpm.gemspec +11 -8
- data/lib/kpm.rb +3 -0
- data/lib/kpm/account.rb +268 -338
- data/lib/kpm/base_artifact.rb +33 -39
- data/lib/kpm/base_installer.rb +69 -83
- data/lib/kpm/blob.rb +29 -0
- data/lib/kpm/cli.rb +3 -1
- data/lib/kpm/coordinates.rb +10 -12
- data/lib/kpm/database.rb +94 -113
- data/lib/kpm/diagnostic_file.rb +126 -147
- data/lib/kpm/formatter.rb +76 -48
- data/lib/kpm/inspector.rb +24 -34
- data/lib/kpm/installer.rb +53 -46
- data/lib/kpm/kaui_artifact.rb +4 -3
- data/lib/kpm/killbill_plugin_artifact.rb +10 -7
- data/lib/kpm/killbill_server_artifact.rb +13 -12
- data/lib/kpm/migrations.rb +26 -11
- data/lib/kpm/nexus_helper/actions.rb +52 -9
- data/lib/kpm/nexus_helper/cloudsmith_api_calls.rb +83 -0
- data/lib/kpm/nexus_helper/github_api_calls.rb +70 -0
- data/lib/kpm/nexus_helper/nexus_api_calls_v2.rb +130 -108
- data/lib/kpm/nexus_helper/nexus_facade.rb +5 -3
- data/lib/kpm/plugins_directory.rb +9 -8
- data/lib/kpm/plugins_directory.yml +14 -173
- data/lib/kpm/plugins_manager.rb +29 -24
- data/lib/kpm/sha1_checker.rb +31 -18
- data/lib/kpm/system.rb +104 -135
- data/lib/kpm/system_helpers/cpu_information.rb +56 -55
- data/lib/kpm/system_helpers/disk_space_information.rb +60 -63
- data/lib/kpm/system_helpers/entropy_available.rb +37 -39
- data/lib/kpm/system_helpers/memory_information.rb +52 -51
- data/lib/kpm/system_helpers/os_information.rb +45 -47
- data/lib/kpm/system_helpers/system_proxy.rb +10 -10
- data/lib/kpm/tasks.rb +381 -438
- data/lib/kpm/tenant_config.rb +68 -83
- data/lib/kpm/tomcat_manager.rb +10 -8
- data/lib/kpm/trace_logger.rb +18 -16
- data/lib/kpm/uninstaller.rb +81 -14
- data/lib/kpm/utils.rb +13 -14
- data/lib/kpm/version.rb +3 -1
- data/packaging/Gemfile +2 -0
- data/pom.xml +211 -40
- data/spec/kpm/remote/base_artifact_spec.rb +20 -20
- data/spec/kpm/remote/base_installer_spec.rb +35 -34
- data/spec/kpm/remote/cloudsmith_api_calls_spec.rb +40 -0
- data/spec/kpm/remote/github_api_calls_spec.rb +40 -0
- data/spec/kpm/remote/installer_spec.rb +80 -79
- data/spec/kpm/remote/kaui_artifact_spec.rb +7 -6
- data/spec/kpm/remote/killbill_plugin_artifact_spec.rb +25 -30
- data/spec/kpm/remote/killbill_server_artifact_spec.rb +17 -16
- data/spec/kpm/remote/migrations_spec.rb +12 -11
- data/spec/kpm/remote/nexus_facade_spec.rb +32 -28
- data/spec/kpm/remote/tenant_config_spec.rb +30 -29
- data/spec/kpm/remote/tomcat_manager_spec.rb +4 -3
- data/spec/kpm/unit/actions_spec.rb +52 -0
- data/spec/kpm/unit/base_artifact_spec.rb +19 -18
- data/spec/kpm/unit/cpu_information_spec.rb +67 -0
- data/spec/kpm/unit/disk_space_information_spec.rb +47 -0
- data/spec/kpm/unit/entropy_information_spec.rb +36 -0
- data/spec/kpm/unit/formatter_spec.rb +163 -0
- data/spec/kpm/unit/inspector_spec.rb +34 -42
- data/spec/kpm/unit/installer_spec.rb +7 -6
- data/spec/kpm/unit/memory_information_spec.rb +102 -0
- data/spec/kpm/unit/os_information_spec.rb +38 -0
- data/spec/kpm/unit/plugins_directory_spec.rb +38 -22
- data/spec/kpm/unit/plugins_manager_spec.rb +62 -66
- data/spec/kpm/unit/sha1_checker_spec.rb +107 -60
- data/spec/kpm/unit/uninstaller_spec.rb +118 -72
- data/spec/kpm/unit_mysql/account_spec.rb +127 -142
- data/spec/spec_helper.rb +20 -18
- data/tasks/package.rake +18 -18
- metadata +42 -22
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'kpm/system_helpers/system_proxy'
|
5
|
+
require 'kpm/system_helpers/entropy_available'
|
6
|
+
|
7
|
+
describe KPM::SystemProxy::EntropyAvailable do
|
8
|
+
subject { described_class.new }
|
9
|
+
let(:entropy_info) { subject.send(:build_hash, data) }
|
10
|
+
|
11
|
+
context 'when running on Linux' do
|
12
|
+
let(:data) { '182' }
|
13
|
+
|
14
|
+
it {
|
15
|
+
expect(subject.labels).to eq([{ label: :entropy },
|
16
|
+
{ label: :value }])
|
17
|
+
}
|
18
|
+
|
19
|
+
it {
|
20
|
+
expect(entropy_info).to eq({ 'entropy_available' => { entropy: 'available', value: '182' } })
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when running on MacOS' do
|
25
|
+
let(:data) { '-' }
|
26
|
+
|
27
|
+
it {
|
28
|
+
expect(subject.labels).to eq([{ label: :entropy },
|
29
|
+
{ label: :value }])
|
30
|
+
}
|
31
|
+
|
32
|
+
it {
|
33
|
+
expect(entropy_info).to eq({ 'entropy_available' => { entropy: 'available', value: '-' } })
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'Formatter' do
|
6
|
+
describe KPM::Formatter::DefaultFormatter do
|
7
|
+
subject { described_class.new(label, input) }
|
8
|
+
|
9
|
+
context 'when arguments are nil' do
|
10
|
+
let(:label) { nil }
|
11
|
+
let(:input) { nil }
|
12
|
+
|
13
|
+
it { expect(subject.size).to eq(0) }
|
14
|
+
it { expect(subject.to_s).to eq('') }
|
15
|
+
it { expect(subject.label).to eq('') }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when arguments are non-nil' do
|
19
|
+
let(:label) { 'my_label' }
|
20
|
+
let(:input) { 'my_value' }
|
21
|
+
|
22
|
+
it { expect(subject.size).to eq(8) }
|
23
|
+
it { expect(subject.to_s).to eq('my_value') }
|
24
|
+
it { expect(subject.label).to eq('MY LABEL') }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe KPM::Formatter::VersionFormatter do
|
29
|
+
subject { described_class.new(label, versions) }
|
30
|
+
|
31
|
+
context 'when arguments are nil/empty' do
|
32
|
+
let(:label) { nil }
|
33
|
+
let(:versions) { [] }
|
34
|
+
|
35
|
+
it { expect(subject.size).to eq(0) }
|
36
|
+
it { expect(subject.to_s).to eq('') }
|
37
|
+
it { expect(subject.label).to eq(' sha1=[], def=(*), del=(x)') }
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'when arguments are non-nil' do
|
41
|
+
let(:label) { 'my_label' }
|
42
|
+
let(:versions) do
|
43
|
+
[{ version: '1.0', is_default: false, is_disabled: false, sha1: nil },
|
44
|
+
{ version: '2.0', is_default: true, is_disabled: true, sha1: '123456789' }]
|
45
|
+
end
|
46
|
+
|
47
|
+
it { expect(subject.size).to eq(29) }
|
48
|
+
it { expect(subject.to_s).to eq('1.0[???], 2.0[123456..](*)(x)') }
|
49
|
+
it { expect(subject.label).to eq('MY LABEL sha1=[], def=(*), del=(x)') }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe KPM::Formatter do
|
54
|
+
subject { described_class.new }
|
55
|
+
|
56
|
+
context 'when running inspect' do
|
57
|
+
let(:data) do
|
58
|
+
{ 'killbill-kpm' => { plugin_name: 'killbill-kpm', plugin_path: '/var/tmp/bundles/plugins/ruby/killbill-kpm', type: 'ruby', versions: [{ version: '1.3.0', is_default: true, is_disabled: false, sha1: 'b350016c539abc48e51c97605ac1f08b441843d3' }], plugin_key: 'kpm', group_id: 'org.kill-bill.billing.plugin.ruby', artifact_id: 'kpm-plugin', packaging: 'tar.gz', classifier: nil },
|
59
|
+
'hello-world-plugin' => { plugin_name: 'hello-world-plugin', plugin_path: '/var/tmp/bundles/plugins/java/hello-world-plugin', type: 'java', versions: [{ version: '1.0.1-SNAPSHOT', is_default: true, is_disabled: false, sha1: nil }], plugin_key: 'dev:hello', group_id: nil, artifact_id: nil, packaging: nil, classifier: nil },
|
60
|
+
'analytics-plugin' => { plugin_name: 'analytics-plugin', plugin_path: '/var/tmp/bundles/plugins/java/analytics-plugin', type: 'java', versions: [{ version: '7.0.3-SNAPSHOT', is_default: true, is_disabled: false, sha1: nil }], plugin_key: 'analytics', group_id: nil, artifact_id: nil, packaging: nil, classifier: nil } }
|
61
|
+
end
|
62
|
+
let(:labels) do
|
63
|
+
[{ label: :plugin_name },
|
64
|
+
{ label: :plugin_key },
|
65
|
+
{ label: :type },
|
66
|
+
{ label: :group_id },
|
67
|
+
{ label: :artifact_id },
|
68
|
+
{ label: :packaging },
|
69
|
+
{ label: :versions, formatter: KPM::Formatter::VersionFormatter.name }]
|
70
|
+
end
|
71
|
+
let!(:labels_format_argument) { subject.send(:compute_labels, data, labels) }
|
72
|
+
|
73
|
+
it {
|
74
|
+
expect(labels_format_argument).to eq(['PLUGIN NAME',
|
75
|
+
'PLUGIN KEY',
|
76
|
+
'TYPE',
|
77
|
+
'GROUP ID',
|
78
|
+
'ARTIFACT ID',
|
79
|
+
'PACKAGING',
|
80
|
+
'VERSIONS sha1=[], def=(*), del=(x)'])
|
81
|
+
}
|
82
|
+
|
83
|
+
it {
|
84
|
+
expect(labels).to eq([{ label: :plugin_name, size: 18 },
|
85
|
+
{ label: :plugin_key, size: 10 },
|
86
|
+
{ label: :type, size: 4 },
|
87
|
+
{ label: :group_id, size: 33 },
|
88
|
+
{ label: :artifact_id, size: 11 },
|
89
|
+
{ label: :packaging, size: 9 },
|
90
|
+
{ label: :versions, formatter: KPM::Formatter::VersionFormatter.name, size: 34 }])
|
91
|
+
}
|
92
|
+
|
93
|
+
it {
|
94
|
+
# labels have the size computed here already
|
95
|
+
expect(subject.send(:compute_border, labels)).to eq('_____________________________________________________________________________________________________________________________________________')
|
96
|
+
}
|
97
|
+
|
98
|
+
it {
|
99
|
+
# labels have the size computed here already
|
100
|
+
expect(subject.send(:compute_format, labels)).to eq('| %18s | %10s | %4s | %33s | %11s | %9s | %34s |')
|
101
|
+
}
|
102
|
+
|
103
|
+
it {
|
104
|
+
expect(subject.send(:format_only, data, labels)).to eq("\n_____________________________________________________________________________________________________________________________________________
|
105
|
+
| PLUGIN NAME | PLUGIN KEY | TYPE | GROUP ID | ARTIFACT ID | PACKAGING | VERSIONS sha1=[], def=(*), del=(x) |
|
106
|
+
_____________________________________________________________________________________________________________________________________________
|
107
|
+
| killbill-kpm | kpm | ruby | org.kill-bill.billing.plugin.ruby | kpm-plugin | tar.gz | 1.3.0[b35001..](*) |
|
108
|
+
| hello-world-plugin | dev:hello | java | ??? | ??? | ??? | 1.0.1-SNAPSHOT[???](*) |
|
109
|
+
| analytics-plugin | analytics | java | ??? | ??? | ??? | 7.0.3-SNAPSHOT[???](*) |
|
110
|
+
_____________________________________________________________________________________________________________________________________________\n\n")
|
111
|
+
}
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'when formatting CPU information' do
|
115
|
+
let(:data) do
|
116
|
+
{ 'Processor Name' => { cpu_detail: 'Processor Name', value: 'Intel Core i5' },
|
117
|
+
'Processor Speed' => { cpu_detail: 'Processor Speed', value: '3.1 GHz' },
|
118
|
+
'Number of Processors' => { cpu_detail: 'Number of Processors', value: '1' },
|
119
|
+
'Total Number of Cores' => { cpu_detail: 'Total Number of Cores', value: '2' },
|
120
|
+
'L2 Cache (per Core)' => { cpu_detail: 'L2 Cache (per Core)', value: '256 KB' },
|
121
|
+
'L3 Cache' => { cpu_detail: 'L3 Cache', value: '4 MB' } }
|
122
|
+
end
|
123
|
+
let(:labels) do
|
124
|
+
[{ label: :cpu_detail },
|
125
|
+
{ label: :value }]
|
126
|
+
end
|
127
|
+
let!(:labels_format_argument) { subject.send(:compute_labels, data, labels) }
|
128
|
+
|
129
|
+
it {
|
130
|
+
expect(labels_format_argument).to eq(['CPU DETAIL',
|
131
|
+
'VALUE'])
|
132
|
+
}
|
133
|
+
|
134
|
+
it {
|
135
|
+
expect(labels).to eq([{ label: :cpu_detail, size: 21 },
|
136
|
+
{ label: :value, size: 13 }])
|
137
|
+
}
|
138
|
+
|
139
|
+
it {
|
140
|
+
# labels have the size computed here already
|
141
|
+
expect(subject.send(:compute_border, labels)).to eq('_________________________________________')
|
142
|
+
}
|
143
|
+
|
144
|
+
it {
|
145
|
+
# labels have the size computed here already
|
146
|
+
expect(subject.send(:compute_format, labels)).to eq('| %21s | %13s |')
|
147
|
+
}
|
148
|
+
|
149
|
+
it {
|
150
|
+
expect(subject.send(:format_only, data, labels)).to eq("\n_________________________________________
|
151
|
+
| CPU DETAIL | VALUE |
|
152
|
+
_________________________________________
|
153
|
+
| Processor Name | Intel Core i5 |
|
154
|
+
| Processor Speed | 3.1 GHz |
|
155
|
+
| Number of Processors | 1 |
|
156
|
+
| Total Number of Cores | 2 |
|
157
|
+
| L2 Cache (per Core) | 256 KB |
|
158
|
+
| L3 Cache | 4 MB |
|
159
|
+
_________________________________________\n\n")
|
160
|
+
}
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe KPM::Inspector do
|
4
|
-
|
5
6
|
before(:each) do
|
6
7
|
@logger = Logger.new(STDOUT)
|
7
8
|
@logger.level = Logger::INFO
|
@@ -20,72 +21,64 @@ describe KPM::Inspector do
|
|
20
21
|
|
21
22
|
@manager = KPM::PluginsManager.new(@plugins_dir, @logger)
|
22
23
|
|
23
|
-
@sha1_file = @bundles_dir.join(
|
24
|
+
@sha1_file = @bundles_dir.join('sha1.yml')
|
24
25
|
@sha1_checker = KPM::Sha1Checker.from_file(@sha1_file)
|
25
|
-
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
28
|
it 'should parse a correctly setup env' do
|
30
|
-
|
31
|
-
add_plugin('foo', 'plugin_foo', ['1.2.3', '2.0.0', '2.0.1'], 'ruby', 'com.foo', 'foo', 'tar.gz', nil, ['12345', '23456', '34567'], '2.0.1', ['1.2.3'])
|
29
|
+
add_plugin('foo', 'plugin_foo', ['1.2.3', '2.0.0', '2.0.1'], 'ruby', 'com.foo', 'foo', 'tar.gz', nil, %w[12345 23456 34567], '2.0.1', ['1.2.3'])
|
32
30
|
add_plugin('bar', 'plugin_bar', ['1.0.0'], 'java', 'com.bar', 'bar', 'jar', nil, ['98765'], nil, [])
|
33
31
|
|
34
32
|
inspector = KPM::Inspector.new
|
35
33
|
all_plugins = inspector.inspect(@bundles_dir)
|
36
|
-
all_plugins.size
|
37
|
-
|
38
|
-
all_plugins['plugin_bar'][
|
39
|
-
all_plugins['plugin_bar'][
|
40
|
-
all_plugins['plugin_bar'][:versions].size
|
41
|
-
all_plugins['plugin_bar'][:versions][0][:version]
|
42
|
-
all_plugins['plugin_bar'][:versions][0][:is_default]
|
43
|
-
all_plugins['plugin_bar'][:versions][0][:is_disabled]
|
44
|
-
all_plugins['plugin_bar'][:versions][0][:sha1]
|
45
|
-
|
46
|
-
all_plugins['plugin_foo'][
|
47
|
-
all_plugins['plugin_foo'][
|
48
|
-
all_plugins['plugin_foo'][:versions].size
|
49
|
-
|
50
|
-
all_plugins['plugin_foo'][:versions][0][:version]
|
51
|
-
all_plugins['plugin_foo'][:versions][0][:is_default]
|
52
|
-
all_plugins['plugin_foo'][:versions][0][:is_disabled]
|
53
|
-
all_plugins['plugin_foo'][:versions][0][:sha1]
|
54
|
-
|
55
|
-
all_plugins['plugin_foo'][:versions][1][:version]
|
56
|
-
all_plugins['plugin_foo'][:versions][1][:is_default]
|
57
|
-
all_plugins['plugin_foo'][:versions][1][:is_disabled]
|
58
|
-
all_plugins['plugin_foo'][:versions][1][:sha1]
|
59
|
-
|
60
|
-
all_plugins['plugin_foo'][:versions][2][:version]
|
61
|
-
all_plugins['plugin_foo'][:versions][2][:is_default]
|
62
|
-
all_plugins['plugin_foo'][:versions][2][:is_disabled]
|
63
|
-
all_plugins['plugin_foo'][:versions][2][:sha1]
|
64
|
-
|
34
|
+
expect(all_plugins.size).to eq 2
|
35
|
+
|
36
|
+
expect(all_plugins['plugin_bar'][:plugin_key]).to eq 'bar'
|
37
|
+
expect(all_plugins['plugin_bar'][:plugin_path]).to eq @java_plugins_dir.join('plugin_bar').to_s
|
38
|
+
expect(all_plugins['plugin_bar'][:versions].size).to eq 1
|
39
|
+
expect(all_plugins['plugin_bar'][:versions][0][:version]).to eq '1.0.0'
|
40
|
+
expect(all_plugins['plugin_bar'][:versions][0][:is_default]).to eq false
|
41
|
+
expect(all_plugins['plugin_bar'][:versions][0][:is_disabled]).to eq false
|
42
|
+
expect(all_plugins['plugin_bar'][:versions][0][:sha1]).to eq '98765'
|
43
|
+
|
44
|
+
expect(all_plugins['plugin_foo'][:plugin_key]).to eq 'foo'
|
45
|
+
expect(all_plugins['plugin_foo'][:plugin_path]).to eq @ruby_plugins_dir.join('plugin_foo').to_s
|
46
|
+
expect(all_plugins['plugin_foo'][:versions].size).to eq 3
|
47
|
+
|
48
|
+
expect(all_plugins['plugin_foo'][:versions][0][:version]).to eq '1.2.3'
|
49
|
+
expect(all_plugins['plugin_foo'][:versions][0][:is_default]).to eq false
|
50
|
+
expect(all_plugins['plugin_foo'][:versions][0][:is_disabled]).to eq true
|
51
|
+
expect(all_plugins['plugin_foo'][:versions][0][:sha1]).to eq '12345'
|
52
|
+
|
53
|
+
expect(all_plugins['plugin_foo'][:versions][1][:version]).to eq '2.0.0'
|
54
|
+
expect(all_plugins['plugin_foo'][:versions][1][:is_default]).to eq false
|
55
|
+
expect(all_plugins['plugin_foo'][:versions][1][:is_disabled]).to eq false
|
56
|
+
expect(all_plugins['plugin_foo'][:versions][1][:sha1]).to eq '23456'
|
57
|
+
|
58
|
+
expect(all_plugins['plugin_foo'][:versions][2][:version]).to eq '2.0.1'
|
59
|
+
expect(all_plugins['plugin_foo'][:versions][2][:is_default]).to eq true
|
60
|
+
expect(all_plugins['plugin_foo'][:versions][2][:is_disabled]).to eq false
|
61
|
+
expect(all_plugins['plugin_foo'][:versions][2][:sha1]).to eq '34567'
|
65
62
|
end
|
66
63
|
|
67
|
-
|
68
64
|
private
|
69
65
|
|
70
66
|
def add_plugin(plugin_key, plugin_name, versions, language, group_id, artifact_id, packaging, classifier, sha1, active_version, disabled_versions)
|
71
|
-
|
72
67
|
plugin_dir = language == 'ruby' ? @ruby_plugins_dir.join(plugin_name) : @java_plugins_dir.join(plugin_name)
|
73
68
|
|
74
69
|
versions.each_with_index do |v, idx|
|
75
|
-
|
76
|
-
coordinate_map = {:group_id => group_id, :artifact_id => artifact_id, :version => v, :packaging => packaging, :classifier => classifier}
|
70
|
+
coordinate_map = { group_id: group_id, artifact_id: artifact_id, version: v, packaging: packaging, classifier: classifier }
|
77
71
|
coordinates = KPM::Coordinates.build_coordinates(coordinate_map)
|
78
72
|
|
79
73
|
@manager.add_plugin_identifier_key(plugin_key, plugin_name, language, coordinate_map)
|
80
74
|
@sha1_checker.add_or_modify_entry!(coordinates, sha1[idx])
|
81
75
|
|
82
|
-
|
83
76
|
plugin_dir_version = plugin_dir.join(v)
|
84
77
|
|
85
78
|
FileUtils.mkdir_p(plugin_dir_version)
|
86
79
|
|
87
80
|
# Create some entry to look real
|
88
|
-
some_file = 'ruby' ? 'ROOT' :
|
81
|
+
some_file = language == 'ruby' ? 'ROOT' : "#{plugin_name}.jar"
|
89
82
|
FileUtils.touch(plugin_dir_version.join(some_file))
|
90
83
|
end
|
91
84
|
|
@@ -95,5 +88,4 @@ describe KPM::Inspector do
|
|
95
88
|
@manager.uninstall(plugin_dir, v)
|
96
89
|
end
|
97
90
|
end
|
98
|
-
|
99
91
|
end
|
@@ -1,17 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe KPM::Installer do
|
4
|
-
|
5
6
|
context 'when no config file is specified' do
|
6
|
-
let(:all_kb_versions) { %w
|
7
|
+
let(:all_kb_versions) { %w[0.15.0 0.15.1 0.15.10 0.15.11-SNAPSHOT 0.15.2 0.15.3 0.16.0 0.16.1 0.16.10 0.16.11 0.16.12-SNAPSHOT 0.16.2 0.16.3 0.17.0 0.17.1 0.17.2 0.17.2-SNAPSHOT 0.17.3-SNAPSHOT] }
|
7
8
|
|
8
9
|
it 'finds the right stable versions' do
|
9
10
|
config = KPM::Installer.build_default_config(all_kb_versions)
|
10
|
-
config['killbill'].
|
11
|
-
config['killbill']['version'].
|
11
|
+
expect(config['killbill']).not_to be_nil
|
12
|
+
expect(config['killbill']['version']).to eq '0.16.11'
|
12
13
|
|
13
|
-
config['kaui'].
|
14
|
-
config['kaui']['version'].
|
14
|
+
expect(config['kaui']).not_to be_nil
|
15
|
+
expect(config['kaui']['version']).to eq 'LATEST'
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'kpm/system_helpers/system_proxy'
|
5
|
+
require 'kpm/system_helpers/memory_information'
|
6
|
+
|
7
|
+
describe KPM::SystemProxy::MemoryInformation do
|
8
|
+
subject { described_class.new }
|
9
|
+
|
10
|
+
context 'when running on Linux' do
|
11
|
+
let(:data) { "MemTotal: 10774024 kB\nMemFree: 3788232 kB\nMemAvailable: 9483696 kB\nBuffers: 269216 kB\nCached: 5448624 kB\nSwapCached: 0 kB\nActive: 3562072 kB\nInactive: 2913296 kB\nActive(anon): 827072 kB\nInactive(anon): 124844 kB\nActive(file): 2735000 kB\nInactive(file): 2788452 kB\nUnevictable: 0 kB\nMlocked: 0 kB\nSwapTotal: 3620520 kB\nSwapFree: 3620520 kB\nDirty: 16 kB\nWriteback: 0 kB\nAnonPages: 757472 kB\nMapped: 71548 kB\nShmem: 194392 kB\nSlab: 468096 kB\nSReclaimable: 425428 kB\nSUnreclaim: 42668 kB\nKernelStack: 4816 kB\nPageTables: 3420 kB\nNFS_Unstable: 0 kB\nBounce: 0 kB\nWritebackTmp: 0 kB\nCommitLimit: 9007532 kB\nCommitted_AS: 1711072 kB\nVmallocTotal: 34359738367 kB\nVmallocUsed: 0 kB\nVmallocChunk: 0 kB\nAnonHugePages: 622592 kB\nHugePages_Total: 0\nHugePages_Free: 0\nHugePages_Rsvd: 0\nHugePages_Surp: 0\nHugepagesize: 2048 kB\nDirectMap4k: 166848 kB\nDirectMap2M: 10883072 kB\n" }
|
12
|
+
let(:memory_info) { subject.send(:build_hash, data) }
|
13
|
+
|
14
|
+
it {
|
15
|
+
expect(subject.labels).to eq([{ label: :memory_detail },
|
16
|
+
{ label: :value }])
|
17
|
+
}
|
18
|
+
|
19
|
+
it {
|
20
|
+
expect(memory_info).to eq({ 'MemTotal' => { memory_detail: 'MemTotal', value: '10774024 kB' },
|
21
|
+
'MemFree' => { memory_detail: 'MemFree', value: '3788232 kB' },
|
22
|
+
'MemAvailable' => { memory_detail: 'MemAvailable', value: '9483696 kB' },
|
23
|
+
'Buffers' => { memory_detail: 'Buffers', value: '269216 kB' },
|
24
|
+
'Cached' => { memory_detail: 'Cached', value: '5448624 kB' },
|
25
|
+
'SwapCached' => { memory_detail: 'SwapCached', value: '0 kB' },
|
26
|
+
'Active' => { memory_detail: 'Active', value: '3562072 kB' },
|
27
|
+
'Inactive' => { memory_detail: 'Inactive', value: '2913296 kB' },
|
28
|
+
'Active(anon)' => { memory_detail: 'Active(anon)', value: '827072 kB' },
|
29
|
+
'Inactive(anon)' => { memory_detail: 'Inactive(anon)', value: '124844 kB' },
|
30
|
+
'Active(file)' => { memory_detail: 'Active(file)', value: '2735000 kB' },
|
31
|
+
'Inactive(file)' => { memory_detail: 'Inactive(file)', value: '2788452 kB' },
|
32
|
+
'Unevictable' => { memory_detail: 'Unevictable', value: '0 kB' },
|
33
|
+
'Mlocked' => { memory_detail: 'Mlocked', value: '0 kB' },
|
34
|
+
'SwapTotal' => { memory_detail: 'SwapTotal', value: '3620520 kB' },
|
35
|
+
'SwapFree' => { memory_detail: 'SwapFree', value: '3620520 kB' },
|
36
|
+
'Dirty' => { memory_detail: 'Dirty', value: '16 kB' },
|
37
|
+
'Writeback' => { memory_detail: 'Writeback', value: '0 kB' },
|
38
|
+
'AnonPages' => { memory_detail: 'AnonPages', value: '757472 kB' },
|
39
|
+
'Mapped' => { memory_detail: 'Mapped', value: '71548 kB' },
|
40
|
+
'Shmem' => { memory_detail: 'Shmem', value: '194392 kB' },
|
41
|
+
'Slab' => { memory_detail: 'Slab', value: '468096 kB' },
|
42
|
+
'SReclaimable' => { memory_detail: 'SReclaimable', value: '425428 kB' },
|
43
|
+
'SUnreclaim' => { memory_detail: 'SUnreclaim', value: '42668 kB' },
|
44
|
+
'KernelStack' => { memory_detail: 'KernelStack', value: '4816 kB' },
|
45
|
+
'PageTables' => { memory_detail: 'PageTables', value: '3420 kB' },
|
46
|
+
'NFS_Unstable' => { memory_detail: 'NFS_Unstable', value: '0 kB' },
|
47
|
+
'Bounce' => { memory_detail: 'Bounce', value: '0 kB' },
|
48
|
+
'WritebackTmp' => { memory_detail: 'WritebackTmp', value: '0 kB' },
|
49
|
+
'CommitLimit' => { memory_detail: 'CommitLimit', value: '9007532 kB' },
|
50
|
+
'Committed_AS' => { memory_detail: 'Committed_AS', value: '1711072 kB' },
|
51
|
+
'VmallocTotal' => { memory_detail: 'VmallocTotal', value: '34359738367 kB' },
|
52
|
+
'VmallocUsed' => { memory_detail: 'VmallocUsed', value: '0 kB' },
|
53
|
+
'VmallocChunk' => { memory_detail: 'VmallocChunk', value: '0 kB' },
|
54
|
+
'AnonHugePages' => { memory_detail: 'AnonHugePages', value: '622592 kB' },
|
55
|
+
'HugePages_Total' => { memory_detail: 'HugePages_Total', value: '0' },
|
56
|
+
'HugePages_Free' => { memory_detail: 'HugePages_Free', value: '0' },
|
57
|
+
'HugePages_Rsvd' => { memory_detail: 'HugePages_Rsvd', value: '0' },
|
58
|
+
'HugePages_Surp' => { memory_detail: 'HugePages_Surp', value: '0' },
|
59
|
+
'Hugepagesize' => { memory_detail: 'Hugepagesize', value: '2048 kB' },
|
60
|
+
'DirectMap4k' => { memory_detail: 'DirectMap4k', value: '166848 kB' },
|
61
|
+
'DirectMap2M' => { memory_detail: 'DirectMap2M', value: '10883072 kB' } })
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when running on MacOS' do
|
66
|
+
let(:mem_data) { "Mach Virtual Memory Statistics: (page size of 4096 bytes)\nPages free: 20436\nPages active: 279093\nPages inactive: 276175\nPages speculative: 2492\nPages throttled: 0\nPages wired down: 3328540\nPages purgeable: 47378\n\"Translation faults\": 1774872371\nPages copy-on-write: 34313850\nPages zero filled: 1023660277\nPages reactivated: 194623586\nPages purged: 70443047\nFile-backed pages: 119033\nAnonymous pages: 438727\nPages stored in compressor: 2771982\nPages occupied by compressor: 287324\nDecompressions: 252938013\nCompressions: 328708973\nPageins: 66884005\nPageouts: 1122278\nSwapins: 110783726\nSwapouts: 113589173\n" }
|
67
|
+
let(:mem_total_data) { " Memory: 16 GB\n" }
|
68
|
+
let(:memory_info) { subject.send(:build_hash_mac, mem_data, mem_total_data) }
|
69
|
+
|
70
|
+
it {
|
71
|
+
expect(subject.labels).to eq([{ label: :memory_detail },
|
72
|
+
{ label: :value }])
|
73
|
+
}
|
74
|
+
|
75
|
+
it {
|
76
|
+
expect(memory_info).to eq({ 'Memory' => { memory_detail: 'Memory', value: '16 GB' },
|
77
|
+
'Mach Virtual Memory Statistics' => { memory_detail: 'Mach Virtual Memory Statistics', value: '0MB' },
|
78
|
+
'Pages free' => { memory_detail: 'Memory free', value: '79MB' },
|
79
|
+
'Pages active' => { memory_detail: 'Memory active', value: '1090MB' },
|
80
|
+
'Pages inactive' => { memory_detail: 'Memory inactive', value: '1078MB' },
|
81
|
+
'Pages speculative' => { memory_detail: 'Memory speculative', value: '9MB' },
|
82
|
+
'Pages throttled' => { memory_detail: 'Memory throttled', value: '0MB' },
|
83
|
+
'Pages wired down' => { memory_detail: 'Memory wired down', value: '13002MB' },
|
84
|
+
'Pages purgeable' => { memory_detail: 'Memory purgeable', value: '185MB' },
|
85
|
+
'Translation faults' => { memory_detail: 'Translation faults', value: '6933095MB' },
|
86
|
+
'Pages copy-on-write' => { memory_detail: 'Memory copy-on-write', value: '134038MB' },
|
87
|
+
'Pages zero filled' => { memory_detail: 'Memory zero filled', value: '3998672MB' },
|
88
|
+
'Pages reactivated' => { memory_detail: 'Memory reactivated', value: '760248MB' },
|
89
|
+
'Pages purged' => { memory_detail: 'Memory purged', value: '275168MB' },
|
90
|
+
'File-backed pages' => { memory_detail: 'File-backed pages', value: '464MB' },
|
91
|
+
'Anonymous pages' => { memory_detail: 'Anonymous pages', value: '1713MB' },
|
92
|
+
'Pages stored in compressor' => { memory_detail: 'Memory stored in compressor', value: '10828MB' },
|
93
|
+
'Pages occupied by compressor' => { memory_detail: 'Memory occupied by compressor', value: '1122MB' },
|
94
|
+
'Decompressions' => { memory_detail: 'Decompressions', value: '988039MB' },
|
95
|
+
'Compressions' => { memory_detail: 'Compressions', value: '1284019MB' },
|
96
|
+
'Pageins' => { memory_detail: 'Pageins', value: '261265MB' },
|
97
|
+
'Pageouts' => { memory_detail: 'Pageouts', value: '4383MB' },
|
98
|
+
'Swapins' => { memory_detail: 'Swapins', value: '432748MB' },
|
99
|
+
'Swapouts' => { memory_detail: 'Swapouts', value: '443707MB' } })
|
100
|
+
}
|
101
|
+
end
|
102
|
+
end
|