4 * Copyright (c) Intel Corporation.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * * Neither the name of Intel Corporation nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #include "spdk/stdinc.h"
36 #include "spdk/scsi.h"
38 #include "CUnit/Basic.h"
39 #include "spdk_internal/mock.h"
41 #include "../common.c"
42 #include "iscsi/tgt_node.c"
43 #include "scsi/scsi_internal.h"
44 #include "unit/lib/json_mock.c"
45 #include "common/lib/test_env.c"
47 struct spdk_iscsi_globals g_iscsi
;
49 const char *config_file
;
51 DEFINE_STUB(spdk_scsi_dev_get_id
,
53 (const struct spdk_scsi_dev
*dev
),
56 DEFINE_STUB(spdk_scsi_lun_get_bdev_name
,
58 (const struct spdk_scsi_lun
*lun
),
61 DEFINE_STUB(spdk_scsi_lun_get_id
,
63 (const struct spdk_scsi_lun
*lun
),
66 DEFINE_STUB_V(spdk_iscsi_op_abort_task_set
,
67 (struct spdk_iscsi_task
*task
,
70 DEFINE_STUB(spdk_sock_is_ipv6
, bool, (struct spdk_sock
*sock
), false);
72 DEFINE_STUB(spdk_sock_is_ipv4
, bool, (struct spdk_sock
*sock
), false);
74 DEFINE_STUB(iscsi_portal_grp_find_by_tag
,
75 struct spdk_iscsi_portal_grp
*, (int tag
), NULL
);
77 DEFINE_STUB(iscsi_init_grp_find_by_tag
, struct spdk_iscsi_init_grp
*,
80 struct spdk_scsi_lun
*
81 spdk_scsi_dev_get_lun(struct spdk_scsi_dev
*dev
, int lun_id
)
83 if (lun_id
< 0 || lun_id
>= SPDK_SCSI_DEV_MAX_LUN
) {
87 return dev
->lun
[lun_id
];
91 spdk_scsi_dev_add_lun(struct spdk_scsi_dev
*dev
, const char *bdev_name
, int lun_id
,
92 void (*hotremove_cb
)(const struct spdk_scsi_lun
*, void *),
95 if (bdev_name
== NULL
) {
103 add_lun_test_cases(void)
105 struct spdk_iscsi_tgt_node tgtnode
= {};
107 char *bdev_name
= NULL
;
108 struct spdk_scsi_dev scsi_dev
= {};
112 tgtnode
.num_active_conns
= 1;
114 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
118 tgtnode
.num_active_conns
= 0;
121 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
125 lun_id
= SPDK_SCSI_DEV_MAX_LUN
;
127 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
134 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
138 tgtnode
.dev
= &scsi_dev
;
140 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
146 rc
= iscsi_tgt_node_add_lun(&tgtnode
, bdev_name
, lun_id
);
151 config_file_fail_cases(void)
153 struct spdk_conf
*config
;
154 struct spdk_conf_section
*sp
;
155 char section_name
[64];
159 config
= spdk_conf_allocate();
161 rc
= spdk_conf_read(config
, config_file
);
166 snprintf(section_name
, sizeof(section_name
), "Failure%d", section_index
);
167 sp
= spdk_conf_find_section(config
, section_name
);
171 rc
= iscsi_parse_tgt_node(sp
);
176 spdk_conf_free(config
);
180 allow_any_allowed(void)
187 addr1
= "2001:ad6:1234:5678:9abc::";
188 addr2
= "192.168.2.1";
190 result
= iscsi_netmask_allow_addr(netmask
, addr1
);
191 CU_ASSERT(result
== true);
193 result
= iscsi_netmask_allow_addr(netmask
, addr2
);
194 CU_ASSERT(result
== true);
198 allow_ipv6_allowed(void)
204 netmask
= "[2001:ad6:1234::]/48";
205 addr
= "2001:ad6:1234:5678:9abc::";
207 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
208 CU_ASSERT(result
== true);
210 result
= iscsi_netmask_allow_addr(netmask
, addr
);
211 CU_ASSERT(result
== true);
213 /* Netmask prefix bits == 128 (all bits must match) */
214 netmask
= "[2001:ad6:1234:5678:9abc::1]/128";
215 addr
= "2001:ad6:1234:5678:9abc::1";
216 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
217 CU_ASSERT(result
== true);
221 allow_ipv6_denied(void)
227 netmask
= "[2001:ad6:1234::]/56";
228 addr
= "2001:ad6:1234:5678:9abc::";
230 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
231 CU_ASSERT(result
== false);
233 result
= iscsi_netmask_allow_addr(netmask
, addr
);
234 CU_ASSERT(result
== false);
236 /* Netmask prefix bits == 128 (all bits must match) */
237 netmask
= "[2001:ad6:1234:5678:9abc::1]/128";
238 addr
= "2001:ad6:1234:5678:9abc::2";
239 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
240 CU_ASSERT(result
== false);
244 allow_ipv6_invalid(void)
250 /* Netmask prefix bits > 128 */
251 netmask
= "[2001:ad6:1234::]/129";
252 addr
= "2001:ad6:1234:5678:9abc::";
253 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
254 CU_ASSERT(result
== false);
256 /* Netmask prefix bits == 0 */
257 netmask
= "[2001:ad6:1234::]/0";
258 addr
= "2001:ad6:1234:5678:9abc::";
259 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
260 CU_ASSERT(result
== false);
262 /* Netmask prefix bits < 0 */
263 netmask
= "[2001:ad6:1234::]/-1";
264 addr
= "2001:ad6:1234:5678:9abc::";
265 result
= iscsi_ipv6_netmask_allow_addr(netmask
, addr
);
266 CU_ASSERT(result
== false);
270 allow_ipv4_allowed(void)
276 netmask
= "192.168.2.0/24";
277 addr
= "192.168.2.1";
279 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
280 CU_ASSERT(result
== true);
282 result
= iscsi_netmask_allow_addr(netmask
, addr
);
283 CU_ASSERT(result
== true);
285 /* Netmask prefix == 32 (all bits must match) */
286 netmask
= "192.168.2.1/32";
287 addr
= "192.168.2.1";
288 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
289 CU_ASSERT(result
== true);
293 allow_ipv4_denied(void)
299 netmask
= "192.168.2.0";
300 addr
= "192.168.2.1";
302 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
303 CU_ASSERT(result
== false);
305 result
= iscsi_netmask_allow_addr(netmask
, addr
);
306 CU_ASSERT(result
== false);
308 /* Netmask prefix == 32 (all bits must match) */
309 netmask
= "192.168.2.1/32";
310 addr
= "192.168.2.2";
311 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
312 CU_ASSERT(result
== false);
316 allow_ipv4_invalid(void)
322 /* Netmask prefix bits > 32 */
323 netmask
= "192.168.2.0/33";
324 addr
= "192.168.2.1";
325 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
326 CU_ASSERT(result
== false);
328 /* Netmask prefix bits == 0 */
329 netmask
= "192.168.2.0/0";
330 addr
= "192.168.2.1";
331 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
332 CU_ASSERT(result
== false);
334 /* Netmask prefix bits < 0 */
335 netmask
= "192.168.2.0/-1";
336 addr
= "192.168.2.1";
337 result
= iscsi_ipv4_netmask_allow_addr(netmask
, addr
);
338 CU_ASSERT(result
== false);
342 node_access_allowed(void)
344 struct spdk_iscsi_tgt_node tgtnode
= {};
345 struct spdk_iscsi_portal_grp pg
= {};
346 struct spdk_iscsi_init_grp ig
= {};
347 struct spdk_iscsi_conn conn
= {};
348 struct spdk_iscsi_portal portal
= {};
349 struct spdk_iscsi_initiator_name iname
= {};
350 struct spdk_iscsi_initiator_netmask imask
= {};
351 struct spdk_scsi_dev scsi_dev
= {};
352 struct spdk_iscsi_pg_map
*pg_map
;
356 /* portal group initialization */
359 /* initiator group initialization */
363 snprintf(iname
.name
, sizeof(iname
.name
), "iqn.2017-10.spdk.io:0001");
364 TAILQ_INIT(&ig
.initiator_head
);
365 TAILQ_INSERT_TAIL(&ig
.initiator_head
, &iname
, tailq
);
368 snprintf(imask
.mask
, sizeof(imask
.mask
), "192.168.2.0/24");
369 TAILQ_INIT(&ig
.netmask_head
);
370 TAILQ_INSERT_TAIL(&ig
.netmask_head
, &imask
, tailq
);
372 /* target initialization */
373 snprintf(tgtnode
.name
, sizeof(tgtnode
.name
), "iqn.2017-10.spdk.io:0001");
374 TAILQ_INIT(&tgtnode
.pg_map_head
);
376 snprintf(scsi_dev
.name
, sizeof(scsi_dev
.name
), "iqn.2017-10.spdk.io:0001");
377 tgtnode
.dev
= &scsi_dev
;
379 pg_map
= iscsi_tgt_node_add_pg_map(&tgtnode
, &pg
);
380 iscsi_pg_map_add_ig_map(pg_map
, &ig
);
382 /* portal initialization */
384 snprintf(portal
.host
, sizeof(portal
.host
), "192.168.2.0");
385 snprintf(portal
.port
, sizeof(portal
.port
), "3260");
388 conn
.portal
= &portal
;
390 iqn
= "iqn.2017-10.spdk.io:0001";
391 addr
= "192.168.2.1";
393 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
394 CU_ASSERT(result
== true);
396 iscsi_pg_map_delete_ig_map(pg_map
, &ig
);
397 iscsi_tgt_node_delete_pg_map(&tgtnode
, &pg
);
401 node_access_denied_by_empty_netmask(void)
403 struct spdk_iscsi_tgt_node tgtnode
= {};
404 struct spdk_iscsi_portal_grp pg
= {};
405 struct spdk_iscsi_init_grp ig
= {};
406 struct spdk_iscsi_conn conn
= {};
407 struct spdk_iscsi_portal portal
= {};
408 struct spdk_iscsi_initiator_name iname
= {};
409 struct spdk_scsi_dev scsi_dev
= {};
410 struct spdk_iscsi_pg_map
*pg_map
;
414 /* portal group initialization */
417 /* initiator group initialization */
421 snprintf(iname
.name
, sizeof(iname
.name
), "iqn.2017-10.spdk.io:0001");
422 TAILQ_INIT(&ig
.initiator_head
);
423 TAILQ_INSERT_TAIL(&ig
.initiator_head
, &iname
, tailq
);
426 TAILQ_INIT(&ig
.netmask_head
);
428 /* target initialization */
429 snprintf(tgtnode
.name
, sizeof(tgtnode
.name
), "iqn.2017-10.spdk.io:0001");
430 TAILQ_INIT(&tgtnode
.pg_map_head
);
432 snprintf(scsi_dev
.name
, sizeof(scsi_dev
.name
), "iqn.2017-10.spdk.io:0001");
433 tgtnode
.dev
= &scsi_dev
;
435 pg_map
= iscsi_tgt_node_add_pg_map(&tgtnode
, &pg
);
436 iscsi_pg_map_add_ig_map(pg_map
, &ig
);
438 /* portal initialization */
440 snprintf(portal
.host
, sizeof(portal
.host
), "192.168.2.0");
441 snprintf(portal
.port
, sizeof(portal
.port
), "3260");
444 conn
.portal
= &portal
;
446 iqn
= "iqn.2017-10.spdk.io:0001";
447 addr
= "192.168.3.1";
449 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
450 CU_ASSERT(result
== false);
452 iscsi_pg_map_delete_ig_map(pg_map
, &ig
);
453 iscsi_tgt_node_delete_pg_map(&tgtnode
, &pg
);
456 #define IQN1 "iqn.2017-11.spdk.io:0001"
457 #define NO_IQN1 "!iqn.2017-11.spdk.io:0001"
458 #define IQN2 "iqn.2017-11.spdk.io:0002"
459 #define IP1 "192.168.2.0"
460 #define IP2 "192.168.2.1"
463 node_access_multi_initiator_groups_cases(void)
465 struct spdk_iscsi_tgt_node tgtnode
= {};
466 struct spdk_iscsi_conn conn
= {};
467 struct spdk_iscsi_portal_grp pg
= {};
468 struct spdk_iscsi_portal portal
= {};
469 struct spdk_iscsi_init_grp ig1
= {}, ig2
= {};
470 struct spdk_iscsi_initiator_name iname1
= {}, iname2
= {};
471 struct spdk_iscsi_initiator_netmask imask1
= {}, imask2
= {};
472 struct spdk_scsi_dev scsi_dev
= {};
473 struct spdk_iscsi_pg_map
*pg_map
;
477 /* target initialization */
478 snprintf(tgtnode
.name
, sizeof(tgtnode
.name
), IQN1
);
479 TAILQ_INIT(&tgtnode
.pg_map_head
);
481 snprintf(scsi_dev
.name
, sizeof(scsi_dev
.name
), IQN1
);
482 tgtnode
.dev
= &scsi_dev
;
484 /* initiator group initialization */
486 TAILQ_INIT(&ig1
.initiator_head
);
487 TAILQ_INIT(&ig1
.netmask_head
);
490 TAILQ_INSERT_TAIL(&ig1
.initiator_head
, &iname1
, tailq
);
493 TAILQ_INSERT_TAIL(&ig1
.netmask_head
, &imask1
, tailq
);
496 TAILQ_INIT(&ig2
.initiator_head
);
497 TAILQ_INIT(&ig2
.netmask_head
);
500 TAILQ_INSERT_TAIL(&ig2
.initiator_head
, &iname2
, tailq
);
503 TAILQ_INSERT_TAIL(&ig2
.netmask_head
, &imask2
, tailq
);
505 /* portal group initialization */
508 pg_map
= iscsi_tgt_node_add_pg_map(&tgtnode
, &pg
);
509 iscsi_pg_map_add_ig_map(pg_map
, &ig1
);
510 iscsi_pg_map_add_ig_map(pg_map
, &ig2
);
512 /* portal initialization */
514 snprintf(portal
.host
, sizeof(portal
.host
), IP1
);
515 snprintf(portal
.port
, sizeof(portal
.port
), "3260");
517 /* connection initialization */
518 conn
.portal
= &portal
;
525 * +-------------------------------------------+---------+
527 * +-------------------------------------------+ |
528 * | name | addr | name | addr | result |
529 * +-------------------------------------------+---------+
530 * +-------------------------------------------+---------+
531 * | denied | - | - | - | denied |
532 * +-------------------------------------------+---------+
534 snprintf(iname1
.name
, sizeof(iname1
.name
), NO_IQN1
);
536 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
537 CU_ASSERT(result
== false);
541 * +-------------------------------------------+---------+
543 * +-------------------------------------------+ |
544 * | name | addr | name | addr | result |
545 * +-------------------------------------------+---------+
546 * +-------------------------------------------+---------+
547 * | allowed | allowed | - | - | allowed |
548 * +-------------------------------------------+---------+
550 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN1
);
551 snprintf(imask1
.mask
, sizeof(imask1
.mask
), IP1
);
553 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
554 CU_ASSERT(result
== true);
558 * +-------------------------------------------+---------+
560 * +-------------------------------------------+ |
561 * | name | addr | name | addr | result |
562 * +-------------------------------------------+---------+
563 * +-------------------------------------------+---------+
564 * | allowed | denied | denied | - | denied |
565 * +-------------------------------------------+---------+
567 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN1
);
568 snprintf(imask1
.mask
, sizeof(imask1
.mask
), IP2
);
569 snprintf(iname2
.name
, sizeof(iname2
.name
), NO_IQN1
);
571 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
572 CU_ASSERT(result
== false);
576 * +-------------------------------------------+---------+
578 * +-------------------------------------------+ |
579 * | name | addr | name | addr | result |
580 * +-------------------------------------------+---------+
581 * +-------------------------------------------+---------+
582 * | allowed | denied | allowed | allowed | allowed |
583 * +-------------------------------------------+---------+
585 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN1
);
586 snprintf(imask1
.mask
, sizeof(imask1
.mask
), IP2
);
587 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN1
);
588 snprintf(imask2
.mask
, sizeof(imask2
.mask
), IP1
);
590 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
591 CU_ASSERT(result
== true);
595 * +---------------------------------------------+---------+
597 * +---------------------------------------------+ |
598 * | name | addr | name | addr | result |
599 * +---------------------------------------------+---------+
600 * +---------------------------------------------+---------+
601 * | allowed | denied | allowed | denied | denied |
602 * +---------------------------------------------+---------+
604 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN1
);
605 snprintf(imask1
.mask
, sizeof(imask1
.mask
), IP2
);
606 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN1
);
607 snprintf(imask2
.mask
, sizeof(imask2
.mask
), IP2
);
609 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
610 CU_ASSERT(result
== false);
614 * +---------------------------------------------+---------+
616 * +---------------------------------------------+ |
617 * | name | addr | name | addr | result |
618 * +---------------------------------------------+---------+
619 * +---------------------------------------------+---------+
620 * | allowed | denied | not found | - | denied |
621 * +---------------------------------------------+---------+
623 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN1
);
624 snprintf(imask1
.mask
, sizeof(imask1
.mask
), IP2
);
625 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN2
);
627 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
628 CU_ASSERT(result
== false);
632 * +---------------------------------------------+---------+
634 * +---------------------------------------------+ |
635 * | name | addr | name | addr | result |
636 * +---------------------------------------------+---------+
637 * +---------------------------------------------+---------+
638 * | not found | - | denied | - | denied |
639 * +---------------------------------------------+---------+
641 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN2
);
642 snprintf(iname2
.name
, sizeof(iname2
.name
), NO_IQN1
);
644 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
645 CU_ASSERT(result
== false);
649 * +---------------------------------------------+---------+
651 * +---------------------------------------------+ |
652 * | name | addr | name | addr | result |
653 * +---------------------------------------------+---------+
654 * +---------------------------------------------+---------+
655 * | not found | - | allowed | allowed | allowed |
656 * +---------------------------------------------+---------+
658 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN2
);
659 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN1
);
660 snprintf(imask2
.mask
, sizeof(imask2
.mask
), IP1
);
662 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
663 CU_ASSERT(result
== true);
667 * +---------------------------------------------+---------+
669 * +---------------------------------------------+ |
670 * | name | addr | name | addr | result |
671 * +---------------------------------------------+---------+
672 * +---------------------------------------------+---------+
673 * | not found | - | allowed | denied | denied |
674 * +---------------------------------------------+---------+
676 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN2
);
677 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN1
);
678 snprintf(imask2
.mask
, sizeof(imask2
.mask
), IP2
);
680 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
681 CU_ASSERT(result
== false);
685 * +---------------------------------------------+---------+
687 * +---------------------------------------------+ |
688 * | name | addr | name | addr | result |
689 * +---------------------------------------------+---------+
690 * +---------------------------------------------+---------+
691 * | not found | - | not found | - | denied |
692 * +---------------------------------------------+---------+
694 snprintf(iname1
.name
, sizeof(iname1
.name
), IQN2
);
695 snprintf(iname2
.name
, sizeof(iname2
.name
), IQN2
);
697 result
= iscsi_tgt_node_access(&conn
, &tgtnode
, iqn
, addr
);
698 CU_ASSERT(result
== false);
700 iscsi_pg_map_delete_ig_map(pg_map
, &ig1
);
701 iscsi_pg_map_delete_ig_map(pg_map
, &ig2
);
702 iscsi_tgt_node_delete_pg_map(&tgtnode
, &pg
);
706 allow_iscsi_name_multi_maps_case(void)
708 struct spdk_iscsi_tgt_node tgtnode
= {};
709 struct spdk_iscsi_portal_grp pg1
= {}, pg2
= {};
710 struct spdk_iscsi_init_grp ig
= {};
711 struct spdk_iscsi_initiator_name iname
= {};
712 struct spdk_iscsi_pg_map
*pg_map1
, *pg_map2
;
713 struct spdk_scsi_dev scsi_dev
= {};
717 /* target initialization */
718 TAILQ_INIT(&tgtnode
.pg_map_head
);
720 snprintf(scsi_dev
.name
, sizeof(scsi_dev
.name
), IQN1
);
721 tgtnode
.dev
= &scsi_dev
;
723 /* initiator group initialization */
724 TAILQ_INIT(&ig
.initiator_head
);
727 TAILQ_INSERT_TAIL(&ig
.initiator_head
, &iname
, tailq
);
729 /* portal group initialization */
733 pg_map1
= iscsi_tgt_node_add_pg_map(&tgtnode
, &pg1
);
734 pg_map2
= iscsi_tgt_node_add_pg_map(&tgtnode
, &pg2
);
735 iscsi_pg_map_add_ig_map(pg_map1
, &ig
);
736 iscsi_pg_map_add_ig_map(pg_map2
, &ig
);
738 /* test for IG1 <-> PG1, PG2 case */
741 snprintf(iname
.name
, sizeof(iname
.name
), IQN1
);
743 result
= iscsi_tgt_node_allow_iscsi_name(&tgtnode
, iqn
);
744 CU_ASSERT(result
== true);
746 snprintf(iname
.name
, sizeof(iname
.name
), IQN2
);
748 result
= iscsi_tgt_node_allow_iscsi_name(&tgtnode
, iqn
);
749 CU_ASSERT(result
== false);
751 iscsi_pg_map_delete_ig_map(pg_map1
, &ig
);
752 iscsi_pg_map_delete_ig_map(pg_map2
, &ig
);
753 iscsi_tgt_node_delete_pg_map(&tgtnode
, &pg1
);
754 iscsi_tgt_node_delete_pg_map(&tgtnode
, &pg2
);
759 * iscsi_check_chap_params(bool disable_chap, bool require_chap,
760 * bool mutual_chap, int chap_group);
763 chap_param_test_cases(void)
766 CU_ASSERT(iscsi_check_chap_params(false, false, false, 0) == true);
769 CU_ASSERT(iscsi_check_chap_params(true, false, false, 0) == true);
772 CU_ASSERT(iscsi_check_chap_params(false, true, false, 0) == true);
775 CU_ASSERT(iscsi_check_chap_params(false, true, true, 0) == true);
777 /* Check mutual exclusiveness of disabled and required */
778 CU_ASSERT(iscsi_check_chap_params(true, true, false, 0) == false);
780 /* Mutual requires Required */
781 CU_ASSERT(iscsi_check_chap_params(false, false, true, 0) == false);
783 /* Remaining combinations */
784 CU_ASSERT(iscsi_check_chap_params(true, false, true, 0) == false);
785 CU_ASSERT(iscsi_check_chap_params(true, true, true, 0) == false);
787 /* Valid auth group ID */
788 CU_ASSERT(iscsi_check_chap_params(false, false, false, 1) == true);
790 /* Invalid auth group ID */
791 CU_ASSERT(iscsi_check_chap_params(false, false, false, -1) == false);
795 main(int argc
, char **argv
)
797 CU_pSuite suite
= NULL
;
798 unsigned int num_failures
;
801 fprintf(stderr
, "usage: %s <config file>\n", argv
[0]);
805 CU_set_error_action(CUEA_ABORT
);
806 CU_initialize_registry();
808 config_file
= argv
[1];
810 suite
= CU_add_suite("iscsi_target_node_suite", NULL
, NULL
);
812 CU_ADD_TEST(suite
, add_lun_test_cases
);
813 CU_ADD_TEST(suite
, config_file_fail_cases
);
814 CU_ADD_TEST(suite
, allow_any_allowed
);
815 CU_ADD_TEST(suite
, allow_ipv6_allowed
);
816 CU_ADD_TEST(suite
, allow_ipv6_denied
);
817 CU_ADD_TEST(suite
, allow_ipv6_invalid
);
818 CU_ADD_TEST(suite
, allow_ipv4_allowed
);
819 CU_ADD_TEST(suite
, allow_ipv4_denied
);
820 CU_ADD_TEST(suite
, allow_ipv4_invalid
);
821 CU_ADD_TEST(suite
, node_access_allowed
);
822 CU_ADD_TEST(suite
, node_access_denied_by_empty_netmask
);
823 CU_ADD_TEST(suite
, node_access_multi_initiator_groups_cases
);
824 CU_ADD_TEST(suite
, allow_iscsi_name_multi_maps_case
);
825 CU_ADD_TEST(suite
, chap_param_test_cases
);
827 CU_basic_set_mode(CU_BRM_VERBOSE
);
828 CU_basic_run_tests();
829 num_failures
= CU_get_number_of_failures();
830 CU_cleanup_registry();