diff options
-rw-r--r-- | drm-lease-manager/test/lease-manager-test.c | 145 | ||||
-rw-r--r-- | drm-lease-manager/test/test-drm-device.c | 43 | ||||
-rw-r--r-- | drm-lease-manager/test/test-drm-device.h | 2 |
3 files changed, 87 insertions, 103 deletions
diff --git a/drm-lease-manager/test/lease-manager-test.c b/drm-lease-manager/test/lease-manager-test.c index c741cb3..5d19992 100644 --- a/drm-lease-manager/test/lease-manager-test.c +++ b/drm-lease-manager/test/lease-manager-test.c @@ -33,7 +33,7 @@ #define CHECK_LEASE_OBJECTS(lease, ...) \ do { \ - lm_lease_grant(lm, lease); \ + lm_lease_grant(g_lm, lease); \ uint32_t objs[] = {__VA_ARGS__}; \ int nobjs = ARRAY_LEN(objs); \ ck_assert_int_eq(drmModeCreateLease_fake.arg2_val, nobjs); \ @@ -61,6 +61,7 @@ FAKE_VALUE_FUNC(int, drmModeCreateLease, int, const uint32_t *, int, int, FAKE_VALUE_FUNC(int, drmModeRevokeLease, int, uint32_t); /************** Test fixutre functions *************************/ +struct lm *g_lm = NULL; static void test_setup(void) { @@ -86,11 +87,34 @@ static void test_setup(void) drmModeGetConnector_fake.custom_fake = get_connector; drmModeGetEncoder_fake.custom_fake = get_encoder; drmModeCreateLease_fake.custom_fake = create_lease; + + ck_assert_msg(g_lm == NULL, + "Lease manager context not clear at start of test"); } static void test_shutdown(void) { reset_drm_test_device(); + lm_destroy(g_lm); + g_lm = NULL; +} + +static struct lease_handle **create_leases(int num_leases, + struct lease_config *configs) +{ + if (configs) + g_lm = + lm_create_with_config(TEST_DRM_DEVICE, num_leases, configs); + else + g_lm = lm_create(TEST_DRM_DEVICE); + + ck_assert_ptr_ne(g_lm, NULL); + + struct lease_handle **handles; + ck_assert_int_eq(num_leases, lm_get_lease_handles(g_lm, &handles)); + ck_assert_ptr_ne(handles, NULL); + + return handles; } /************** Resource enumeration tests *************/ @@ -114,32 +138,12 @@ START_TEST(all_outputs_connected) { int out_cnt = 2, plane_cnt = 0; - ck_assert_int_eq( - setup_drm_test_device(out_cnt, out_cnt, out_cnt, plane_cnt), true); - - drmModeConnector connectors[] = { - CONNECTOR(CONNECTOR_ID(0), ENCODER_ID(0), &ENCODER_ID(0), 1), - CONNECTOR(CONNECTOR_ID(1), ENCODER_ID(1), &ENCODER_ID(1), 1), - }; + setup_layout_simple_test_device(out_cnt, plane_cnt); - drmModeEncoder encoders[] = { - ENCODER(ENCODER_ID(0), CRTC_ID(0), 0x3), - ENCODER(ENCODER_ID(1), CRTC_ID(1), 0x2), - }; - - setup_test_device_layout(connectors, encoders, NULL); - - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(out_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(out_cnt, NULL); CHECK_LEASE_OBJECTS(handles[0], CRTC_ID(0), CONNECTOR_ID(0)); CHECK_LEASE_OBJECTS(handles[1], CRTC_ID(1), CONNECTOR_ID(1)); - - lm_destroy(lm); } END_TEST @@ -170,17 +174,13 @@ START_TEST(no_outputs_connected) setup_test_device_layout(connectors, encoders, NULL); - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); + g_lm = lm_create(TEST_DRM_DEVICE); + ck_assert_ptr_ne(g_lm, NULL); - struct lease_handle **handles; - ck_assert_int_eq(out_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(out_cnt, NULL); CHECK_LEASE_OBJECTS(handles[0], CRTC_ID(1), CONNECTOR_ID(0)); CHECK_LEASE_OBJECTS(handles[1], CRTC_ID(0), CONNECTOR_ID(1)); - - lm_destroy(lm); } END_TEST @@ -210,17 +210,10 @@ START_TEST(some_outputs_connected) setup_test_device_layout(connectors, encoders, NULL); - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(out_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(out_cnt, NULL); CHECK_LEASE_OBJECTS(handles[0], CRTC_ID(0), CONNECTOR_ID(0)); CHECK_LEASE_OBJECTS(handles[1], CRTC_ID(1), CONNECTOR_ID(1)); - - lm_destroy(lm); } END_TEST @@ -251,16 +244,10 @@ START_TEST(fewer_crtcs_than_connectors) setup_test_device_layout(connectors, encoders, NULL); - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(lm_get_lease_handles(lm, &handles), crtc_cnt); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(crtc_cnt, NULL); CHECK_LEASE_OBJECTS(handles[0], CRTC_ID(0), CONNECTOR_ID(0)); CHECK_LEASE_OBJECTS(handles[1], CRTC_ID(1), CONNECTOR_ID(2)); - lm_destroy(lm); } END_TEST @@ -275,39 +262,14 @@ START_TEST(separate_overlay_planes_by_crtc) int out_cnt = 2, plane_cnt = 3; - ck_assert_int_eq( - setup_drm_test_device(out_cnt, out_cnt, out_cnt, plane_cnt), true); + setup_layout_simple_test_device(out_cnt, plane_cnt); - drmModeConnector connectors[] = { - CONNECTOR(CONNECTOR_ID(0), ENCODER_ID(0), &ENCODER_ID(0), 1), - CONNECTOR(CONNECTOR_ID(1), ENCODER_ID(1), &ENCODER_ID(1), 1), - }; - - drmModeEncoder encoders[] = { - ENCODER(ENCODER_ID(0), CRTC_ID(0), 0x1), - ENCODER(ENCODER_ID(1), CRTC_ID(1), 0x2), - }; - - drmModePlane planes[] = { - PLANE(PLANE_ID(0), 0x2), - PLANE(PLANE_ID(1), 0x1), - PLANE(PLANE_ID(2), 0x2), - }; - - setup_test_device_layout(connectors, encoders, planes); - - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(out_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(out_cnt, NULL); - CHECK_LEASE_OBJECTS(handles[0], PLANE_ID(1), CRTC_ID(0), + CHECK_LEASE_OBJECTS(handles[0], PLANE_ID(0), PLANE_ID(2), CRTC_ID(0), CONNECTOR_ID(0)); - CHECK_LEASE_OBJECTS(handles[1], PLANE_ID(0), PLANE_ID(2), CRTC_ID(1), + CHECK_LEASE_OBJECTS(handles[1], PLANE_ID(1), CRTC_ID(1), CONNECTOR_ID(1)); - lm_destroy(lm); } END_TEST @@ -344,18 +306,12 @@ START_TEST(reject_planes_shared_between_multiple_crtcs) setup_test_device_layout(connectors, encoders, planes); - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(out_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(out_cnt, NULL); CHECK_LEASE_OBJECTS(handles[0], PLANE_ID(1), CRTC_ID(0), CONNECTOR_ID(0)); CHECK_LEASE_OBJECTS(handles[1], PLANE_ID(0), CRTC_ID(1), CONNECTOR_ID(1)); - lm_destroy(lm); } END_TEST @@ -382,32 +338,15 @@ static void add_connector_enum_tests(Suite *s) */ START_TEST(create_and_revoke_lease) { - int lease_cnt = 2; - bool res = setup_drm_test_device(lease_cnt, lease_cnt, lease_cnt, 0); - ck_assert_int_eq(res, true); + int lease_cnt = 2, plane_cnt = 0; - drmModeConnector connectors[] = { - CONNECTOR(CONNECTOR_ID(0), ENCODER_ID(0), &ENCODER_ID(0), 1), - CONNECTOR(CONNECTOR_ID(1), ENCODER_ID(1), &ENCODER_ID(1), 1), - }; + setup_layout_simple_test_device(lease_cnt, plane_cnt); - drmModeEncoder encoders[] = { - ENCODER(ENCODER_ID(0), CRTC_ID(0), 0x1), - ENCODER(ENCODER_ID(1), CRTC_ID(1), 0x2), - }; - - setup_test_device_layout(connectors, encoders, NULL); - - struct lm *lm = lm_create(TEST_DRM_DEVICE); - ck_assert_ptr_ne(lm, NULL); - - struct lease_handle **handles; - ck_assert_int_eq(lease_cnt, lm_get_lease_handles(lm, &handles)); - ck_assert_ptr_ne(handles, NULL); + struct lease_handle **handles = create_leases(lease_cnt, NULL); for (int i = 0; i < lease_cnt; i++) { - ck_assert_int_ge(lm_lease_grant(lm, handles[i]), 0); - lm_lease_revoke(lm, handles[i]); + ck_assert_int_ge(lm_lease_grant(g_lm, handles[i]), 0); + lm_lease_revoke(g_lm, handles[i]); } ck_assert_int_eq(drmModeRevokeLease_fake.call_count, lease_cnt); diff --git a/drm-lease-manager/test/test-drm-device.c b/drm-lease-manager/test/test-drm-device.c index c024d6e..1d1e096 100644 --- a/drm-lease-manager/test/test-drm-device.c +++ b/drm-lease-manager/test/test-drm-device.c @@ -76,6 +76,13 @@ void reset_drm_test_device(void) free(test_device.resources.encoders); free(test_device.plane_resources.planes); free(test_device.leases.lessee_ids); + + if (test_device.layout.free_on_reset) { + free(test_device.layout.connectors); + free(test_device.layout.encoders); + free(test_device.layout.planes); + } + memset(&test_device, 0, sizeof(test_device)); } @@ -87,6 +94,42 @@ void setup_test_device_layout(drmModeConnector *connectors, test_device.layout.planes = planes; } +void setup_layout_simple_test_device(int conn_cnt, int plane_cnt) +{ + drmModeConnector *connectors; + drmModeEncoder *encoders; + drmModePlane *planes = NULL; + + ck_assert_int_ge(conn_cnt, 1); + + setup_drm_test_device(conn_cnt, conn_cnt, conn_cnt, plane_cnt); + + ck_assert_ptr_ne( + connectors = calloc(sizeof(drmModeConnector), conn_cnt), NULL); + ck_assert_ptr_ne(encoders = calloc(sizeof(drmModeEncoder), conn_cnt), + NULL); + + if (plane_cnt > 0) + ck_assert_ptr_ne( + planes = calloc(sizeof(drmModePlane), plane_cnt), NULL); + + int crtc_mask = (1 << conn_cnt) - 1; + for (int i = 0; i < conn_cnt; i++) { + connectors[i] = (drmModeConnector)CONNECTOR( + CONNECTOR_ID(i), ENCODER_ID(i), &ENCODER_ID(i), 1); + encoders[i] = (drmModeEncoder)ENCODER(ENCODER_ID(i), CRTC_ID(i), + crtc_mask); + } + + for (int i = 0; i < plane_cnt; i++) { + planes[i] = + (drmModePlane)PLANE(PLANE_ID(i), 1 << (i % conn_cnt)); + } + + setup_test_device_layout(connectors, encoders, planes); + test_device.layout.free_on_reset = true; +} + #define GET_DRM_RESOURCE_FN(Res, res, RES, container) \ drmMode##Res##Ptr get_##res(int fd, uint32_t id) \ { \ diff --git a/drm-lease-manager/test/test-drm-device.h b/drm-lease-manager/test/test-drm-device.h index 1d5b683..e2e5f52 100644 --- a/drm-lease-manager/test/test-drm-device.h +++ b/drm-lease-manager/test/test-drm-device.h @@ -30,6 +30,7 @@ struct drm_device { drmModeConnector *connectors; drmModeEncoder *encoders; drmModePlane *planes; + bool free_on_reset; } layout; struct { @@ -44,6 +45,7 @@ extern struct drm_device test_device; bool setup_drm_test_device(int crtcs, int connectors, int encoders, int planes); void setup_test_device_layout(drmModeConnector *connectors, drmModeEncoder *encoders, drmModePlane *planes); +void setup_layout_simple_test_device(int connectors, int planes); void reset_drm_test_device(void); drmModeConnectorPtr get_connector(int fd, uint32_t id); |