diff options
| author | isaki <isaki@NetBSD.org> | 2022-08-13 07:22:40 +0000 |
|---|---|---|
| committer | isaki <isaki@NetBSD.org> | 2022-08-13 07:22:40 +0000 |
| commit | 67bad4eedab7069a7af9d51159c16f52fc2f469b (patch) | |
| tree | 0368e36494cd12d2b501c0ab8d58937df7c2ecf9 /tests/dev | |
| parent | cf53b4fd63c04f4a65987da685fc0eb87f16ca71 (diff) | |
audiotest: Add two tests for AUDIO_SETINFO after mmap.
These tests affect only standalone test, not atf.
Diffstat (limited to 'tests/dev')
| -rw-r--r-- | tests/dev/audio/audiotest.c | 102 |
1 files changed, 100 insertions, 2 deletions
diff --git a/tests/dev/audio/audiotest.c b/tests/dev/audio/audiotest.c index c08635f7ec9..b2cfc82f3b6 100644 --- a/tests/dev/audio/audiotest.c +++ b/tests/dev/audio/audiotest.c @@ -1,4 +1,4 @@ -/* $NetBSD: audiotest.c,v 1.26 2022/08/13 07:19:15 isaki Exp $ */ +/* $NetBSD: audiotest.c,v 1.27 2022/08/13 07:22:40 isaki Exp $ */ /* * Copyright (C) 2019 Tetsuya Isaki. All rights reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: audiotest.c,v 1.26 2022/08/13 07:19:15 isaki Exp $"); +__RCSID("$NetBSD: audiotest.c,v 1.27 2022/08/13 07:22:40 isaki Exp $"); #include <errno.h> #include <fcntl.h> @@ -5870,6 +5870,102 @@ DEF(AUDIO_SETINFO_gain_balance) XP_SYS_EQ(0, r); } +/* + * Changing track formats after mmap should fail. + */ +DEF(AUDIO_SETINFO_mmap_enc) +{ + struct audio_info ai; + void *ptr; + int fd; + int r; + + TEST("AUDIO_SETINFO_mmap"); + +#if !defined(NO_RUMP) + if (use_rump) { + XP_SKIP("rump doesn't support mmap"); + return; + } +#endif + + fd = OPEN(devaudio, O_WRONLY); + REQUIRED_SYS_OK(fd); + + ptr = MMAP(NULL, 1, PROT_WRITE, MAP_FILE, fd, 0); + XP_SYS_PTR(0, ptr); + + /* + * SETINFO after mmap should fail. + * NetBSD9 changes errno. + */ + AUDIO_INITINFO(&ai); + ai.play.channels = 2; + r = IOCTL(fd, AUDIO_SETINFO, &ai, "channels=2"); + if (netbsd < 9) { + XP_SYS_NG(EINVAL, r); + } else { + XP_SYS_NG(EIO, r); + } + + r = CLOSE(fd); + XP_SYS_EQ(0, r); + + reset_after_mmap(); +} + +/* + * Even after mmap, changing pause should succeed. + */ +DEF(AUDIO_SETINFO_mmap_pause) +{ + struct audio_info ai; + void *ptr; + int fd; + int r; + + TEST("AUDIO_SETINFO_mmap"); + +#if !defined(NO_RUMP) + if (use_rump) { + XP_SKIP("rump doesn't support mmap"); + return; + } +#endif + + fd = OPEN(devaudio, O_WRONLY); + REQUIRED_SYS_OK(fd); + + ptr = MMAP(NULL, 1, PROT_WRITE, MAP_FILE, fd, 0); + XP_SYS_PTR(0, ptr); + + /* SETINFO after mmap should fail */ + AUDIO_INITINFO(&ai); + ai.play.pause = 1; + r = IOCTL(fd, AUDIO_SETINFO, &ai, "set pause"); + XP_SYS_EQ(0, r); + + AUDIO_INITINFO(&ai); + r = IOCTL(fd, AUDIO_GETBUFINFO, &ai, "get pause"); + XP_SYS_EQ(0, r); + + XP_EQ(1, ai.play.pause); + + /* + * Unpause before close. Unless, subsequent audioplay(1) which use + * /dev/sound by default will pause... + */ + AUDIO_INITINFO(&ai); + ai.play.pause = 0; + r = IOCTL(fd, AUDIO_SETINFO, &ai, "reset pause"); + XP_SYS_EQ(0, r); + + r = CLOSE(fd); + XP_SYS_EQ(0, r); + + reset_after_mmap(); +} + #define NENC (AUDIO_ENCODING_AC3 + 1) #define NPREC (5) /* @@ -7221,6 +7317,8 @@ struct testentry testtable[] = { ENT(AUDIO_SETINFO_pause_RDWR_3), ENT(AUDIO_SETINFO_gain), ENT(AUDIO_SETINFO_gain_balance), +/**/ ENT(AUDIO_SETINFO_mmap_enc), // XXX rump doesn't support mmap +/**/ ENT(AUDIO_SETINFO_mmap_pause), // XXX rump doesn't support mmap ENT(AUDIO_GETENC_range), ENT(AUDIO_GETENC_error), ENT(AUDIO_ERROR_RDONLY), |
