test: added pipeline tests

Added tests for pipeline creation and initialization

Signed-off-by: Jakub Dabek <jakub.dabek@linux.intel.com>
This commit is contained in:
Jakub Dabek 2018-08-07 17:33:40 +02:00
parent 876115c8cb
commit 8dfedb67ae
7 changed files with 447 additions and 0 deletions

View File

@ -55,6 +55,13 @@ check_PROGRAMS += rstrcmp
rstrcmp_SOURCES = src/lib/lib/rstrcmp.c
rstrcmp_LDADD = ../../src/lib/libcore.a $(LDADD)
#pipeline tests
check_PROGRAMS += pipeline_new
pipeline_new_SOURCES = ../../src/audio/pipeline.c src/audio/pipeline/pipeline_new.c src/audio/pipeline/pipeline_mocks.c src/audio/pipeline/pipeline_mocks_rzalloc.c
check_PROGRAMS += pipeline_new_allocation
pipeline_new_allocation_SOURCES = ../../src/audio/pipeline.c src/audio/pipeline/pipeline_new_allocation.c src/audio/pipeline/pipeline_mocks.c src/audio/pipeline/pipeline_new_allocation_mocks.c
# volume tests
check_PROGRAMS += volume_process

View File

@ -0,0 +1,84 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include "pipeline_mocks.h"
void platform_dai_timestamp(struct comp_dev *dai,
struct sof_ipc_stream_posn *posn)
{
(void)dai;
(void)posn;
}
void schedule_task(struct task *task, uint64_t start, uint64_t deadline)
{
(void)deadline;
(void)start;
(void)task;
}
void schedule_task_complete(struct task *task)
{
(void)task;
}
void schedule_task_idle(struct task *task, uint64_t deadline)
{
(void)deadline;
(void)task;
}
void rfree(void *ptr)
{
(void)ptr;
}
void platform_host_timestamp(struct comp_dev *host,
struct sof_ipc_stream_posn *posn)
{
(void)host;
(void)posn;
}
int ipc_stream_send_xrun(struct comp_dev *cdev,
struct sof_ipc_stream_posn *posn)
{
return 0;
}
void _trace_event(uint32_t event)
{
(void)event;
}
void _trace_event_mbox_atomic(uint32_t event)
{
(void)event;
}

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include <sof/audio/component.h>
#include <sof/audio/pipeline.h>
#include <sof/schedule.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
#include <cmocka.h>
int ipc_stream_send_xrun(struct comp_dev *cdev,
struct sof_ipc_stream_posn *posn);
struct pipeline_new_setup_data {
struct sof_ipc_pipe_new ipc_data;
struct comp_dev *comp_data;
};

View File

@ -0,0 +1,46 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include <sof/audio/component.h>
#include <sof/audio/pipeline.h>
#include <sof/schedule.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
#include <cmocka.h>
#include <sof/alloc.h>
void *rzalloc(int zone, uint32_t caps, size_t bytes)
{
(void)zone;
(void)caps;
return calloc(bytes, 1);
}

View File

