1/* 2* Copyright (c) Bull S.A. 2007 All Rights Reserved. 3* 4* This program is free software; you can redistribute it and/or modify it 5* under the terms of version 2 of the GNU General Public License as 6* published by the Free Software Foundation. 7* 8* This program is distributed in the hope that it would be useful, but 9* WITHOUT ANY WARRANTY; without even the implied warranty of 10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11* 12* Further, this software is distributed without any warranty that it is 13* free of the rightful claim of any third person regarding infringement 14* or the like. Any license provided herein, whether implied or 15* otherwise, applies only to this software file. Patent licenses, if 16* any, provided herein do not apply to combinations of this program with 17* other software, or any other product whatsoever. 18* 19* You should have received a copy of the GNU General Public License along 20* with this program; if not, write the Free Software Foundation, Inc., 21* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22* 23* History: 24* Created by: Cyril Lacabanne (Cyril.Lacabanne@bull.net) 25* 26*/ 27 28#include <stdio.h> 29#include <stdlib.h> 30#include <sys/time.h> 31#include <tirpc/rpc/rpc.h> 32 33//Standard define 34#define PROCNUM 1 35#define VERSNUM 1 36 37//Set number of test call 38int maxIter; 39 40double average(double *tbl) 41{ 42 //Return average of values in tbl 43 int i; 44 double rslt = 0; 45 46 for (i = 0; i < maxIter; i++) { 47 rslt += tbl[i]; 48 } 49 rslt = rslt / maxIter; 50 return rslt; 51} 52 53double mini(double *tbl) 54{ 55 //Return minimal of values in tbl 56 int i; 57 double rslt = tbl[0]; 58 59 for (i = 0; i < maxIter; i++) { 60 if (rslt > tbl[i]) 61 rslt = tbl[i]; 62 } 63 return rslt; 64} 65 66double maxi(double *tbl) 67{ 68 //Return maximal of values in tbl 69 int i; 70 double rslt = tbl[0]; 71 72 for (i = 0; i < maxIter; i++) { 73 if (rslt < tbl[i]) 74 rslt = tbl[i]; 75 } 76 return rslt; 77} 78 79int main(int argn, char *argc[]) 80{ 81 //Program parameters : argc[1] : HostName or Host IP 82 // argc[2] : Server Program Number 83 // argc[3] : Number of test call 84 // other arguments depend on test case 85 86 //run_mode can switch into stand alone program or program launch by shell script 87 //1 : stand alone, debug mode, more screen information 88 //0 : launch by shell script as test case, only one printf -> result status 89 int run_mode = 0; 90 int test_status = 0; //Default test result set to FAILED 91 int i; 92 double *resultTbl; 93 struct timeval tv1, tv2; 94 struct timezone tz; 95 long long diff; 96 double rslt; 97 int progNum = atoi(argc[2]); 98 enum clnt_stat cs; 99 char hostname[256] = { 0 }; 100 char nettype[16] = "visible"; 101 int sndVar = 10; 102 int recVar = -1; 103 104 //Test initialisation 105 maxIter = atoi(argc[3]); 106 resultTbl = malloc(maxIter * sizeof(double)); 107 108 strcpy(hostname, argc[1]); 109 110 if (run_mode == 1) { 111 printf("Server : %s\n", hostname); 112 printf("Server # %d\n", progNum); 113 } 114 //Call tested function several times 115 for (i = 0; i < maxIter; i++) { 116 //Tic 117 gettimeofday(&tv1, &tz); 118 119 //Call function 120 cs = rpc_call(hostname, progNum, VERSNUM, PROCNUM, (xdrproc_t) xdr_int, (char *)&sndVar, // xdr_in 121 (xdrproc_t) xdr_int, (char *)&recVar, // xdr_out 122 nettype); 123 124 //Toc 125 gettimeofday(&tv2, &tz); 126 127 //Add function execution time (toc-tic) 128 diff = 129 (tv2.tv_sec - tv1.tv_sec) * 1000000L + (tv2.tv_usec - 130 tv1.tv_usec); 131 rslt = (double)diff / 1000; 132 133 if (cs == RPC_SUCCESS) { 134 resultTbl[i] = rslt; 135 } else { 136 test_status = 1; 137 break; 138 } 139 140 if (run_mode) { 141 fprintf(stderr, "lf time = %lf usecn\n", resultTbl[i]); 142 } 143 } 144 145 //This last printf gives the result status to the tests suite 146 //normally should be 0: test has passed or 1: test has failed 147 printf("%d\n", test_status); 148 printf("%lf %d\n", average(resultTbl), maxIter); 149 printf("%lf\n", mini(resultTbl)); 150 printf("%lf\n", maxi(resultTbl)); 151 152 return test_status; 153} 154