mirror of
https://github.com/ARM-software/devlib.git
synced 2025-01-31 10:10:46 +00:00
61208ce2e0
Extend Target.read_tree_values() to handle notes that contain line breaks in their values. Underlying this method, is a call to grep -r '' /tree/root/ When files under that location contain multiple lines, grep will output each line prefixed with the path; e.g. a file "test" with the contents "one\n\ntwo\n" will be output by grep as: /tree/root/test: one /tree/root/test: /tree/root/test: two Previous implementation of read_tree_values() was assuming one value per line, and that the paths were unique. Since it wasn't checking for duplicate paths, it would simply override the earlier entries resulting with the value of "two" for test. This change ensure that such multiline values are now handled correctly, and the entire value is preserved. To keep compatibility with existing uses of read_tree_values(), the trailing new lines are stripped.
33 lines
880 B
Python
33 lines
880 B
Python
import os
|
|
import shutil
|
|
import tempfile
|
|
from unittest import TestCase
|
|
|
|
from devlib import LocalLinuxTarget
|
|
|
|
|
|
class TestReadTreeValues(TestCase):
|
|
|
|
def test_read_multiline_values(self):
|
|
data = {
|
|
'test1': '1',
|
|
'test2': '2\n\n',
|
|
'test3': '3\n\n4\n\n',
|
|
}
|
|
|
|
tempdir = tempfile.mkdtemp(prefix='devlib-test-')
|
|
for key, value in data.items():
|
|
path = os.path.join(tempdir, key)
|
|
with open(path, 'w') as wfh:
|
|
wfh.write(value)
|
|
|
|
t = LocalLinuxTarget(connection_settings={'unrooted': True})
|
|
raw_result = t.read_tree_values_flat(tempdir)
|
|
result = {os.path.basename(k): v for k, v in raw_result.items()}
|
|
|
|
shutil.rmtree(tempdir)
|
|
|
|
self.assertEqual({k: v.strip()
|
|
for k, v in data.items()},
|
|
result)
|