mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	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:
		
							parent
							
								
									7d97fe56c7
								
							
						
					
					
						commit
						700cd890a9
					
				
					 2 changed files with 51 additions and 73 deletions
				
			
		| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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, ×tamp);
 | 
					        snd_pcm_status_get_htstamp(status, ×tamp);
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue