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