/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "shellexec.hxx" #include #include #include #include #include // ----------------------------------------------------------------------- int main(int argc, const char *argv[]) { int ret = 0; if( argc != 2 ) { fprintf(stderr, "Usage: urltest \n"); return -1; } FILE * fp = fopen( argv[1], "r" ); if( NULL == fp ) { perror( argv[1] ); return -1; } // expect urltest.sh beside this binary char line[LINE_MAX]; size_t len = strlen(argv[0]); strcpy( line, argv[0] ); strcpy( line + len, ".sh " ); len += 4; unsigned int errors = 0; // read url(s) to test from file char url[512]; while( NULL != fgets(url, sizeof(url), fp)) { // remove trailing line break strtok( url, "\r\n" ); printf( "Passing URL: %s\n", url ); // test the encoding functionality from shellexec.cxx rtl::OString aURL( url ); rtl::OStringBuffer aBuffer; escapeForShell(aBuffer, aURL); // append encoded URL as (only) parameter to the script strcpy( line + len, aBuffer.getStr() ); printf( "Command line: %s\n", line ); FILE * pipe = popen( line, "r" ); if( NULL != pipe ) { char buffer[BUFSIZ]; // initialize buffer with '\0' memset(buffer, '\0', BUFSIZ); // read the output of the script if(NULL == fgets( buffer, BUFSIZ, pipe)) { perror("FAILED: output of script could not be read"); printf( "\n"); ++errors; continue; } // remove trailing line break again strtok( buffer, "\r\n" ); int n = pclose(pipe); if( 0 != n ) { printf("FAILED: fclose returned %d\n\n", n ); ++errors; continue; } if( 0 == strcmp( url, buffer ) ) { // strings are identical: good ! printf( "OK\n\n"); } else { // compare failed printf( "FAILED: returned string is %s\n\n", buffer); ++errors; } } else { perror( line ); ret = -2; break; } } if( ferror( fp ) ) { perror( argv[1] ); ret = -1; } fclose( fp ); if( errors ) { printf( "Number of tests failing: %d\n", errors); ret = -3; } else printf( "All tests passed OK.\n" ); return ret; }