rx: Cleanup and build src/rx/test

We have several programs in src/rx/test that are not built, and have
bitrotted as a result. Clean them up so they can build again, and
make them all build by default.

Some pieces depend on higher-level libraries (libafsrpc) that depend
on rx, so we cannot build all of these during 'make rx'. So create a
new top-level make target, 'rx_test', that just builds the test
programs.

Remove testqueue.c instead of fixing it, since it just tests the old
rx queue implementation, and we already have tests for the newer
opr_queue.

Remove some obsolete references to rxperf/th_rxperf in here; rxperf
has lived in src/tools/ for quite some time.

Change-Id: I8b8b2c0813531ef185d95f4d6fdce6bc69320b80
Reviewed-on: https://gerrit.openafs.org/14749
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
This commit is contained in:
Andrew Deason 2021-08-08 15:40:09 -05:00 committed by Benjamin Kaduk
parent 2d980aaef7
commit 236cb51b83
12 changed files with 75 additions and 282 deletions

View File

@ -190,6 +190,9 @@ rxgen: $(DIR_roken) config
rx: config lwp rxgen rx_depinstall util rxgk_depinstall
+${COMPILE_PART1} rx ${COMPILE_PART2}
rx_test: rx libafsrpc
+${COMPILE_PART1} rx/test ${COMPILE_PART2}
rxstat: rx rxstat_depinstall
+${COMPILE_PART1} rxstat ${COMPILE_PART2}
@ -635,7 +638,7 @@ finale_notest: project cmd comerr afsd butc tbutc tbudb @ENABLE_KERNEL_MODULE@ \
bozo @VFSCK@ volser tvolser tsalvaged dviced dvolser libafscp \
venus venustests update xstat afsmonitor rxdebug libafsrpc rfc3961 \
hcrypto libafsauthent libadmin man-pages tools platform kopenafs \
authtools $(DIR_roken) rxgk
authtools $(DIR_roken) rxgk rx_test
+${COMPILE_PART1} finale ${COMPILE_PART2}
finale_nolibafs_notest: project cmd comerr afsd butc tbutc tbudb libuafs audit kauth \
@ -643,7 +646,7 @@ finale_nolibafs_notest: project cmd comerr afsd butc tbutc tbudb libuafs audit k
volser tvolser tsalvaged dviced dvolser libafscp venus venustests \
update xstat afsmonitor rxdebug libafsrpc rfc3961 hcrypto \
libafsauthent libadmin man-pages tools platform kopenafs \
authtools $(DIR_roken) rxgk
authtools $(DIR_roken) rxgk rx_test
+${COMPILE_PART1} finale ${COMPILE_PART2}
finale: finale_notest test_build

View File

@ -182,6 +182,7 @@ dest: librx.a
# Misc. targets
#
clean:
cd test && $(MAKE) clean
$(LT_CLEAN)
$(RM) -f *.o *.a core *_component_version_number.c

View File

@ -2,8 +2,11 @@
# git ls-files -i --exclude-standard
# to check that you haven't inadvertently ignored any tracked files.
/generator
/kctest
/kstest
/tableGen
/testclient
/testserver
/generator
/tableGen
/th_rxperf
/th_testclient
/th_testserver

View File

