Accepting an Allocation Length parameter allows us to test for truncation of response data, as per SPC5r17 4.2.5.6: The device server shall terminate transfers to the Data-In Buffer when the number of bytes or blocks specified by the ALLOCATION LENGTH field have been transferred or when all available data have been transferred, whichever is less. With this change, all existing prin_read_keys() callers continue to use same ALLOCATION LENGTH value as earlier (16K). Signed-off-by: David Disseldorp <ddiss@suse.de>
60 lines
1.8 KiB
C
60 lines
1.8 KiB
C
/* -*- mode:c; tab-width:8; c-basic-offset:8; indent-tabs-mode:nil; -*- */
|
|
/*
|
|
Copyright (C) 2013 by Lee Duncan <lee@gonzoleeman.net>
|
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#include <CUnit/CUnit.h>
|
|
|
|
#include "iscsi.h"
|
|
#include "scsi-lowlevel.h"
|
|
#include "iscsi-support.h"
|
|
#include "iscsi-test-cu.h"
|
|
|
|
|
|
void
|
|
test_prin_serviceaction_range(void)
|
|
{
|
|
int ret = 0;
|
|
int i;
|
|
|
|
|
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
|
logging(LOG_VERBOSE, "Test Persistent Reserve IN Serviceaction range.");
|
|
|
|
/* verify PRIN/READ_KEYS works -- XXX redundant -- remove this? */
|
|
ret = prin_read_keys(sd, &task, NULL, 16384);
|
|
if (ret == -2) {
|
|
CU_PASS("PERSISTENT RESERVE IN is not implemented.");
|
|
return;
|
|
}
|
|
CU_ASSERT_EQUAL(ret, 0);
|
|
|
|
/* verify that PRIN/SA={0,1,2,3} works ... */
|
|
for (i = 0; i < 4; i++) {
|
|
ret = prin_task(sd, i, 1);
|
|
CU_ASSERT_EQUAL(ret, 0);
|
|
}
|
|
|
|
/* verify that PRIN/SA={4..0x20} fails ... */
|
|
for (i = 4; i < 0x20; i++) {
|
|
ret = prin_task(sd, i, 0);
|
|
CU_ASSERT_EQUAL(ret, 0);
|
|
}
|
|
}
|