xref: /aoo41x/main/shell/source/unix/exec/urltest.cxx (revision f8e2c85a)
1*f8e2c85aSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f8e2c85aSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f8e2c85aSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f8e2c85aSAndrew Rist  * distributed with this work for additional information
6*f8e2c85aSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f8e2c85aSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f8e2c85aSAndrew Rist  * "License"); you may not use this file except in compliance
9*f8e2c85aSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*f8e2c85aSAndrew Rist  *
11*f8e2c85aSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*f8e2c85aSAndrew Rist  *
13*f8e2c85aSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f8e2c85aSAndrew Rist  * software distributed under the License is distributed on an
15*f8e2c85aSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f8e2c85aSAndrew Rist  * KIND, either express or implied.  See the License for the
17*f8e2c85aSAndrew Rist  * specific language governing permissions and limitations
18*f8e2c85aSAndrew Rist  * under the License.
19*f8e2c85aSAndrew Rist  *
20*f8e2c85aSAndrew Rist  *************************************************************/
21*f8e2c85aSAndrew Rist 
22*f8e2c85aSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "shellexec.hxx"
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <osl/process.h>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <stdio.h>
29cdf0e10cSrcweir #include <limits.h>
30cdf0e10cSrcweir #include <string.h>
31cdf0e10cSrcweir #include <strings.h>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir // -----------------------------------------------------------------------
34cdf0e10cSrcweir 
main(int argc,const char * argv[])35cdf0e10cSrcweir int main(int argc, const char *argv[])
36cdf0e10cSrcweir {
37cdf0e10cSrcweir     int ret = 0;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     if( argc != 2 )
40cdf0e10cSrcweir     {
41cdf0e10cSrcweir         fprintf(stderr, "Usage: urltest <urllist>\n");
42cdf0e10cSrcweir         return -1;
43cdf0e10cSrcweir     }
44cdf0e10cSrcweir 
45cdf0e10cSrcweir     FILE * fp = fopen( argv[1], "r" );
46cdf0e10cSrcweir     if( NULL == fp )
47cdf0e10cSrcweir     {
48cdf0e10cSrcweir         perror( argv[1] );
49cdf0e10cSrcweir         return -1;
50cdf0e10cSrcweir     }
51cdf0e10cSrcweir 
52cdf0e10cSrcweir     // expect urltest.sh beside this binary
53cdf0e10cSrcweir     char line[LINE_MAX];
54cdf0e10cSrcweir     size_t len = strlen(argv[0]);
55cdf0e10cSrcweir     strcpy( line, argv[0] );
56cdf0e10cSrcweir     strcpy( line + len, ".sh " );
57cdf0e10cSrcweir     len += 4;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir     unsigned int errors = 0;
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     // read url(s) to test from file
62cdf0e10cSrcweir     char url[512];
63cdf0e10cSrcweir     while( NULL != fgets(url, sizeof(url), fp))
64cdf0e10cSrcweir     {
65cdf0e10cSrcweir         // remove trailing line break
66cdf0e10cSrcweir         strtok( url, "\r\n" );
67cdf0e10cSrcweir 
68cdf0e10cSrcweir         printf( "Passing URL: %s\n", url );
69cdf0e10cSrcweir 
70cdf0e10cSrcweir         // test the encoding functionality from shellexec.cxx
71cdf0e10cSrcweir         rtl::OString aURL( url );
72cdf0e10cSrcweir         rtl::OStringBuffer aBuffer;
73cdf0e10cSrcweir         escapeForShell(aBuffer, aURL);
74cdf0e10cSrcweir 
75cdf0e10cSrcweir         // append encoded URL as (only) parameter to the script
76cdf0e10cSrcweir         strcpy( line + len, aBuffer.getStr() );
77cdf0e10cSrcweir 
78cdf0e10cSrcweir         printf( "Command line: %s\n", line );
79cdf0e10cSrcweir 
80cdf0e10cSrcweir         FILE * pipe = popen( line, "r" );
81cdf0e10cSrcweir         if( NULL != pipe )
82cdf0e10cSrcweir         {
83cdf0e10cSrcweir             char buffer[BUFSIZ];
84cdf0e10cSrcweir 
85cdf0e10cSrcweir             // initialize buffer with '\0'
86cdf0e10cSrcweir             memset(buffer, '\0', BUFSIZ);
87cdf0e10cSrcweir 
88cdf0e10cSrcweir             // read the output of the script
89cdf0e10cSrcweir             if(NULL == fgets( buffer, BUFSIZ, pipe))
90cdf0e10cSrcweir             {
91cdf0e10cSrcweir                 perror("FAILED: output of script could not be read");
92cdf0e10cSrcweir                 printf( "\n");
93cdf0e10cSrcweir                 ++errors;
94cdf0e10cSrcweir                 continue;
95cdf0e10cSrcweir             }
96cdf0e10cSrcweir 
97cdf0e10cSrcweir             // remove trailing line break again
98cdf0e10cSrcweir             strtok( buffer, "\r\n" );
99cdf0e10cSrcweir 
100cdf0e10cSrcweir             int n = pclose(pipe);
101cdf0e10cSrcweir             if( 0 != n )
102cdf0e10cSrcweir             {
103cdf0e10cSrcweir                 printf("FAILED: fclose returned %d\n\n", n );
104cdf0e10cSrcweir                 ++errors;
105cdf0e10cSrcweir                 continue;
106cdf0e10cSrcweir             }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir             if( 0 == strcmp( url, buffer ) )
109cdf0e10cSrcweir             {
110cdf0e10cSrcweir                 // strings are identical: good !
111cdf0e10cSrcweir                 printf( "OK\n\n");
112cdf0e10cSrcweir             }
113cdf0e10cSrcweir             else
114cdf0e10cSrcweir             {
115cdf0e10cSrcweir                 // compare failed
116cdf0e10cSrcweir                 printf( "FAILED: returned string is %s\n\n", buffer);
117cdf0e10cSrcweir                 ++errors;
118cdf0e10cSrcweir             }
119cdf0e10cSrcweir 
120cdf0e10cSrcweir         }
121cdf0e10cSrcweir         else
122cdf0e10cSrcweir         {
123cdf0e10cSrcweir             perror( line );
124cdf0e10cSrcweir             ret = -2;
125cdf0e10cSrcweir             break;
126cdf0e10cSrcweir         }
127cdf0e10cSrcweir     }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir     if( ferror( fp ) )
130cdf0e10cSrcweir     {
131cdf0e10cSrcweir         perror( argv[1] );
132cdf0e10cSrcweir         ret = -1;
133cdf0e10cSrcweir     }
134cdf0e10cSrcweir 
135cdf0e10cSrcweir     fclose( fp );
136cdf0e10cSrcweir 
137cdf0e10cSrcweir     if( errors )
138cdf0e10cSrcweir     {
139cdf0e10cSrcweir         printf( "Number of tests failing: %d\n", errors);
140cdf0e10cSrcweir         ret = -3;
141cdf0e10cSrcweir     }
142cdf0e10cSrcweir     else
143cdf0e10cSrcweir         printf( "All tests passed OK.\n" );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 
146cdf0e10cSrcweir     return ret;
147cdf0e10cSrcweir }
148