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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#include <Ice/Ice.h>
#include <IceUtil/Random.h>
#include <Test.h>
#include <TestHelper.h>
#if defined(__GNUC__)
# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
using namespace std;
using namespace Test;
class Client : public Test::TestHelper
{
public:
void run(int, char**);
};
void
Client::run(int argc, char** argv)
{
Ice::PropertiesPtr properties = Ice::createProperties(argc, argv);
properties->setProperty("Ice.Plugin.IceSSL", "IceSSL:createIceSSL");
properties->setProperty("IceSSL.Keychain", "client.keychain");
properties->setProperty("IceSSL.KeychainPassword", "password");
Ice::CommunicatorHolder communicator = initialize(argc, argv, properties);
cout << "testing proxy hash algorithm collisions... " << flush;
map<Ice::Int, Ice::ObjectPrxPtr> seenProxy;
map<Ice::Int, Ice::EndpointPtr> seenEndpoint;
unsigned int proxyCollisions = 0;
unsigned int i = 0;
unsigned int maxCollisions = 10;
unsigned int maxIterations = 10000;
for(i = 0; proxyCollisions < maxCollisions && i < maxIterations; ++i)
{
ostringstream os;
os << i << ":tcp -p " << IceUtilInternal::random(65536) << " -t 10" << IceUtilInternal::random(1000000)
<< ":udp -p " << IceUtilInternal::random(65536) << " -h " << IceUtilInternal::random(100);
Ice::ObjectPrxPtr obj = communicator->stringToProxy(os.str());
Ice::EndpointSeq endpoints = obj->ice_getEndpoints();
if(!seenProxy.insert(make_pair(obj->_hash(), obj)).second)
{
++proxyCollisions;
}
test(obj->_hash() == obj->_hash());
}
test(proxyCollisions < maxCollisions);
//
// Check the same proxy produce the same hash, even when we recreate the proxy.
//
Ice::ObjectPrxPtr prx1 = communicator->stringToProxy("Glacier2/router:tcp -p 10010");
Ice::ObjectPrxPtr prx2 = communicator->stringToProxy("Glacier2/router:ssl -p 10011");
Ice::ObjectPrxPtr prx3 = communicator->stringToProxy("Glacier2/router:udp -p 10012");
Ice::ObjectPrxPtr prx4 = communicator->stringToProxy("Glacier2/router:tcp -h zeroc.com -p 10010");
Ice::ObjectPrxPtr prx5 = communicator->stringToProxy("Glacier2/router:ssl -h zeroc.com -p 10011");
Ice::ObjectPrxPtr prx6 = communicator->stringToProxy("Glacier2/router:udp -h zeroc.com -p 10012");
Ice::ObjectPrxPtr prx7 = communicator->stringToProxy("Glacier2/router:tcp -p 10010 -t 10000");
Ice::ObjectPrxPtr prx8 = communicator->stringToProxy("Glacier2/router:ssl -p 10011 -t 10000");
Ice::ObjectPrxPtr prx9 = communicator->stringToProxy("Glacier2/router:tcp -h zeroc.com -p 10010 -t 10000");
Ice::ObjectPrxPtr prx10 = communicator->stringToProxy("Glacier2/router:ssl -h zeroc.com -p 10011 -t 10000");
map<string, int> proxyMap;
proxyMap["prx1"] = prx1->_hash();
proxyMap["prx2"] = prx2->_hash();
proxyMap["prx3"] = prx3->_hash();
proxyMap["prx4"] = prx4->_hash();
proxyMap["prx5"] = prx5->_hash();
proxyMap["prx6"] = prx6->_hash();
proxyMap["prx7"] = prx7->_hash();
proxyMap["prx8"] = prx8->_hash();
proxyMap["prx9"] = prx9->_hash();
proxyMap["prx10"] = prx10->_hash();
test(communicator->stringToProxy("Glacier2/router:tcp -p 10010")->_hash() == proxyMap["prx1"]);
test(communicator->stringToProxy("Glacier2/router:ssl -p 10011")->_hash() == proxyMap["prx2"]);
test(communicator->stringToProxy("Glacier2/router:udp -p 10012")->_hash() == proxyMap["prx3"]);
test(communicator->stringToProxy("Glacier2/router:tcp -h zeroc.com -p 10010")->_hash() == proxyMap["prx4"]);
test(communicator->stringToProxy("Glacier2/router:ssl -h zeroc.com -p 10011")->_hash() == proxyMap["prx5"]);
test(communicator->stringToProxy("Glacier2/router:udp -h zeroc.com -p 10012")->_hash() == proxyMap["prx6"]);
test(communicator->stringToProxy("Glacier2/router:tcp -p 10010 -t 10000")->_hash() == proxyMap["prx7"]);
test(communicator->stringToProxy("Glacier2/router:ssl -p 10011 -t 10000")->_hash() == proxyMap["prx8"]);
test(communicator->stringToProxy("Glacier2/router:tcp -h zeroc.com -p 10010 -t 10000")->_hash() ==
proxyMap["prx9"]);
test(communicator->stringToProxy("Glacier2/router:ssl -h zeroc.com -p 10011 -t 10000")->_hash() ==
proxyMap["prx10"]);
cerr << "ok" << endl;
}
DEFINE_TEST(Client)
|