4 * Copyright (c) 2016 FUJITSU LIMITED, All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
16 * * Neither the name of the copyright holder nor the names of its
17 * contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #include "spdk_cunit.h"
35 #include "scsi_nvme.c"
50 scsi_nvme_translate_test(void)
52 struct spdk_bdev_io bdev_io
;
53 int sc
, sk
, asc
, ascq
;
55 /* SPDK_NVME_SCT_GENERIC */
56 bdev_io
.error
.nvme
.sct
= SPDK_NVME_SCT_GENERIC
;
57 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_ABORTED_POWER_LOSS
;
58 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
59 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_TASK_ABORTED
);
60 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ABORTED_COMMAND
);
61 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_WARNING
);
62 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_POWER_LOSS_EXPECTED
);
64 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_INVALID_NUM_SGL_DESCIRPTORS
;
65 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
66 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
67 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ILLEGAL_REQUEST
);
68 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE
);
69 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE
);
71 /* SPDK_NVME_SCT_COMMAND_SPECIFIC */
72 bdev_io
.error
.nvme
.sct
= SPDK_NVME_SCT_COMMAND_SPECIFIC
;
73 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_INVALID_FORMAT
;
74 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
75 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
76 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ILLEGAL_REQUEST
);
77 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_FORMAT_COMMAND_FAILED
);
78 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_FORMAT_COMMAND_FAILED
);
80 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_OVERLAPPING_RANGE
;
81 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
82 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
83 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ILLEGAL_REQUEST
);
84 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE
);
85 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE
);
87 /* SPDK_NVME_SCT_MEDIA_ERROR */
88 bdev_io
.error
.nvme
.sct
= SPDK_NVME_SCT_MEDIA_ERROR
;
89 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_GUARD_CHECK_ERROR
;
90 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
91 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
92 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_MEDIUM_ERROR
);
93 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_LOGICAL_BLOCK_GUARD_CHECK_FAILED
);
94 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_LOGICAL_BLOCK_GUARD_CHECK_FAILED
);
96 bdev_io
.error
.nvme
.sc
= SPDK_NVME_SC_DEALLOCATED_OR_UNWRITTEN_BLOCK
;
97 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
98 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
99 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ILLEGAL_REQUEST
);
100 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE
);
101 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE
);
103 /* SPDK_NVME_SCT_VENDOR_SPECIFIC */
104 bdev_io
.error
.nvme
.sct
= SPDK_NVME_SCT_VENDOR_SPECIFIC
;
105 bdev_io
.error
.nvme
.sc
= 0xff;
106 spdk_scsi_nvme_translate(&bdev_io
, &sc
, &sk
, &asc
, &ascq
);
107 CU_ASSERT_EQUAL(sc
, SPDK_SCSI_STATUS_CHECK_CONDITION
);
108 CU_ASSERT_EQUAL(sk
, SPDK_SCSI_SENSE_ILLEGAL_REQUEST
);
109 CU_ASSERT_EQUAL(asc
, SPDK_SCSI_ASC_NO_ADDITIONAL_SENSE
);
110 CU_ASSERT_EQUAL(ascq
, SPDK_SCSI_ASCQ_CAUSE_NOT_REPORTABLE
);
114 main(int argc
, char **argv
)
116 CU_pSuite suite
= NULL
;
117 unsigned int num_failures
;
119 if (CU_initialize_registry() != CUE_SUCCESS
) {
120 return CU_get_error();
123 suite
= CU_add_suite("scsi_nvme_suite", null_init
, null_clean
);
125 CU_cleanup_registry();
126 return CU_get_error();
130 CU_add_test(suite
, "scsi_nvme - translate nvme error to scsi error",
131 scsi_nvme_translate_test
) == NULL
133 CU_cleanup_registry();
134 return CU_get_error();
137 CU_basic_set_mode(CU_BRM_VERBOSE
);
138 CU_basic_run_tests();
139 num_failures
= CU_get_number_of_failures();
140 CU_cleanup_registry();