mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge remote-tracking branch 'upstream/develop' into JSON_testContract
This commit is contained in:
commit
e847b4cba0
@ -3676,6 +3676,29 @@ BOOST_AUTO_TEST_CASE(packed_storage_structs_with_bytes0)
|
|||||||
BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
|
BOOST_CHECK(callContractFunction("test()") == encodeArgs(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(packed_storage_signed)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract C {
|
||||||
|
int8 a;
|
||||||
|
uint8 b;
|
||||||
|
int8 c;
|
||||||
|
uint8 d;
|
||||||
|
function test() returns (uint x1, uint x2, uint x3, uint x4) {
|
||||||
|
a = -2;
|
||||||
|
b = -uint8(a) * 2;
|
||||||
|
c = a * int8(120) * int8(121);
|
||||||
|
x1 = uint(a);
|
||||||
|
x2 = b;
|
||||||
|
x3 = uint(c);
|
||||||
|
x4 = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
compileAndRun(sourceCode);
|
||||||
|
BOOST_CHECK( callContractFunction("test()") == encodeArgs(u256(-2), u256(4), u256(-112), u256(0)));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
45
net.cpp
45
net.cpp
@ -32,7 +32,13 @@ using namespace dev::p2p;
|
|||||||
namespace ba = boost::asio;
|
namespace ba = boost::asio;
|
||||||
namespace bi = ba::ip;
|
namespace bi = ba::ip;
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(net)
|
struct NetFixture
|
||||||
|
{
|
||||||
|
NetFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = true; }
|
||||||
|
~NetFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_SUITE(net, NetFixture)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only used for testing. Not useful beyond tests.
|
* Only used for testing. Not useful beyond tests.
|
||||||
@ -53,7 +59,7 @@ protected:
|
|||||||
struct TestNodeTable: public NodeTable
|
struct TestNodeTable: public NodeTable
|
||||||
{
|
{
|
||||||
/// Constructor
|
/// Constructor
|
||||||
TestNodeTable(ba::io_service& _io, KeyPair _alias, bi::address const& _addr, uint16_t _port = 30300): NodeTable(_io, _alias, _addr, _port) {}
|
TestNodeTable(ba::io_service& _io, KeyPair _alias, bi::address const& _addr, uint16_t _port = 30300): NodeTable(_io, _alias, NodeIPEndpoint(_addr, _port, _port)) {}
|
||||||
|
|
||||||
static std::vector<std::pair<KeyPair,unsigned>> createTestNodes(unsigned _count)
|
static std::vector<std::pair<KeyPair,unsigned>> createTestNodes(unsigned _count)
|
||||||
{
|
{
|
||||||
@ -93,7 +99,7 @@ struct TestNodeTable: public NodeTable
|
|||||||
// manually add node for test
|
// manually add node for test
|
||||||
{
|
{
|
||||||
Guard ln(x_nodes);
|
Guard ln(x_nodes);
|
||||||
shared_ptr<NodeEntry> node(new NodeEntry(m_node, n.first.pub(), NodeIPEndpoint(bi::udp::endpoint(ourIp, n.second), bi::tcp::endpoint(ourIp, n.second))));
|
shared_ptr<NodeEntry> node(new NodeEntry(m_node, n.first.pub(), NodeIPEndpoint(ourIp, n.second, n.second)));
|
||||||
node->pending = false;
|
node->pending = false;
|
||||||
m_nodes[node->id] = node;
|
m_nodes[node->id] = node;
|
||||||
}
|
}
|
||||||
@ -240,7 +246,7 @@ BOOST_AUTO_TEST_CASE(neighboursPacketLength)
|
|||||||
{
|
{
|
||||||
Neighbours::Node node;
|
Neighbours::Node node;
|
||||||
node.ipAddress = boost::asio::ip::address::from_string("200.200.200.200").to_string();
|
node.ipAddress = boost::asio::ip::address::from_string("200.200.200.200").to_string();
|
||||||
node.port = testNodes[i].second;
|
node.udpPort = testNodes[i].second;
|
||||||
node.node = testNodes[i].first.pub();
|
node.node = testNodes[i].first.pub();
|
||||||
out.nodes.push_back(node);
|
out.nodes.push_back(node);
|
||||||
}
|
}
|
||||||
@ -261,7 +267,7 @@ BOOST_AUTO_TEST_CASE(test_neighbours_packet)
|
|||||||
{
|
{
|
||||||
Neighbours::Node node;
|
Neighbours::Node node;
|
||||||
node.ipAddress = boost::asio::ip::address::from_string("127.0.0.1").to_string();
|
node.ipAddress = boost::asio::ip::address::from_string("127.0.0.1").to_string();
|
||||||
node.port = n.second;
|
node.udpPort = n.second;
|
||||||
node.node = n.first.pub();
|
node.node = n.first.pub();
|
||||||
out.nodes.push_back(node);
|
out.nodes.push_back(node);
|
||||||
}
|
}
|
||||||
@ -273,7 +279,7 @@ BOOST_AUTO_TEST_CASE(test_neighbours_packet)
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for (auto n: in.nodes)
|
for (auto n: in.nodes)
|
||||||
{
|
{
|
||||||
BOOST_REQUIRE_EQUAL(testNodes[count].second, n.port);
|
BOOST_REQUIRE_EQUAL(testNodes[count].second, n.udpPort);
|
||||||
BOOST_REQUIRE_EQUAL(testNodes[count].first.pub(), n.node);
|
BOOST_REQUIRE_EQUAL(testNodes[count].first.pub(), n.node);
|
||||||
BOOST_REQUIRE_EQUAL(sha3(testNodes[count].first.pub()), sha3(n.node));
|
BOOST_REQUIRE_EQUAL(sha3(testNodes[count].first.pub()), sha3(n.node));
|
||||||
count++;
|
count++;
|
||||||
@ -337,3 +343,30 @@ BOOST_AUTO_TEST_CASE(test_udp_once)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(netTypes)
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(unspecifiedNode)
|
||||||
|
{
|
||||||
|
Node n = UnspecifiedNode;
|
||||||
|
BOOST_REQUIRE(!n);
|
||||||
|
|
||||||
|
Node node(Public(sha3("0")), NodeIPEndpoint(bi::address(), 0, 0));
|
||||||
|
BOOST_REQUIRE(node);
|
||||||
|
BOOST_REQUIRE(n != node);
|
||||||
|
|
||||||
|
Node nodeEq(Public(sha3("0")), NodeIPEndpoint(bi::address(), 0, 0));
|
||||||
|
BOOST_REQUIRE_EQUAL(node, nodeEq);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(nodeTableReturnsUnspecifiedNode)
|
||||||
|
{
|
||||||
|
ba::io_service io;
|
||||||
|
NodeTable t(io, KeyPair::create(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), 30303, 30303));
|
||||||
|
if (Node n = t.node(NodeId()))
|
||||||
|
BOOST_REQUIRE(false);
|
||||||
|
else
|
||||||
|
BOOST_REQUIRE(n == UnspecifiedNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
41
peer.cpp
41
peer.cpp
@ -28,7 +28,13 @@ using namespace std;
|
|||||||
using namespace dev;
|
using namespace dev;
|
||||||
using namespace dev::p2p;
|
using namespace dev::p2p;
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(p2p)
|
struct P2PFixture
|
||||||
|
{
|
||||||
|
P2PFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = true; }
|
||||||
|
~P2PFixture() { dev::p2p::NodeIPEndpoint::test_allowLocal = false; }
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_SUITE(p2p, P2PFixture)
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(host)
|
BOOST_AUTO_TEST_CASE(host)
|
||||||
{
|
{
|
||||||
@ -45,7 +51,7 @@ BOOST_AUTO_TEST_CASE(host)
|
|||||||
auto node2 = host2.id();
|
auto node2 = host2.id();
|
||||||
host2.start();
|
host2.start();
|
||||||
|
|
||||||
host1.addNode(node2, bi::address::from_string("127.0.0.1"), host2prefs.listenPort, host2prefs.listenPort);
|
host1.addNode(node2, NodeIPEndpoint(bi::address::from_string("127.0.0.1"), host2prefs.listenPort, host2prefs.listenPort));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::seconds(3));
|
this_thread::sleep_for(chrono::seconds(3));
|
||||||
|
|
||||||
@ -82,11 +88,11 @@ BOOST_AUTO_TEST_CASE(save_nodes)
|
|||||||
|
|
||||||
Host& host = *hosts.front();
|
Host& host = *hosts.front();
|
||||||
for (auto const& h: hosts)
|
for (auto const& h: hosts)
|
||||||
host.addNode(h->id(), bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort());
|
host.addNode(h->id(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort()));
|
||||||
|
|
||||||
Host& host2 = *hosts.back();
|
Host& host2 = *hosts.back();
|
||||||
for (auto const& h: hosts)
|
for (auto const& h: hosts)
|
||||||
host2.addNode(h->id(), bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort());
|
host2.addNode(h->id(), NodeIPEndpoint(bi::address::from_string("127.0.0.1"), h->listenPort(), h->listenPort()));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::milliseconds(2000));
|
this_thread::sleep_for(chrono::milliseconds(2000));
|
||||||
bytes firstHostNetwork(host.saveNetwork());
|
bytes firstHostNetwork(host.saveNetwork());
|
||||||
@ -101,7 +107,7 @@ BOOST_AUTO_TEST_CASE(save_nodes)
|
|||||||
BOOST_REQUIRE(r.itemCount() == 3);
|
BOOST_REQUIRE(r.itemCount() == 3);
|
||||||
BOOST_REQUIRE(r[0].toInt<unsigned>() == dev::p2p::c_protocolVersion);
|
BOOST_REQUIRE(r[0].toInt<unsigned>() == dev::p2p::c_protocolVersion);
|
||||||
BOOST_REQUIRE_EQUAL(r[1].toBytes().size(), 32); // secret
|
BOOST_REQUIRE_EQUAL(r[1].toBytes().size(), 32); // secret
|
||||||
BOOST_REQUIRE_EQUAL(r[2].itemCount(), 5);
|
BOOST_REQUIRE(r[2].itemCount() >= 5);
|
||||||
|
|
||||||
for (auto i: r[2])
|
for (auto i: r[2])
|
||||||
{
|
{
|
||||||
@ -112,6 +118,29 @@ BOOST_AUTO_TEST_CASE(save_nodes)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(peerTypes)
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(emptySharedPeer)
|
||||||
|
{
|
||||||
|
shared_ptr<Peer> p;
|
||||||
|
BOOST_REQUIRE(!p);
|
||||||
|
|
||||||
|
std::map<NodeId, std::shared_ptr<Peer>> peers;
|
||||||
|
p = peers[NodeId()];
|
||||||
|
BOOST_REQUIRE(!p);
|
||||||
|
|
||||||
|
p.reset(new Peer(UnspecifiedNode));
|
||||||
|
BOOST_REQUIRE(!p->id);
|
||||||
|
BOOST_REQUIRE(!*p);
|
||||||
|
|
||||||
|
p.reset(new Peer(Node(NodeId(EmptySHA3), UnspecifiedNodeIPEndpoint)));
|
||||||
|
BOOST_REQUIRE(!(!*p));
|
||||||
|
BOOST_REQUIRE(*p);
|
||||||
|
BOOST_REQUIRE(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
||||||
int peerTest(int argc, char** argv)
|
int peerTest(int argc, char** argv)
|
||||||
{
|
{
|
||||||
Public remoteAlias;
|
Public remoteAlias;
|
||||||
@ -137,7 +166,7 @@ int peerTest(int argc, char** argv)
|
|||||||
Host ph("Test", NetworkPreferences(listenPort));
|
Host ph("Test", NetworkPreferences(listenPort));
|
||||||
|
|
||||||
if (!remoteHost.empty() && !remoteAlias)
|
if (!remoteHost.empty() && !remoteAlias)
|
||||||
ph.addNode(remoteAlias, bi::address::from_string(remoteHost), remotePort, remotePort);
|
ph.addNode(remoteAlias, NodeIPEndpoint(bi::address::from_string(remoteHost), remotePort, remotePort));
|
||||||
|
|
||||||
this_thread::sleep_for(chrono::milliseconds(200));
|
this_thread::sleep_for(chrono::milliseconds(200));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user