aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drm-lease-manager/test/lease-manager-test.c145
-rw-r--r--drm-lease-manager/test/test-drm-device.c43
-rw-r--r--drm-lease-manager/test/test-drm-device.h2
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);