diff --git a/Makefile.am b/Makefile.am index 4b08b22..2607cca 100644 --- a/Makefile.am +++ b/Makefile.am @@ -210,6 +210,7 @@ bin_iscsi_test_cu_SOURCES = test-tool/iscsi-test-cu.c \ test-tool/test_preventallow_warm_reset.c \ test-tool/test_preventallow_cold_reset.c \ test-tool/test_preventallow_lun_reset.c \ + test-tool/test_preventallow_2_itnexuses.c \ test-tool/test_prin_read_keys_simple.c \ test-tool/test_prin_serviceaction_range.c \ test-tool/test_prout_register_simple.c \ diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c index c7ec9e2..4872270 100644 --- a/test-tool/iscsi-test-cu.c +++ b/test-tool/iscsi-test-cu.c @@ -105,6 +105,7 @@ static CU_TestInfo tests_preventallow[] = { { (char *)"testPreventAllowWarmReset", test_preventallow_warm_reset }, { (char *)"testPreventAllowColdReset", test_preventallow_cold_reset }, { (char *)"testPreventAllowLUNReset", test_preventallow_lun_reset }, + { (char *)"testPreventAllow2ITNexuses", test_preventallow_2_itnexuses }, CU_TEST_INFO_NULL }; diff --git a/test-tool/iscsi-test-cu.h b/test-tool/iscsi-test-cu.h index d69493c..ee3032a 100644 --- a/test-tool/iscsi-test-cu.h +++ b/test-tool/iscsi-test-cu.h @@ -69,6 +69,7 @@ void test_preventallow_logout(void); void test_preventallow_warm_reset(void); void test_preventallow_cold_reset(void); void test_preventallow_lun_reset(void); +void test_preventallow_2_itnexuses(void); void test_prin_read_keys_simple(void); void test_prin_serviceaction_range(void); diff --git a/test-tool/test_preventallow_2_itnexuses.c b/test-tool/test_preventallow_2_itnexuses.c new file mode 100644 index 0000000..b1511d5 --- /dev/null +++ b/test-tool/test_preventallow_2_itnexuses.c @@ -0,0 +1,77 @@ +/* + Copyright (C) 2013 by Ronnie Sahlberg + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . +*/ + +#include + +#include + +#include "iscsi.h" +#include "scsi-lowlevel.h" +#include "iscsi-support.h" +#include "iscsi-test-cu.h" + +void +test_preventallow_2_itnexuses(void) +{ + int ret; + + CHECK_FOR_SBC; + CHECK_FOR_REMOVABLE; + + logging(LOG_VERBOSE, LOG_BLANK_LINE); + logging(LOG_VERBOSE, "Test that PREVENT MEDIUM REMOVAL are seen on other nexuses as well"); + + logging(LOG_VERBOSE, "Set the PREVENT flag"); + ret = preventallow(iscsic, tgt_lun, 1); + CU_ASSERT_EQUAL(ret, 0); + + logging(LOG_VERBOSE, "Try to eject the medium"); + ret = startstopunit_preventremoval(iscsic, tgt_lun, 0, 0, 0, 0, 1, 0); + CU_ASSERT_EQUAL(ret, 0); + + logging(LOG_VERBOSE, "Verify we can still access the media."); + ret = testunitready(iscsic, tgt_lun); + CU_ASSERT_EQUAL(ret, 0); + + logging(LOG_VERBOSE, "Create a second connection to the target"); + iscsic2 = iscsi_context_login(initiatorname1, tgt_url, &tgt_lun); + if (iscsic2 == NULL) { + logging(LOG_VERBOSE, "Failed to login to target"); + return; + } + + logging(LOG_VERBOSE, "Try to eject the medium on the second connection"); + ret = startstopunit_preventremoval(iscsic2, tgt_lun, 0, 0, 0, 0, 1, 0); + CU_ASSERT_EQUAL(ret, 0); + + + logging(LOG_VERBOSE, "Logout the second connection from target"); + iscsi_logout_sync(iscsic2); + iscsi_destroy_context(iscsic2); + + + + logging(LOG_VERBOSE, "Clear PREVENT and load medium in case target failed"); + logging(LOG_VERBOSE, "Test we can clear PREVENT flag"); + ret = preventallow(iscsic, tgt_lun, 0); + CU_ASSERT_EQUAL(ret, 0); + + logging(LOG_VERBOSE, "Load the medium"); + ret = startstopunit(iscsic, tgt_lun, 0, 0, 0, 0, 1, 1); + CU_ASSERT_EQUAL(ret, 0); + +}