Main
AutoGen
Pages
Home
Announce
FAQ
docs
XML Defs
testimonials
downloads
Automated
Options
AutoOpts
Comparison
Man example
Redistribute
Licensing
local use
using getopt
GCC's
Fixincludes
fixincludes
Automated
FSM
description
example
usagefsm
Addons
addon
Automated
XDR
xdr project
definitions
XDR
client
clt. head
server
srv. head
debug
test code
This is a brief example extracted from a prototype implementation for NFSv4. This is hand crafted code showing how one might write code to test out the generated interfaces.
#include <stdio.h>
#include "nfsv4.h"
#include "nfsv4-clhdr.h"
int command_was_sent = 0;
void
finish_access4(
void* user_cookie,
nfs4_compound_res* p_cp_res,
nfs4_status final_status,
uint32_t requested /* in */,
ACCESS4res* p_res /* out */ )
{
fputs( "finish_access4 called\n", stderr );
if (command_was_sent == 0) {
fputs( "command completed out of sequence\n", stderr );
exit( 1 );
}
if (p_res == NULL) {
/* no deallocations to do */
return;
}
if (p_res->status != NFS4_STATUS_OK) {
fputs( "I could not access what I wanted >:-(\n", stderr );
return;
}
if ( (requested != p_res->ACCESS4res_u.resok4.supported)
|| (requested != p_res->ACCESS4res_u.resok4.access)) {
fputs( "I did not get the access I wanted >:-(\n", stderr );
return;
}
command_was_sent--;
}
nfs4_status
nfs4_access4_svc(
nfs4_compound_args* p_cpd_args,
ACCESS4res* p_res,
ACCESS4args* p_args )
{
uint32_t req = p_args->requested;
if (req == 0)
req = ~0;
if (p_res != NULL)
p_res->ACCESS4res_u.resok4.access =
p_res->ACCESS4res_u.resok4.supported = p_args->requested;
fputs( "nfs4_access4_svc called\n", stderr );
return NFS4_STATUS_OK;
}
int
main( int argc,
char** argv )
{
int res = 0;
t_nfs_cookie nfs_cookie;
static utf8string tag = { sizeof( "mytag" ), "mytag" };
int fail_test = 0;
if (argc > 1)
fail_test = atoi( argv[1] );
fprintf( stderr, "Hello, NFS world!\n" );
if (nfs4_null_4( NULL, NULL ) == (void*)NULL) {
fprintf( stderr, "nfs4_null_4 failed\n" );
res++;
}
if (--fail_test == 0) {
fputs( "We are about to die horribly. Expect it.\n", stderr );
do_nfs4_access4( nfs_cookie, finish_access4, ACCESS4_LOOKUP );
fputs( "WORSE YET!! We did *not* die :-(\n", stderr );
}
if (init_nfs4_compound( &nfs_cookie, &tag, NULL ) != RPC_SUCCESS) {
fprintf( stderr, "init_nfs4_compound failed\n" );
res++;
}
{
uint32_t mode = ACCESS4_EXECUTE << 1;
int cmd_ct = 0;
do {
mode >>= 1;
if (do_nfs4_access4( nfs_cookie, finish_access4, mode ) != 0) {
fprintf( stderr, "do_nfs4_access4 for %d failed\n", mode );
res++;
}
cmd_ct++;
} while (mode != 0);
command_was_sent = cmd_ct;
}
if (send_nfs4_compound( nfs_cookie, NULL ) != 0) {
fprintf( stderr, "send_nfs4_compound failed\n" );
res++;
}
if (--fail_test == 0) {
fputs( "We are about to die horribly. Expect it.\n", stderr );
do_nfs4_access4( nfs_cookie, finish_access4, ACCESS4_LOOKUP );
fputs( "WORSE YET!! We did *not* die :-(\n", stderr );
}
if (command_was_sent)
res++;
if (res != 0)
fprintf( stderr, "%d FAILURES\n", res );
else
fprintf( stderr, "SUCCESSFUL!\n" );
return res;
}
top Viewable With Any Browser Valid XHTML 1.0!