diff --git a/test/cmocka/Makefile.am b/test/cmocka/Makefile.am index 142276dcf..ea917abfc 100644 --- a/test/cmocka/Makefile.am +++ b/test/cmocka/Makefile.am @@ -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 diff --git a/test/cmocka/src/audio/pipeline/pipeline_mocks.c b/test/cmocka/src/audio/pipeline/pipeline_mocks.c new file mode 100644 index 000000000..c7538c92a --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_mocks.c @@ -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 + */ + +#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; +} diff --git a/test/cmocka/src/audio/pipeline/pipeline_mocks.h b/test/cmocka/src/audio/pipeline/pipeline_mocks.h new file mode 100644 index 000000000..52aee7973 --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_mocks.h @@ -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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +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; +}; diff --git a/test/cmocka/src/audio/pipeline/pipeline_mocks_rzalloc.c b/test/cmocka/src/audio/pipeline/pipeline_mocks_rzalloc.c new file mode 100644 index 000000000..fc6372d87 --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_mocks_rzalloc.c @@ -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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void *rzalloc(int zone, uint32_t caps, size_t bytes) +{ + (void)zone; + (void)caps; + return calloc(bytes, 1); +} diff --git a/test/cmocka/src/audio/pipeline/pipeline_new.c b/test/cmocka/src/audio/pipeline/pipeline_new.c new file mode 100644 index 000000000..6c25567ea --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_new.c @@ -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 + */ + +#include +#include +#include +#include +#include "pipeline_mocks.h" +#include +#include +#include +#include + +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); +} diff --git a/test/cmocka/src/audio/pipeline/pipeline_new_allocation.c b/test/cmocka/src/audio/pipeline/pipeline_new_allocation.c new file mode 100644 index 000000000..3dc0d2e98 --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_new_allocation.c @@ -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 + */ + +#include +#include +#include +#include +#include "pipeline_mocks.h" +#include +#include +#include +#include + +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); +} diff --git a/test/cmocka/src/audio/pipeline/pipeline_new_allocation_mocks.c b/test/cmocka/src/audio/pipeline/pipeline_new_allocation_mocks.c new file mode 100644 index 000000000..6a21c6623 --- /dev/null +++ b/test/cmocka/src/audio/pipeline/pipeline_new_allocation_mocks.c @@ -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 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +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); +}