@ -12,7 +12,8 @@ include @TOP_OBJDIR@/src/config/Makefile.lwp
LDIRS= -L.. -L${TOP_LIBDIR}
LIBS= ${TOP_LIBDIR}/libcmd.a ../librx.a ${TOP_LIBDIR}/liblwp.a \
${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libsys.a ${XLIBS}
${TOP_LIBDIR}/util.a ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/libopr.a \
${LIB_hcrypto} ${LIB_roken} ${XLIBS}
MODULE_CFLAGS=-DRXDEBUG
@ -26,12 +27,14 @@ MT_LINK = $(CC) $(MT_CFLAGS) $(COMMON_CFLAGS) $(AFS_LDFLAGS) -o $@ \
$(LIB_hcrypto) $(LIB_roken) \
$(MT_LIBS)
TESTS = testclient testserver kstest kctest testqueue tableGen generator
TESTS = testclient testserver kstest kctest tableGen generator
TH_TESTS = th_testserver th_testclient
all: test
all: test th_test
install dest:
test tests: ${TESTS}
@ -49,7 +52,10 @@ kstest: ../librx.a kstest.o
kctest: ../librx.a kctest.o
${LINK}
rxperf: rxperf.o ../librx.a
tableGen: ../librx.a tableGen.o
${LINK}
generator: ../librx.a generator.o
${LINK}
# th_ versions only have link lines for Solaris now.
@ -67,16 +73,6 @@ th_testserver.o: testserver.c
$(MT_CC) $(COMMON_CFLAGS) $(MT_CFLAGS) -c -o th_testserver.o \
${srcdir}/testserver.c
th_rxperf: th_rxperf.o ${TOP_LIBDIR}/libafsrpc.a ${TOP_LIBDIR}/libopr.a
$(MT_LINK)
th_rxperf.o: rxperf.c
$(MT_CC) $(COMMON_CFLAGS) $(MT_CFLAGS) -c $(srcdir)/rxperf.c \
-o th_rxperf.o
testqueue: ../librx.a testqueue.o
${LINK}
${RXTESTOBJS}: ${BASICINCLS} ../rx.h
clean:

View File

@ -262,14 +262,14 @@ WriteXG(rpcArgs * argsP, FILE * xg_h, char *serverName, int sign_no)
/* declare each arg */
for (i = 0; i < argsP->argCount; i++) {
WriteXGDecl(&argsP->argDescr[i], xg_h, i, FALSE,
WriteXGDecl(&argsP->argDescr[i], xg_h, i, 0,
(i == argsP->argCount - 1));
}
/* Now pass the paramaters inside a structure */
fprintf(xg_h, "\nstruct %s_t {\n", name);
for (i = 0; i < argsP->argCount; i++) {
WriteXGDecl(&argsP->argDescr[i], xg_h, i, TRUE,
WriteXGDecl(&argsP->argDescr[i], xg_h, i, 1,
(i == argsP->argCount - 1));
}
fprintf(xg_h, "} ;\n");
@ -285,7 +285,7 @@ WriteXG(rpcArgs * argsP, FILE * xg_h, char *serverName, int sign_no)
PRIVATE void
GetRandStr(int strLen, char **ret, int *rP)
{
int i, randI;
int i, randI = 0;
char buf[5];
strcpy(*ret, "\"");
@ -537,7 +537,7 @@ WriteServC(rpcArgs * argsP, FILE * srv_h, char *serverName, int sign_no)
argsP->argDescr[i].outValue[0]);
} else if (strstr(typ, "String")) {
fprintf(srv_h, "\n\t*a%d = (drpc_%s_t)rpc_ss_allocate(%d);",
i, typ, strlen(argsP->argDescr[i].outValue[0]) - 1);
i, typ, (int)strlen(argsP->argDescr[i].outValue[0]) - 1);
fprintf(srv_h, "\n\tstrcpy((char *)*a%d, %s);", i,
argsP->argDescr[i].outValue[0]);
} else {
@ -609,7 +609,7 @@ WriteServC(rpcArgs * argsP, FILE * srv_h, char *serverName, int sign_no)
argsP->argDescr[i].outValue[0]);
} else if (strstr(typ, "String")) {
fprintf(srv_h, "\n\ts->a%d = rpc_ss_allocate(%d);", i,
strlen(argsP->argDescr[i].outValue[0]) - 1);
(int)strlen(argsP->argDescr[i].outValue[0]) - 1);
fprintf(srv_h, "\n\tstrcpy((char *)s->a%d, %s);", i,
argsP->argDescr[i].outValue[0]);
} else {
@ -1004,7 +1004,7 @@ WriteClt(rpcArgs * argsP, char *serverName, int sign_no, FILE * itl_h)
/* initialize IN/INOUT args */
for (i = 0; i < argsP->argCount; i++) {
WriteCltInit(&argsP->argDescr[i], itl_h, i, FALSE);
WriteCltInit(&argsP->argDescr[i], itl_h, i, 0);
}
/* call the server */
@ -1075,7 +1075,7 @@ WriteClt(rpcArgs * argsP, char *serverName, int sign_no, FILE * itl_h)
/* initialize IN/INOUT args */
for (i = 0; i < argsP->argCount; i++) {
WriteCltInit(&argsP->argDescr[i], itl_h, i, TRUE);
WriteCltInit(&argsP->argDescr[i], itl_h, i, 1);
}
/* call the server */
@ -1274,7 +1274,7 @@ ProcessCmdLine(int argc, char **argv, char **serverName, char **ipFileName,
}
void
int
main(int argc, char **argv)
{
FILE *table_h, *srv_h, *xg_h, *clt_h, *mak_h;
@ -1431,5 +1431,5 @@ main(int argc, char **argv)
fprintf(mak_h, "\t%s %s%d.mak clean\n", platform[0], serverName, i);
fclose(mak_h);
exit(0);
return 0;
}

View File

@ -14,7 +14,7 @@
#define MACRO_END } while (0)
typedef enum { FALSE, TRUE } boolean_t;
typedef int boolean_t;
/* no. tests per file */
#define TESTS_PER_FILE 50

View File

@ -16,13 +16,10 @@
#include <netdb.h>
#include <stdio.h>
#include <signal.h>
#include "xdr.h"
#include "rx.h"
#include "rx_globals.h"
#include "rx_null.h"
#if RX_VAB_EXISTS
#include "rx_vab.h"
#endif
#include "rx/xdr.h"
#include "rx/rx.h"
#include "rx/rx_globals.h"
#include "rx/rx_null.h"
static long host;
static short port;
@ -30,23 +27,7 @@ static short count;
static short secLevel = 0;
static short stats = 0;
#if RX_VAB_EXISTS
static
MakeVTest(akey, aticket, asession)
struct rxvab_EncryptionKey *akey, *asession;
struct rxvab_Ticket *aticket;
{
aticket->ViceId = htonl(71);
memcpy(&aticket->HandShakeKey, "testkeyx", 8);
memcpy(asession, "testkeyx", 8);
bcrypt_encrypt(aticket, aticket, sizeof(struct rxvab_Ticket), akey);
return 0;
}
#else
#define MakeVTest(a,b,c) (printf ("rx_vab support removed\n"), exit (-1))
#endif
void
static void
SigInt(int ignore)
{
if (rx_debugFile) {
@ -59,10 +40,8 @@ SigInt(int ignore)
exit(1);
}
static
ParseCmd(argc, argv)
int argc;
char **argv;
static int
ParseCmd(int argc, char **argv)
{
int i;
struct hostent *th;
@ -100,7 +79,8 @@ ParseCmd(argc, argv)
return 0;
}
nowms()
static long
nowms(void)
{
struct timeval tv;
long temp;
@ -110,9 +90,8 @@ nowms()
return temp;
}
main(argc, argv)
int argc;
char **argv;
int
main(int argc, char **argv)
{
struct rx_securityClass *so;
struct rx_connection *tconn;
@ -120,10 +99,6 @@ main(argc, argv)
XDR xdr;
int i, startms, endms;
long temp;
#if RX_VAB_EXISTS
struct rxvab_Ticket ticket;
struct rxvab_EncryptionKey session;
#endif
host = htonl(0x7f000001);
port = htons(10000);
@ -133,20 +108,8 @@ main(argc, argv)
exit(1);
}
rx_Init(0);
if (secLevel == 0)
if (secLevel == 0) {
so = rxnull_NewClientSecurityObject();
else if (secLevel == 1) {
MakeVTest((struct rxvab_EncryptionKey *)"applexxx", &ticket,
&session);
#if RX_VAB_EXISTS
so = rxvab_NewClientSecurityObject(&session, &ticket, 0);
#endif
} else if (secLevel == 2) {
MakeVTest((struct rxvab_EncryptionKey *)"applexxx", &ticket,
&session);
#if RX_VAB_EXISTS
so = rxvab_NewClientSecurityObject(&session, &ticket, 1);
#endif
} else {
printf("bad security index\n");
exit(1);
@ -156,7 +119,7 @@ main(argc, argv)
exit(1);
}
tconn = rx_NewConnection(host, port, 1, so, secLevel);
printf("conn is %x\n", tconn);
printf("conn is %p\n", tconn);
startms = nowms();
for (i = 0; i < count; i++) {
@ -168,7 +131,7 @@ main(argc, argv)
xdr.x_op = XDR_DECODE;
xdr_long(&xdr, &temp);
if (temp != 1989)
printf("wrong value returned (%d)\n", temp);
printf("wrong value returned (%ld)\n", temp);
rx_EndCall(tcall, 0);
}
endms = nowms();
@ -179,4 +142,5 @@ main(argc, argv)
rx_PrintStats(stdout);
#endif
SigInt(0);
return 1;
}

View File

@ -16,10 +16,10 @@
#include <netdb.h>
#include <stdio.h>
#include <signal.h>
#include "xdr.h"
#include "rx.h"
#include "rx_globals.h"
#include "rx_null.h"
#include "rx/xdr.h"
#include "rx/rx.h"
#include "rx/rx_globals.h"
#include "rx/rx_null.h"
static int port;
static short stats = 0;
@ -37,10 +37,8 @@ SigInt(int ignore)
}
static
ParseCmd(argc, argv)
int argc;
char **argv;
static int
ParseCmd(int argc, char **argv)
{
int i;
for (i = 1; i < argc; i++) {
@ -64,9 +62,8 @@ ParseCmd(argc, argv)
}
/* er loop */
static
rxk_erproc(acall)
struct rx_call *acall;
static int
rxk_erproc(struct rx_call *acall)
{
XDR xdr;
long temp;
@ -79,11 +76,10 @@ rxk_erproc(acall)
return 0;
}
main(argc, argv)
int argc;
char **argv;
int
main(int argc, char **argv)
{
long code;
int code;
static struct rx_securityClass *sc[3]; /* so other kernel procs can reference it */
struct rx_service *tservice;
@ -103,10 +99,11 @@ main(argc, argv)
sc[1] = sc[2] = 0;
printf("new secobj created\n");
tservice = rx_NewService(0, 1, "test", sc, 1 /* 3 */ , rxk_erproc);
printf("service is %x\n", tservice);
printf("service is %p\n", tservice);
if (!tservice) {
printf("failed to create service\n");
exit(1);
}
rx_StartServer(1); /* donate self */
return -1;
}

View File

@ -66,20 +66,10 @@
\n"); \
MACRO_END
/* macro which sets if attributes for var/conf found */
#define SET_ATTR_FLAGS( x ) \
MACRO_BEGIN \
if (!strcmp(attrib[x], "size")) SIZE = TRUE;\
else if (!strcmp(attrib[x], "max")) MAX = TRUE; \
else if (!strcmp(attrib[x], "length")) LENGTH = TRUE;\
else if (!strcmp(attrib[x], "last")) LAST = TRUE;\
MACRO_END
static char **dir;
static char **typ;
static int dir_size;
static int typ_size;
static int attr_size;
PRIVATE char *init_dir[] = { "IN", "OUT", "INOUT" };
@ -92,25 +82,6 @@ PRIVATE char *init_typ[] = {
"ar_short",
"ar_int32",
};
PRIVATE char *attrib[] = {
"1 max",
"1 size",
"1 first",
"1 last",
"1 length",
"2 max first",
"2 max last",
"2 max length",
"2 size first",
"2 size last",
"2 size length",
"2 first last",
"2 first length",
"3 max first last",
"3 max first length",
"3 size first last",
"3 size first length"
};
/*
* 31 bit random number generator, we don't really care how random
@ -120,7 +91,7 @@ PRIVATE char *attrib[] = {
static unsigned long randVal = 0x330E16;
PRIVATE double
drand32()
drand32(void)
{
randVal = ((randVal * 0xEECE66D) + 0xB) & 0xFFFFFFFF;
return ((double)(randVal) / 4294967296.0);
@ -158,9 +129,7 @@ BunchArg(FILE * O_FP)
* SingleArg -- prints signature for single argument of given type
*/
PRIVATE void
SingleArg(O_FP, typ_index)
FILE *O_FP;
IN int typ_index;
SingleArg(FILE *O_FP, int typ_index)
{
int dir_index;
@ -180,10 +149,7 @@ SingleArg(O_FP, typ_index)
* DoubleArg -- prints signature for two arguments of given types
*/
PRIVATE void
DoubleArg(O_FP, typ_index1, typ_index2)
FILE *O_FP;
IN int typ_index1;
IN int typ_index2;
DoubleArg(FILE *O_FP, int typ_index1, int typ_index2)
{
int dir_index1;
int dir_index2;
@ -209,11 +175,7 @@ DoubleArg(O_FP, typ_index1, typ_index2)
* ProcessCmdLine -- processes the command line args
*/
PRIVATE void
ProcessCmdLine(argc, argv, apFileNamePP, outputFileP)
int argc;
char **argv;
char **apFileNamePP;
char **outputFileP;
ProcessCmdLine(int argc, char **argv, char **apFileNamePP, char **outputFileP)
{
int i, n;
char **p;
@ -299,14 +261,10 @@ ProcessCmdLine(argc, argv, apFileNamePP, outputFileP)
typ_size = sizeof(init_typ) / sizeof(init_typ[0]);
typ = &init_typ[0];
}
attr_size = sizeof(attrib) / sizeof(attrib[0]);
}
void
main(argc, argv)
int argc;
char **argv;
int
main(int argc, char **argv)
{
int i, j;
char *apFileName = NULL;
@ -340,5 +298,5 @@ main(argc, argv)
}
fclose(O_FP);
exit(0);
return 0;
}

View File

@ -82,7 +82,6 @@ main(int argc, char **argv)
int logstdout = 0;
struct rx_connection *conn;
struct rx_call *call;
struct rx_peer *peer;
int err = 0;
int nCalls = 1, nBytes = 1;
int bufferSize = 4000000;

View File

@ -1,129 +0,0 @@
/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
*
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
*/
#include <afsconfig.h>
#include <afs/param.h>
#include <rx/rx_queue.h>
struct myq {
struct rx_queue queue_header;
int value;
};
void
qprint(char *s, struct myq *qe)
{
printf("%s/%x: next:%x, prev:%x, value=%d\n", s, qe, queue_Next(qe, myq),
queue_Prev(qe, myq), qe->value);
}
void
qremove(char *s, struct myq *q)
{
struct myq *qe, *nqe;
printf("*head* ");
qprint(s, q);
for (queue_Scan(q, qe, nqe, myq)) {
if (qe->value <= 10)
queue_Remove(qe);
else
qprint(s, qe);
}
}
/* Separate test for the splice macros */
struct rx_queue *
createQueue(int n)
{
int i;
struct rx_queue *q;
struct myq *qe;
q = malloc(sizeof(struct rx_queue));
queue_Init(q);
for (i = 0; i < 3; i++) {
qe = malloc(sizeof(struct myq));
qe->value = n * 1000 + i;
queue_Append(q, qe);
}
return q;
}
void
testSplice(void)
{
struct rx_queue *q[10];
struct myq *qe, *nqe;
int i;
for (i = 0; i < 10; i++)
q[i] = createQueue(i);
for (i = 0; i < 9; i++) {
if (i & 1)
queue_SplicePrepend(q[0], q[i + 1]);
else
queue_SpliceAppend(q[0], q[i + 1]);
}
/* Move the queue to the middle (splice non-empty onto empty) */
queue_SpliceAppend(q[7], q[0]);
queue_SplicePrepend(q[6], q[0]);
/* Splice some empty&non-empty queues onto empty&non-empty queues */
for (i = 0; i < 9; i++)
queue_SpliceAppend(q[i], q[i + 1]);
for (i = 0; i < 9; i++)
queue_SplicePrepend(q[i], q[i + 1]);
printf("All queues except 5 should be empty\n");
for (i = 0; i < 10; i++) {
printf("Forwards, i=%d:", i);
for (queue_Scan(q[i], qe, nqe, myq))
printf(" %d", qe->value);
printf("\n");
}
for (i = 0; i < 10; i++) {
printf("Backwards, i=%d:", i);
for (queue_ScanBackwards(q[i], qe, nqe, myq))
printf(" %d", qe->value);
printf("\n");
}
}
void
testAppend(void)
{
int i;
struct myq x;
struct myq xa[20];
struct myq y;
struct myq ya[20];
queue_Init(&x);
x.value = 100001;
for (i = 0; i < 20; i++)
queue_Prepend(&x, &xa[i]), xa[i].value = i + 1;
queue_Init(&y);
y.value = 100002;
for (i = 0; i < 20; i++)
queue_Append(&y, &ya[i]), ya[i].value = i + 1;
qremove("x, first pass", &x);
qremove("x, later", &x);
qremove("y, first pass", &y);
qremove("y, later", &y);
}
int
main(int argc, char **argv)
{
if (argc > 1) {
testSplice();
} else {
testAppend();
}
exit(0);
}

View File

@ -55,9 +55,7 @@ quitSignal(int ignore)
#if !defined(AFS_NT40_ENV) && !defined(AFS_LINUX_ENV)
int
test_syscall(a3, a4, a5)
afs_uint32 a3, a4;
void *a5;
test_syscall(afs_uint32 a3, afs_uint32 a4, void *a5)
{
afs_uint32 rcode;
void (*old) (int);
@ -71,8 +69,8 @@ test_syscall(a3, a4, a5)
}
#endif
main(argc, argv)
char **argv;
int
main(int argc, char **argv)
{
struct rx_service *service;
struct rx_securityClass *(secobjs[1]);
@ -94,8 +92,10 @@ main(argc, argv)
else if (strcmp(*argv, "-rxlog") == 0)
rxlog = 1;
#if defined(RXDEBUG) && !defined(AFS_NT40_ENV)
else if (strcmp(*argv, "-trace") == 0)
else if (strcmp(*argv, "-trace") == 0) {
extern char rxi_tracename[80];
strcpy(rxi_tracename, *(++argv)), argc--;
}
#endif
else if (strcmp(*argv, "-logstdout") == 0)
logstdout = 1;
@ -193,6 +193,7 @@ main(argc, argv)
printf("Using %d packet buffers\n", rx_nPackets);
rx_StartServer(1);
return -1;
}
static char buf[2000000];
@ -278,7 +279,7 @@ FileRequest(struct rx_call *call)
rx_SetLocalStatus(call, 79); /* Emulation of file server's old "RCallBackReceivedStore" */
while (nbytes = rx_Read(call, buffer, blockSize)) {
while ((nbytes = rx_Read(call, buffer, blockSize)) != 0) {
if (write(fd, buffer, nbytes) != nbytes) {
perror("writev");
Abort("Write Failed.\n");