1 /*- 2 * BSD LICENSE 3 * 4 * Copyright (c) Intel Corporation. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 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 16 * distribution. 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. 20 * 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. 32 */ 33 34 #include "spdk/stdinc.h" 35 36 #include "spdk_cunit.h" 37 38 #include "string.c" 39 40 static void 41 test_parse_ip_addr(void) 42 { 43 int rc; 44 char *host; 45 char *port; 46 char ip[255]; 47 48 /* IPv4 */ 49 snprintf(ip, 255, "%s", "192.168.0.1"); 50 rc = spdk_parse_ip_addr(ip, &host, &port); 51 CU_ASSERT_EQUAL(rc, 0); 52 SPDK_CU_ASSERT_FATAL(host != NULL); 53 CU_ASSERT(strcmp(host, "192.168.0.1") == 0); 54 CU_ASSERT_EQUAL(strlen(host), 11); 55 CU_ASSERT_EQUAL(port, NULL); 56 57 /* IPv4 with port */ 58 snprintf(ip, 255, "%s", "123.456.789.0:5520"); 59 rc = spdk_parse_ip_addr(ip, &host, &port); 60 CU_ASSERT_EQUAL(rc, 0); 61 SPDK_CU_ASSERT_FATAL(host != NULL); 62 CU_ASSERT(strcmp(host, "123.456.789.0") == 0); 63 CU_ASSERT_EQUAL(strlen(host), 13); 64 SPDK_CU_ASSERT_FATAL(port != NULL); 65 CU_ASSERT(strcmp(port, "5520") == 0); 66 CU_ASSERT_EQUAL(strlen(port), 4); 67 68 /* IPv6 */ 69 snprintf(ip, 255, "%s", "[2001:db8:85a3:8d3:1319:8a2e:370:7348]"); 70 rc = spdk_parse_ip_addr(ip, &host, &port); 71 CU_ASSERT_EQUAL(rc, 0); 72 SPDK_CU_ASSERT_FATAL(host != NULL); 73 CU_ASSERT(strcmp(host, "2001:db8:85a3:8d3:1319:8a2e:370:7348") == 0); 74 CU_ASSERT_EQUAL(strlen(host), 36); 75 CU_ASSERT_EQUAL(port, NULL); 76 77 /* IPv6 with port */ 78 snprintf(ip, 255, "%s", "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443"); 79 rc = spdk_parse_ip_addr(ip, &host, &port); 80 CU_ASSERT_EQUAL(rc, 0); 81 SPDK_CU_ASSERT_FATAL(host != NULL); 82 CU_ASSERT(strcmp(host, "2001:db8:85a3:8d3:1319:8a2e:370:7348") == 0); 83 CU_ASSERT_EQUAL(strlen(host), 36); 84 SPDK_CU_ASSERT_FATAL(port != NULL); 85 CU_ASSERT(strcmp(port, "443") == 0); 86 CU_ASSERT_EQUAL(strlen(port), 3); 87 88 /* IPv6 dangling colon */ 89 snprintf(ip, 255, "%s", "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:"); 90 rc = spdk_parse_ip_addr(ip, &host, &port); 91 CU_ASSERT_EQUAL(rc, 0); 92 SPDK_CU_ASSERT_FATAL(host != NULL); 93 CU_ASSERT(strcmp(host, "2001:db8:85a3:8d3:1319:8a2e:370:7348") == 0); 94 CU_ASSERT_EQUAL(strlen(host), 36); 95 CU_ASSERT_EQUAL(port, NULL); 96 } 97 98 int 99 main(int argc, char **argv) 100 { 101 CU_pSuite suite = NULL; 102 unsigned int num_failures; 103 104 if (CU_initialize_registry() != CUE_SUCCESS) { 105 return CU_get_error(); 106 } 107 108 suite = CU_add_suite("string", NULL, NULL); 109 if (suite == NULL) { 110 CU_cleanup_registry(); 111 return CU_get_error(); 112 } 113 114 if ( 115 CU_add_test(suite, "test_parse_ip_addr", test_parse_ip_addr) == NULL) { 116 CU_cleanup_registry(); 117 return CU_get_error(); 118 } 119 120 CU_basic_set_mode(CU_BRM_VERBOSE); 121 122 CU_basic_run_tests(); 123 124 num_failures = CU_get_number_of_failures(); 125 CU_cleanup_registry(); 126 127 return num_failures; 128 } 129