コード例 #1
0
ファイル: robustness_test.cpp プロジェクト: crockct/GNRS-DOS
int
main(int argc, char* argv[]) {

    int iterations = 0;	
    if (argc < 4) {
            print_usage(argv[0]);
            return 1;
    }
    int guid_num = atoi(argv[3]);

    if (argc > 4) {
            iterations = atoi(argv[4]);
    }
    
    //string server_addr_s("127.0.0.1:5001");
    //string local_addr_s("192.168.1.1:3001");
    string server_addr_s(argv[1]);
    string local_addr_s(argv[2]);
    NetAddr server_addr(NET_ADDR_TYPE_IPV4_PORT, server_addr_s);
    NetAddr local_addr(NET_ADDR_TYPE_IPV4_PORT, local_addr_s); 

    try {
        //configure service endpoints
        Gnrs *gnrs = new Gnrs(server_addr, local_addr);

        GUID guid = GUID();
	guid.init(guid_num);

        struct timeval t1, t2;
        gettimeofday(&t1, NULL);
        list<NetAddr> lkup_addrs = gnrs->lookup(guid);
        gettimeofday(&t2, NULL);
        long long delay = 1000000 * (t2.tv_sec - t1.tv_sec);
        delay += t2.tv_usec - t1.tv_usec;

        cout << lkup_addrs.size() << " result(s) on lookup for GUID: " 
            << guid.to_int() << "( took " << delay << " us)" << endl;
        int num_addrs = 0;
        for (list<NetAddr>::const_iterator it = lkup_addrs.begin(); 
            it != lkup_addrs.end(); it++) {
            num_addrs++;
            cout << "INFO: \t Addr #" << num_addrs << " : " 
                << (*it).get_value() << endl;
        }
        delete(gnrs);

        if (!iterations) return 0;

        long long total_delay = 0;
        vector<long long>delay_v;
        for(int i = 0; i < iterations; i++) {
            Gnrs *gnrs_heap = new Gnrs(server_addr, local_addr);
            //lookup operation
            gettimeofday(&t1, NULL);
            lkup_addrs = gnrs_heap->lookup(guid);
            gettimeofday(&t2, NULL);
            delay = 1000000 * (t2.tv_sec - t1.tv_sec);
            delay += t2.tv_usec - t1.tv_usec;
            total_delay += delay;
            delay_v.push_back(delay);
            delete(gnrs_heap);
        }

        /* assuming idempotent, results should remain same despite iterations */
            
        int iter = 0;
        cout << "Iteration\tLatency(us)" << endl;
        for (vector<long long>::const_iterator it = delay_v.begin(); 
                                it != delay_v.end(); it++) {
            cout << ++iter << "\t" << *it << endl;
        }
        double avg_delay = total_delay / (double)(1000 * iterations);
        cout <<"INFO: " << "Performed " << iterations << " lookups for GUID '" 
            << guid.to_int() << "' with avg latency of " 
            << avg_delay << " ms" << endl;

    } catch (NetException &ne) {
        cerr << "ERROR: " << ne.what() << endl;
    }

    return 0;
}