selftests/liveupdate: add test cases for LIVEUPDATE_SESSION_GET_NAME

Verify that the new LIVEUPDATE_SESSION_GET_NAME ioctl works
as expected via new test cases in the existing liveupdate selftest.

Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
Link: https://lore.kernel.org/r/20260429212221.814107-5-luca.boccassi@gmail.com
Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
This commit is contained in:
Luca Boccassi 2026-04-29 22:21:17 +01:00 committed by Mike Rapoport (Microsoft)
parent 4c08a9f38c
commit a1f8ed3451

View File

@ -102,6 +102,22 @@ static int create_session(int lu_fd, const char *name)
return args.fd;
}
/* Helper function to get a session name via ioctl. */
static int get_session_name(int session_fd, char *name, size_t name_len)
{
struct liveupdate_session_get_name args = {};
args.size = sizeof(args);
if (ioctl(session_fd, LIVEUPDATE_SESSION_GET_NAME, &args))
return -errno;
strncpy(name, (char *)args.name, name_len - 1);
name[name_len - 1] = '\0';
return 0;
}
/*
* Test Case: Create Duplicate Session
*
@ -428,4 +444,59 @@ TEST_F(liveupdate_device, create_session_empty_name)
EXPECT_EQ(session_fd, -EINVAL);
}
/*
* Test Case: Get Session Name
*
* Verifies that the full session name can be retrieved from a session file
* descriptor via ioctl.
*/
TEST_F(liveupdate_device, get_session_name)
{
char name_buf[LIVEUPDATE_SESSION_NAME_LENGTH] = {};
const char *session_name = "get-name-test-session";
int session_fd;
self->fd1 = open(LIVEUPDATE_DEV, O_RDWR);
if (self->fd1 < 0 && errno == ENOENT)
SKIP(return, "%s does not exist", LIVEUPDATE_DEV);
ASSERT_GE(self->fd1, 0);
session_fd = create_session(self->fd1, session_name);
ASSERT_GE(session_fd, 0);
ASSERT_EQ(get_session_name(session_fd, name_buf, sizeof(name_buf)), 0);
ASSERT_STREQ(name_buf, session_name);
ASSERT_EQ(close(session_fd), 0);
}
/*
* Test Case: Get Session Name at Maximum Length
*
* Verifies that a session name using the full LIVEUPDATE_SESSION_NAME_LENGTH
* (minus the null terminator) can be correctly retrieved.
*/
TEST_F(liveupdate_device, get_session_name_max_length)
{
char name_buf[LIVEUPDATE_SESSION_NAME_LENGTH] = {};
char long_name[LIVEUPDATE_SESSION_NAME_LENGTH];
int session_fd;
memset(long_name, 'A', sizeof(long_name) - 1);
long_name[sizeof(long_name) - 1] = '\0';
self->fd1 = open(LIVEUPDATE_DEV, O_RDWR);
if (self->fd1 < 0 && errno == ENOENT)
SKIP(return, "%s does not exist", LIVEUPDATE_DEV);
ASSERT_GE(self->fd1, 0);
session_fd = create_session(self->fd1, long_name);
ASSERT_GE(session_fd, 0);
ASSERT_EQ(get_session_name(session_fd, name_buf, sizeof(name_buf)), 0);
ASSERT_STREQ(name_buf, long_name);
ASSERT_EQ(close(session_fd), 0);
}
TEST_HARNESS_MAIN