Skip to content

Commit 3df1497

Browse files
authored
Fix can not set verbosity for aws-login or logout (#263)
Closes #260
1 parent 5ba2ac2 commit 3df1497

3 files changed

Lines changed: 110 additions & 2 deletions

File tree

src/awscli_login/config.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,10 +563,11 @@ def wrapper(args: Namespace, session: Session):
563563
sig = None
564564
fargs = (extra_args_handler(args), ) if extra_args_handler else ()
565565

566+
if hasattr(args, "verbose"):
567+
configConsoleLogger(args.verbose)
568+
566569
try:
567570
if not skip_args:
568-
# verbosity can only be set at command line
569-
configConsoleLogger(args.verbose)
570571
del args.verbose
571572

572573
filename, load = config_vcr(args)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Integration tests for aws login
2+
3+
load 'common'
4+
5+
@test "Logout verbose flag" {
6+
! read -r -d '' CREDS_AWS_FILE <<- EOF
7+
[default]$CR
8+
credential_process = aws-login --profile default
9+
EOF
10+
11+
# Regression test for #260
12+
run aws logout --verbose
13+
assert_failure
14+
assert_line "Loaded login profile: default$CR"
15+
assert_line "Already logged out!"
16+
17+
# Regression test for #260
18+
run aws logout --verbose --verbose
19+
assert_failure
20+
assert_line "Traceback (most recent call last):$CR"
21+
22+
# Regression test for #260
23+
run aws logout --verbose --verbose --verbose
24+
assert_failure
25+
assert_line "Traceback (most recent call last):$CR"
26+
}
27+
28+
@test "aws-login verbose flag" {
29+
! read -r -d '' CREDS_AWS_FILE <<- EOF
30+
[default]$CR
31+
credential_process = aws-login --profile default
32+
EOF
33+
34+
# Regression test for #260
35+
run aws-login --verbose
36+
assert_failure
37+
assert_line "Loaded login profile: default$CR"
38+
assert_line "Already logged out!"
39+
40+
# Regression test for #260
41+
run aws-login --verbose --verbose
42+
assert_failure
43+
assert_line "Traceback (most recent call last):$CR"
44+
45+
# Regression test for #260
46+
run aws-login --verbose --verbose --verbose
47+
assert_failure
48+
assert_line "Traceback (most recent call last):$CR"
49+
}

src/tests/test_error_handler.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import logging
2+
import unittest
3+
4+
from argparse import Namespace
5+
from unittest.mock import patch
6+
7+
from awscli_login.config import error_handler
8+
9+
from .login import MockBotocoreClient
10+
11+
BOTO_ERR = "ERROR:awscli_login.config:'MockBotocoreClient' " \
12+
"object has no attribute 'profile'"
13+
14+
root = logging.getLogger()
15+
16+
17+
class ErrorHandler(unittest.TestCase):
18+
19+
@patch("awscli_login.config.Profile")
20+
def _test_error_handler(self, args, mesg, patch):
21+
@error_handler()
22+
def func(profile, session):
23+
raise Exception(mesg)
24+
25+
func(args, MockBotocoreClient())
26+
27+
def _test_log_level(self, verbose: int, level):
28+
self._test_error_handler(Namespace(verbose=verbose), "I am the law!")
29+
self.assertEqual(root.level, level)
30+
31+
def test_error_handler_logs_exception(self):
32+
""" Ensure error_handler logs exception. """
33+
mesg = "First and only exception."
34+
with self.assertLogs() as cm:
35+
self._test_error_handler(Namespace(verbose=0), mesg)
36+
37+
self.assertEqual(cm.output, [
38+
f"ERROR:awscli_login.config:{mesg}",
39+
])
40+
41+
def test_error_handler_logging_level_warn(self):
42+
""" error_nandler sets log level to WARN w/o verbose flag. """
43+
self._test_log_level(0, logging.WARN)
44+
45+
# Regression test #260
46+
def test_error_handler_logging_level_info(self):
47+
""" error_nandler sets log level to INFO w/one verbose flag. """
48+
self._test_log_level(1, logging.INFO)
49+
50+
# Regression test #260
51+
def test_error_handler_logging_level_debug(self):
52+
""" error_nandler sets log level to DEBUG w/two verbose flag. """
53+
self._test_log_level(2, logging.DEBUG)
54+
55+
# Regression test #260
56+
def test_error_handler_logging_level_notset(self):
57+
""" error_nandler sets log level to NOTSET w/three verbose flag. """
58+
self._test_log_level(3, logging.NOTSET)

0 commit comments

Comments
 (0)