arpa_inet_test.cpp revision 5c8c88dd8d0a371d30096aa107297ebc23e96a45
16a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes/* 26a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * Copyright (C) 2014 The Android Open Source Project 36a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * 46a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 56a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * you may not use this file except in compliance with the License. 66a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * You may obtain a copy of the License at 76a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * 86a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 96a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * 106a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * Unless required by applicable law or agreed to in writing, software 116a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 126a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * See the License for the specific language governing permissions and 146a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes * limitations under the License. 156a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes */ 166a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 176a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes#include <gtest/gtest.h> 186a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 196a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes#include <arpa/inet.h> 206a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 216a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_addr) { 226a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ((htonl)(0x7f000001), inet_addr("127.0.0.1")); 236a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 246a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 256a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_aton) { 266a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes in_addr a; 276a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ(1, inet_aton("127.0.0.1", &a)); 286a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ((htonl)(0x7f000001), a.s_addr); 296a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 306a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 316a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_lnaof) { 326a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes in_addr a = { htonl(0x12345678) }; 336a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ(0x00345678U, inet_lnaof(a)); 346a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 356a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 366a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_makeaddr) { 376a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes in_addr a = inet_makeaddr(0x12U, 0x345678); 386a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ((htonl)(0x12345678), a.s_addr); 396a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 406a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 416a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_netof) { 426a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes in_addr a = { htonl(0x12345678) }; 436a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ(0x12U, inet_netof(a)); 446a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 456a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 466a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_network) { 476a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ(0x7f000001U, inet_network("127.0.0.1")); 486a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 496a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 506a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_ntoa) { 516a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes in_addr a = { (htonl)(0x7f000001) }; 526a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_STREQ("127.0.0.1", inet_ntoa(a)); 536a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 546a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 556a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott HughesTEST(arpa_inet, inet_pton__inet_ntop) { 566a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes sockaddr_storage ss; 576a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_EQ(1, inet_pton(AF_INET, "127.0.0.1", &ss)); 586a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes 596a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes char s[INET_ADDRSTRLEN]; 606a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes ASSERT_STREQ("127.0.0.1", inet_ntop(AF_INET, &ss, s, INET_ADDRSTRLEN)); 616a41b0fb0e589c4afc4ecbcf7c425f0aa40eaea4Elliott Hughes} 625c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes 635c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott HughesTEST(arpa_inet, inet_ntop_overflow) { 645c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes // OpenBSD's inet_ntop had a bug where passing a 'size' larger than INET_ADDRSTRLEN 655c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes // for AF_INET or INET6_ADDRSTRLEN for AF_INET6 would cause inet_ntop to overflow an 665c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes // internal buffer. 675c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes 685c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes sockaddr_storage ss4; 695c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_EQ(1, inet_pton(AF_INET, "127.0.0.1", &ss4)); 705c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes 715c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes sockaddr_storage ss6; 725c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_EQ(1, inet_pton(AF_INET6, "::1", &ss6)); 735c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes 745c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes char s4[INET_ADDRSTRLEN]; 755c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes char s6[INET6_ADDRSTRLEN]; 765c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_STREQ("127.0.0.1", inet_ntop(AF_INET, &ss4, s4, INET_ADDRSTRLEN)); 775c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_STREQ("127.0.0.1", inet_ntop(AF_INET, &ss4, s4, 2*INET_ADDRSTRLEN)); 785c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_STREQ("::1", inet_ntop(AF_INET6, &ss6, s6, INET_ADDRSTRLEN)); 795c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_STREQ("::1", inet_ntop(AF_INET6, &ss6, s6, INET6_ADDRSTRLEN)); 805c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes ASSERT_STREQ("::1", inet_ntop(AF_INET6, &ss6, s6, 2*INET6_ADDRSTRLEN)); 815c8c88dd8d0a371d30096aa107297ebc23e96a45Elliott Hughes} 82