Add a test case for cam_get_device with sa(4) devices

sa(4) has some unique behavior that is special-cased in cam_get_device. The
existing tests don't provide coverage for this special case.

Reviewed by:	ken
MFC after:	3 weeks
Sponsored by:	Spectra Logic Corp
Differential Revision:	https://reviews.freebsd.org/D13185
This commit is contained in:
Alan Somers 2017-11-22 19:58:29 +00:00
parent b0f662fed3
commit 512bd18da5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=326101

View File

@ -129,6 +129,33 @@ ATF_TC_BODY(cam_get_device_positive_test, tc)
ATF_REQUIRE(parsed_unit == expected_unit);
}
/*
* sa(4) uniquely creates nsa and esa device nodes for non-rewind operations
* and eject-on-close operations. cam_get_device must special case these nodes
* to always return the base device.
*/
ATF_TC_WITHOUT_HEAD(cam_get_device_sa_test);
ATF_TC_BODY(cam_get_device_sa_test, tc)
{
char parsed_dev_name[DEV_IDLEN + 1];
int parsed_unit;
ATF_REQUIRE_MSG(cam_get_device("nsa99", parsed_dev_name,
nitems(parsed_dev_name), &parsed_unit) == 0,
"cam_get_device failed");
ATF_REQUIRE_STREQ(parsed_dev_name, "sa");
ATF_REQUIRE(parsed_unit == 99);
strcpy(parsed_dev_name, "");
parsed_unit = -1;
ATF_REQUIRE_MSG(cam_get_device("esa99", parsed_dev_name,
nitems(parsed_dev_name), &parsed_unit) == 0,
"cam_get_device failed");
ATF_REQUIRE_STREQ(parsed_dev_name, "sa");
ATF_REQUIRE(parsed_unit == 99);
}
ATF_TC(cam_open_device_negative_test_O_RDONLY);
ATF_TC_HEAD(cam_open_device_negative_test_O_RDONLY, tc)
{
@ -282,6 +309,7 @@ ATF_TP_ADD_TCS(tp)
ATF_TP_ADD_TC(tp, cam_get_device_negative_test_nul_path);
ATF_TP_ADD_TC(tp, cam_get_device_negative_test_root);
ATF_TP_ADD_TC(tp, cam_get_device_positive_test);
ATF_TP_ADD_TC(tp, cam_get_device_sa_test);
ATF_TP_ADD_TC(tp, cam_open_device_negative_test_O_RDONLY);
ATF_TP_ADD_TC(tp, cam_open_device_negative_test_nonexistent);
ATF_TP_ADD_TC(tp, cam_open_device_negative_test_unprivileged);