apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wr...@apache.org
Subject cvs commit: apr/test aprtest.h server.c
Date Fri, 27 Jul 2001 17:40:11 GMT
wrowe       01/07/27 10:40:11

  Modified:    test     server.c
  Added:       test     aprtest.h
  Log:
    How is this for short and sweet.  Drop in #include "aprtest.h" for these
    slick little wrappers.  I got so ticked at server.c not reporting anything
    useful (such as the actual error.)  This should make the tests simpler.
  
  Revision  Changes    Path
  1.31      +52 -126   apr/test/server.c
  
  Index: server.c
  ===================================================================
  RCS file: /home/cvs/apr/test/server.c,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- server.c	2001/07/18 16:51:49	1.30
  +++ server.c	2001/07/27 17:40:11	1.31
  @@ -52,10 +52,9 @@
    * <http://www.apache.org/>.
    */
   
  +#include "aprtest.h"
   #include <stdlib.h>
   #include "apr_network_io.h"
  -#include "apr_errno.h"
  -#include "apr_general.h"
   #include "apr_getopt.h"
   
   #define STRLEN 15
  @@ -63,10 +62,11 @@
   int main(int argc, const char * const argv[])
   {
       apr_pool_t *context;
  +    apr_status_t rv;
       apr_socket_t *sock;
       apr_socket_t *sock2;
       apr_size_t length;
  -    apr_int32_t rv;
  +    apr_int32_t pollres;
       apr_pollfd_t *sdset;
       char datasend[STRLEN];
       char datarecv[STRLEN] = "Recv data test";
  @@ -76,31 +76,15 @@
       apr_sockaddr_t *localsa = NULL, *remotesa;
       apr_status_t stat;
       int family = APR_UNSPEC;
  -    char buf[128];
       apr_getopt_t *opt;
       const char *optarg;
       char optchar;
   
  -    fprintf(stdout, "Initializing.........");
  -    if (apr_initialize() != APR_SUCCESS) {
  -        fprintf(stderr, "Something went wrong\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  -    atexit(apr_terminate);
  -
  -    fprintf(stdout, "Creating context.......");
  -    if (apr_pool_create(&context, NULL) != APR_SUCCESS) {
  -        fprintf(stderr, "Could not create a context\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  -
  -    if (apr_getopt_init(&opt, context, argc, argv)) {
  -        fprintf(stderr, "failed to initialize opts\n");
  -        exit(-1);
  -    }
  +    APR_TEST_INITIALIZE(rv, context);
   
  +    APR_TEST_SUCCESS(rv, "Preparing getopt", 
  +                     apr_getopt_init(&opt, context, argc, argv))
  +    
       while ((stat = apr_getopt(opt, "i:", &optchar, &optarg)) == APR_SUCCESS) {
           switch(optchar) {
           case 'i':
  @@ -120,147 +104,89 @@
            * socket we need.  We'll use the returned sockaddr later when
            * we bind.
            */
  -        stat = apr_sockaddr_info_get(&localsa, bind_to_ipaddr, APR_UNSPEC, 8021, 0,
  -                               context);
  -        if (stat != APR_SUCCESS) {
  -            fprintf(stderr,
  -                    "Couldn't build the socket address correctly: %s\n",
  -                    apr_strerror(stat, buf, sizeof buf));
  -            exit(-1);
  -        }
  +        APR_TEST_SUCCESS(rv, "Preparing sockaddr", 
  +            apr_sockaddr_info_get(&localsa, bind_to_ipaddr, APR_UNSPEC, 8021, 0, context))
           family = localsa->sa.sin.sin_family;
       }
   
  -    fprintf(stdout, "\tServer:  Creating new socket.......");
  -    if (apr_socket_create(&sock, family, SOCK_STREAM, context) != APR_SUCCESS) {
  -        fprintf(stderr, "Couldn't create socket\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Creating new socket", 
  +        apr_socket_create(&sock, family, SOCK_STREAM, context))
   
  -    fprintf(stdout, "\tServer:  Setting socket option NONBLOCK.......");
  -    if (apr_setsocketopt(sock, APR_SO_NONBLOCK, 1) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Couldn't set socket option\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Setting option APR_SO_NONBLOCK",
  +        apr_setsocketopt(sock, APR_SO_NONBLOCK, 1))
   
  -    fprintf(stdout, "\tServer:  Setting socket option REUSEADDR.......");
  -    if (apr_setsocketopt(sock, APR_SO_REUSEADDR, 1) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Couldn't set socket option\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Setting option APR_SO_REUSEADDR",
  +        apr_setsocketopt(sock, APR_SO_REUSEADDR, 1))
   
       if (!localsa) {
           apr_socket_addr_get(&localsa, APR_LOCAL, sock);
           apr_sockaddr_port_set(localsa, 8021);
       }
   
  -    fprintf(stdout, "\tServer:  Binding socket to port.......");
  -    if ((stat = apr_bind(sock, localsa)) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Could not bind: %s\n",
  -                apr_strerror(stat, buf, sizeof buf));
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Binding socket to port",
  +        apr_bind(sock, localsa))
       
  -    fprintf(stdout, "\tServer:  Listening to socket.......");
  -    if (apr_listen(sock, 5) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Could not listen\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  -
  -    fprintf(stdout, "\tServer:  Setting up socket for polling.......");
  -    apr_poll_setup(&sdset, 1, context);
  -    apr_poll_socket_add(sdset, sock, APR_POLLIN);
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Listening to socket",
  +        apr_listen(sock, 5))
       
  -    fprintf(stdout, "\tServer:  Beginning to poll for socket.......");
  -    rv = 1; 
  -    if (apr_poll(sdset, &rv, -1) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Select caused an error\n");
  -        exit(-1);
  -    }
  -    else if (rv == 0) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "I should not return until rv == 1\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_BEGIN(rv, "Setting up for polling",
  +        apr_poll_setup(&sdset, 1, context))
  +    APR_TEST_END(rv, 
  +        apr_poll_socket_add(sdset, sock, APR_POLLIN))
  +    
  +    pollres = 1; 
  +    APR_TEST_BEGIN(rv, "Polling for socket",
  +        apr_poll(sdset, &pollres, -1))
   
  -    fprintf(stdout, "\tServer:  Accepting a connection.......");
  -    if (apr_accept(&sock2, sock, context) != APR_SUCCESS) {
  +    if (pollres == 0) {
  +        fprintf(stdout, "Failed\n");
           apr_socket_close(sock);
  -        fprintf(stderr, "Could not accept connection.\n");
  +        fprintf(stderr, "Error: Unrecognized poll result, "
  +                "expected 1, received %d\n", pollres);
           exit(-1);
       }
       fprintf(stdout, "OK\n");
   
  +    APR_TEST_SUCCESS(rv, "Accepting a connection",
  +        apr_accept(&sock2, sock, context))
  +
       apr_socket_addr_get(&remotesa, APR_REMOTE, sock2);
       apr_sockaddr_ip_get(&remote_ipaddr, remotesa);
       apr_sockaddr_port_get(&remote_port, remotesa);
       apr_socket_addr_get(&localsa, APR_LOCAL, sock2);
       apr_sockaddr_ip_get(&local_ipaddr, localsa);
       apr_sockaddr_port_get(&local_port, localsa);
  -    fprintf(stdout, "\tServer socket: %s:%u -> %s:%u\n", local_ipaddr, local_port, remote_ipaddr,
remote_port);
  +    fprintf(stdout, "Server socket: %s:%u -> %s:%u\n", local_ipaddr, 
  +            local_port, remote_ipaddr, remote_port);
   
       length = STRLEN;
  -    fprintf(stdout, "\tServer:  Trying to recv data from socket.......");
  -    if (apr_recv(sock2, datasend, &length) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        apr_socket_close(sock2);
  -        fprintf(stderr, "Problem recving data\n");
  -        exit(-1);
  -    }
  +    APR_TEST_BEGIN(rv, "Receiving data from socket",
  +        apr_recv(sock2, datasend, &length))
  +
       if (strcmp(datasend, "Send data test")) {
  +        fprintf(stdout, "Failed\n");
           apr_socket_close(sock);
           apr_socket_close(sock2);
  -        fprintf(stderr, "I did not receive the correct data %s\n", datarecv);
  +        fprintf(stderr, "Error: Unrecognized response;\n"
  +                "Expected: \"Send data test\"\n"
  +                "Received: \"%s\"\n", datarecv);
           exit(-1);
       }
       fprintf(stdout, "OK\n");
   
       length = STRLEN;
  -    fprintf(stdout, "\tServer:  Sending data over socket.......");
  -    if (apr_send(sock2, datarecv, &length) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        apr_socket_close(sock2);
  -        fprintf(stderr, "Problem sending data\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Sending data over socket",
  +        apr_send(sock2, datarecv, &length))
       
  -    fprintf(stdout, "\tServer:  Shutting down accepted socket.......");
  -    if (apr_shutdown(sock2, APR_SHUTDOWN_READ) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        apr_socket_close(sock2);
  -        fprintf(stderr, "Problem shutting down\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Shutting down accepted socket",
  +        apr_shutdown(sock2, APR_SHUTDOWN_READ))
   
  -    fprintf(stdout, "\tServer:  closing duplicate socket.......");
  -    if (apr_socket_close(sock2) != APR_SUCCESS) {
  -        apr_socket_close(sock);
  -        fprintf(stderr, "Problem closing down\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Closing duplicate socket",
  +        apr_socket_close(sock2))
       
  -    fprintf(stdout, "\tServer:  closing original socket.......");
  -    if (apr_socket_close(sock) != APR_SUCCESS) {
  -        fprintf(stderr, "Problem closing down\n");
  -        exit(-1);
  -    }
  -    fprintf(stdout, "OK\n");
  +    APR_TEST_SUCCESS(rv, "Closing original socket",
  +        apr_socket_close(sock))
   
  -    return 1;
  +    return 0;
   }
   
  
  
  
  1.1                  apr/test/aprtest.h
  
  Index: aprtest.h
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  #include "apr_errno.h"
  #include "apr_general.h"
  #include "apr_strings.h"
  
  #define APR_TEST_BEGIN(rv, desc, op) \
      fprintf(stdout, "%s%.*s ", desc,                                  \
              strlen(desc) < 37 ? 40 - strlen(desc) : 3,                \
              "........................................");              \
      APR_TEST_MORE(rv, op)
  
  #define APR_TEST_MORE(rv, op) \
      if ((rv = (op)) != APR_SUCCESS) {                                 \
          char msgbuf[256];                                             \
          fprintf (stdout, "Failed\n");                                 \
          fprintf (stderr, "%s Failed, error %d\n%s", #op, rv,          \
                   apr_strerror(stat, msgbuf, sizeof(msgbuf)));         \
          exit(-1); }
  
  #define APR_TEST_END(rv, op) \
      APR_TEST_MORE(rv, op)                                             \
      fprintf(stdout, "OK\n");
  
  #define APR_TEST_SUCCESS(rv, desc, op) \
      APR_TEST_BEGIN(rv, desc, op)                                      \
      fprintf(stdout, "OK\n");
  
  #define APR_TEST_INITIALIZE(rv, pool) \
      APR_TEST_SUCCESS(rv, "Initializing", apr_initialize());           \
      atexit(apr_terminate);                                            \
      APR_TEST_SUCCESS(rv, "Creating context",                          \
                       apr_pool_create(&pool, NULL));
  
  
  
  

Mime
View raw message