Blame src/nameserv/test/testnd.c

Packit 0848f5
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
Packit 0848f5
/*  
Packit 0848f5
 *  (C) 2003 by Argonne National Laboratory.
Packit 0848f5
 *      See COPYRIGHT in top-level directory.
Packit 0848f5
 */
Packit 0848f5
Packit 0848f5
/* 
Packit 0848f5
 * A simple test program for name service routines.  This does not 
Packit 0848f5
 * require the MPI library
Packit 0848f5
 */
Packit 0848f5
Packit 0848f5
#include <stdio.h>
Packit 0848f5
#include <stdarg.h>
Packit 0848f5
/* This is incomplete for the purposes of testing */
Packit 0848f5
typedef struct { int handle; } MPID_Info;
Packit 0848f5
#define MPID_INFO_NULL ((MPID_Info *)0)
Packit 0848f5
#include "namepub.h"
Packit 0848f5
Packit 0848f5
void Error( const char *fmat, ... );
Packit 0848f5
int MPIR_Err_create_code( int old, int kind, const char *fname, 
Packit 0848f5
			  int line, int class, ... );
Packit 0848f5
Packit 0848f5
int main( int argc, char *argv[] )
Packit 0848f5
{
Packit 0848f5
    MPID_NS_Handle ns;
Packit 0848f5
    char           port[1024];
Packit 0848f5
    int            rc;
Packit 0848f5
Packit 0848f5
    /* Create a name service */
Packit 0848f5
    rc = MPID_NS_Create( MPID_INFO_NULL, &ns );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not create name service; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    /* publish several names */
Packit 0848f5
    rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name1", "foo$$12" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not publish name1; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "namea", "bar--14" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not publish namea; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "1-2-3", "testname" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not publish 1-2-3; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    /* Try look ups */
Packit 0848f5
    rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name1", port );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not lookup name1; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	if (strcmp( port, "foo$$12" ) != 0) {
Packit 0848f5
	    Error( "Wrong value for port, got %s\n", port );
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "namea", port );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not lookup namea; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	if (strcmp( port, "bar--14" ) != 0) {
Packit 0848f5
	    Error( "Wrong value for port, got %s\n", port );
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "1-2-3", port );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not lookup 1-2-3; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	if (strcmp( port, "testname" ) != 0) {
Packit 0848f5
	    Error( "Wrong value for port, got %s\n", port );
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    /* Try a name that isn't published */
Packit 0848f5
    port[0] = 0;
Packit 0848f5
    rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name", port );
Packit 0848f5
    if (!rc) {
Packit 0848f5
	Error( "Found port (%s) for unpublished name\n", port );
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name 1", "foo 12" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not publish \"name 1\"; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name 1", port );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not lookup \"name 1\"; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	if (strcmp( port, "foo 12" ) != 0) {
Packit 0848f5
	    Error( "Wrong value for port, got %s\n", port );
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    /* Note that there are some restrictions in the file-based version */
Packit 0848f5
    rc = MPID_NS_Publish( ns, MPID_INFO_NULL, "name/1", "foo/12a" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	/* Allow publish to fail with some names */
Packit 0848f5
	;
Packit 0848f5
    }
Packit 0848f5
    else {
Packit 0848f5
	rc = MPID_NS_Lookup( ns, MPID_INFO_NULL, "name/1", port );
Packit 0848f5
	if (rc) {
Packit 0848f5
	    Error( "Could not lookup name/1; rc = %d\n", rc );
Packit 0848f5
	}
Packit 0848f5
	else {
Packit 0848f5
	    if (strcmp( port, "foo/12a" ) != 0) {
Packit 0848f5
		Error( "Wrong value for port, got %s\n", port );
Packit 0848f5
	    }
Packit 0848f5
	}
Packit 0848f5
	rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name/1" );
Packit 0848f5
	if (rc) {
Packit 0848f5
	    Error( "Could not unpublish name/1; rc = %d\n", rc );
Packit 0848f5
	}
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    /* Try to unpublish the names */
Packit 0848f5
    rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name1" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not unpublish name1; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "name 1" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not unpublish \"name 1\"; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "namea" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not unpublish namea; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
    rc = MPID_NS_Unpublish( ns, MPID_INFO_NULL, "1-2-3" );
Packit 0848f5
    if (rc) {
Packit 0848f5
	Error( "Could not unpublish 1-2-3; rc = %d\n", rc );
Packit 0848f5
    }
Packit 0848f5
Packit 0848f5
    /* If we make it to the end, there are no errors */
Packit 0848f5
    printf( " No Errors\n" );
Packit 0848f5
Packit 0848f5
    return 0;
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
void Error( const char *fmat, ... )
Packit 0848f5
{
Packit 0848f5
    va_list list;
Packit 0848f5
    va_start( list, fmat );
Packit 0848f5
    vprintf( fmat, list );
Packit 0848f5
    va_end(list);
Packit 0848f5
    fflush( stdout );
Packit 0848f5
    exit( 1 );
Packit 0848f5
}
Packit 0848f5
Packit 0848f5
#ifdef STANDALONE
Packit 0848f5
int MPIR_Err_create_code( int old, int kind, const char *fname, 
Packit 0848f5
			  int line, int class, ... )
Packit 0848f5
{
Packit 0848f5
    return class;
Packit 0848f5
}
Packit 0848f5
#endif