Module Name: src Committed By: jakllsch Date: Tue Jan 5 17:22:39 UTC 2016
Modified Files: src/distrib/sets/lists/debug: mi src/distrib/sets/lists/tests: mi src/etc/mtree: NetBSD.dist.tests src/tests/dev: Makefile Added Files: src/tests/dev/usb: Makefile t_hid.c src/tests/dev/usb/libhid: Makefile Log Message: Add some tests for the kernel HID parser. To generate a diff of this commit: cvs rdiff -u -r1.139 -r1.140 src/distrib/sets/lists/debug/mi cvs rdiff -u -r1.658 -r1.659 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.123 -r1.124 src/etc/mtree/NetBSD.dist.tests cvs rdiff -u -r1.9 -r1.10 src/tests/dev/Makefile cvs rdiff -u -r0 -r1.1 src/tests/dev/usb/Makefile src/tests/dev/usb/t_hid.c cvs rdiff -u -r0 -r1.1 src/tests/dev/usb/libhid/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/debug/mi diff -u src/distrib/sets/lists/debug/mi:1.139 src/distrib/sets/lists/debug/mi:1.140 --- src/distrib/sets/lists/debug/mi:1.139 Fri Jan 1 21:38:53 2016 +++ src/distrib/sets/lists/debug/mi Tue Jan 5 17:22:38 2016 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.139 2016/01/01 21:38:53 jakllsch Exp $ +# $NetBSD: mi,v 1.140 2016/01/05 17:22:38 jakllsch Exp $ ./etc/mtree/set.debug comp-sys-root ./usr/lib comp-sys-usr compatdir ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile @@ -1579,6 +1579,7 @@ ./usr/libdata/debug/usr/tests/dev/md/h_mdserv.debug tests-fs-debug debug,atf,rump ./usr/libdata/debug/usr/tests/dev/scsipi/t_cd.debug tests-fs-debug debug,atf,rump ./usr/libdata/debug/usr/tests/dev/sysmon/t_swwdog.debug tests-fs-debug debug,atf,rump +./usr/libdata/debug/usr/tests/dev/usb/t_hid.debug tests-fs-debug debug,atf,rump ./usr/libdata/debug/usr/tests/fs/ffs/h_ffs_server.debug tests-fs-debug debug,atf,rump ./usr/libdata/debug/usr/tests/fs/ffs/h_quota2_server.debug tests-obsolete obsolete,compattestfile ./usr/libdata/debug/usr/tests/fs/ffs/h_quota2_tests.debug tests-fs-debug debug,atf,rump Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.658 src/distrib/sets/lists/tests/mi:1.659 --- src/distrib/sets/lists/tests/mi:1.658 Fri Jan 1 21:38:54 2016 +++ src/distrib/sets/lists/tests/mi Tue Jan 5 17:22:38 2016 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.658 2016/01/01 21:38:54 jakllsch Exp $ +# $NetBSD: mi,v 1.659 2016/01/05 17:22:38 jakllsch Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -29,6 +29,7 @@ ./usr/libdata/debug/usr/tests/dev/md tests-fs-debug compattestfile,atf ./usr/libdata/debug/usr/tests/dev/scsipi tests-fs-debug compattestfile,atf ./usr/libdata/debug/usr/tests/dev/sysmon tests-fs-debug compattestfile,atf +./usr/libdata/debug/usr/tests/dev/usb tests-fs-debug compattestfile,atf ./usr/libdata/debug/usr/tests/fs tests-fs-debug compattestfile,atf ./usr/libdata/debug/usr/tests/fs/ffs tests-fs-debug compattestfile,atf ./usr/libdata/debug/usr/tests/fs/fifofs tests-fs-debug compattestfile,atf @@ -1372,6 +1373,10 @@ ./usr/tests/dev/sysmon/Kyuafile tests-fs-tests atf,rump,kyua ./usr/tests/dev/sysmon/t_swsensor tests-fs-tests atf,rump ./usr/tests/dev/sysmon/t_swwdog tests-fs-tests atf,rump +./usr/tests/dev/usb tests-fs-tests compattestfile,atf +./usr/tests/dev/usb/Atffile tests-fs-tests atf,rump +./usr/tests/dev/usb/Kyuafile tests-fs-tests atf,rump,kyua +./usr/tests/dev/usb/t_hid tests-fs-tests atf,rump ./usr/tests/examples tests-obsolete obsolete ./usr/tests/examples/Atffile tests-obsolete obsolete ./usr/tests/examples/t_asm tests-obsolete obsolete Index: src/etc/mtree/NetBSD.dist.tests diff -u src/etc/mtree/NetBSD.dist.tests:1.123 src/etc/mtree/NetBSD.dist.tests:1.124 --- src/etc/mtree/NetBSD.dist.tests:1.123 Fri Jan 1 21:38:54 2016 +++ src/etc/mtree/NetBSD.dist.tests Tue Jan 5 17:22:38 2016 @@ -1,4 +1,4 @@ -# $NetBSD: NetBSD.dist.tests,v 1.123 2016/01/01 21:38:54 jakllsch Exp $ +# $NetBSD: NetBSD.dist.tests,v 1.124 2016/01/05 17:22:38 jakllsch Exp $ ./usr/libdata/debug/usr/tests ./usr/libdata/debug/usr/tests/atf @@ -20,6 +20,7 @@ ./usr/libdata/debug/usr/tests/dev/md ./usr/libdata/debug/usr/tests/dev/scsipi ./usr/libdata/debug/usr/tests/dev/sysmon +./usr/libdata/debug/usr/tests/dev/usb ./usr/libdata/debug/usr/tests/fs ./usr/libdata/debug/usr/tests/fs/ffs ./usr/libdata/debug/usr/tests/fs/fifofs @@ -189,6 +190,7 @@ ./usr/tests/dev/raidframe ./usr/tests/dev/scsipi ./usr/tests/dev/sysmon +./usr/tests/dev/usb ./usr/tests/fs ./usr/tests/fs/cd9660 ./usr/tests/fs/ffs Index: src/tests/dev/Makefile diff -u src/tests/dev/Makefile:1.9 src/tests/dev/Makefile:1.10 --- src/tests/dev/Makefile:1.9 Mon Jun 22 00:05:23 2015 +++ src/tests/dev/Makefile Tue Jan 5 17:22:38 2016 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.9 2015/06/22 00:05:23 matt Exp $ +# $NetBSD: Makefile,v 1.10 2016/01/05 17:22:38 jakllsch Exp $ # .include <bsd.own.mk> @@ -7,7 +7,7 @@ TESTSDIR= ${TESTSBASE}/dev TESTS_SUBDIRS+= cgd raidframe .if (${MKRUMP} != "no") && !defined(BSD_MK_COMPAT_FILE) -TESTS_SUBDIRS+= audio md scsipi sysmon +TESTS_SUBDIRS+= audio md scsipi sysmon usb .endif Added files: Index: src/tests/dev/usb/Makefile diff -u /dev/null src/tests/dev/usb/Makefile:1.1 --- /dev/null Tue Jan 5 17:22:39 2016 +++ src/tests/dev/usb/Makefile Tue Jan 5 17:22:38 2016 @@ -0,0 +1,22 @@ +# $NetBSD: Makefile,v 1.1 2016/01/05 17:22:38 jakllsch Exp $ +# + +.include <bsd.own.mk> + +TESTSDIR= ${TESTSBASE}/dev/usb + +TESTS_C= t_hid + +CPPFLAGS.t_hid.c= -I${.CURDIR}/../../../sys/dev/usb + +SUBDIR= libhid +LIBHIDDIR!= cd ${.CURDIR}/libhid && ${PRINTOBJDIR} +LDFLAGS.t_hid+= -L${LIBHIDDIR} +LDADD.t_hid+= -Wl,--whole-archive -lrumpdev_hid -Wl,--no-whole-archive + +LDADD+= -lrump +LDADD+= -lrumpuser +LDADD+= -lrump +LDADD+= -lpthread + +.include <bsd.test.mk> Index: src/tests/dev/usb/t_hid.c diff -u /dev/null src/tests/dev/usb/t_hid.c:1.1 --- /dev/null Tue Jan 5 17:22:39 2016 +++ src/tests/dev/usb/t_hid.c Tue Jan 5 17:22:38 2016 @@ -0,0 +1,210 @@ +/* $NetBSD: t_hid.c,v 1.1 2016/01/05 17:22:38 jakllsch Exp $ */ + +/* + * Copyright (c) 2016 Jonathan A. Kollasch + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: t_hid.c,v 1.1 2016/01/05 17:22:38 jakllsch Exp $"); + +#include <machine/types.h> +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <atf-c.h> +#define hid_start_parse rumpns_hid_start_parse +#define hid_end_parse rumpns_hid_end_parse +#define hid_get_item rumpns_hid_get_item +#define hid_locate rumpns_hid_locate +#define hid_report_size rumpns_hid_report_size +#define hid_get_data rumpns_hid_get_data +#define hid_get_udata rumpns_hid_get_udata +#define uhidevdebug rumpns_uhidevdebug +#include <hid.h> + +#include "../../lib/libusbhid/hid_test_data.c" + +#define MYd_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== %d", (d)) + +#define MYld_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== %ld", (d)) + +#define MYu_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== %u", (d)) + +#define MYlu_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== %lu", (d)) + +#define MYx_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== 0x%x", (d)) + +#define MYlx_ATF_CHECK_EQ(d, v) \ + ATF_CHECK_EQ_MSG(d, v, "== 0x%lx", (d)) + +int uhidevdebug; + +ATF_TC(khid); + +ATF_TC_HEAD(khid, tc) +{ + + atf_tc_set_md_var(tc, "descr", "check kernel hid.c"); +} + +ATF_TC_BODY(khid, tc) +{ + int ret; + struct hid_item hi; + u_int32_t flags; + + uhidevdebug = 0; + + atf_tc_expect_fail("logical/physical range appears broken"); + + ret = hid_locate(range_test_report_descriptor, + sizeof(range_test_report_descriptor), 0xff000003, 0, hid_input, + &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 32); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 0); + MYx_ATF_CHECK_EQ(flags, 0); + MYd_ATF_CHECK_EQ(hi.logical_minimum, -2147483648); + MYd_ATF_CHECK_EQ(hi.logical_maximum, 2147483647); + MYd_ATF_CHECK_EQ(hi.physical_minimum, -2147483648); + MYd_ATF_CHECK_EQ(hi.physical_maximum, 2147483647); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report, + &hi.loc), -2147483648); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report, + &hi.loc), -1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report, + &hi.loc), 1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report, + &hi.loc), 2147483647); + + ret = hid_locate(range_test_report_descriptor, + sizeof(range_test_report_descriptor), 0xff000002, 0, hid_input, + &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 16); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 32); + MYx_ATF_CHECK_EQ(flags, 0); + MYd_ATF_CHECK_EQ(hi.logical_minimum, -32768); + MYd_ATF_CHECK_EQ(hi.logical_maximum, 32767); + MYd_ATF_CHECK_EQ(hi.physical_minimum, -32768); + MYd_ATF_CHECK_EQ(hi.physical_maximum, 32767); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report, + &hi.loc), -32768); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report, + &hi.loc), -1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report, + &hi.loc), 1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report, + &hi.loc), 32767); + + ret = hid_locate(range_test_report_descriptor, + sizeof(range_test_report_descriptor), 0xff000001, 0, hid_input, + &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 8); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 48); + MYx_ATF_CHECK_EQ(flags, 0); + MYd_ATF_CHECK_EQ(hi.logical_minimum, -128); + MYd_ATF_CHECK_EQ(hi.logical_maximum, 127); + MYd_ATF_CHECK_EQ(hi.physical_minimum, -128); + MYd_ATF_CHECK_EQ(hi.physical_maximum, 127); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_minimum_report, + &hi.loc), -128); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_negative_one_report, + &hi.loc), -1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_positive_one_report, + &hi.loc), 1); + MYld_ATF_CHECK_EQ(hid_get_data(range_test_maximum_report, + &hi.loc), 127); + + + ret = hid_locate(unsigned_range_test_report_descriptor, + sizeof(unsigned_range_test_report_descriptor), 0xff000013, 0, + hid_input, &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 32); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 0); + MYx_ATF_CHECK_EQ(flags, 0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report, + &hi.loc), 0x0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report, + &hi.loc), 0x1); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report, + &hi.loc), 0xfffffffe); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report, + &hi.loc), 0xffffffff); + + ret = hid_locate(unsigned_range_test_report_descriptor, + sizeof(unsigned_range_test_report_descriptor), 0xff000012, 0, + hid_input, &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 16); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 32); + MYx_ATF_CHECK_EQ(flags, 0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report, + &hi.loc), 0x0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report, + &hi.loc), 0x1); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report, + &hi.loc), 0xfffe); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report, + &hi.loc), 0xffff); + + ret = hid_locate(unsigned_range_test_report_descriptor, + sizeof(unsigned_range_test_report_descriptor), 0xff000011, 0, + hid_input, &hi.loc, &flags); + ATF_REQUIRE(ret > 0); + MYu_ATF_CHECK_EQ(hi.loc.size, 8); + MYu_ATF_CHECK_EQ(hi.loc.count, 1); + MYu_ATF_CHECK_EQ(hi.loc.pos, 48); + MYx_ATF_CHECK_EQ(flags, 0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_minimum_report, + &hi.loc), 0x0); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_positive_one_report, + &hi.loc), 0x1); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_negative_one_report, + &hi.loc), 0xfe); + MYlx_ATF_CHECK_EQ(hid_get_udata(unsigned_range_test_maximum_report, + &hi.loc), 0xff); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, khid); + + return atf_no_error(); +} + Index: src/tests/dev/usb/libhid/Makefile diff -u /dev/null src/tests/dev/usb/libhid/Makefile:1.1 --- /dev/null Tue Jan 5 17:22:39 2016 +++ src/tests/dev/usb/libhid/Makefile Tue Jan 5 17:22:39 2016 @@ -0,0 +1,16 @@ +# $NetBSD: Makefile,v 1.1 2016/01/05 17:22:39 jakllsch Exp $ +# + +.include <bsd.own.mk> + +RUMPTOP= ${NETBSDSRCDIR}/sys/rump +.PATH: ${.CURDIR}/../../../../sys/dev/usb + +LIB= rumpdev_hid +LIBISPRIVATE= #defined + +SRCS= hid.c + +.include "${RUMPTOP}/Makefile.rump" +.include <bsd.lib.mk> +.include <bsd.klinks.mk>