📄 chk_sockaddrinet6.cpp
字号:
/* Copyright is licensed under GNU LGPL. by I.J.Wang 2005 Check WySockAddrINet6 public members Build: make chk_sockaddrlocal Note: Test data files should exist in the working directory Files may be created in the working directory and unlinked*/#include "wysockaddrinet6.h"#include "wy_atdestroy.h"#include <memory>#include <iostream>#if WYSOCKADDRINET6_VERSION!=31#error Test code is for WYSOCKADDRINET6_VERSION 31#endifstatic bool equ(const WySockAddrINet6::IPAddr& a1, const ::in6_addr& a2){ return ::memcmp(&a1.wy_addr_ref(),&a2,sizeof(::in6_addr))==0;};static bool equ(const WySockAddrINet6& a1, const ::sockaddr_in6& a2){ if(a2.sin6_family!=AF_INET6) { return(false); } if(a1.port()!=ntohs(a2.sin6_port)) { return(false); } if(a1._flowinfo()!=ntohl(a2.sin6_flowinfo)) { return(false); } if(a1._scope_id()!=ntohl(a2.sin6_scope_id)) { return(false); } return ::memcmp(&a1.ip().wy_addr_ref(),&a2.sin6_addr,sizeof(::in6_addr))==0;};// Check WySockAddrINet6::IPAddr//static void chk_ipaddr(void){ WyRet r; // IPAddr(),IPAddr(const IPAddr&),IPAddr(const ::in6_addr&),.. { WySockAddrINet6::IPAddr tmp1; ::in6_addr in6( tmp1.c_addr() ); if(equ(tmp1,::in6addr_any)==false) { WY_THROW( WyRet() ); } if(equ(tmp1,in6)==false) { WY_THROW( WyRet() ); } if(tmp1.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet6::IPAddr tmp2(tmp1); if(equ(tmp2,::in6addr_any)==false) { WY_THROW( WyRet() ); } if(tmp1!=tmp2) { WY_THROW( WyRet() ); } if(tmp1==tmp2) { } else { WY_THROW( WyRet() ); } if(tmp2.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet6::IPAddr tmp3(in6); if(equ(tmp3,::in6addr_any)==false) { WY_THROW( WyRet() ); } if(tmp3!=tmp1) { WY_THROW( WyRet() ); } if(tmp3.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet6::IPAddr tmp4("::"); if(equ(tmp4,::in6addr_any)==false) { WY_THROW( WyRet() ); } if(tmp4!=tmp1) { WY_THROW( WyRet() ); } if(tmp4.is_default()==false) { WY_THROW( WyRet() ); } WySockAddrINet6::IPAddr tmp5( WyStr("::") ); if(equ(tmp5,::in6addr_any)==false) { WY_THROW( WyRet() ); } if(tmp5!=tmp1) { WY_THROW( WyRet() ); } if(tmp5.is_default()==false) { WY_THROW( WyRet() ); } } // notation { WySockAddrINet6::IPAddr tmp; WyStr str,str2; if((r=tmp.notation(str))!=Ok) { WY_THROW(r); } if(str!="::") { WY_THROW( WyRet() ); } if((r=tmp.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW(r); } if(Wy::wrd(tmp)!=str) { WY_THROW( WyRet() ); } WySockAddrINet6::IPAddr tmp2("1:2::3"); if((r=tmp2.notation(str))!=Ok) { WY_THROW(r); } if(str!="1:2::3") { WY_THROW( WyRet() ); } if((r=tmp2.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW( WyRet() ); } if(Wy::wrd(tmp2)!=str) { WY_THROW( WyRet() ); } } // reset() { const char* AName="::5"; const WySockAddrINet6::IPAddr Tmp1,Tmp2(AName); WySockAddrINet6::IPAddr tmp; ::in6_addr in6; tmp.reset(); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } tmp.reset(Tmp1); if(tmp.is_default()==false) { WY_THROW( WyRet() ); } tmp.reset(Tmp2); if(tmp!=Tmp2) { WY_THROW( WyRet() ); } in6=Tmp2.c_addr(); tmp.reset(in6); if(tmp!=in6) { WY_THROW( WyRet() ); } tmp.reset(AName); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp.reset( WyStr(AName) ); if(tmp.is_default()) { WY_THROW( WyRet() ); } if(tmp!=Tmp2) { WY_THROW( WyRet() ); } } { WyRet r; const WySockAddrINet6::IPAddr Tmp1,Tmp2("::6"); WySockAddrINet6::IPAddr tmp1(Tmp1),tmp2(Tmp2); tmp1.swap(tmp2); if(tmp1!=Tmp2) { WY_THROW( WyRet() ); } if(tmp2!=Tmp1) { WY_THROW( WyRet() ); } tmp2.swap(tmp2); if(tmp2!=Tmp1) { WY_THROW( WyRet() ); } WyStr str,str2; if((r=Tmp2.notation(str))!=Ok) { WY_THROW( WyRet() ); } if(str!="::6") { WY_THROW( WyRet() ); } if((r=Tmp2.notation(str2))!=Ok) { WY_THROW(r); } if(str2!=str) { WY_THROW( WyRet() ); } if(Wy::wrd(Tmp2)!=str) { WY_THROW( WyRet() ); } } // operator = { const WySockAddrINet6::IPAddr Tmp1,Tmp2("::6"); WySockAddrINet6::IPAddr tmp; tmp=Tmp2; if(tmp!=Tmp2) { WY_THROW( WyRet() ); } tmp=Tmp1; if(tmp!=Tmp1) { WY_THROW( WyRet() ); } } // operator ==/!= { const WyStr IpAddr("::6"); const WySockAddrINet6::IPAddr Tmp1,Tmp2(IpAddr); ::in6_addr InAddrAny=::in6addr_any; if(Tmp2==Tmp2) { } else { WY_THROW( WyRet() ); } if(Tmp2!=Tmp2) { WY_THROW( WyRet() ); } if(InAddrAny==Tmp1) { } else { WY_THROW( WyRet() ); } if(InAddrAny!=Tmp1) { WY_THROW( WyRet() ); } if(Tmp2==IpAddr) { } else { WY_THROW( WyRet() ); } if(Tmp2!=IpAddr) { WY_THROW( WyRet() ); } if(Tmp2==IpAddr.c_str()) { } else { WY_THROW( WyRet() ); } if(Tmp2!=IpAddr.c_str()) { WY_THROW( WyRet() ); } if(IpAddr==Tmp2) { } else { WY_THROW( WyRet() ); } if(IpAddr!=Tmp2) { WY_THROW( WyRet() ); } if(IpAddr.c_str()==Tmp2) { } else { WY_THROW( WyRet() ); } if(IpAddr.c_str()!=Tmp2) { WY_THROW( WyRet() ); } } // chk error ==/!= (const char*) (const WyStr&) { WySockAddrINet6::IPAddr addr; if(addr==WyStr()) { WY_THROW( WyRet() ); } if(addr!=WyStr()) { } else { WY_THROW( WyRet() ); } if(addr==(const char*)0) { WY_THROW( WyRet() ); } if(addr!=(const char*)0) { } else { WY_THROW( WyRet() ); } if(WyStr()==addr) { WY_THROW( WyRet() ); } if(WyStr()!=addr) { } else { WY_THROW( WyRet() ); } if((const char*)0==addr) { WY_THROW( WyRet() ); } if((const char*)0!=addr) { } else { WY_THROW( WyRet() ); } } // chk error { try { WySockAddrINet6::IPAddr tmp( WyStr("xxx") ); tmp.reset(); // supress unused warning WY_THROW( WyRet() ); } catch(const WySockAddrINet6::IPAddr::Reply& e) { if(e!=Wym_EADDRNOTAVAIL) { throw; } // FALLTHROUGH }; try { WySockAddrINet6::IPAddr tmp("xxx"); tmp.reset(); // supress unused warning WY_THROW( WyRet() ); } catch(const WySockAddrINet6::IPAddr::Reply& e) { if(e!=Wym_EADDRNOTAVAIL) { throw; } // FALLTHROUGH }; { WySockAddrINet6::IPAddr tmp; if((r=tmp.reset("xxy"))!=Wym_EADDRNOTAVAIL) { WY_THROW(r); } if((r=tmp.reset(WyStr("xxy")))!=Wym_EADDRNOTAVAIL) { WY_THROW(r); } } } // chk move ctor { const WySockAddrINet6::IPAddr TstIP("::5"); char raw_buf[2*sizeof(WySockAddrINet6::IPAddr)]; ::memset(raw_buf,0,sizeof(raw_buf)); WySockAddrINet6::IPAddr* const p1( reinterpret_cast<WySockAddrINet6::IPAddr*>(raw_buf) ); WySockAddrINet6::IPAddr* const p2(p1+1); new(p1) WySockAddrINet6::IPAddr(TstIP); if((p1->is_default()==true)|| (p1->c_addr()!=TstIP.c_addr()) ) { p1->WySockAddrINet6::IPAddr::~IPAddr(); WY_THROW(r); } // move *p1 to p2 try { new(p2) WySockAddrINet6::IPAddr(*p1,Wy::ByMove); } catch(...) { p1->WySockAddrINet6::IPAddr::~IPAddr(); throw; }; if((p2->is_default()==true)|| (p2->c_addr()!=TstIP.c_addr()) ) { p2->WySockAddrINet6::IPAddr::~IPAddr(); WY_THROW(r); } p2->WySockAddrINet6::IPAddr::~IPAddr(); }};// Assert ff is default//static void assert_default(const WySockAddrINet6& ff){ static const WySockAddrINet6 Def_Obj; //WyRet r; if(ff.is_default()==false) { WY_THROW( WyRet() ); } if(ff!=Def_Obj) { WY_THROW( WyRet() ); } if(ff==Def_Obj) { } else { WY_THROW( WyRet() ); } if(ff.ip().is_default()==false) { WY_THROW( WyRet() ); } if(ff.ip().c_addr()!=::in6addr_any) { WY_THROW( WyRet() ); } if(ff.port()!=0) { WY_THROW( WyRet() ); } if(ff._flowinfo()!=0) { WY_THROW( WyRet() ); } if(ff._scope_id()!=0) { WY_THROW( WyRet() ); }};static void assert_not_default(const WySockAddrINet6& ff){ static const WySockAddrINet6 Def_Obj; if(ff.is_default()) { WY_THROW( WyRet() ); } if(ff==Def_Obj) { WY_THROW( WyRet() ); } if(ff!=Def_Obj) { } else { WY_THROW( WyRet() ); } if((ff.port()==0)&&(ff.ip().is_default())) { WY_THROW( WyRet() ); }};static void assert_equ(const WySockAddrINet6& a1,const WySockAddrINet6& a2){ if(a1!=a2) { WY_THROW( WyRet() ); } if(a1.port()!=a2.port()) { WY_THROW( WyRet() ); } if(a1.ip()!=a2.ip()) { WY_THROW( WyRet() ); } if(a1._flowinfo()!=a2._flowinfo()) { WY_THROW( WyRet() ); } if(a1._scope_id()!=a2._scope_id()) { WY_THROW( WyRet() ); }};#define CHK_DEFAULT(p)\ try { assert_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_NOT_DEFAULT(p)\ try { assert_not_default(p); } catch(...) { WY_THROW( WyRet()); }#define CHK_EQU(a1,a2)\ try { assert_equ((a1),(a2)); } catch(...) { WY_THROW( WyRet()); }// Check basic operations on default object//static void t1(void){ WyRet r; // constructor { WySockAddrINet6 a0; CHK_DEFAULT(a0); WySockAddrINet6 a1(a0); CHK_DEFAULT(a0); CHK_DEFAULT(a1); CHK_EQU(a0,a1); WySockAddrINet6 a2("::1",2); if(a2.is_default()) { WY_THROW( WyRet() ); } if(a2.port()!=2) { WY_THROW( WyRet() ); } if(a2.ip()!="::1") { WY_THROW( WyRet() ); } if(a2._flowinfo()!=0) { WY_THROW( WyRet() ); } if(a2._scope_id()!=0) { WY_THROW( WyRet() ); } WySockAddrINet6 a3((const char*)"1:2:3::4",9); if(a3.is_default()) { WY_THROW( WyRet() ); } if(a3.ip().is_default()) { WY_THROW( WyRet() ); } if(a3.port()!=9) { WY_THROW( WyRet() ); } if(a3._flowinfo()!=0) { WY_THROW( WyRet() ); } if(a3._scope_id()!=0) { WY_THROW( WyRet() ); } WySockAddrINet6 a4(a3); CHK_EQU(a3,a4); } // chk ops(const ::sockaddr_in6&) { struct ::sockaddr_in6 saddr; const uint16_t PortNum=2467; const ::in6_addr IP6={{{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}}}; saddr.sin6_family=AF_INET6; saddr.sin6_addr=IP6; saddr.sin6_port=PortNum; saddr.sin6_flowinfo=35; saddr.sin6_scope_id=53; WySockAddrINet6 tmp(saddr); if(equ(tmp,saddr)==false) { WY_THROW( WyRet() ); } WySockAddrINet6 tmp2; CHK_DEFAULT(tmp2); tmp2.reset(saddr); if(equ(tmp2,saddr)==false) { WY_THROW( WyRet() ); } CHK_EQU(tmp,tmp2); WySockAddrINet6 tmp3; CHK_DEFAULT(tmp3); tmp3=saddr; if(equ(tmp3,saddr)==false) { WY_THROW( WyRet() ); } CHK_EQU(tmp2,tmp3); if(tmp3==saddr) { } else { WY_THROW( WyRet() ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -