diff options
Diffstat (limited to 'test/unit-tests.c')
-rw-r--r-- | test/unit-tests.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/unit-tests.c b/test/unit-tests.c index 6355843..9063038 100644 --- a/test/unit-tests.c +++ b/test/unit-tests.c @@ -681,6 +681,31 @@ test_dma_map_sg(void **state __attribute__((unused))) } static void +test_dma_addr_to_sg(void **state __attribute__((unused))) +{ + dma_controller_t *dma = alloca(sizeof(dma_controller_t) + sizeof(dma_memory_region_t)); + dma_sg_t sg; + dma_memory_region_t *r; + + dma->nregions = 1; + r = &dma->regions[0]; + r->dma_addr = 0x1000; + r->size = 0x4000; + r->virt_addr = (void*)0xdeadbeef; + + /* fast path, region hint hit */ + assert_int_equal(1, + dma_addr_to_sg(dma, 0x2000, 0x400, &sg, 1, PROT_NONE)); + assert_int_equal(r->dma_addr, sg.dma_addr); + assert_int_equal(0, sg.region); + assert_int_equal(0x2000 - r->dma_addr, sg.offset); + assert_int_equal(0x400, sg.length); + assert_true(sg.mappable); + + /* TODO test more scenarios */ +} + +static void test_vfu_setup_device_dma_cb(void **state __attribute__((unused))) { vfu_ctx_t vfu_ctx = { 0 }; @@ -722,6 +747,7 @@ int main(void) cmocka_unit_test_setup(test_setup_sparse_region, setup), cmocka_unit_test_setup(test_dma_map_return_value, setup), cmocka_unit_test_setup(test_dma_map_sg, setup), + cmocka_unit_test_setup(test_dma_addr_to_sg, setup), cmocka_unit_test_setup(test_vfu_setup_device_dma_cb, setup) }; |