Revert "tests: modify alsa-time-test to use 'check' framework"

This reverts commit 1569601864.

Rethinking this, it makes more sense to not add this to the check
framework. This is mostly useful for exposing ALSA driver issues, and
it's handy to be able to build this as a standalone executable.
This commit is contained in:
Arun Raghavan 2012-11-05 17:41:53 +05:30
parent 7d97fe56c7
commit 700cd890a9
2 changed files with 51 additions and 73 deletions

View file

@ -530,8 +530,8 @@ gtk_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
alsa_time_test_SOURCES = tests/alsa-time-test.c alsa_time_test_SOURCES = tests/alsa-time-test.c
alsa_time_test_LDADD = $(AM_LDADD) $(ASOUNDLIB_LIBS) alsa_time_test_LDADD = $(AM_LDADD) $(ASOUNDLIB_LIBS)
alsa_time_test_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS) $(LIBCHECK_CFLAGS) alsa_time_test_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
alsa_time_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(LIBCHECK_LIBS) alsa_time_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS)
usergroup_test_SOURCES = tests/usergroup-test.c usergroup_test_SOURCES = tests/usergroup-test.c
usergroup_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINOR@.la libpulse.la libpulsecommon-@PA_MAJORMINOR@.la usergroup_test_LDADD = $(AM_LDADD) libpulsecore-@PA_MAJORMINOR@.la libpulse.la libpulsecommon-@PA_MAJORMINOR@.la

View file

