2 # Performs various tests and analysises on images
4 # Copyright (C) 2007, 2008 Koen Kooi <koen@openembedded.org>
6 # The current features are:
7 # 1) dump a list of installed packages
8 # 2) dump a list of sizes of installed packages
9 # 3) dependency graphs of installed packages
12 # * http://dominion.thruhere.net/koen/cms/the-testlab-strikes-again
13 # * http://dominion.thruhere.net/koen/cms/package-relations-inside-images
17 # * log information to a server for safekeeping
18 # * use mtn certs to record this info into the scm
19 # * add test suite to run on the target device
22 # Needs 'dot', 'ipkg-cl'
25 if [ -e ${IMAGE_ROOTFS}/etc/ipkg ] ; then
27 TESTLAB_DIR="${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-testlab"
28 mkdir -p ${TESTLAB_DIR}/
29 ls -laR ${IMAGE_ROOTFS} >& ${TESTLAB_DIR}/files-in-image.txt
31 echo > ${TESTLAB_DIR}/installed-packages.txt
32 echo -e "digraph depends {\n node [shape=plaintext]" > ${TESTLAB_DIR}/depends.dot
34 for pkg in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} list_installed | awk '{print $1}') ; do
35 ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Filename | awk -F: '{print $2}' >> ${TESTLAB_DIR}/installed-packages.txt
37 for depends in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Depends) ; do
38 echo "$pkg OPP $depends;" | grep -v "(" | grep -v ")" | grep -v Depends | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
41 for recommends in $(ipkg-cl -f ${IMAGE_ROOTFS}/etc/ipkg -o ${IMAGE_ROOTFS} info $pkg | grep Recom) ; do
42 echo "$pkg OPP $recommends [style=dotted];" | grep -v "(" | grep -v ")" | grep -v Recom | sed -e 's:,::g' -e 's:-:_:g' -e 's:\.:_:g' -e 's:+::g' |sed 's:OPP:->:g' >> ${TESTLAB_DIR}/depends.dot
46 echo "}" >> ${TESTLAB_DIR}/depends.dot
48 grep -v kernel_2 ${TESTLAB_DIR}/depends.dot | grep -v kernel_image > ${TESTLAB_DIR}/depends-nokernel.dot
49 grep -v libc6 ${TESTLAB_DIR}/depends-nokernel.dot | grep -v libgcc > ${TESTLAB_DIR}/depends-nokernel-nolibc.dot
50 grep -v update_ ${TESTLAB_DIR}/depends-nokernel-nolibc.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot
51 grep -v kernel_module ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot > ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot
53 #dot has some library troubles when run under fakeroot, uncomment at your own risk
54 #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies.png ${TESTLAB_DIR}/depends.dot
55 #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc.png ${TESTLAB_DIR}/depends-nokernel-nolibc.dot
56 #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate.dot
57 #dot -Tpng -o ${TESTLAB_DIR}/image-dependencies-nokernel-nolibc-noupdate-nomodules.png ${TESTLAB_DIR}/depends-nokernel-nolibc-noupdate-nomodules.dot
59 for file in $(cat ${TESTLAB_DIR}/installed-packages.txt) ; do
60 du -k $(find ${DEPLOY_DIR_IPK} -name "$file")
61 done | grep "\.ipk" | sed -e s:${DEPLOY_DIR_IPK}::g | sort -n -r | awk '{print $1 "\tKiB " $2}' > ${TESTLAB_DIR}/installed-package-sizes.txt
65 IMAGE_POSTPROCESS_COMMAND += " do_testlab ;"