tstRTNetIPv4.cpp revision 109dd94b9072835c01255be29db48d804e06c923
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe/* $Id$ */
19d8729755d7f4d9503029a628dacbbdabcd2264wrowe/** @file
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * IPRT Testcase - IPv4.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding */
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/*
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe * Copyright (C) 2008-2010 Oracle Corporation
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * This file is part of VirtualBox Open Source Edition (OSE), as
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * available from http://www.virtualbox.org. This file is free software;
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe * you can redistribute it and/or modify it under the terms of the GNU
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * General Public License (GPL) as published by the Free Software
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Foundation, in version 2 as it comes in the "COPYING" file of the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * The contents of this file may alternatively be used under the terms
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * of the Common Development and Distribution License Version 1.0
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe * VirtualBox OSE distribution, in which case the provisions of the
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe * CDDL are applicable instead of those of the GPL.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * You may elect to license modified versions of this file under the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * terms and conditions of either the GPL or the CDDL or both.
19d8729755d7f4d9503029a628dacbbdabcd2264wrowe */
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/*******************************************************************************
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding* Header Files *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding*******************************************************************************/
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <iprt/net.h>
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <iprt/err.h>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <iprt/initterm.h>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <iprt/test.h>
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding/*******************************************************************************
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding* Defined Constants And Macros *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding*******************************************************************************/
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe#define CHECKADDR(String, rcExpected, ExpectedAddr) \
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe do { \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RTNETADDRIPV4 Addr; \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding int rc2 = RTNetStrToIPv4Addr(String, &Addr); \
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe if ((rcExpected) && !rc2) \
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe { \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RTTestIFailed("at line %d: '%s': expected %Rrc got %Rrc\n", \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding __LINE__, String, (rcExpected), rc2); \
4439ba95daf7b82794fe338726790e2dab89d119wrowe } \
4439ba95daf7b82794fe338726790e2dab89d119wrowe else if ( (rcExpected) != rc2 \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding || ( rc2 == VINF_SUCCESS \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding && RT_H2N_U32_C(ExpectedAddr) != Addr.u)) \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding { \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RTTestIFailed("at line %d: '%s': expected %Rrc got %Rrc," \
a092e6811e647076fd5a106d1be1cb81f7632e52wrowe " expected address %RTnaipv4 got %RTnaipv4\n", \
a092e6811e647076fd5a106d1be1cb81f7632e52wrowe __LINE__, String, rcExpected, rc2, \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RT_H2N_U32_C(ExpectedAddr), Addr.u); \
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe } \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding } while (0)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#define GOODADDR(String, ExpectedAddr) \
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe CHECKADDR(String, VINF_SUCCESS, ExpectedAddr)
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#define BADADDR(String) \
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding CHECKADDR(String, VERR_INVALID_PARAMETER, 0)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
9ec65cbae2f760e485a1c54df5b19853688d5c91wrowe
9ec65cbae2f760e485a1c54df5b19853688d5c91wroweint main()
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RTTEST hTest;
26b9ccb55ff33097af4914f2e4bd36fec99a039dwrowe int rc = RTTestInitAndCreate("tstRTNetIPv4", &hTest);
a092e6811e647076fd5a106d1be1cb81f7632e52wrowe if (rc)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return rc;
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding RTTestBanner(hTest);
4439ba95daf7b82794fe338726790e2dab89d119wrowe
4439ba95daf7b82794fe338726790e2dab89d119wrowe GOODADDR("1.2.3.4", 0x01020304);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding GOODADDR("0.0.0.0", 0x00000000);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding GOODADDR("255.255.255.255", 0xFFFFFFFF);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding /* leading and trailing whitespace is allowed */
a092e6811e647076fd5a106d1be1cb81f7632e52wrowe GOODADDR(" 1.2.3.4 ", 0x01020304);
a092e6811e647076fd5a106d1be1cb81f7632e52wrowe GOODADDR("\t1.2.3.4\t", 0x01020304);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("1.2.3.4x");
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("1.2.3.4.");
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("1.2.3");
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("0x1.2.3.4");
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe BADADDR("666.2.3.4");
4e8732935d428b2a70151b178a95cbba5d3839f5wrowe BADADDR("1.666.3.4");
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("1.2.666.4");
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding BADADDR("1.2.3.666");
990e1969a428b8844e07aad088df41340cd009d4wrowe
4439ba95daf7b82794fe338726790e2dab89d119wrowe return RTTestSummaryAndDestroy(hTest);
4439ba95daf7b82794fe338726790e2dab89d119wrowe}
4439ba95daf7b82794fe338726790e2dab89d119wrowe