Blame src/ctests/failed_events.c

Packit 577717
/*
Packit 577717
 * File:    failed_events.c
Packit 577717
 * Author:  Vince Weaver <vincent.weaver@maine.edu>
Packit 577717
 */
Packit 577717
Packit 577717
/* This test tries adding events that don't exist */
Packit 577717
/* We've had issues where the name resolution code might do weird */
Packit 577717
/* things when passed invalid event names */
Packit 577717
Packit 577717
Packit 577717
#include <stdio.h>
Packit 577717
#include <stdlib.h>
Packit 577717
#include <string.h>
Packit 577717
Packit 577717
#include "papi.h"
Packit 577717
#include "papi_test.h"
Packit 577717
Packit 577717
Packit 577717
#define LARGE_NAME_SIZE	4096
Packit 577717
Packit 577717
char large_name[LARGE_NAME_SIZE];
Packit 577717
Packit 577717
int
Packit 577717
main( int argc, char **argv )
Packit 577717
{
Packit 577717
Packit 577717
	int i, k, err_count = 0;
Packit 577717
	int retval;
Packit 577717
	PAPI_event_info_t info, info1;
Packit 577717
	const PAPI_component_info_t* cmpinfo;
Packit 577717
	int numcmp, cid;
Packit 577717
	int quiet;
Packit 577717
Packit 577717
	int EventSet = PAPI_NULL;
Packit 577717
Packit 577717
	/* Set quiet variable */
Packit 577717
	quiet=tests_quiet( argc, argv );
Packit 577717
Packit 577717
	/* Init PAPI library */
Packit 577717
	retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit 577717
	if ( retval != PAPI_VER_CURRENT ) {
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	if (!quiet) {
Packit 577717
		printf("Test adding invalid events.\n");
Packit 577717
	}
Packit 577717
Packit 577717
	/* Create an eventset */
Packit 577717
	retval = PAPI_create_eventset( &EventSet );
Packit 577717
	if ( retval != PAPI_OK ) {
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit 577717
	}
Packit 577717
Packit 577717
Packit 577717
	/* Simple Event */
Packit 577717
	if (!quiet) {
Packit 577717
		printf("+ Simple invalid event\t");
Packit 577717
	}
Packit 577717
Packit 577717
	retval=PAPI_add_named_event(EventSet,"INVALID_EVENT");
Packit 577717
	if (retval==PAPI_OK) {
Packit 577717
		if (!quiet) {
Packit 577717
			printf("Unexpectedly opened!\n");
Packit 577717
			err_count++;
Packit 577717
		}
Packit 577717
	}
Packit 577717
	else {
Packit 577717
		if (!quiet) printf("OK\n");
Packit 577717
	}
Packit 577717
Packit 577717
	/* Extra Colons */
Packit 577717
	if (!quiet) {
Packit 577717
		printf("+ Extra colons\t");
Packit 577717
	}
Packit 577717
Packit 577717
	retval=PAPI_add_named_event(EventSet,"INV::::AL:ID:::_E=3V::E=NT");
Packit 577717
	if (retval==PAPI_OK) {
Packit 577717
		if (!quiet) {
Packit 577717
			printf("Unexpectedly opened!\n");
Packit 577717
			err_count++;
Packit 577717
		}
Packit 577717
	}
Packit 577717
	else {
Packit 577717
		if (!quiet) printf("OK\n");
Packit 577717
	}
Packit 577717
Packit 577717
Packit 577717
	/* Large Invalid Event */
Packit 577717
	if (!quiet) {
Packit 577717
		printf("+ Large invalid event\t");
Packit 577717
	}
Packit 577717
Packit 577717
	memset(large_name,'A',LARGE_NAME_SIZE);
Packit 577717
	large_name[LARGE_NAME_SIZE-1]=0;
Packit 577717
Packit 577717
	retval=PAPI_add_named_event(EventSet,large_name);
Packit 577717
	if (retval==PAPI_OK) {
Packit 577717
		if (!quiet) {
Packit 577717
			printf("Unexpectedly opened!\n");
Packit 577717
			err_count++;
Packit 577717
		}
Packit 577717
	}
Packit 577717
	else {
Packit 577717
		if (!quiet) printf("OK\n");
Packit 577717
	}
Packit 577717
Packit 577717
	/* Large Unterminated Invalid Event */
Packit 577717
	if (!quiet) {
Packit 577717
		printf("+ Large unterminated invalid event\t");
Packit 577717
	}
Packit 577717
Packit 577717
	memset(large_name,'A',LARGE_NAME_SIZE);
Packit 577717
Packit 577717
	retval=PAPI_add_named_event(EventSet,large_name);
Packit 577717
	if (retval==PAPI_OK) {
Packit 577717
		if (!quiet) {
Packit 577717
			printf("Unexpectedly opened!\n");
Packit 577717
			err_count++;
Packit 577717
		}
Packit 577717
	}
Packit 577717
	else {
Packit 577717
		if (!quiet) printf("OK\n");
Packit 577717
	}
Packit 577717
Packit 577717
Packit 577717
	/* Randomly modifying valid events */
Packit 577717
	if (!quiet) {
Packit 577717
		printf("+ Randomly modifying valid events\t");
Packit 577717
	}
Packit 577717
Packit 577717
	numcmp = PAPI_num_components(  );
Packit 577717
Packit 577717
	/* Loop through all components */
Packit 577717
	for( cid = 0; cid < numcmp; cid++ ) {
Packit 577717
Packit 577717
Packit 577717
		cmpinfo = PAPI_get_component_info( cid );
Packit 577717
		if (cmpinfo  == NULL) {
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_get_component_info", 2 );
Packit 577717
		}
Packit 577717
Packit 577717
		/* Include disabled components */
Packit 577717
		if (cmpinfo->disabled) {
Packit 577717
			// continue;
Packit 577717
		}
Packit 577717
Packit 577717
Packit 577717
		/* For platform independence, always ASK FOR the first event */
Packit 577717
		/* Don't just assume it'll be the first numeric value */
Packit 577717
		i = 0 | PAPI_NATIVE_MASK;
Packit 577717
		retval = PAPI_enum_cmp_event( &i, PAPI_ENUM_FIRST, cid );
Packit 577717
Packit 577717
		do {
Packit 577717
			retval = PAPI_get_event_info( i, &info );
Packit 577717
Packit 577717
			  k = i;
Packit 577717
	  if ( PAPI_enum_cmp_event(&k, PAPI_NTV_ENUM_UMASKS, cid )==PAPI_OK ) {
Packit 577717
	     do {
Packit 577717
		retval = PAPI_get_event_info( k, &info1 );
Packit 577717
Packit 577717
Packit 577717
Packit 577717
		/* Skip perf_raw event as it is hard to error out */
Packit 577717
		if (strstr(info1.symbol,"perf_raw")) {
Packit 577717
			break;
Packit 577717
		}
Packit 577717
Packit 577717
//		printf("%s\n",info1.symbol);
Packit 577717
Packit 577717
		if (strlen(info1.symbol)>5) {
Packit 577717
			info1.symbol[strlen(info1.symbol)-4]^=0xa5;
Packit 577717
Packit 577717
			retval=PAPI_add_named_event(EventSet,info1.symbol);
Packit 577717
			if (retval==PAPI_OK) {
Packit 577717
				if (!quiet) {
Packit 577717
					printf("Unexpectedly opened %s!\n",
Packit 577717
						info1.symbol);
Packit 577717
					err_count++;
Packit 577717
				}
Packit 577717
			}
Packit 577717
		}
Packit 577717
	     } while ( PAPI_enum_cmp_event( &k, PAPI_NTV_ENUM_UMASKS, cid ) == PAPI_OK );
Packit 577717
	  } else {
Packit 577717
	    /* Event didn't have any umasks */
Packit 577717
Packit 577717
//		printf("%s\n",info1.symbol);
Packit 577717
		if (strlen(info1.symbol)>5) {
Packit 577717
			info1.symbol[strlen(info1.symbol)-4]^=0xa5;
Packit 577717
Packit 577717
			retval=PAPI_add_named_event(EventSet,info1.symbol);
Packit 577717
			if (retval==PAPI_OK) {
Packit 577717
				if (!quiet) {
Packit 577717
					printf("Unexpectedly opened %s!\n",
Packit 577717
						info1.symbol);
Packit 577717
					err_count++;
Packit 577717
				}
Packit 577717
			}
Packit 577717
		}
Packit 577717
	  }
Packit 577717
Packit 577717
       } while ( PAPI_enum_cmp_event( &i, PAPI_ENUM_EVENTS, cid ) == PAPI_OK );
Packit 577717
Packit 577717
    }
Packit 577717
Packit 577717
Packit 577717
Packit 577717
	if ( err_count ) {
Packit 577717
		if (!quiet) {
Packit 577717
			printf( "%d Invalid events added.\n", err_count );
Packit 577717
		}
Packit 577717
		test_fail( __FILE__, __LINE__, "Invalid events added", 1 );
Packit 577717
	}
Packit 577717
Packit 577717
	test_pass( __FILE__ );
Packit 577717
Packit 577717
	return 0;
Packit 577717
}