aboutsummaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorGravatar Peter Korsgaard <peter@korsgaard.com>2018-12-02 08:15:26 +0100
committerGravatar Peter Korsgaard <peter@korsgaard.com>2018-12-02 08:16:10 +0100
commit13c43455a05b036002e79808ca1c8e0d91d7871b (patch)
tree147ddbfc5486085018bb527de1a43961fc8ee1ca /support
parent2e08c7398a47b414c288ea516514adac3edf00fb (diff)
parent0393f5d34433e34e49ff7ce0fb998735453ed4fc (diff)
downloadbuildroot-13c43455a05b036002e79808ca1c8e0d91d7871b.tar.gz
buildroot-13c43455a05b036002e79808ca1c8e0d91d7871b.tar.bz2
Merge branch 'next'
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Diffstat (limited to 'support')
-rw-r--r--support/dependencies/check-host-gzip.mk3
-rwxr-xr-xsupport/dependencies/check-host-gzip.sh21
-rwxr-xr-xsupport/dependencies/check-host-tar.sh9
-rwxr-xr-xsupport/kconfig/merge_config.sh12
-rw-r--r--support/kconfig/patches/20-merge_config.sh-Allow-to-define-config-prefix.patch31
-rw-r--r--support/kconfig/patches/21-Avoid-false-positive-matches-from-comment-lines.patch32
-rw-r--r--support/kconfig/patches/series2
-rwxr-xr-xsupport/scripts/check-bin-arch4
-rwxr-xr-xsupport/scripts/check-host-rpath3
-rwxr-xr-xsupport/testing/tests/package/copy-sample-script-to-target.sh7
-rw-r--r--support/testing/tests/package/sample_python_argh.py10
-rw-r--r--support/testing/tests/package/sample_python_attrs.py15
-rw-r--r--support/testing/tests/package/sample_python_autobahn.py1
-rw-r--r--support/testing/tests/package/sample_python_automat.py27
-rw-r--r--support/testing/tests/package/sample_python_bitstring.py6
-rw-r--r--support/testing/tests/package/sample_python_cbor_dec.py10
-rw-r--r--support/testing/tests/package/sample_python_cbor_enc.py14
-rw-r--r--support/testing/tests/package/sample_python_click.py12
-rw-r--r--support/testing/tests/package/sample_python_constantly.py19
-rw-r--r--support/testing/tests/package/sample_python_crossbar.py3
-rw-r--r--support/testing/tests/package/sample_python_cryptography.py3
-rw-r--r--support/testing/tests/package/sample_python_incremental.py3
-rw-r--r--support/testing/tests/package/sample_python_passlib.py5
-rw-r--r--support/testing/tests/package/sample_python_pexpect.py8
-rw-r--r--support/testing/tests/package/sample_python_pynacl.py3
-rw-r--r--support/testing/tests/package/sample_python_pyyaml_dec.py10
-rw-r--r--support/testing/tests/package/sample_python_pyyaml_enc.py14
-rw-r--r--support/testing/tests/package/sample_python_service_identity.py2
-rw-r--r--support/testing/tests/package/sample_python_subprocess32.py6
-rw-r--r--support/testing/tests/package/sample_python_treq.py16
-rw-r--r--support/testing/tests/package/sample_python_twisted.py9
-rw-r--r--support/testing/tests/package/sample_python_txaio_asyncio.py3
-rw-r--r--support/testing/tests/package/sample_python_txaio_twisted.py3
-rw-r--r--support/testing/tests/package/sample_python_txtorcon.py1
-rw-r--r--support/testing/tests/package/sample_python_ubjson_dec.py10
-rw-r--r--support/testing/tests/package/sample_python_ubjson_enc.py14
-rw-r--r--support/testing/tests/package/test_python.py56
-rw-r--r--support/testing/tests/package/test_python_argh.py45
-rw-r--r--support/testing/tests/package/test_python_attrs.py21
-rw-r--r--support/testing/tests/package/test_python_autobahn.py29
-rw-r--r--support/testing/tests/package/test_python_automat.py23
-rw-r--r--support/testing/tests/package/test_python_bitstring.py21
-rw-r--r--support/testing/tests/package/test_python_cbor.py23
-rw-r--r--support/testing/tests/package/test_python_click.py44
-rw-r--r--support/testing/tests/package/test_python_constantly.py21
-rw-r--r--support/testing/tests/package/test_python_crossbar.py14
-rw-r--r--support/testing/tests/package/test_python_cryptography.py33
-rw-r--r--support/testing/tests/package/test_python_incremental.py33
-rw-r--r--support/testing/tests/package/test_python_passlib.py23
-rw-r--r--support/testing/tests/package/test_python_pexpect.py21
-rw-r--r--support/testing/tests/package/test_python_pynacl.py27
-rw-r--r--support/testing/tests/package/test_python_pyyaml.py23
-rw-r--r--support/testing/tests/package/test_python_service_identity.py23
-rw-r--r--support/testing/tests/package/test_python_subprocess32.py11
-rw-r--r--support/testing/tests/package/test_python_treq.py29
-rw-r--r--support/testing/tests/package/test_python_twisted.py35
-rw-r--r--support/testing/tests/package/test_python_txaio.py30
-rw-r--r--support/testing/tests/package/test_python_txtorcon.py31
-rw-r--r--support/testing/tests/package/test_python_ubjson.py23
-rw-r--r--support/testing/tests/package/test_rust.py78
60 files changed, 891 insertions, 177 deletions
diff --git a/support/dependencies/check-host-gzip.mk b/support/dependencies/check-host-gzip.mk
new file mode 100644
index 0000000000..bf9a369a7d
--- /dev/null
+++ b/support/dependencies/check-host-gzip.mk
@@ -0,0 +1,3 @@
+ifeq (,$(call suitable-host-package,gzip))
+BR2_GZIP_HOST_DEPENDENCY = host-gzip
+endif
diff --git a/support/dependencies/check-host-gzip.sh b/support/dependencies/check-host-gzip.sh
new file mode 100755
index 0000000000..5f344c5f9b
--- /dev/null
+++ b/support/dependencies/check-host-gzip.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+candidate="$1" # ignored
+
+gzip="$(which gzip)"
+if [ ! -x "${gzip}" ]; then
+ # echo nothing: no suitable gzip found
+ exit 1
+fi
+
+# gzip displays its version string on stdout
+# pigz displays its version string on stderr
+version="$("${gzip}" --version 2>&1)"
+case "${version}" in
+ (*pigz*)
+ # echo nothing: no suitable gzip found
+ exit 1
+ ;;
+esac
+
+printf "%s" "${gzip}"
diff --git a/support/dependencies/check-host-tar.sh b/support/dependencies/check-host-tar.sh
index 0857307396..934cb61299 100755
--- a/support/dependencies/check-host-tar.sh
+++ b/support/dependencies/check-host-tar.sh
@@ -20,10 +20,11 @@ major=`echo "$version" | cut -d. -f1`
minor=`echo "$version" | cut -d. -f2`
bugfix=`echo "$version" | cut -d. -f3`
version_bsd=`$tar --version | grep 'bsdtar'`
-if [ ! -z "${version_bsd}" ] ; then
- # mark as invalid version - not all command line options are available
- major=0
- minor=0
+
+# BSD tar does not have all the command-line options
+if [ -n "${version_bsd}" ] ; then
+ # echo nothing: no suitable tar found
+ exit 1
fi
# Minimal version = 1.27 (previous versions do not correctly unpack archives
diff --git a/support/kconfig/merge_config.sh b/support/kconfig/merge_config.sh
index 50de5114dc..14917806a3 100755
--- a/support/kconfig/merge_config.sh
+++ b/support/kconfig/merge_config.sh
@@ -34,12 +34,16 @@ usage() {
echo " -r list redundant entries when merging fragments"
echo " -O dir to put generated output files. Consider setting \$KCONFIG_CONFIG instead."
echo " -e colon-separated list of br2-external trees to use (optional)"
+ echo
+ echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_
+ environment variable."
}
RUNMAKE=true
ALLTARGET=alldefconfig
WARNREDUN=false
OUTPUT=.
+CONFIG_PREFIX=${CONFIG_-CONFIG_}
while true; do
case $1 in
@@ -105,7 +109,9 @@ if [ ! -r "$INITFILE" ]; then
fi
MERGE_LIST=$*
-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
+SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
+SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
+
TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
echo "Using $INITFILE as base"
@@ -118,7 +124,7 @@ for MERGE_FILE in $MERGE_LIST ; do
echo "The merge file '$MERGE_FILE' does not exist. Exit." >&2
exit 1
fi
- CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
+ CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
for CFG in $CFG_LIST ; do
grep -q -w $CFG $TMP_FILE || continue
@@ -161,7 +167,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $EXTERNAL_ARG $OUTPUT_ARG $ALLTARGET
# Check all specified config values took (might have missed-dependency issues)
-for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
+for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG")
diff --git a/support/kconfig/patches/20-merge_config.sh-Allow-to-define-config-prefix.patch b/support/kconfig/patches/20-merge_config.sh-Allow-to-define-config-prefix.patch
new file mode 100644
index 0000000000..645043b163
--- /dev/null
+++ b/support/kconfig/patches/20-merge_config.sh-Allow-to-define-config-prefix.patch
@@ -0,0 +1,31 @@
+Index: kconfig/merge_config.sh
+===================================================================
+--- kconfig.orig/merge_config.sh
++++ kconfig/merge_config.sh
+@@ -34,12 +34,16 @@ usage() {
+ echo " -r list redundant entries when merging fragments"
+ echo " -O dir to put generated output files. Consider setting \$KCONFIG_CONFIG instead."
+ echo " -e colon-separated list of br2-external trees to use (optional)"
++ echo
++ echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_
++ environment variable."
+ }
+
+ RUNMAKE=true
+ ALLTARGET=alldefconfig
+ WARNREDUN=false
+ OUTPUT=.
++CONFIG_PREFIX=${CONFIG_-CONFIG_}
+
+ while true; do
+ case $1 in
+@@ -105,7 +109,8 @@ if [ ! -r "$INITFILE" ]; then
+ fi
+
+ MERGE_LIST=$*
+-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
++SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/p"
++
+ TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
+
+ echo "Using $INITFILE as base"
diff --git a/support/kconfig/patches/21-Avoid-false-positive-matches-from-comment-lines.patch b/support/kconfig/patches/21-Avoid-false-positive-matches-from-comment-lines.patch
new file mode 100644
index 0000000000..c11144e47e
--- /dev/null
+++ b/support/kconfig/patches/21-Avoid-false-positive-matches-from-comment-lines.patch
@@ -0,0 +1,32 @@
+Index: kconfig/merge_config.sh
+===================================================================
+--- kconfig.orig/merge_config.sh
++++ kconfig/merge_config.sh
+@@ -109,7 +109,8 @@ if [ ! -r "$INITFILE" ]; then
+ fi
+
+ MERGE_LIST=$*
+-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/p"
++SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
++SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
+
+ TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
+
+@@ -123,7 +124,7 @@ for MERGE_FILE in $MERGE_LIST ; do
+ echo "The merge file '$MERGE_FILE' does not exist. Exit." >&2
+ exit 1
+ fi
+- CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
++ CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
+
+ for CFG in $CFG_LIST ; do
+ grep -q -w $CFG $TMP_FILE || continue
+@@ -166,7 +167,7 @@ make KCONFIG_ALLCONFIG=$TMP_FILE $EXTERN
+
+
+ # Check all specified config values took (might have missed-dependency issues)
+-for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
++for CFG in $(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $TMP_FILE); do
+
+ REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
+ ACTUAL_VAL=$(grep -w -e "$CFG" "$KCONFIG_CONFIG")
diff --git a/support/kconfig/patches/series b/support/kconfig/patches/series
index e136de7937..e5a6f69d8f 100644
--- a/support/kconfig/patches/series
+++ b/support/kconfig/patches/series
@@ -8,3 +8,5 @@
17-backport-kecho.patch
18-merge-config.sh-create-temporary-files-in-tmp.patch
19-merge_config.sh-add-br2-external-support.patch
+20-merge_config.sh-Allow-to-define-config-prefix.patch
+21-Avoid-false-positive-matches-from-comment-lines.patch
diff --git a/support/scripts/check-bin-arch b/support/scripts/check-bin-arch
index 7f97696735..66b8d89932 100755
--- a/support/scripts/check-bin-arch
+++ b/support/scripts/check-bin-arch
@@ -20,6 +20,10 @@ declare -a IGNORES=(
# pru-software-support) legitimately install ELF binaries that
# are not for the target architecture
"/usr/share"
+
+ # Skip files in /lib/grub, since it is possible to have it
+ # for a different architecture (e.g. i386 grub on x86_64).
+ "/lib/grub"
)
while getopts p:l:r:a:i: OPT ; do
diff --git a/support/scripts/check-host-rpath b/support/scripts/check-host-rpath
index 169628decb..6c5767da05 100755
--- a/support/scripts/check-host-rpath
+++ b/support/scripts/check-host-rpath
@@ -63,7 +63,8 @@ check_elf_has_rpath() {
for dir in ${rpath//:/ }; do
# Remove duplicate and trailing '/' for proper match
dir="$( sed -r -e 's:/+:/:g; s:/$::;' <<<"${dir}" )"
- [ "${dir}" = "${hostdir}/lib" -o "${dir}" = "\$ORIGIN/../lib" ] && return 0
+ [ "${dir}" = "${hostdir}/lib" ] && return 0
+ [ "${dir}" = "\$ORIGIN/../lib" ] && return 0
done
done < <( readelf -d "${file}" \
|sed -r -e '/.* \(R(UN)?PATH\) +Library r(un)?path: \[(.+)\]$/!d' \
diff --git a/support/testing/tests/package/copy-sample-script-to-target.sh b/support/testing/tests/package/copy-sample-script-to-target.sh
new file mode 100755
index 0000000000..6448a80d6d
--- /dev/null
+++ b/support/testing/tests/package/copy-sample-script-to-target.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+set -e
+
+shift
+for file in "$@"; do
+ cp -f "${file}" "${TARGET_DIR}/root/"
+done
diff --git a/support/testing/tests/package/sample_python_argh.py b/support/testing/tests/package/sample_python_argh.py
new file mode 100644
index 0000000000..48247bf604
--- /dev/null
+++ b/support/testing/tests/package/sample_python_argh.py
@@ -0,0 +1,10 @@
+import argh
+
+
+@argh.arg("foo", help="help for foo")
+@argh.arg("--bar", help="help for bar")
+def main(foo, bar=False):
+ print("{}, {}".format(foo, bar))
+
+
+argh.dispatch_command(main)
diff --git a/support/testing/tests/package/sample_python_attrs.py b/support/testing/tests/package/sample_python_attrs.py
new file mode 100644
index 0000000000..f224944914
--- /dev/null
+++ b/support/testing/tests/package/sample_python_attrs.py
@@ -0,0 +1,15 @@
+import attr
+
+
+@attr.s
+class Obj(object):
+ x = attr.ib()
+ y = attr.ib(default=1)
+
+
+obj1 = Obj(2)
+assert(obj1.x == 2)
+assert(obj1.y == 1)
+obj2 = Obj(3, 4)
+assert(obj2.x == 3)
+assert(obj2.y == 4)
diff --git a/support/testing/tests/package/sample_python_autobahn.py b/support/testing/tests/package/sample_python_autobahn.py
new file mode 100644
index 0000000000..8189b6a6b3
--- /dev/null
+++ b/support/testing/tests/package/sample_python_autobahn.py
@@ -0,0 +1 @@
+import autobahn.wamp # noqa
diff --git a/support/testing/tests/package/sample_python_automat.py b/support/testing/tests/package/sample_python_automat.py
new file mode 100644
index 0000000000..baf536f993
--- /dev/null
+++ b/support/testing/tests/package/sample_python_automat.py
@@ -0,0 +1,27 @@
+from automat import MethodicalMachine
+
+
+class Led(object):
+ _machine = MethodicalMachine()
+
+ @_machine.state()
+ def led_on(self):
+ "led is on"
+
+ @_machine.state(initial=True)
+ def led_off(self):
+ "led is off"
+
+ @_machine.input()
+ def turn_on(self):
+ "turn the led on"
+
+ @_machine.output()
+ def _light(self):
+ print("light")
+
+ led_off.upon(turn_on, enter=led_on, outputs=[_light])
+
+
+led = Led()
+led.turn_on()
diff --git a/support/testing/tests/package/sample_python_bitstring.py b/support/testing/tests/package/sample_python_bitstring.py
new file mode 100644
index 0000000000..2cc10dba65
--- /dev/null
+++ b/support/testing/tests/package/sample_python_bitstring.py
@@ -0,0 +1,6 @@
+import bitstring
+
+value = bitstring.BitArray("uint:12=42")
+assert(value.hex == "02a")
+assert(value.bin == "000000101010")
+assert(value.uint == 42)
diff --git a/support/testing/tests/package/sample_python_cbor_dec.py b/support/testing/tests/package/sample_python_cbor_dec.py
new file mode 100644
index 0000000000..5ca5e3aa7c
--- /dev/null
+++ b/support/testing/tests/package/sample_python_cbor_dec.py
@@ -0,0 +1,10 @@
+import cbor
+
+with open("/tmp/data.cbor", "rb") as f:
+ serialized = f.read()
+data = cbor.loads(serialized)
+print(data)
+assert(data["name"] == "python-cbor")
+assert(data["versions"] == ["1", "2"])
+assert(data["group"]["is_a_package"] is True)
+assert(data["group"]["value"] == 42)
diff --git a/support/testing/tests/package/sample_python_cbor_enc.py b/support/testing/tests/package/sample_python_cbor_enc.py
new file mode 100644
index 0000000000..1bde92bb9f
--- /dev/null
+++ b/support/testing/tests/package/sample_python_cbor_enc.py
@@ -0,0 +1,14 @@
+import cbor
+
+data = {
+ "name": "python-cbor",
+ "versions": ["1", "2"],
+ "group": {
+ "is_a_package": True,
+ "value": 42
+ }
+}
+serialized = cbor.dumps(data)
+print(serialized)
+with open("/tmp/data.cbor", "wb") as f:
+ f.write(serialized)
diff --git a/support/testing/tests/package/sample_python_click.py b/support/testing/tests/package/sample_python_click.py
new file mode 100644
index 0000000000..759868d087
--- /dev/null
+++ b/support/testing/tests/package/sample_python_click.py
@@ -0,0 +1,12 @@
+import click
+
+
+@click.command()
+@click.argument("foo")
+@click.option("--bar", is_flag=True, help="help for bar")
+def main(foo, bar):
+ click.echo("{}, {}".format(foo, bar))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/support/testing/tests/package/sample_python_constantly.py b/support/testing/tests/package/sample_python_constantly.py
new file mode 100644
index 0000000000..570cf85b23
--- /dev/null
+++ b/support/testing/tests/package/sample_python_constantly.py
@@ -0,0 +1,19 @@
+from constantly import ValueConstant, Values
+
+
+class RESULT(Values):
+ OK = ValueConstant(0)
+ FAIL = ValueConstant(-1)
+
+ @classmethod
+ def get(cls, rc):
+ if rc == 0:
+ return cls.OK
+ else:
+ return cls.FAIL
+
+
+print(list(RESULT.iterconstants()))
+assert(RESULT.OK < RESULT.FAIL)
+assert(RESULT.OK.value > RESULT.FAIL.value)
+assert(RESULT.get(-5) == RESULT.FAIL)
diff --git a/support/testing/tests/package/sample_python_crossbar.py b/support/testing/tests/package/sample_python_crossbar.py
new file mode 100644
index 0000000000..3695fe92c0
--- /dev/null
+++ b/support/testing/tests/package/sample_python_crossbar.py
@@ -0,0 +1,3 @@
+import crossbar
+
+crossbar.run(["version"])
diff --git a/support/testing/tests/package/sample_python_cryptography.py b/support/testing/tests/package/sample_python_cryptography.py
new file mode 100644
index 0000000000..ec9883dc64
--- /dev/null
+++ b/support/testing/tests/package/sample_python_cryptography.py
@@ -0,0 +1,3 @@
+from cryptography.fernet import Fernet
+key = Fernet.generate_key()
+f = Fernet(key)
diff --git a/support/testing/tests/package/sample_python_incremental.py b/support/testing/tests/package/sample_python_incremental.py
new file mode 100644
index 0000000000..b6e2aa803c
--- /dev/null
+++ b/support/testing/tests/package/sample_python_incremental.py
@@ -0,0 +1,3 @@
+import incremental
+v = incremental.Version("package", 1, 2, 3, release_candidate=4)
+assert(str(v) == "[package, version 1.2.3rc4]")
diff --git a/support/testing/tests/package/sample_python_passlib.py b/support/testing/tests/package/sample_python_passlib.py
new file mode 100644
index 0000000000..3ab348b9e4
--- /dev/null
+++ b/support/testing/tests/package/sample_python_passlib.py
@@ -0,0 +1,5 @@
+from passlib.hash import pbkdf2_sha256
+
+hash = pbkdf2_sha256.hash("password")
+assert(pbkdf2_sha256.verify("passWord", hash) is False)
+assert(pbkdf2_sha256.verify("password", hash) is True)
diff --git a/support/testing/tests/package/sample_python_pexpect.py b/support/testing/tests/package/sample_python_pexpect.py
new file mode 100644
index 0000000000..cfe395fc29
--- /dev/null
+++ b/support/testing/tests/package/sample_python_pexpect.py
@@ -0,0 +1,8 @@
+import pexpect
+
+p = pexpect.spawn(["login"])
+p.expect("login:")
+p.sendline("wrong")
+p.expect("Password:")
+p.sendline("wrong")
+p.expect("Login incorrect")
diff --git a/support/testing/tests/package/sample_python_pynacl.py b/support/testing/tests/package/sample_python_pynacl.py
new file mode 100644
index 0000000000..d17c50ebe5
--- /dev/null
+++ b/support/testing/tests/package/sample_python_pynacl.py
@@ -0,0 +1,3 @@
+import nacl.utils
+
+nonce = nacl.utils.random(16)
diff --git a/support/testing/tests/package/sample_python_pyyaml_dec.py b/support/testing/tests/package/sample_python_pyyaml_dec.py
new file mode 100644
index 0000000000..9ab8931197
--- /dev/null
+++ b/support/testing/tests/package/sample_python_pyyaml_dec.py
@@ -0,0 +1,10 @@
+import yaml
+
+with open("/tmp/data.yml", "rb") as f:
+ serialized = f.read()
+data = yaml.load(serialized)
+print(data)
+assert(data["name"] == "python-pyyaml")
+assert(data["versions"] == ["1", "2"])
+assert(data["group"]["is_a_package"] is True)
+assert(data["group"]["value"] == 42)
diff --git a/support/testing/tests/package/sample_python_pyyaml_enc.py b/support/testing/tests/package/sample_python_pyyaml_enc.py
new file mode 100644
index 0000000000..30759949e2
--- /dev/null
+++ b/support/testing/tests/package/sample_python_pyyaml_enc.py
@@ -0,0 +1,14 @@
+import yaml
+
+data = {
+ "name": "python-pyyaml",
+ "versions": ["1", "2"],
+ "group": {
+ "is_a_package": True,
+ "value": 42
+ }
+}
+serialized = yaml.dump(data, default_flow_style=False)
+print(serialized)
+with open("/tmp/data.yml", "w") as f:
+ f.write(serialized)
diff --git a/support/testing/tests/package/sample_python_service_identity.py b/support/testing/tests/package/sample_python_service_identity.py
new file mode 100644
index 0000000000..3184b6c580
--- /dev/null
+++ b/support/testing/tests/package/sample_python_service_identity.py
@@ -0,0 +1,2 @@
+from service_identity import VerificationError # noqa
+from service_identity.pyopenssl import verify_hostname # noqa
diff --git a/support/testing/tests/package/sample_python_subprocess32.py b/support/testing/tests/package/sample_python_subprocess32.py
new file mode 100644
index 0000000000..8579745cc8
--- /dev/null
+++ b/support/testing/tests/package/sample_python_subprocess32.py
@@ -0,0 +1,6 @@
+import subprocess32
+
+output = subprocess32.check_output(["ls", "-l", "/dev/null"])
+print(output)
+assert("/dev/null" in output)
+assert("No such" not in output)
diff --git a/support/testing/tests/package/sample_python_treq.py b/support/testing/tests/package/sample_python_treq.py
new file mode 100644
index 0000000000..974fdcd8e1
--- /dev/null
+++ b/support/testing/tests/package/sample_python_treq.py
@@ -0,0 +1,16 @@
+from twisted.internet import reactor
+import treq
+
+
+def done(response):
+ print(response.code)
+ reactor.stop()
+
+
+def err(fail):
+ print(fail.value)
+ reactor.stop()
+
+
+treq.get("https://localhost").addCallback(done).addErrback(err)
+reactor.run()
diff --git a/support/testing/tests/package/sample_python_twisted.py b/support/testing/tests/package/sample_python_twisted.py
new file mode 100644
index 0000000000..47d6c5debc
--- /dev/null
+++ b/support/testing/tests/package/sample_python_twisted.py
@@ -0,0 +1,9 @@
+from twisted.internet import protocol, reactor, endpoints
+
+
+class F(protocol.Factory):
+ pass
+
+
+endpoints.serverFromString(reactor, "tcp:1234").listen(F())
+reactor.run()
diff --git a/support/testing/tests/package/sample_python_txaio_asyncio.py b/support/testing/tests/package/sample_python_txaio_asyncio.py
new file mode 100644
index 0000000000..77f11ed807
--- /dev/null
+++ b/support/testing/tests/package/sample_python_txaio_asyncio.py
@@ -0,0 +1,3 @@
+import txaio
+txaio.use_asyncio()
+f0 = txaio.create_future()
diff --git a/support/testing/tests/package/sample_python_txaio_twisted.py b/support/testing/tests/package/sample_python_txaio_twisted.py
new file mode 100644
index 0000000000..13ea82a961
--- /dev/null
+++ b/support/testing/tests/package/sample_python_txaio_twisted.py
@@ -0,0 +1,3 @@
+import txaio
+txaio.use_twisted()
+f0 = txaio.create_future()
diff --git a/support/testing/tests/package/sample_python_txtorcon.py b/support/testing/tests/package/sample_python_txtorcon.py
new file mode 100644
index 0000000000..c4a2ae6f5b
--- /dev/null
+++ b/support/testing/tests/package/sample_python_txtorcon.py
@@ -0,0 +1 @@
+import txtorcon # noqa
diff --git a/support/testing/tests/package/sample_python_ubjson_dec.py b/support/testing/tests/package/sample_python_ubjson_dec.py
new file mode 100644
index 0000000000..12ccdfd587
--- /dev/null
+++ b/support/testing/tests/package/sample_python_ubjson_dec.py
@@ -0,0 +1,10 @@
+import ubjson
+
+with open("/tmp/data.json", "rb") as f:
+ serialized = f.read()
+data = ubjson.loadb(serialized)
+print(data)
+assert(data["name"] == "python-ubjson")
+assert(data["versions"] == ["1", "2"])
+assert(data["group"]["is_a_package"] is True)
+assert(data["group"]["value"] == 42)
diff --git a/support/testing/tests/package/sample_python_ubjson_enc.py b/support/testing/tests/package/sample_python_ubjson_enc.py
new file mode 100644
index 0000000000..9a2140ef85
--- /dev/null
+++ b/support/testing/tests/package/sample_python_ubjson_enc.py
@@ -0,0 +1,14 @@
+import ubjson
+
+data = {
+ "name": "python-ubjson",
+ "versions": ["1", "2"],
+ "group": {
+ "is_a_package": True,
+ "value": 42
+ }
+}
+serialized = ubjson.dumpb(data)
+print(serialized)
+with open("/tmp/data.json", "wb") as f:
+ f.write(serialized)
diff --git a/support/testing/tests/package/test_python.py b/support/testing/tests/package/test_python.py
index 26cf49947b..c422bdbf50 100644
--- a/support/testing/tests/package/test_python.py
+++ b/support/testing/tests/package/test_python.py
@@ -68,3 +68,59 @@ class TestPython3(TestPythonBase):
self.math_floor_test()
self.libc_time_test()
self.zlib_test()
+
+
+class TestPythonPackageBase(TestPythonBase):
+ """Common class to test a python package.
+
+ Build an image containing the scripts listed in sample_scripts, start the
+ emulator, login to it and for each sample script in the image run the python
+ interpreter passing the name of the script and check the status code is 0.
+
+ Each test case that inherits from this class must have:
+ __test__ = True - to let nose2 know that it is a test case
+ config - defconfig fragment with the packages to run the test
+ It also can have:
+ sample_scripts - list of scripts to add to the image and run on the target
+ timeout - timeout to the script to run when the default from the
+ test infra is not enough
+ When custom commands need be issued on the target the method
+ run_sample_scripts can be overridden.
+ """
+
+ __test__ = False
+ config_sample_scripts = \
+ """
+ BR2_ROOTFS_POST_BUILD_SCRIPT="{}"
+ BR2_ROOTFS_POST_SCRIPT_ARGS="{}"
+ """.format(infra.filepath("tests/package/copy-sample-script-to-target.sh"),
+ "{sample_scripts}")
+ sample_scripts = None
+ timeout = -1
+
+ def __init__(self, names):
+ """Add the scripts to the target in build time."""
+ super(TestPythonPackageBase, self).__init__(names)
+ if self.sample_scripts:
+ scripts = [infra.filepath(s) for s in self.sample_scripts]
+ self.config += self.config_sample_scripts.format(sample_scripts=" ".join(scripts))
+
+ def check_sample_scripts_exist(self):
+ """Check the scripts were really added to the image."""
+ scripts = [os.path.basename(s) for s in self.sample_scripts]
+ cmd = "md5sum " + " ".join(scripts)
+ _, exit_code = self.emulator.run(cmd)
+ self.assertEqual(exit_code, 0)
+
+ def run_sample_scripts(self):
+ """Run each script previously added to the image."""
+ for script in self.sample_scripts:
+ cmd = self.interpreter + " " + os.path.basename(script)
+ _, exit_code = self.emulator.run(cmd, timeout=self.timeout)
+ self.assertEqual(exit_code, 0)
+
+ def test_run(self):
+ """Test a python package."""
+ self.login()
+ self.check_sample_scripts_exist()
+ self.run_sample_scripts()
diff --git a/support/testing/tests/package/test_python_argh.py b/support/testing/tests/package/test_python_argh.py
new file mode 100644
index 0000000000..de4b4cbe74
--- /dev/null
+++ b/support/testing/tests/package/test_python_argh.py
@@ -0,0 +1,45 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonArgh(TestPythonPackageBase):
+ config = TestPythonPackageBase.config
+ sample_scripts = ["tests/package/sample_python_argh.py"]
+
+ def run_sample_scripts(self):
+ cmd = self.interpreter + " sample_python_argh.py -h"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertIn("usage:", output[0])
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_argh.py 123"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertEqual(output[0], "123, False")
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_argh.py --bar 456"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertEqual(output[0], "456, True")
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_argh.py"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertIn("usage:", output[0])
+ self.assertEqual(exit_code, 2)
+
+
+class TestPythonPy2Argh(TestPythonArgh):
+ __test__ = True
+ config = TestPythonArgh.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_ARGH=y
+ """
+
+
+class TestPythonPy3Argh(TestPythonArgh):
+ __test__ = True
+ config = TestPythonArgh.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_ARGH=y
+ """
diff --git a/support/testing/tests/package/test_python_attrs.py b/support/testing/tests/package/test_python_attrs.py
new file mode 100644
index 0000000000..9f597034ae
--- /dev/null
+++ b/support/testing/tests/package/test_python_attrs.py
@@ -0,0 +1,21 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Attrs(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_ATTRS=y
+ """
+ sample_scripts = ["tests/package/sample_python_attrs.py"]
+
+
+class TestPythonPy3Attrs(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_ATTRS=y
+ """
+ sample_scripts = ["tests/package/sample_python_attrs.py"]
diff --git a/support/testing/tests/package/test_python_autobahn.py b/support/testing/tests/package/test_python_autobahn.py
index 2bc0f0cccf..af1f617d6d 100644
--- a/support/testing/tests/package/test_python_autobahn.py
+++ b/support/testing/tests/package/test_python_autobahn.py
@@ -1,32 +1,21 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-class TestPythonAutobahn(TestPythonBase):
- def import_test(self):
- cmd = self.interpreter + " -c 'import autobahn.wamp'"
- _, exit_code = self.emulator.run(cmd)
- self.assertEqual(exit_code, 0)
-
-
-class TestPythonPy2Autobahn(TestPythonAutobahn):
- config = TestPythonBase.config + \
+class TestPythonPy2Autobahn(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_AUTOBAHN=y
"""
+ sample_scripts = ["tests/package/sample_python_autobahn.py"]
- def test_run(self):
- self.login()
- self.import_test()
-
-class TestPythonPy3Autobahn(TestPythonAutobahn):
- config = TestPythonBase.config + \
+class TestPythonPy3Autobahn(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_AUTOBAHN=y
"""
-
- def test_run(self):
- self.login()
- self.import_test()
+ sample_scripts = ["tests/package/sample_python_autobahn.py"]
diff --git a/support/testing/tests/package/test_python_automat.py b/support/testing/tests/package/test_python_automat.py
new file mode 100644
index 0000000000..00a7ed6526
--- /dev/null
+++ b/support/testing/tests/package/test_python_automat.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Automat(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_AUTOMAT=y
+ """
+ sample_scripts = ["tests/package/sample_python_automat.py"]
+ timeout = 30
+
+
+class TestPythonPy3Automat(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_AUTOMAT=y
+ """
+ sample_scripts = ["tests/package/sample_python_automat.py"]
+ timeout = 30
diff --git a/support/testing/tests/package/test_python_bitstring.py b/support/testing/tests/package/test_python_bitstring.py
new file mode 100644
index 0000000000..63b3fdb69c
--- /dev/null
+++ b/support/testing/tests/package/test_python_bitstring.py
@@ -0,0 +1,21 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Bitstring(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_BITSTRING=y
+ """
+ sample_scripts = ["tests/package/sample_python_bitstring.py"]
+
+
+class TestPythonPy3Bitstring(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_BITSTRING=y
+ """
+ sample_scripts = ["tests/package/sample_python_bitstring.py"]
diff --git a/support/testing/tests/package/test_python_cbor.py b/support/testing/tests/package/test_python_cbor.py
new file mode 100644
index 0000000000..9da3503763
--- /dev/null
+++ b/support/testing/tests/package/test_python_cbor.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Cbor(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_CBOR=y
+ """
+ sample_scripts = ["tests/package/sample_python_cbor_enc.py",
+ "tests/package/sample_python_cbor_dec.py"]
+
+
+class TestPythonPy3Cbor(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_CBOR=y
+ """
+ sample_scripts = ["tests/package/sample_python_cbor_enc.py",
+ "tests/package/sample_python_cbor_dec.py"]
diff --git a/support/testing/tests/package/test_python_click.py b/support/testing/tests/package/test_python_click.py
new file mode 100644
index 0000000000..db57d3aa9f
--- /dev/null
+++ b/support/testing/tests/package/test_python_click.py
@@ -0,0 +1,44 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonClick(TestPythonPackageBase):
+ sample_scripts = ["tests/package/sample_python_click.py"]
+
+ def run_sample_scripts(self):
+ cmd = self.interpreter + " sample_python_click.py --help"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertIn("Usage:", output[0])
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_click.py 123"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertEqual(output[0], "123, False")
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_click.py --bar 456"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertEqual(output[0], "456, True")
+ self.assertEqual(exit_code, 0)
+
+ cmd = self.interpreter + " sample_python_click.py"
+ output, exit_code = self.emulator.run(cmd)
+ self.assertIn("Usage:", output[0])
+ self.assertEqual(exit_code, 2)
+
+
+class TestPythonPy2Click(TestPythonClick):
+ __test__ = True
+ config = TestPythonClick.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_CLICK=y
+ """
+
+
+class TestPythonPy3Click(TestPythonClick):
+ __test__ = True
+ config = TestPythonClick.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_CLICK=y
+ """
diff --git a/support/testing/tests/package/test_python_constantly.py b/support/testing/tests/package/test_python_constantly.py
new file mode 100644
index 0000000000..5be01c4f8c
--- /dev/null
+++ b/support/testing/tests/package/test_python_constantly.py
@@ -0,0 +1,21 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Constantly(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_CONSTANTLY=y
+ """
+ sample_scripts = ["tests/package/sample_python_constantly.py"]
+
+
+class TestPythonPy3Constantly(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_CONSTANTLY=y
+ """
+ sample_scripts = ["tests/package/sample_python_constantly.py"]
diff --git a/support/testing/tests/package/test_python_crossbar.py b/support/testing/tests/package/test_python_crossbar.py
new file mode 100644
index 0000000000..2d7b739b5c
--- /dev/null
+++ b/support/testing/tests/package/test_python_crossbar.py
@@ -0,0 +1,14 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy3Crossbar(TestPythonPackageBase):
+ __test__ = True
+ # use haveged to generate enough entropy so crossbar -> pynacl -> libsodium don't hang waiting for /dev/random
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_CROSSBAR=y
+ BR2_PACKAGE_HAVEGED=y
+ """
+ sample_scripts = ["tests/package/sample_python_crossbar.py"]
+ timeout = 60
diff --git a/support/testing/tests/package/test_python_cryptography.py b/support/testing/tests/package/test_python_cryptography.py
index 78c3ef55b3..14515fcd2d 100644
--- a/support/testing/tests/package/test_python_cryptography.py
+++ b/support/testing/tests/package/test_python_cryptography.py
@@ -1,34 +1,23 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-class TestPythonCryptography(TestPythonBase):
- def fernet_test(self, timeout=-1):
- cmd = self.interpreter + " -c 'from cryptography.fernet import Fernet;"
- cmd += "key = Fernet.generate_key();"
- cmd += "f = Fernet(key)'"
- _, exit_code = self.emulator.run(cmd, timeout)
- self.assertEqual(exit_code, 0)
-
-
-class TestPythonPy2Cryptography(TestPythonCryptography):
- config = TestPythonBase.config + \
+class TestPythonPy2Cryptography(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
"""
+ sample_scripts = ["tests/package/sample_python_cryptography.py"]
+ timeout = 40
- def test_run(self):
- self.login()
- self.fernet_test(40)
-
-class TestPythonPy3Cryptography(TestPythonCryptography):
- config = TestPythonBase.config + \
+class TestPythonPy3Cryptography(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_CRYPTOGRAPHY=y
"""
-
- def test_run(self):
- self.login()
- self.fernet_test(40)
+ sample_scripts = ["tests/package/sample_python_cryptography.py"]
+ timeout = 40
diff --git a/support/testing/tests/package/test_python_incremental.py b/support/testing/tests/package/test_python_incremental.py
index acf743cdd2..49800d8937 100644
--- a/support/testing/tests/package/test_python_incremental.py
+++ b/support/testing/tests/package/test_python_incremental.py
@@ -1,34 +1,23 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-class TestPythonIncremental(TestPythonBase):
- def str_test(self):
- cmd = self.interpreter + " -c 'import incremental;"
- cmd += "v = incremental.Version(\"package\", 1, 2, 3, release_candidate=4);"
- cmd += "assert(str(v) == \"[package, version 1.2.3rc4]\")'"
- _, exit_code = self.emulator.run(cmd, timeout=30)
- self.assertEqual(exit_code, 0)
-
-
-class TestPythonPy2Incremental(TestPythonIncremental):
- config = TestPythonBase.config + \
+class TestPythonPy2Incremental(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_INCREMENTAL=y
"""
+ sample_scripts = ["tests/package/sample_python_incremental.py"]
+ timeout = 30
- def test_run(self):
- self.login()
- self.str_test()
-
-class TestPythonPy3Incremental(TestPythonIncremental):
- config = TestPythonBase.config + \
+class TestPythonPy3Incremental(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_INCREMENTAL=y
"""
-
- def test_run(self):
- self.login()
- self.str_test()
+ sample_scripts = ["tests/package/sample_python_incremental.py"]
+ timeout = 30
diff --git a/support/testing/tests/package/test_python_passlib.py b/support/testing/tests/package/test_python_passlib.py
new file mode 100644
index 0000000000..7c85882bf8
--- /dev/null
+++ b/support/testing/tests/package/test_python_passlib.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Passlib(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_PASSLIB=y
+ """
+ sample_scripts = ["tests/package/sample_python_passlib.py"]
+ timeout = 30
+
+
+class TestPythonPy3Passlib(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_PASSLIB=y
+ """
+ sample_scripts = ["tests/package/sample_python_passlib.py"]
+ timeout = 30
diff --git a/support/testing/tests/package/test_python_pexpect.py b/support/testing/tests/package/test_python_pexpect.py
new file mode 100644
index 0000000000..ba31cdbdbe
--- /dev/null
+++ b/support/testing/tests/package/test_python_pexpect.py
@@ -0,0 +1,21 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Pexpect(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_PEXPECT=y
+ """
+ sample_scripts = ["tests/package/sample_python_pexpect.py"]
+
+
+class TestPythonPy3Pexpect(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_PEXPECT=y
+ """
+ sample_scripts = ["tests/package/sample_python_pexpect.py"]
diff --git a/support/testing/tests/package/test_python_pynacl.py b/support/testing/tests/package/test_python_pynacl.py
new file mode 100644
index 0000000000..729a887552
--- /dev/null
+++ b/support/testing/tests/package/test_python_pynacl.py
@@ -0,0 +1,27 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Pynacl(TestPythonPackageBase):
+ __test__ = True
+ # use haveged to generate enough entropy so pynacl -> libsodium don't hang waiting for /dev/random
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_PYNACL=y
+ BR2_PACKAGE_HAVEGED=y
+ """
+ sample_scripts = ["tests/package/sample_python_pynacl.py"]
+ timeout = 10
+
+
+class TestPythonPy3Pynacl(TestPythonPackageBase):
+ __test__ = True
+ # use haveged to generate enough entropy so pynacl -> libsodium don't hang waiting for /dev/random
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_PYNACL=y
+ BR2_PACKAGE_HAVEGED=y
+ """
+ sample_scripts = ["tests/package/sample_python_pynacl.py"]
+ timeout = 10
diff --git a/support/testing/tests/package/test_python_pyyaml.py b/support/testing/tests/package/test_python_pyyaml.py
new file mode 100644
index 0000000000..cd45a57b86
--- /dev/null
+++ b/support/testing/tests/package/test_python_pyyaml.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Pyyaml(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_PYYAML=y
+ """
+ sample_scripts = ["tests/package/sample_python_pyyaml_enc.py",
+ "tests/package/sample_python_pyyaml_dec.py"]
+
+
+class TestPythonPy3Pyyaml(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_PYYAML=y
+ """
+ sample_scripts = ["tests/package/sample_python_pyyaml_enc.py",
+ "tests/package/sample_python_pyyaml_dec.py"]
diff --git a/support/testing/tests/package/test_python_service_identity.py b/support/testing/tests/package/test_python_service_identity.py
new file mode 100644
index 0000000000..6aeb77de8c
--- /dev/null
+++ b/support/testing/tests/package/test_python_service_identity.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2ServiceIdentity(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_SERVICE_IDENTITY=y
+ """
+ sample_scripts = ["tests/package/sample_python_service_identity.py"]
+ timeout = 30
+
+
+class TestPythonPy3ServiceIdentity(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_SERVICE_IDENTITY=y
+ """
+ sample_scripts = ["tests/package/sample_python_service_identity.py"]
+ timeout = 30
diff --git a/support/testing/tests/package/test_python_subprocess32.py b/support/testing/tests/package/test_python_subprocess32.py
new file mode 100644
index 0000000000..d2878046d1
--- /dev/null
+++ b/support/testing/tests/package/test_python_subprocess32.py
@@ -0,0 +1,11 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Subprocess32(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_SUBPROCESS32=y
+ """
+ sample_scripts = ["tests/package/sample_python_subprocess32.py"]
diff --git a/support/testing/tests/package/test_python_treq.py b/support/testing/tests/package/test_python_treq.py
new file mode 100644
index 0000000000..7108b95696
--- /dev/null
+++ b/support/testing/tests/package/test_python_treq.py
@@ -0,0 +1,29 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonTreq(TestPythonPackageBase):
+ sample_scripts = ["tests/package/sample_python_treq.py"]
+
+ def run_sample_scripts(self):
+ cmd = self.interpreter + " sample_python_treq.py"
+ output, exit_code = self.emulator.run(cmd, timeout=20)
+ self.assertIn("Connection refused", output[0])
+ self.assertEqual(exit_code, 0)
+
+
+class TestPythonPy2Treq(TestPythonTreq):
+ __test__ = True
+ config = TestPythonTreq.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_TREQ=y
+ """
+
+
+class TestPythonPy3Treq(TestPythonTreq):
+ __test__ = True
+ config = TestPythonTreq.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_TREQ=y
+ """
diff --git a/support/testing/tests/package/test_python_twisted.py b/support/testing/tests/package/test_python_twisted.py
index ccee07d61d..a458ee45dd 100644
--- a/support/testing/tests/package/test_python_twisted.py
+++ b/support/testing/tests/package/test_python_twisted.py
@@ -1,25 +1,16 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-TEST_SCRIPT = """
-from twisted.internet import protocol, reactor, endpoints
-class F(protocol.Factory):
- pass
-endpoints.serverFromString(reactor, "tcp:1234").listen(F())
-reactor.run()
-"""
+class TestPythonTwisted(TestPythonPackageBase):
+ config = TestPythonPackageBase.config
+ sample_scripts = ["tests/package/sample_python_twisted.py"]
-class TestPythonTwisted(TestPythonBase):
- def import_test(self):
- cmd = "printf '{}' > test.py".format(TEST_SCRIPT)
- _, exit_code = self.emulator.run(cmd)
- self.assertEqual(exit_code, 0)
-
+ def run_sample_scripts(self):
cmd = "netstat -ltn 2>/dev/null | grep 0.0.0.0:1234"
_, exit_code = self.emulator.run(cmd)
self.assertEqual(exit_code, 1)
- cmd = self.interpreter + " test.py &"
+ cmd = self.interpreter + " sample_python_twisted.py &"
# give some time to setup the server
cmd += "sleep 30"
_, exit_code = self.emulator.run(cmd, timeout=35)
@@ -31,24 +22,18 @@ class TestPythonTwisted(TestPythonBase):
class TestPythonPy2Twisted(TestPythonTwisted):
- config = TestPythonBase.config + \
+ __test__ = True
+ config = TestPythonTwisted.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_TWISTED=y
"""
- def test_run(self):
- self.login()
- self.import_test()
-
class TestPythonPy3Twisted(TestPythonTwisted):
- config = TestPythonBase.config + \
+ __test__ = True
+ config = TestPythonTwisted.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_TWISTED=y
"""
-
- def test_run(self):
- self.login()
- self.import_test()
diff --git a/support/testing/tests/package/test_python_txaio.py b/support/testing/tests/package/test_python_txaio.py
index af93e031b5..7bff1bc23c 100644
--- a/support/testing/tests/package/test_python_txaio.py
+++ b/support/testing/tests/package/test_python_txaio.py
@@ -1,34 +1,22 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-class TestPythonPy2Txaio(TestPythonBase):
- config = TestPythonBase.config + \
+class TestPythonPy2Txaio(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_TXAIO=y
BR2_PACKAGE_PYTHON_TWISTED=y
"""
+ sample_scripts = ["tests/package/sample_python_txaio_twisted.py"]
- def test_run(self):
- self.login()
- cmd = self.interpreter + " -c 'import txaio;"
- cmd += "txaio.use_twisted();"
- cmd += "f0 = txaio.create_future()'"
- _, exit_code = self.emulator.run(cmd)
- self.assertEqual(exit_code, 0)
-
-class TestPythonPy3Txaio(TestPythonBase):
- config = TestPythonBase.config + \
+class TestPythonPy3Txaio(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_TXAIO=y
"""
-
- def test_run(self):
- self.login()
- cmd = self.interpreter + " -c 'import txaio;"
- cmd += "txaio.use_asyncio();"
- cmd += "f0 = txaio.create_future()'"
- _, exit_code = self.emulator.run(cmd)
- self.assertEqual(exit_code, 0)
+ sample_scripts = ["tests/package/sample_python_txaio_asyncio.py"]
diff --git a/support/testing/tests/package/test_python_txtorcon.py b/support/testing/tests/package/test_python_txtorcon.py
index 352ff67825..1ac2f6919a 100644
--- a/support/testing/tests/package/test_python_txtorcon.py
+++ b/support/testing/tests/package/test_python_txtorcon.py
@@ -1,32 +1,23 @@
-from tests.package.test_python import TestPythonBase
+from tests.package.test_python import TestPythonPackageBase
-class TestPythonTxtorcon(TestPythonBase):
- def import_test(self):
- cmd = self.interpreter + " -c 'import txtorcon'"
- _, exit_code = self.emulator.run(cmd, timeout=30)
- self.assertEqual(exit_code, 0)
-
-
-class TestPythonPy2Txtorcon(TestPythonTxtorcon):
- config = TestPythonBase.config + \
+class TestPythonPy2Txtorcon(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON=y
BR2_PACKAGE_PYTHON_TXTORCON=y
"""
+ sample_scripts = ["tests/package/sample_python_txtorcon.py"]
+ timeout = 30
- def test_run(self):
- self.login()
- self.import_test()
-
-class TestPythonPy3Txtorcon(TestPythonTxtorcon):
- config = TestPythonBase.config + \
+class TestPythonPy3Txtorcon(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
"""
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_TXTORCON=y
"""
-
- def test_run(self):
- self.login()
- self.import_test()
+ sample_scripts = ["tests/package/sample_python_txtorcon.py"]
+ timeout = 30
diff --git a/support/testing/tests/package/test_python_ubjson.py b/support/testing/tests/package/test_python_ubjson.py
new file mode 100644
index 0000000000..85c707e292
--- /dev/null
+++ b/support/testing/tests/package/test_python_ubjson.py
@@ -0,0 +1,23 @@
+from tests.package.test_python import TestPythonPackageBase
+
+
+class TestPythonPy2Ubjson(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON=y
+ BR2_PACKAGE_PYTHON_UBJSON=y
+ """
+ sample_scripts = ["tests/package/sample_python_ubjson_enc.py",
+ "tests/package/sample_python_ubjson_dec.py"]
+
+
+class TestPythonPy3Ubjson(TestPythonPackageBase):
+ __test__ = True
+ config = TestPythonPackageBase.config + \
+ """
+ BR2_PACKAGE_PYTHON3=y
+ BR2_PACKAGE_PYTHON_UBJSON=y
+ """
+ sample_scripts = ["tests/package/sample_python_ubjson_enc.py",
+ "tests/package/sample_python_ubjson_dec.py"]
diff --git a/support/testing/tests/package/test_rust.py b/support/testing/tests/package/test_rust.py
index 2dc814f99d..9854c3692e 100644
--- a/support/testing/tests/package/test_rust.py
+++ b/support/testing/tests/package/test_rust.py
@@ -57,25 +57,25 @@ class TestRustBase(infra.basetest.BRTest):
class TestRustBin(TestRustBase):
config = \
- """
- BR2_arm=y
- BR2_cortex_a9=y
- BR2_ARM_ENABLE_NEON=y
- BR2_ARM_ENABLE_VFP=y
- BR2_TOOLCHAIN_EXTERNAL=y
- BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
- BR2_SYSTEM_DHCP="eth0"
- BR2_LINUX_KERNEL=y
- BR2_LINUX_KERNEL_CUSTOM_VERSION=y
- BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.3"
- BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
- BR2_LINUX_KERNEL_DTS_SUPPORT=y
- BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
- BR2_TARGET_ROOTFS_CPIO=y
- # BR2_TARGET_ROOTFS_TAR is not set
- BR2_PACKAGE_HOST_CARGO=y
- BR2_PACKAGE_HOST_RUSTC=y
- """
+ """
+ BR2_arm=y
+ BR2_cortex_a9=y
+ BR2_ARM_ENABLE_NEON=y
+ BR2_ARM_ENABLE_VFP=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
+ BR2_SYSTEM_DHCP="eth0"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.3"
+ BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
+ BR2_LINUX_KERNEL_DTS_SUPPORT=y
+ BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
+ BR2_TARGET_ROOTFS_CPIO=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ BR2_PACKAGE_HOST_CARGO=y
+ BR2_PACKAGE_HOST_RUSTC=y
+ """
def test_run(self):
self.build_test_prog()
@@ -86,26 +86,26 @@ class TestRustBin(TestRustBase):
class TestRust(TestRustBase):
config = \
- """
- BR2_arm=y
- BR2_cortex_a9=y
- BR2_ARM_ENABLE_NEON=y
- BR2_ARM_ENABLE_VFP=y
- BR2_TOOLCHAIN_EXTERNAL=y
- BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
- BR2_SYSTEM_DHCP="eth0"
- BR2_LINUX_KERNEL=y
- BR2_LINUX_KERNEL_CUSTOM_VERSION=y
- BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.3"
- BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
- BR2_LINUX_KERNEL_DTS_SUPPORT=y
- BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
- BR2_TARGET_ROOTFS_CPIO=y
- # BR2_TARGET_ROOTFS_TAR is not set
- BR2_PACKAGE_HOST_CARGO=y
- BR2_PACKAGE_HOST_RUSTC=y
- BR2_PACKAGE_HOST_RUST=y
- """
+ """
+ BR2_arm=y
+ BR2_cortex_a9=y
+ BR2_ARM_ENABLE_NEON=y
+ BR2_ARM_ENABLE_VFP=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
+ BR2_SYSTEM_DHCP="eth0"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.3"
+ BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
+ BR2_LINUX_KERNEL_DTS_SUPPORT=y
+ BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
+ BR2_TARGET_ROOTFS_CPIO=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ BR2_PACKAGE_HOST_CARGO=y
+ BR2_PACKAGE_HOST_RUSTC=y
+ BR2_PACKAGE_HOST_RUST=y
+ """
def test_run(self):
self.build_test_prog()