Skip to content

Commit 7821567

Browse files
Merge pull request #1355 from NVIDIA/dholt/fix-parse-manifest-typeerror-6394703
fix: handle non-dict parsed JSON in firmware version manifest parser
2 parents 8858399 + 2e08909 commit 7821567

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

roles/nvidia-dgx-firmware/files/parse_manifest.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import json
44

55
from collections import OrderedDict
6-
from sys import argv
6+
from sys import argv, exit
77

88

99
def return_json(payload):
@@ -173,6 +173,11 @@ def return_json(payload):
173173
manifest_json = json.loads(line)
174174
except ValueError:
175175
pass
176+
177+
if not isinstance(manifest_json, dict):
178+
print('No JSON could be loaded, is the container already running?')
179+
exit(1)
180+
176181
try:
177182
if manifest_json['ErrorWritingVersioning']:
178183
print('No JSON could be loaded, is the container already running?')
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import subprocess
2+
import sys
3+
import tempfile
4+
import unittest
5+
6+
from pathlib import Path
7+
8+
9+
SCRIPT = Path(__file__).resolve().parents[1] / 'files' / 'parse_manifest.py'
10+
11+
12+
class ParseManifestTest(unittest.TestCase):
13+
def test_parse_versioning_rejects_non_dict_json(self):
14+
with tempfile.TemporaryDirectory() as temp_dir:
15+
manifest = Path(temp_dir) / 'versioning.json'
16+
manifest.write_text('[1,2,3]\n')
17+
18+
result = subprocess.run(
19+
[sys.executable, str(SCRIPT), 'parse_versioning', str(manifest)],
20+
stdout=subprocess.PIPE,
21+
stderr=subprocess.PIPE,
22+
universal_newlines=True,
23+
)
24+
25+
self.assertEqual(result.returncode, 1)
26+
self.assertEqual(
27+
result.stdout,
28+
'No JSON could be loaded, is the container already running?\n',
29+
)
30+
self.assertEqual(result.stderr, '')
31+
32+
33+
if __name__ == '__main__':
34+
unittest.main()

0 commit comments

Comments
 (0)