wavefront-cli 3.1.1 → 3.1.2
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 +4 -4
- data/HISTORY.md +6 -0
- data/lib/wavefront-cli/config.rb +1 -1
- data/lib/wavefront-cli/controller.rb +3 -3
- data/lib/wavefront-cli/exception.rb +4 -0
- data/lib/wavefront-cli/opt_handler.rb +5 -1
- data/lib/wavefront-cli/version.rb +1 -1
- data/spec/spec_helper.rb +14 -9
- data/spec/wavefront-cli/controller_spec.rb +15 -0
- data/spec/wavefront-cli/opt_handler_spec.rb +19 -17
- data/spec/wavefront-cli/resources/malformed.conf +1 -0
- data/wavefront-cli.gemspec +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bfee50381c5609e38fdefab8aa7db8b7daf58fbbc547437d3a09654c65060f0b
|
4
|
+
data.tar.gz: 9fa8ef583e2e0e5547cbd81a84ab5fafe56e1e26b7738918f20d092187e332f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d4c4b99f8e0bdc57fd43f7813b47830e17dfdf4349f9c6ae2fc27b97474ccd3db2db0bc23dd368e937ccdd281c6982489f47438d4cdaad43d8f484cf53f956f
|
7
|
+
data.tar.gz: 2a12e2a4af8f144d3f0dca74265b98dac65d0187320d6d26557725bd559d5c07b965e0987f3232b23d7597df67e31711bf1f22dd01f7cd2e2008dba8396c7aba
|
data/HISTORY.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.1.2 (06/04/2019)
|
4
|
+
* Bugfix on handling of invalid config files.
|
5
|
+
* Explicitly specifying a missing config file now causes an error
|
6
|
+
whether or not credentials available from other mechanisms.
|
7
|
+
* Require 3.0.2 of [the SDK](https://github.com/snltd/wavefront-sdk).
|
8
|
+
|
3
9
|
## 3.1.1 (05/04/2019)
|
4
10
|
* Usernames do not have to be e-mail addresses.
|
5
11
|
* Require 3.0.1 of [the SDK](https://github.com/snltd/wavefront-sdk).
|
data/lib/wavefront-cli/config.rb
CHANGED
@@ -161,7 +161,7 @@ module WavefrontCli
|
|
161
161
|
|
162
162
|
def present?
|
163
163
|
return true if config_file.exist?
|
164
|
-
raise WavefrontCli::Exception::ConfigFileNotFound
|
164
|
+
raise WavefrontCli::Exception::ConfigFileNotFound, config_file
|
165
165
|
end
|
166
166
|
|
167
167
|
# @return [Pathname] path to config file, from options, or from
|
@@ -72,7 +72,7 @@ class WavefrontCliController
|
|
72
72
|
begin
|
73
73
|
[cmd, sanitize_keys(Docopt.docopt(usage[cmd], argv: args))]
|
74
74
|
rescue Docopt::DocoptLanguageError => e
|
75
|
-
abort "
|
75
|
+
abort "Mangled command description:\n#{e.message}"
|
76
76
|
rescue Docopt::Exit => e
|
77
77
|
abort e.message
|
78
78
|
end
|
@@ -109,7 +109,7 @@ class WavefrontCliController
|
|
109
109
|
rescue Interrupt
|
110
110
|
abort "\nOperation aborted at user request."
|
111
111
|
rescue WavefrontCli::Exception::ConfigFileNotFound => e
|
112
|
-
abort "Configuration file
|
112
|
+
abort "Configuration file #{e}' not found."
|
113
113
|
rescue WavefrontCli::Exception::CredentialError => e
|
114
114
|
handle_missing_credentials(e)
|
115
115
|
rescue WavefrontCli::Exception::MandatoryValue
|
@@ -153,7 +153,7 @@ class WavefrontCliController
|
|
153
153
|
# @param error [WavefrontCli::Exception::CredentialError]
|
154
154
|
#
|
155
155
|
def handle_missing_credentials(error)
|
156
|
-
if DEFAULT_CONFIG.exist?
|
156
|
+
if DEFAULT_CONFIG.exist? && DEFAULT_CONFIG.file?
|
157
157
|
abort "Credential error. #{error.message}"
|
158
158
|
else
|
159
159
|
puts 'No credentials supplied on the command line or via ' \
|
@@ -29,6 +29,10 @@ module WavefrontCli
|
|
29
29
|
cred_opts = setup_cred_opts(cli_opts)
|
30
30
|
cli_opts.reject! { |_k, v| v.nil? }
|
31
31
|
@opts = DEFAULT_OPTS.merge(load_profile(cred_opts)).merge(cli_opts)
|
32
|
+
rescue WavefrontCli::Exception::ConfigFileNotFound => e
|
33
|
+
abort "Configuration file '#{e}' not found."
|
34
|
+
rescue Wavefront::Exception::InvalidConfigFile => e
|
35
|
+
abort "Could not load configuration file '#{e.message}'."
|
32
36
|
end
|
33
37
|
|
34
38
|
# Create an options hash to pass to the Wavefront::Credentials
|
@@ -45,7 +49,7 @@ module WavefrontCli
|
|
45
49
|
cred_opts[:file] = Pathname.new(cli_opts[:config])
|
46
50
|
|
47
51
|
unless cred_opts[:file].exist?
|
48
|
-
|
52
|
+
raise WavefrontCli::Exception::ConfigFileNotFound, cred_opts[:file]
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
@@ -1 +1 @@
|
|
1
|
-
WF_CLI_VERSION = '3.1.
|
1
|
+
WF_CLI_VERSION = '3.1.2'.freeze
|
data/spec/spec_helper.rb
CHANGED
@@ -248,15 +248,20 @@ end
|
|
248
248
|
def missing_creds(cmd, subcmds)
|
249
249
|
describe 'commands with missing credentials' do
|
250
250
|
subcmds.each do |subcmd|
|
251
|
-
it "'#{subcmd}'
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
251
|
+
it "'#{subcmd}' tells the user config file not found" do
|
252
|
+
_out, err = fail_command("#{cmd} #{subcmd} -c /f")
|
253
|
+
assert_equal("Configuration file '/f' not found.\n", err)
|
254
|
+
end
|
255
|
+
|
256
|
+
# I've generally got a config file on my dev box, but Travis
|
257
|
+
# won't have one. Therefore this test probably won't get run
|
258
|
+
# locally, but it will get run in CI, which is what counts.
|
259
|
+
#
|
260
|
+
next if HOME_CONFIG.exist?
|
261
|
+
|
262
|
+
it "'#{subcmd}' errors and tells the user to generate config" do
|
263
|
+
out, _err = fail_command("#{cmd} #{subcmd}")
|
264
|
+
assert_match(/Please run 'wf config setup'/, out)
|
260
265
|
end
|
261
266
|
end
|
262
267
|
end
|
@@ -44,6 +44,21 @@ class WavefrontCliHelpTest < MiniTest::Test
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
def test_malformed_config
|
49
|
+
WavefrontCliController.new(['alert', 'list',
|
50
|
+
"--config=#{RES_DIR}/malformed.conf"])
|
51
|
+
rescue SystemExit => e
|
52
|
+
assert_equal(1, e.status)
|
53
|
+
assert e.message.start_with?('Could not load configuration file')
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_missing_config
|
57
|
+
WavefrontCliController.new(%w[alert list --config=/no/such/file])
|
58
|
+
rescue SystemExit => e
|
59
|
+
assert_equal(1, e.status)
|
60
|
+
assert_equal("Configuration file '/no/such/file' not found.", e.message)
|
61
|
+
end
|
47
62
|
end
|
48
63
|
|
49
64
|
# To test internal methods, make a subclass with no initializer,
|
@@ -3,13 +3,15 @@
|
|
3
3
|
require_relative '../spec_helper'
|
4
4
|
require_relative '../../lib/wavefront-cli/opt_handler'
|
5
5
|
|
6
|
+
# Some of these tests will be skipped if you have a ~/.wavefront
|
7
|
+
# config file. CI will never have that.
|
8
|
+
#
|
9
|
+
INTERFERING_FILE = Pathname.new(ENV['HOME']) + '.wavefront'
|
10
|
+
|
6
11
|
# Test option handler class. End to end tests because the work is
|
7
12
|
# always done in the constructor
|
8
13
|
#
|
9
14
|
class OptHandlerTest < MiniTest::Test
|
10
|
-
# This one has to be kind of vague because I have a config file on
|
11
|
-
# the box I develop on, which will always be picked up. Other
|
12
|
-
# tests are more specific
|
13
15
|
def test_no_opts
|
14
16
|
x = WavefrontCli::OptHandler.new
|
15
17
|
assert x.is_a?(WavefrontCli::OptHandler)
|
@@ -17,37 +19,37 @@ class OptHandlerTest < MiniTest::Test
|
|
17
19
|
assert x.opts.keys.include?(:endpoint)
|
18
20
|
end
|
19
21
|
|
22
|
+
def test_missing_config
|
23
|
+
WavefrontCli::OptHandler.new(config: '/no/such/file')
|
24
|
+
rescue SystemExit => e
|
25
|
+
assert_equal(1, e.status)
|
26
|
+
assert_match("Configuration file '/no/such/file' not found.", e.message)
|
27
|
+
end
|
28
|
+
|
20
29
|
def test_no_config_no_env
|
21
|
-
|
22
|
-
|
30
|
+
return if INTERFERING_FILE.exist?
|
31
|
+
|
32
|
+
x = WavefrontCli::OptHandler.new({})
|
23
33
|
o = x.opts
|
24
34
|
assert x.is_a?(WavefrontCli::OptHandler)
|
25
35
|
assert o.is_a?(Hash)
|
26
36
|
refute o.keys.include?(:token)
|
27
|
-
assert_equal(o[:config], '/nosuchfile')
|
28
37
|
assert_equal(o[:endpoint], 'metrics.wavefront.com')
|
29
|
-
|
30
|
-
assert_output("config file '/nosuchfile' not found.\n") do
|
31
|
-
WavefrontCli::OptHandler.new(opts)
|
32
|
-
end
|
33
38
|
end
|
34
39
|
|
35
40
|
def test_no_config_env
|
41
|
+
return if INTERFERING_FILE.exist?
|
42
|
+
|
36
43
|
ENV['WAVEFRONT_TOKEN'] = 'abcd1234'
|
37
44
|
ENV['WAVEFRONT_ENDPOINT'] = 'myendpoint.wavefront.com'
|
38
|
-
|
39
|
-
x = WavefrontCli::OptHandler.new(opts)
|
45
|
+
x = WavefrontCli::OptHandler.new({})
|
40
46
|
o = x.opts
|
41
47
|
assert x.is_a?(WavefrontCli::OptHandler)
|
42
48
|
assert o.is_a?(Hash)
|
43
49
|
assert_equal(o[:token], 'abcd1234')
|
44
|
-
|
50
|
+
assert_nil o[:config]
|
45
51
|
assert_equal(o[:endpoint], 'myendpoint.wavefront.com')
|
46
52
|
refute o.keys.include?(:proxy)
|
47
|
-
|
48
|
-
assert_output("config file '/nosuchfile' not found.\n") do
|
49
|
-
WavefrontCli::OptHandler.new(opts)
|
50
|
-
end
|
51
53
|
ENV['WAVEFRONT_TOKEN'] = nil
|
52
54
|
ENV['WAVEFRONT_ENDPOINT'] = nil
|
53
55
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
this is not a valid config file
|
data/wavefront-cli.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |gem|
|
|
24
24
|
|
25
25
|
gem.add_runtime_dependency 'docopt', '~> 0.6.0'
|
26
26
|
gem.add_runtime_dependency 'inifile', '~> 3.0'
|
27
|
-
gem.add_runtime_dependency 'wavefront-sdk', '~> 3.0', '>= 3.0.
|
27
|
+
gem.add_runtime_dependency 'wavefront-sdk', '~> 3.0', '>= 3.0.2'
|
28
28
|
|
29
29
|
gem.add_development_dependency 'minitest', '~> 5.11', '>= 5.11.0'
|
30
30
|
gem.add_development_dependency 'rake', '~> 12.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wavefront-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Fisher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docopt
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
version: '3.0'
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 3.0.
|
50
|
+
version: 3.0.2
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
version: '3.0'
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 3.0.
|
60
|
+
version: 3.0.2
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: minitest
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -311,6 +311,7 @@ files:
|
|
311
311
|
- spec/wavefront-cli/resources/display/user-human-long
|
312
312
|
- spec/wavefront-cli/resources/display/user-human-long-no_sep
|
313
313
|
- spec/wavefront-cli/resources/display/user-input.json
|
314
|
+
- spec/wavefront-cli/resources/malformed.conf
|
314
315
|
- spec/wavefront-cli/resources/responses/README.md
|
315
316
|
- spec/wavefront-cli/resources/responses/alert-list.json
|
316
317
|
- spec/wavefront-cli/resources/responses/backups.json
|
@@ -418,6 +419,7 @@ test_files:
|
|
418
419
|
- spec/wavefront-cli/resources/display/user-human-long
|
419
420
|
- spec/wavefront-cli/resources/display/user-human-long-no_sep
|
420
421
|
- spec/wavefront-cli/resources/display/user-input.json
|
422
|
+
- spec/wavefront-cli/resources/malformed.conf
|
421
423
|
- spec/wavefront-cli/resources/responses/README.md
|
422
424
|
- spec/wavefront-cli/resources/responses/alert-list.json
|
423
425
|
- spec/wavefront-cli/resources/responses/backups.json
|