buildroot/support/testing/tests/package/test_jq.py

63 lines
2.1 KiB
Python

import json
import os
import infra.basetest
class TestJq(infra.basetest.BRTest):
rootfs_overlay = \
infra.filepath("tests/package/test_jq/rootfs-overlay")
config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
f"""
BR2_PACKAGE_JQ=y
BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
BR2_TARGET_ROOTFS_CPIO=y
# BR2_TARGET_ROOTFS_TAR is not set
"""
def test_run(self):
cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
self.emulator.boot(arch="armv5",
kernel="builtin",
options=["-initrd", cpio_file])
self.emulator.login()
# Check the program can execute.
self.assertRunOk("jq --version")
# Run jq on examples extracted from JSON RFC:
# https://www.rfc-editor.org/rfc/rfc8259.txt
for i in range(1, 6):
fname = f"ex13-{i}.json"
cmd = f"jq -M '.' {fname}"
self.assertRunOk(cmd)
# Check the execution fails on a non JSON file.
cmd = "jq -M '.' broken.json"
_, ret = self.emulator.run(cmd)
self.assertNotEqual(ret, 0)
# Check an execution of a simple query. Note that output is a
# JSON (quoted) string.
cmd = "jq -M '.[1].City' ex13-2.json"
out, ret = self.emulator.run(cmd)
self.assertEqual(ret, 0)
self.assertEqual(out[0], '"SUNNYVALE"')
# Run the same query with the -r option, to output raw text
# (i.e. strings without quotes).
cmd = "jq -r -M '.[1].City' ex13-2.json"
out, ret = self.emulator.run(cmd)
self.assertEqual(ret, 0)
self.assertEqual(out[0], "SUNNYVALE")
# Print the ex13-2.json file as compact JSON (with option -c).
cmd = "jq -c -M '.' ex13-2.json"
out, ret = self.emulator.run(cmd)
self.assertEqual(ret, 0)
# We reload this compact string using the Python json parser,
# to test interoperability. We check the same element as in
# previous queries in the Python object.
json_data = json.loads(out[0])
self.assertEqual(json_data[1]["City"], "SUNNYVALE")