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 40354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint eachResult(char *out, struct sockaddr_in *addr); 41c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 42c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble average(double *tbl) 43c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 44c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return average of values in tbl 45c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 46c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = 0; 472c28215423293e443469a07ae7011135d058b671Garrett Cooper 48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 49c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt += tbl[i]; 50c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 51c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = rslt / maxIter; 52c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return rslt; 53c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 54c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 55c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble mini(double *tbl) 56c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 57c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return minimal of values in tbl 58c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 59c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = tbl[0]; 602c28215423293e443469a07ae7011135d058b671Garrett Cooper 61354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 62c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak if (rslt > tbl[i]) 63c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = tbl[i]; 64c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 652c28215423293e443469a07ae7011135d058b671Garrett Cooper return rslt; 66c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 67c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 68c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modakdouble maxi(double *tbl) 69c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 70c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Return maximal of values in tbl 71c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 72c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double rslt = tbl[0]; 732c28215423293e443469a07ae7011135d058b671Garrett Cooper 74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 75c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak if (rslt < tbl[i]) 76c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = tbl[i]; 77c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 78c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return rslt; 79c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 80c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 817c7aeb5d8beb7b0d634d792e09893cc2206514f1subrata_modakint main(int argn, char *argc[]) 82c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 83c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Program parameters : argc[1] : HostName or Host IP 84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // argc[2] : Server Program Number 85354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // argc[3] : Number of test call 86354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao // other arguments depend on test case 872c28215423293e443469a07ae7011135d058b671Garrett Cooper 88c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //run_mode can switch into stand alone program or program launch by shell script 89c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //1 : stand alone, debug mode, more screen information 90c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //0 : launch by shell script as test case, only one printf -> result status 91c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int run_mode = 0; 92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int test_status = 0; //Default test result set to FAILED 93c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int i; 94c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak double *resultTbl; 95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao struct timeval tv1, tv2; 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao struct timezone tz; 97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao long long diff; 98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao double rslt; 99c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int progNum = atoi(argc[2]); 100c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak enum clnt_stat cs; 101c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int varSnd = 10; 102c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak int varRec = -1; 1032c28215423293e443469a07ae7011135d058b671Garrett Cooper 104c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Test initialisation 105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao maxIter = atoi(argc[3]); 106d218f348c12b42a78fa0306d9a033bfa4f67238bCyril Hrubis resultTbl = malloc(maxIter * sizeof(double)); 1072c28215423293e443469a07ae7011135d058b671Garrett Cooper 108c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Call tested function several times 109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao for (i = 0; i < maxIter; i++) { 110c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Tic 111c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak gettimeofday(&tv1, &tz); 1122c28215423293e443469a07ae7011135d058b671Garrett Cooper 113c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Call function 1142c28215423293e443469a07ae7011135d058b671Garrett Cooper cs = clnt_broadcast(progNum, VERSNUM, PROCNUM, 115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (xdrproc_t) xdr_int, (char *)&varSnd, 116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (xdrproc_t) xdr_int, (char *)&varRec, 117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao eachResult); 1182c28215423293e443469a07ae7011135d058b671Garrett Cooper 119c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak if (cs != RPC_SUCCESS) 120c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak clnt_perrno(cs); 1212c28215423293e443469a07ae7011135d058b671Garrett Cooper 122c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Toc 123c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak gettimeofday(&tv2, &tz); 1242c28215423293e443469a07ae7011135d058b671Garrett Cooper 125c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Add function execution time (toc-tic) 126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao diff = 127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (tv2.tv_sec - tv1.tv_sec) * 1000000L + (tv2.tv_usec - 128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao tv1.tv_usec); 129c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak rslt = (double)diff / 1000; 1302c28215423293e443469a07ae7011135d058b671Garrett Cooper 131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (cs == RPC_SUCCESS) { 132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao resultTbl[i] = rslt; 133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else { 134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao test_status = 1; 135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (run_mode) { 139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao fprintf(stderr, "lf time = %lf usecn\n", resultTbl[i]); 140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 141c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak } 1422c28215423293e443469a07ae7011135d058b671Garrett Cooper 143c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //This last printf gives the result status to the tests suite 144c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //normally should be 0: test has passed or 1: test has failed 145c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak printf("%d\n", test_status); 1462c28215423293e443469a07ae7011135d058b671Garrett Cooper 147c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return test_status; 148c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak} 149c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak 150354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaoint eachResult(char *out, struct sockaddr_in *addr) 151c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak{ 152c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak //Nothing to do here in that test case... 153c0caf8f23e4c43743fcac7e5a308d085b2f09107subrata_modak return 1; 154ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 155