@ -6,21 +6,17 @@
#include <inttypes.h> #include <inttypes.h>
#include <time.h> #include <time.h>
#include <check.h>
#include <alsa/asoundlib.h> #include <alsa/asoundlib.h>
static const char *dev;
static int cap;
static uint64_t timespec_us(const struct timespec *ts) { static uint64_t timespec_us(const struct timespec *ts) {
return return
ts->tv_sec * 1000000LLU + ts->tv_sec * 1000000LLU +
ts->tv_nsec / 1000LLU; ts->tv_nsec / 1000LLU;
} }
START_TEST (alsa_time_test) { int main(int argc, char *argv[]) {
int r; const char *dev;
int r, cap;
snd_pcm_hw_params_t *hwparams; snd_pcm_hw_params_t *hwparams;
snd_pcm_sw_params_t *swparams; snd_pcm_sw_params_t *swparams;
snd_pcm_status_t *status; snd_pcm_status_t *status;
@ -41,97 +37,100 @@ START_TEST (alsa_time_test) {
snd_pcm_status_alloca(&status); snd_pcm_status_alloca(&status);
r = clock_gettime(CLOCK_MONOTONIC, &start); r = clock_gettime(CLOCK_MONOTONIC, &start);
fail_unless(r == 0); assert(r == 0);
start_us = timespec_us(&start); start_us = timespec_us(&start);
dev = argc > 1 ? argv[1] : "front:AudioPCI";
cap = argc > 2 ? atoi(argv[2]) : 0;
if (cap == 0) if (cap == 0)
r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_PLAYBACK, 0); r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_PLAYBACK, 0);
else else
r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_CAPTURE, 0); r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_CAPTURE, 0);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_any(pcm, hwparams); r = snd_pcm_hw_params_any(pcm, hwparams);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_rate_resample(pcm, hwparams, 0); r = snd_pcm_hw_params_set_rate_resample(pcm, hwparams, 0);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_access(pcm, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); r = snd_pcm_hw_params_set_access(pcm, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_format(pcm, hwparams, SND_PCM_FORMAT_S16_LE); r = snd_pcm_hw_params_set_format(pcm, hwparams, SND_PCM_FORMAT_S16_LE);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_rate_near(pcm, hwparams, &rate, NULL); r = snd_pcm_hw_params_set_rate_near(pcm, hwparams, &rate, NULL);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_channels(pcm, hwparams, 2); r = snd_pcm_hw_params_set_channels(pcm, hwparams, 2);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_periods_integer(pcm, hwparams); r = snd_pcm_hw_params_set_periods_integer(pcm, hwparams);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_periods_near(pcm, hwparams, &periods, &dir); r = snd_pcm_hw_params_set_periods_near(pcm, hwparams, &periods, &dir);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_set_buffer_size_near(pcm, hwparams, &buffer_size); r = snd_pcm_hw_params_set_buffer_size_near(pcm, hwparams, &buffer_size);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params(pcm, hwparams); r = snd_pcm_hw_params(pcm, hwparams);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_current(pcm, hwparams); r = snd_pcm_hw_params_current(pcm, hwparams);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_current(pcm, swparams); r = snd_pcm_sw_params_current(pcm, swparams);
fail_unless(r == 0); assert(r == 0);
if (cap == 0) if (cap == 0)
r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 1); r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 1);
else else
r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 0); r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 0);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_set_period_event(pcm, swparams, 0); r = snd_pcm_sw_params_set_period_event(pcm, swparams, 0);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size); r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_set_start_threshold(pcm, swparams, buffer_size); r = snd_pcm_sw_params_set_start_threshold(pcm, swparams, buffer_size);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_get_boundary(swparams, &boundary); r = snd_pcm_sw_params_get_boundary(swparams, &boundary);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, boundary); r = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, boundary);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_set_tstamp_mode(pcm, swparams, SND_PCM_TSTAMP_ENABLE); r = snd_pcm_sw_params_set_tstamp_mode(pcm, swparams, SND_PCM_TSTAMP_ENABLE);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params(pcm, swparams); r = snd_pcm_sw_params(pcm, swparams);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_prepare(pcm); r = snd_pcm_prepare(pcm);
fail_unless(r == 0); assert(r == 0);
r = snd_pcm_sw_params_current(pcm, swparams); r = snd_pcm_sw_params_current(pcm, swparams);
fail_unless(r == 0); assert(r == 0);
/* fail_unless(snd_pcm_hw_params_is_monotonic(hwparams) > 0); */ /* assert(snd_pcm_hw_params_is_monotonic(hwparams) > 0); */
n_pollfd = snd_pcm_poll_descriptors_count(pcm); n_pollfd = snd_pcm_poll_descriptors_count(pcm);
fail_unless(n_pollfd > 0); assert(n_pollfd > 0);
pollfds = malloc(sizeof(struct pollfd) * n_pollfd); pollfds = malloc(sizeof(struct pollfd) * n_pollfd);
fail_unless(pollfds != NULL); assert(pollfds);
r = snd_pcm_poll_descriptors(pcm, pollfds, n_pollfd); r = snd_pcm_poll_descriptors(pcm, pollfds, n_pollfd);
fail_unless(r == n_pollfd); assert(r == n_pollfd);
if (cap) { if (cap) {
r = snd_pcm_start(pcm); r = snd_pcm_start(pcm);
fail_unless(r == 0); assert(r == 0);
} }
for (;;) { for (;;) {
@ -144,24 +143,24 @@ START_TEST (alsa_time_test) {
unsigned long long pos; unsigned long long pos;
r = poll(pollfds, n_pollfd, 0); r = poll(pollfds, n_pollfd, 0);
fail_unless(r >= 0); assert(r >= 0);
r = snd_pcm_poll_descriptors_revents(pcm, pollfds, n_pollfd, &revents); r = snd_pcm_poll_descriptors_revents(pcm, pollfds, n_pollfd, &revents);
fail_unless(r == 0); assert(r == 0);
if (cap == 0) if (cap == 0)
fail_unless((revents & ~POLLOUT) == 0); assert((revents & ~POLLOUT) == 0);
else else
fail_unless((revents & ~POLLIN) == 0); assert((revents & ~POLLIN) == 0);
avail = snd_pcm_avail(pcm); avail = snd_pcm_avail(pcm);
fail_unless(avail >= 0); assert(avail >= 0);
r = snd_pcm_status(pcm, status); r = snd_pcm_status(pcm, status);
fail_unless(r == 0); assert(r == 0);
/* This assertion fails from time to time. ALSA seems to be broken */ /* This assertion fails from time to time. ALSA seems to be broken */
/* fail_unless(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status)); */ /* assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status)); */
/* printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status)); */ /* printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status)); */
snd_pcm_status_get_htstamp(status, &timestamp); snd_pcm_status_get_htstamp(status, &timestamp);
@ -169,9 +168,9 @@ START_TEST (alsa_time_test) {
state = snd_pcm_status_get_state(status); state = snd_pcm_status_get_state(status);
r = clock_gettime(CLOCK_MONOTONIC, &now); r = clock_gettime(CLOCK_MONOTONIC, &now);
fail_unless(r == 0); assert(r == 0);
fail_unless(!revents || avail > 0); assert(!revents || avail > 0);
if ((!cap && avail) || (cap && (unsigned)avail >= buffer_size)) { if ((!cap && avail) || (cap && (unsigned)avail >= buffer_size)) {
snd_pcm_sframes_t sframes; snd_pcm_sframes_t sframes;
@ -182,7 +181,7 @@ START_TEST (alsa_time_test) {
sframes = snd_pcm_writei(pcm, psamples, 1); sframes = snd_pcm_writei(pcm, psamples, 1);
else else
sframes = snd_pcm_readi(pcm, csamples, 1); sframes = snd_pcm_readi(pcm, csamples, 1);
fail_unless(sframes == 1); assert(sframes == 1);
handled = 1; handled = 1;
sample_count++; sample_count++;
@ -216,35 +215,14 @@ START_TEST (alsa_time_test) {
state); state);
if (cap == 0) if (cap == 0)
/** When this fail_unless is hit, most likely something bad /** When this assert is hit, most likely something bad
* happened, i.e. the avail jumped suddenly. */ * happened, i.e. the avail jumped suddenly. */
fail_unless((unsigned) avail <= buffer_size); assert((unsigned) avail <= buffer_size);
last_avail = avail; last_avail = avail;
last_delay = delay; last_delay = delay;
last_timestamp = timestamp; last_timestamp = timestamp;
} }
}
END_TEST return 0;
int main(int argc, char *argv[]) {
int failed = 0;
Suite *s;
TCase *tc;
SRunner *sr;
dev = argc > 1 ? argv[1] : "front:AudioPCI";
cap = argc > 2 ? atoi(argv[2]) : 0;
s = suite_create("ALSA Time");
tc = tcase_create("alsatime");
tcase_add_test(tc, alsa_time_test);
suite_add_tcase(s, tc);
sr = srunner_create(s);
srunner_run_all(sr, CK_NORMAL);
failed = srunner_ntests_failed(sr);
srunner_free(sr);
return (failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
} }