1c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak/* 2c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* Copyright (c) Bull S.A. 2007 All Rights Reserved. 3c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 4c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* This program is free software; you can redistribute it and/or modify it 5c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* under the terms of version 2 of the GNU General Public License as 6c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* published by the Free Software Foundation. 7c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 8c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* This program is distributed in the hope that it would be useful, but 9c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* WITHOUT ANY WARRANTY; without even the implied warranty of 10c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 12c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* Further, this software is distributed without any warranty that it is 13c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* free of the rightful claim of any third person regarding infringement 14c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* or the like. Any license provided herein, whether implied or 15c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* otherwise, applies only to this software file. Patent licenses, if 16c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* any, provided herein do not apply to combinations of this program with 17c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* other software, or any other product whatsoever. 18c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 19c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* You should have received a copy of the GNU General Public License along 20fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao* with this program; if not, write the Free Software Foundation, Inc., 21fed9641096e27f79a0f2d9adfe9839dd8d11dc0fWanlong Gao* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 23c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* History: 24c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* Created by: Cyril Lacabanne (Cyril.Lacabanne@bull.net) 25c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak* 262c28215423293e443469a07ae7011135d058b671Garrett Cooper*/ 27c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 28c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#include <stdio.h> 29c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#include <stdlib.h> 30c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#include <sys/time.h> 31c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#include <rpc/rpc.h> 32c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 33c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak//Standard define 34c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#define PROCNUM 1 35c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak#define VERSNUM 1 36c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 37c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak//Set number of test call 38c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakint maxIter; 39c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 40c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble average(double *tbl) 41c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 42c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return average of values in tbl 43c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 44c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = 0; 452c28215423293e443469a07ae7011135d058b671Garrett Cooper 46354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 47c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt += tbl[i]; 48c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 49c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = rslt / maxIter; 50c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return rslt; 51c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 52c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 53c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble mini(double *tbl) 54c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 55c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return minimal of values in tbl 56c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 57c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = tbl[0]; 582c28215423293e443469a07ae7011135d058b671Garrett Cooper 59354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 60c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak if (rslt > tbl[i]) 61c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = tbl[i]; 62c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 632c28215423293e443469a07ae7011135d058b671Garrett Cooper return rslt; 64c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 65c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 66c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble maxi(double *tbl) 67c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 68c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return maximal of values in tbl 69c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 70c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = tbl[0]; 712c28215423293e443469a07ae7011135d058b671Garrett Cooper 72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 73c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak if (rslt < tbl[i]) 74c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = tbl[i]; 75c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 76c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return rslt; 77c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 78c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 797c7aeb5d8beb7b0d634d792e09893cc2206514f1subrata_modakint main(int argn, char *argc[]) 80c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 81c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Program parameters : argc[1] : HostName or Host IP 82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // argc[2] : Server Program Number 83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // argc[3] : Number of test call 84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // other arguments depend on test case 852c28215423293e443469a07ae7011135d058b671Garrett Cooper 86c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //run_mode can switch into stand alone program or program launch by shell script 87c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //1 : stand alone, debug mode, more screen information 88c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //0 : launch by shell script as test case, only one printf -> result status 89c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int run_mode = 0; 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int test_status = 0; //Default test result set to FAILED 91c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 92c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double *resultTbl; 93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao struct timeval tv1, tv2; 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao struct timezone tz; 95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao long long diff; 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao double rslt; 97c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int progNum = atoi(argc[2]); 98c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak char proto[8] = "udp"; 99c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak CLIENT *clnt = NULL; 100c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak enum clnt_stat cs; 101c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak struct timeval to; 102c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int varSnd = 10; 103c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int varRec = -1; 1042c28215423293e443469a07ae7011135d058b671Garrett Cooper 105c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Test initialisation 106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao maxIter = atoi(argc[3]); 107d218f348c12b42a78fa0306d9a033bfa4f67238bCyril Hrubis resultTbl = malloc(maxIter * sizeof(double)); 108c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak to.tv_sec = 1; 109c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak to.tv_usec = 100; 1102c28215423293e443469a07ae7011135d058b671Garrett Cooper 111c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak clnt = clnt_create(argc[1], progNum, VERSNUM, proto); 112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (clnt == NULL) { 113c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak clnt_pcreateerror("err"); 114c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("5\n"); 115c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return 5; 116c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 117c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Call tested function several times 118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 119c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Tic 120c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak gettimeofday(&tv1, &tz); 1212c28215423293e443469a07ae7011135d058b671Garrett Cooper 122c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Call function 1232c28215423293e443469a07ae7011135d058b671Garrett Cooper cs = clnt_call(clnt, PROCNUM, 124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (xdrproc_t) xdr_int, (char *)&varSnd, 125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (xdrproc_t) xdr_int, (char *)&varRec, to); 1262c28215423293e443469a07ae7011135d058b671Garrett Cooper 127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (cs != RPC_SUCCESS) 128c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak clnt_perrno(cs); 1292c28215423293e443469a07ae7011135d058b671Garrett Cooper 130c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Toc 131c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak gettimeofday(&tv2, &tz); 1322c28215423293e443469a07ae7011135d058b671Garrett Cooper 133c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Add function execution time (toc-tic) 134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao diff = 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (tv2.tv_sec - tv1.tv_sec) * 1000000L + (tv2.tv_usec - 136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tv1.tv_usec); 137c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = (double)diff / 1000; 1382c28215423293e443469a07ae7011135d058b671Garrett Cooper 139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (cs == RPC_SUCCESS) { 140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao resultTbl[i] = rslt; 141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else { 142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao test_status = 1; 143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (run_mode) { 147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao fprintf(stderr, "lf time = %lf usecn\n", resultTbl[i]); 148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 149c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 1502c28215423293e443469a07ae7011135d058b671Garrett Cooper 151c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //This last printf gives the result status to the tests suite 152c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //normally should be 0: test has passed or 1: test has failed 153c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("%d\n", test_status); 154c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("%lf %d\n", average(resultTbl), maxIter); 155c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("%lf\n", mini(resultTbl)); 156c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("%lf\n", maxi(resultTbl)); 1572c28215423293e443469a07ae7011135d058b671Garrett Cooper 158c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return test_status; 159ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 160