File: TestUDPListener.cpp

package info (click to toggle)
spring 98.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 41,928 kB
  • ctags: 60,665
  • sloc: cpp: 356,167; ansic: 39,434; python: 12,228; java: 12,203; awk: 5,856; sh: 1,719; xml: 997; perl: 405; php: 253; objc: 194; makefile: 72; sed: 2
file content (64 lines) | stat: -rw-r--r-- 2,238 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

#include "System/Net/UDPListener.h"

#define BOOST_TEST_MODULE UDPListener
#include <boost/test/unit_test.hpp>

static inline bool TryBindAddr(netcode::SocketPtr& socket, const char* address) {
	return netcode::UDPListener::TryBindSocket(11111, &socket, address).empty();
}

static inline bool TryBindPort(netcode::SocketPtr& socket, int port) {
	return netcode::UDPListener::TryBindSocket(port, &socket, "::").empty();
}

BOOST_AUTO_TEST_CASE(TryBindSocket)
{
	netcode::SocketPtr socket;

	// IP v4 & v6 addresses
	BOOST_CHECK(TryBindAddr(socket, "127.0.0.1"));
	BOOST_CHECK(TryBindAddr(socket, "0.0.0.0"));
	BOOST_CHECK(TryBindAddr(socket, "::"));
	BOOST_CHECK(TryBindAddr(socket, "::1"));

	// badly named invalid IP v6 addresses
	BOOST_CHECK(!TryBindAddr(socket, "::2"));
	BOOST_CHECK(!TryBindAddr(socket, "fe80::224:1dff:fecf:df44/64"));
	BOOST_CHECK(!TryBindAddr(socket, "fe80::224:1dff:fecf:df44"));
	BOOST_CHECK(!TryBindAddr(socket, "::224:1dff:fecf:df44/64"));
	BOOST_CHECK(!TryBindAddr(socket, "fe80::"));
	/*
		FIXME: for some reason this test works on windows (binds to ipv4 0.0.0.224) and fails on linux/osx

		:8 is reserved. :96 was IPv4 compatible IPv6 addresses, so ::2 would be 0.0.0.2.
		No implementation is required to support this sheme sheme any longer. That's why ::2 doesn't work
		::ffff:x:y/96 is new IPv4-Mapped IPv6 Address
		http://tools.ietf.org/html/rfc4291 sections 2.5.5.1 and 2.5.5.2
	*/
	//	BOOST_CHECK(!TryBindAddr(socket, "224:1dff:fecf:df44/64"));

	BOOST_CHECK(!TryBindAddr(socket, "fe80"));

	// host-names
	BOOST_CHECK(TryBindAddr(socket, "localhost"));
	BOOST_CHECK(!TryBindAddr(socket, "local.lan"));
	BOOST_CHECK(!TryBindAddr(socket, "google.com"));

	// normal ports
	BOOST_CHECK(TryBindPort(socket, 1024));
	BOOST_CHECK(TryBindPort(socket, 11111));
	BOOST_CHECK(TryBindPort(socket, 32000));
	BOOST_CHECK(TryBindPort(socket, 65535));

	// special ports (reserved for core services)
	BOOST_WARN(!TryBindPort(socket, 0));
	BOOST_WARN(!TryBindPort(socket, 1));
	BOOST_WARN(!TryBindPort(socket, 128));
	BOOST_WARN(!TryBindPort(socket, 1023));

	// out-of-range ports
	BOOST_CHECK(!TryBindPort(socket, 65536));
	BOOST_CHECK(!TryBindPort(socket, 65537));
	BOOST_CHECK(!TryBindPort(socket, -1));
}