aboutsummaryrefslogtreecommitdiff
path: root/test/unit-tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit-tests.c')
-rw-r--r--test/unit-tests.c26
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)
};