/****************************************************************************** * Name get_marfs_path * This function, given a metadata path, determines the fuse mount path for a * file and returns it via the marfs pointer. * ******************************************************************************/ void get_marfs_path(char * patht, char *marfs) { char *mnt_top = marfs_config->mnt_top; MarFS_Namespace *ns; NSIterator ns_iter; ns_iter = namespace_iterator(); char the_path[MAX_PATH_LENGTH] = {0}; char ending[MAX_PATH_LENGTH] = {0}; int i; int index; while((ns = namespace_next(&ns_iter))){ if (strstr(patht, ns->md_path)){ // build path using mount point and md_path strcat(the_path, mnt_top); strcat(the_path, ns->mnt_path); for (i = strlen(ns->md_path); i < strlen(patht); i++){ index = i - strlen(ns->md_path); ending[index] = *(patht+i); } ending[index+1] = '\0'; strcat(the_path, ending); strcpy(marfs,the_path); break; } } }
int main( int argc, char *argv[] ) { char sectype_code = '_'; MarFS_SecType marfs_sectype; char compType_code = '_'; MarFS_CompType marfs_comptype; char comptype_code = '_'; MarFS_CorrectType marfs_correcttype; char code; int ret_val; MarFS_Namespace_Ptr namespacePtr; MarFS_Repo_Ptr repoPtr; INIT_LOG(); fprintf( stdout, "\n" ); if (read_configuration()) { fprintf( stderr, "ERROR: Reading MarFS configuration failed.\n" ); return 1; } fprintf( stdout, "CORRECT: The members of the MarFS config structure are:\n" ); fprintf( stdout, "\tconfig name : %s\n", marfs_config->name ); fprintf( stdout, "\tconfig version : %d.%d\n", marfs_config->version_major, marfs_config->version_minor ); fprintf( stdout, "\tconfig mnt-top : %s\n", marfs_config->mnt_top ); // fprintf( stdout, "\tconfig namespace count : %lu\n", marfs_config->namespace_count ); fprintf( stdout, "\n" ); ret_val = free_configuration(); if ( ! ret_val ) { fprintf( stdout, "CORRECT: free_configuration returned %d\n", ret_val ); if ( marfs_config == NULL ) { fprintf( stdout, "CORRECT: We freed the MarFS configuration and it is now NULL.\n" ); } else { fprintf( stderr, "ERROR: free_configuration did not set the MarFS configuration to NULL.\n" ); } } else { fprintf( stderr, "ERROR: free_configuration returned %d\n", ret_val ); } fprintf( stdout, "\n" ); fprintf( stdout, "Re-reading the configuration to continue testing...\n" ); read_configuration(); if ( marfs_config == NULL ) { fprintf( stderr, "ERROR: Reading MarFS configuration failed.\n" ); return 1; } fprintf( stdout, "\n" ); if ( lookup_sectype( "none", &marfs_sectype )) { fprintf( stderr, "ERROR: Invalid sectype value of \"%s\".\n", "none" ); } else { fprintf( stdout, "CORRECT: SecType value of \"%s\" translates to %d.\n", "none", marfs_sectype ); } if ( encode_sectype( SECTYPE_NONE, &code )) { fprintf( stderr, "ERROR: Invalid enumeration value of %d.\n", SECTYPE_NONE ); } else { fprintf( stdout, "CORRECT: Encode value of %d is \"%c\".\n", SECTYPE_NONE, code ); } if ( decode_sectype( '_', &marfs_sectype )) { fprintf( stderr, "ERROR: Invalid code of \"%c\".\n", '_' ); } else { fprintf( stdout, "CORRECT: Decode code of \"%c\" is %d.\n", '_',marfs_sectype ); } fprintf( stdout, "\n" ); if ( lookup_comptype( "none", &marfs_comptype )) { fprintf( stderr, "ERROR: Invalid comptype value of \"%s\".\n", "none" ); } else { fprintf( stdout, "CORRECT: CompType value of \"%s\" translates to %d.\n", "none", marfs_comptype ); } if ( encode_comptype( COMPTYPE_NONE, &code )) { fprintf( stderr, "ERROR: Invalid enumeration value of %d.\n", COMPTYPE_NONE ); } else { fprintf( stdout, "CORRECT: Encode value of %d is \"%c\".\n", COMPTYPE_NONE, code ); } if ( decode_comptype( '_', &marfs_comptype )) { fprintf( stderr, "ERROR: Invalid code of \"%c\".\n", '_' ); } else { fprintf( stdout, "CORRECT: Decode code of \"%c\" is %d.\n", '_',marfs_comptype ); } fprintf( stdout, "\n" ); if ( lookup_correcttype( "none", &marfs_correcttype )) { fprintf( stderr, "ERROR: Invalid correcttype value of \"%s\".\n", "none" ); } else { fprintf( stdout, "CORRECT: CorrectType value of \"%s\" translates to %d.\n", "none", marfs_correcttype ); } if ( encode_correcttype( CORRECTTYPE_NONE, &code )) { fprintf( stderr, "ERROR: Invalid enumeration value of %d.\n", CORRECTTYPE_NONE ); } else { fprintf( stdout, "CORRECT: Encode value of %d is \"%c\".\n", CORRECTTYPE_NONE, code ); } if ( decode_correcttype( '_', &marfs_correcttype )) { fprintf( stderr, "ERROR: Invalid code of \"%c\".\n", '_' ); } else { fprintf( stdout, "CORRECT: Decode code of \"%c\" is %d.\n", '_',marfs_correcttype ); } fprintf( stdout, "\n" ); namespacePtr = find_namespace_by_name( "BoGuS" ); if ( namespacePtr == NULL ) { fprintf( stdout, "CORRECT: Namespace \"BoGuS\" does not exist.\n" ); } else { fprintf( stderr, "ERROR: Namespace \"BoGuS\" does not exist and was found.\n" ); } fprintf( stdout, "\n" ); namespacePtr = find_namespace_by_name( "s3" ); if ( namespacePtr != NULL ) { fprintf( stdout, "CORRECT: Namespace \"s3\" does exist and has mnt_path \"%s\".\n", namespacePtr->mnt_path ); } else { fprintf( stderr, "ERROR: Namespace \"s3\" does exist and was not found.\n" ); } fprintf( stdout, "\n" ); namespacePtr = find_namespace_by_mnt_path( "/BoGuS" ); if ( namespacePtr == NULL ) { fprintf( stdout, "CORRECT: Mntpath \"/BoGuS\" does not exist.\n" ); } else { fprintf( stderr, "ERROR: Mntpath \"/BoGuS\" does not exist and was found.\n" ); } fprintf( stdout, "\n" ); namespacePtr = find_namespace_by_mnt_path( "/s3" ); if ( namespacePtr != NULL ) { fprintf( stdout, "CORRECT: Mntpath \"/s3\" does exist and has name \"%s\".\n", namespacePtr->name ); } else { fprintf( stderr, "ERROR: Mntpath \"/s3\" does exist and was not found.\n" ); } repoPtr = find_repo_by_range( namespacePtr, 38 ); if ( repoPtr != NULL ) { fprintf( stdout, "CORRECT: Namespace \"%s\" has a repo \"%s\" for files of size 38.\n", namespacePtr->name, repoPtr->name ); } else { fprintf( stderr, "ERROR: Namespace \"%s\" should have a repo for files of size 38.\n", namespacePtr->name ); } fprintf( stdout, "\n" ); namespacePtr = find_namespace_by_mnt_path( "/" ); if ( namespacePtr != NULL ) { fprintf( stdout, "CORRECT: Mntpath \"/\" does exist and has name \"%s\".\n", namespacePtr->name ); } else { fprintf( stderr, "ERROR: Mntpath \"/\" does exist and was not found.\n" ); } fprintf( stdout, "\n" ); /* * Since the file_size argument is size_t, that is unsigned and negative numbers * are not allowed. * fprintf( stdout, "\n" ); repoPtr = find_repo_by_range( namespacePtr, -2 ); if ( repoPtr == NULL ) { fprintf( stdout, "CORRECT: Namespace \"%s\" should not have a repo for files of size -2.\n", namespacePtr->name ); } else { fprintf( stderr, "ERROR: Namespace \"%s\" incorrectly has a repo \"%s\" for files of size -2.\n", namespacePtr->name, repoPtr->repo_name ); } */ fprintf( stdout, "\n" ); repoPtr = find_repo_by_range( NULL, 38 ); if ( repoPtr == NULL ) { fprintf( stdout, "CORRECT: A NULL namespace should not have a repo for files of size 38.\n" ); } else { fprintf( stderr, "ERROR: A NULL namespace incorrectly has a repo \"%s\" for files of size 38.\n", repoPtr->name ); } fprintf( stdout, "\n" ); repoPtr = find_repo_by_name( "BoGuS" ); if ( repoPtr == NULL ) { fprintf( stdout, "CORRECT: Repo name \"BoGuS\" does not exist.\n" ); } else { fprintf( stderr, "ERROR: Repo name \"BoGuS\" does not exist and was found.\n" ); } fprintf( stdout, "\n" ); repoPtr = find_repo_by_name( "emcS3_00" ); if ( repoPtr != NULL ) { fprintf( stdout, "CORRECT: Repo name \"emcS3_00\" does exist and has host \"%s\".\n", repoPtr->host ); } else { fprintf( stderr, "ERROR: Repo name \"emcS3_00\" does exist and was not found.\n" ); } fprintf( stdout, "\n" ); // --- show contents of all repos RepoIterator rit = repo_iterator(); while (( repoPtr = repo_next( &rit )) != NULL ) { debug_repo(repoPtr); fprintf(stdout, "\n"); } fprintf(stdout, "\n"); // --- show contents of all namespaces NSIterator nit = namespace_iterator(); while (( namespacePtr = namespace_next( &nit )) != NULL ) { debug_namespace(namespacePtr); fprintf(stdout, "\n"); } fprintf( stdout, "\n" ); return 0; }