Merge ~ack/maas:1773150-smartctl-replace-invalid-utf8 into maas:master

Proposed by Alberto Donato
Status: Merged
Approved by: Alberto Donato
Approved revision: 478edaa00d16ba64c78873d8f7d411c14d11bdb0
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~ack/maas:1773150-smartctl-replace-invalid-utf8
Merge into: maas:master
Diff against target: 63 lines (+16/-4)
2 files modified
src/metadataserver/builtin_scripts/testing_scripts/smartctl.py (+8/-4)
src/metadataserver/builtin_scripts/testing_scripts/tests/test_smartctl.py (+8/-0)
Reviewer Review Type Date Requested Status
MAAS Lander Needs Fixing
Adam Collard (community) Approve
Review via email: mp+438392@code.launchpad.net

Commit message

LP:1773150 replace invalid UTF-8 chars in smartctl output

To post a comment you must log in.
Revision history for this message
Adam Collard (adam-collard) :
review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b 1773150-smartctl-replace-invalid-utf8 lp:~ack/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: FAILED
LOG: http://maas-ci.internal:8080/job/maas-tester/2077/consoleText
COMMIT: 478edaa00d16ba64c78873d8f7d411c14d11bdb0

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/metadataserver/builtin_scripts/testing_scripts/smartctl.py b/src/metadataserver/builtin_scripts/testing_scripts/smartctl.py
2index a663aab..1cdb4a4 100755
3--- a/src/metadataserver/builtin_scripts/testing_scripts/smartctl.py
4+++ b/src/metadataserver/builtin_scripts/testing_scripts/smartctl.py
5@@ -66,7 +66,9 @@ def run_smartctl(blockdevice, args, device=None, output=False, **kwargs):
6 cmd += [blockdevice]
7 if output:
8 print("INFO: Running command: %s" % " ".join(cmd))
9- return check_output(cmd, timeout=TIMEOUT, **kwargs).decode()
10+ return check_output(cmd, timeout=TIMEOUT, **kwargs).decode(
11+ errors="replace"
12+ )
13
14
15 def run_storcli(args, output=False, **kwargs):
16@@ -78,7 +80,9 @@ def run_storcli(args, output=False, **kwargs):
17 cmd = ["sudo", "-n", storcli] + args
18 if output:
19 print("INFO: Running command: %s" % " ".join(cmd))
20- return check_output(cmd, timeout=TIMEOUT, **kwargs).decode()
21+ return check_output(cmd, timeout=TIMEOUT, **kwargs).decode(
22+ errors="replace"
23+ )
24
25
26 def make_device_name(blockdevice, device=None):
27@@ -188,7 +192,7 @@ def check_SMART_support(blockdevice, device=None):
28 )
29 raise
30 else:
31- output = e.output.decode()
32+ output = e.output.decode(errors="replace")
33
34 if (
35 re.search(
36@@ -281,7 +285,7 @@ def check_smartctl(blockdevice, device=None):
37 )
38 raise
39 else:
40- output = e.output.decode()
41+ output = e.output.decode(errors="replace")
42
43 print("SUCCESS: SMART validation has PASSED for: %s" % device_name)
44 if output is not None:
45diff --git a/src/metadataserver/builtin_scripts/testing_scripts/tests/test_smartctl.py b/src/metadataserver/builtin_scripts/testing_scripts/tests/test_smartctl.py
46index c7413af..ed0356d 100644
47--- a/src/metadataserver/builtin_scripts/testing_scripts/tests/test_smartctl.py
48+++ b/src/metadataserver/builtin_scripts/testing_scripts/tests/test_smartctl.py
49@@ -74,6 +74,14 @@ class TestRunSmartCTL(MAASTestCase):
50 )
51 self.assertThat(self.mock_print, MockCalledOnce())
52
53+ def test_output_invalid_utf8_replaced(self):
54+ # invalid UTF-8 input
55+ self.mock_check_output.return_value = b"foo\x99bar"
56+ self.assertEqual(
57+ "foo\ufffdbar",
58+ smartctl.run_smartctl(self.blockdevice, self.args, output=True),
59+ )
60+
61
62 class TestRunStorCLI(MAASTestCase):
63 def setUp(self):

Subscribers

People subscribed via source and target branches