test/lease-manager: Add named lease tests 63/27363/2
authorDamian Hobson-Garcia <dhobsong@igel.co.jp>
Wed, 13 Apr 2022 08:35:42 +0000 (17:35 +0900)
committerDamian Hobson-Garcia <dhobsong@igel.co.jp>
Wed, 13 Apr 2022 08:35:57 +0000 (17:35 +0900)
Add tests for named connectors in lease configurations.
Also ensure that the naming convention is not broken when
no lease configuration is given.

Bug-AGL: SPEC-3815

Change-Id: I1e4c591183a2f0c155bedc6b71a37b37a2b01451
Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
drm-lease-manager/test/lease-manager-test.c
drm-lease-manager/test/meson.build
drm-lease-manager/test/test-drm-device.h

index eb4f1b3..f6524ab 100644 (file)
@@ -360,6 +360,47 @@ START_TEST(create_and_revoke_lease)
 }
 END_TEST
 
+/* Test lease names */
+/* Test details: Create some leases and verify that they have the correct names
+ * Expected results: lease names should match the expected values
+ */
+START_TEST(verify_lease_names)
+{
+       int lease_cnt = 3;
+       bool res = setup_drm_test_device(lease_cnt, lease_cnt, lease_cnt, 0);
+       ck_assert_int_eq(res, true);
+
+       drmModeConnector connectors[] = {
+           CONNECTOR_FULL(CONNECTOR_ID(0), ENCODER_ID(0), &ENCODER_ID(0), 1,
+                          DRM_MODE_CONNECTOR_HDMIA, 1),
+           CONNECTOR_FULL(CONNECTOR_ID(1), ENCODER_ID(1), &ENCODER_ID(1), 1,
+                          DRM_MODE_CONNECTOR_LVDS, 3),
+           CONNECTOR_FULL(CONNECTOR_ID(2), ENCODER_ID(2), &ENCODER_ID(2), 1,
+                          DRM_MODE_CONNECTOR_eDP, 6),
+       };
+
+       drmModeEncoder encoders[] = {
+           ENCODER(ENCODER_ID(0), CRTC_ID(0), 0x7),
+           ENCODER(ENCODER_ID(1), CRTC_ID(1), 0x7),
+           ENCODER(ENCODER_ID(2), CRTC_ID(2), 0x7),
+       };
+
+       setup_test_device_layout(connectors, encoders, NULL);
+
+       const char *expected_names[] = {
+           "card3-HDMI-A-1",
+           "card3-LVDS-3",
+           "card3-eDP-6",
+       };
+
+       struct lease_handle **handles = create_leases(lease_cnt, NULL);
+
+       for (int i = 0; i < lease_cnt; i++) {
+               ck_assert_str_eq(handles[i]->name, expected_names[i]);
+       }
+}
+END_TEST
+
 static void add_lease_management_tests(Suite *s)
 {
        TCase *tc = tcase_create("Lease management");
@@ -367,6 +408,7 @@ static void add_lease_management_tests(Suite *s)
        tcase_add_checked_fixture(tc, test_setup, test_shutdown);
 
        tcase_add_test(tc, create_and_revoke_lease);
+       tcase_add_test(tc, verify_lease_names);
        suite_add_tcase(s, tc);
 }
 
@@ -438,6 +480,46 @@ START_TEST(single_failed_lease)
 }
 END_TEST
 
+/* named_connector_config */
+/* Test details: Test specifying connectors by name in config
+ * Expected results: A handle is created for each named connector
+ */
+
+START_TEST(named_connector_config)
+{
+       int out_cnt = 2, plane_cnt = 0, lease_cnt = 1;
+
+       ck_assert_int_eq(
+           setup_drm_test_device(out_cnt, out_cnt, out_cnt, plane_cnt), true);
+
+       drmModeConnector connectors[] = {
+           CONNECTOR_FULL(CONNECTOR_ID(0), ENCODER_ID(0), &ENCODER_ID(0), 1,
+                          DRM_MODE_CONNECTOR_HDMIA, 1),
+           CONNECTOR_FULL(CONNECTOR_ID(1), ENCODER_ID(1), &ENCODER_ID(1), 1,
+                          DRM_MODE_CONNECTOR_VGA, 3),
+       };
+
+       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 lease_config lconfig = {
+           .lease_name = "Lease Config Test 1",
+           .cnames = 2,
+           .connector_names = (char *[]){"HDMI-A-1", "VGA-3"},
+       };
+
+       struct lease_handle **handles = create_leases(lease_cnt, &lconfig);
+
+       ck_assert_str_eq(handles[0]->name, lconfig.lease_name);
+       CHECK_LEASE_OBJECTS(handles[0], CRTC_ID(0), CONNECTOR_ID(0), CRTC_ID(1),
+                           CONNECTOR_ID(1));
+}
+END_TEST
+
 static void add_lease_config_tests(Suite *s)
 {
        TCase *tc = tcase_create("Lease configuration");
@@ -446,6 +528,7 @@ static void add_lease_config_tests(Suite *s)
 
        tcase_add_test(tc, multiple_connector_lease);
        tcase_add_test(tc, single_failed_lease);
+       tcase_add_test(tc, named_connector_config);
        suite_add_tcase(s, tc);
 }
 
index 7d42bec..bb97274 100644 (file)
@@ -2,6 +2,10 @@ check_dep = dependency('check')
 
 ls_inc = include_directories('..')
 
+test_c_args = [
+   '-Wno-missing-field-initializers', #not all tests explicitly initialize all lease config fields
+]
+
 ls_objects = main.extract_objects(lease_server_files)
 ls_test_sources = [
    'lease-server-test.c',
@@ -12,6 +16,7 @@ ls_test = executable('lease-server-test',
            sources: ls_test_sources,
            objects: ls_objects,
            dependencies: [check_dep, fff_dep, dlmcommon_dep, thread_dep],
+           c_args: test_c_args,
            include_directories: ls_inc)
 
 lm_objects = main.extract_objects(lease_manager_files)
@@ -24,6 +29,7 @@ lm_test = executable('lease-manager-test',
            sources: lm_test_sources,
            objects: lm_objects,
            dependencies: [check_dep, fff_dep, dlmcommon_dep, drm_dep],
+           c_args: test_c_args,
            include_directories: ls_inc)
 
 test('DRM Lease manager - socket server test', ls_test, is_parallel: false)
index e2e5f52..897e0f7 100644 (file)
@@ -63,10 +63,14 @@ int create_lease(int fd, const uint32_t *objects, int num_objects, int flags,
 #define PLANE_ID(x) (test_device.plane_resources.planes[x])
 #define LESSEE_ID(x) (test_device.leases.lessee_ids[x])
 
-#define CONNECTOR(cid, eid, encs, enc_cnt)                   \
-       {                                                    \
-               .connector_id = cid, .encoder_id = eid,      \
-               .count_encoders = enc_cnt, .encoders = encs, \
+#define CONNECTOR(cid, eid, encs, enc_cnt) \
+       CONNECTOR_FULL(cid, eid, encs, enc_cnt, DRM_MODE_CONNECTOR_Unknown, cid)
+
+#define CONNECTOR_FULL(cid, eid, encs, enc_cnt, type, type_id)        \
+       {                                                             \
+               .connector_id = cid, .encoder_id = eid,               \
+               .count_encoders = enc_cnt, .encoders = encs,          \
+               .connector_type = type, .connector_type_id = type_id, \
        }
 
 #define ENCODER(eid, crtc, crtc_mask)               \