@ -0,0 +1,143 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include <stdint.h>
#include <sof/audio/component.h>
#include <sof/audio/pipeline.h>
#include <sof/schedule.h>
#include "pipeline_mocks.h"
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
static int setup(void **state)
{
struct pipeline_new_setup_data *pipeline_data = malloc(
sizeof(struct pipeline_new_setup_data));
if (pipeline_data == NULL)
return -1;
struct sof_ipc_pipe_new pipe_desc = { .core = 1, .priority = 2 };
pipeline_data->ipc_data = pipe_desc;
*state = pipeline_data;
return 0;
}
static int teardown(void **state)
{
free(*state);
return 0;
}
static void test_audio_pipeline_pipeline_new_creation(void **state)
{
struct pipeline_new_setup_data *test_data = *state;
/*Testing component*/
struct pipeline *result = pipeline_new(&test_data->ipc_data,
test_data->comp_data);
/*Pipeline should have been created so pointer can't be null*/
assert_non_null(result);
}
static void test_audio_pipeline_new_list_initialization(void **state)
{
struct pipeline_new_setup_data *test_data = *state;
/*Testing component*/
struct pipeline *result = pipeline_new(&test_data->ipc_data,
test_data->comp_data);
/*Check list initialization*/
assert_ptr_equal(&result->comp_list, result->comp_list.next);
assert_ptr_equal(&result->buffer_list, result->buffer_list.next);
}
static void test_audio_pipeline_new_sheduler_init(void **state)
{
struct pipeline_new_setup_data *test_data = *state;
/*Testing component*/
struct pipeline *result = pipeline_new(&test_data->ipc_data,
test_data->comp_data);
/*Check if all parameters are passed to sheduler
*(initialization)
*/
assert_int_equal(result->pipe_task.state, TASK_STATE_INIT);
assert_int_equal(result->pipe_task.core, test_data->ipc_data.core);
}
static void test_audio_pipeline_new_sheduler_config(void **state)
{
struct pipeline_new_setup_data *test_data = *state;
/*Testing component*/
struct pipeline *result = pipeline_new(&test_data->ipc_data,
test_data->comp_data);
/*Pipeline should end in pre init state untli sheduler runs
*task that initializes it
*/
assert_int_equal(COMP_STATE_INIT, result->status);
}
static void test_audio_pipeline_new_ipc_data_coppy(void **state)
{
struct pipeline_new_setup_data *test_data = *state;
/*Testing component*/
struct pipeline *result = pipeline_new(&test_data->ipc_data,
test_data->comp_data);
assert_memory_equal(&test_data->ipc_data, &result->ipc_pipe,
sizeof(struct sof_ipc_pipe_new));
}
int main(void)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_audio_pipeline_pipeline_new_creation),
cmocka_unit_test(test_audio_pipeline_new_list_initialization),
cmocka_unit_test(test_audio_pipeline_new_sheduler_init),
cmocka_unit_test(test_audio_pipeline_new_sheduler_config),
cmocka_unit_test(test_audio_pipeline_new_ipc_data_coppy),
};
cmocka_set_message_output(CM_OUTPUT_TAP);
return cmocka_run_group_tests(tests, setup, teardown);
}

View File

@ -0,0 +1,73 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include <stdint.h>
#include <sof/audio/component.h>
#include <sof/audio/pipeline.h>
#include <sof/schedule.h>
#include "pipeline_mocks.h"
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
static void test_audio_pipeline_pipeline_new_memory_allocation(
void **state)
{
(void)state;
/*Initialize structs for arguments*/
struct sof_ipc_pipe_new pipe_desc = {.core = 1, .priority = 2};
struct comp_dev *cd = malloc(sizeof(cd));
struct pipeline *result;
/*Memmory allocation values check. Pipeline can have those changed
*in future so expect errors here if any change to pipeline memory
*capabilities or memmory space was made
*/
expect_value(rzalloc, zone, RZONE_RUNTIME);
expect_value(rzalloc, caps, SOF_MEM_CAPS_RAM);
expect_value(rzalloc, bytes, sizeof(struct pipeline));
/*Testing component*/
result = pipeline_new(&pipe_desc, cd);
}
int main(void)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(
test_audio_pipeline_pipeline_new_memory_allocation),
};
cmocka_set_message_output(CM_OUTPUT_TAP);
return cmocka_run_group_tests(tests, NULL, NULL);
}

View File

@ -0,0 +1,48 @@
/*
* Copyright (c) 2018, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * 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.
* * Neither the name of the Intel Corporation nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 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 OWNER 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.
*
* Author: Jakub Dabek <jakub.dabek@linux.intel.com>
*/
#include <sof/audio/component.h>
#include <sof/audio/pipeline.h>
#include <sof/schedule.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
#include <cmocka.h>
void *rzalloc(int zone, uint32_t caps, size_t bytes)
{
check_expected(zone);
check_expected(caps);
check_expected(bytes);
(void)zone;
(void)caps;
return calloc(bytes, 1);
}