test_ncbi_service_connector.c
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_ncbi_service_connector.c,v $
  4.  * PRODUCTION Revision 1000.1  2004/02/24 19:22:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CORE_001] Dev-tree R6.29
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_ncbi_service_connector.c,v 1000.1 2004/02/24 19:22:53 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Anton Lavrentiev
  35.  *
  36.  * File Description:
  37.  *   Standard test for the service connector
  38.  *
  39.  */
  40. #include "../ncbi_ansi_ext.h"
  41. #include "../ncbi_priv.h"
  42. #include <connect/ncbi_service_connector.h>
  43. #include <stdlib.h>
  44. /* This header must go last */
  45. #include "test_assert.h"
  46. int main(int argc, const char* argv[])
  47. {
  48.     static char obuf[8192 + 2] = "UUUUUZZZZZZUUUUUUZUZUZZUZUZUZUZUZn";
  49.     const char* service = argc > 1 && *argv[1] ? argv[1] : "bounce";
  50.     const char* host = argc > 2 && *argv[2] ? argv[2] : "www.ncbi.nlm.nih.gov";
  51.     SConnNetInfo *net_info;
  52.     CONNECTOR connector;
  53.     EIO_Status status;
  54.     char ibuf[1024];
  55.     CONN conn;
  56.     size_t n;
  57.     CORE_SetLOGFormatFlags(fLOG_Full | fLOG_DateTime);
  58.     CORE_SetLOGFILE(stderr, 0/*false*/);
  59.     net_info = ConnNetInfo_Create(service);
  60.     strcpy(net_info->host, host);
  61.     if (argc > 3) {
  62.         strncpy0(obuf, argv[3], sizeof(obuf) - 2);
  63.         obuf[n = strlen(obuf)] = 'n';
  64.         obuf[++n]              = 0;
  65.     }
  66.     strcpy(net_info->args, "testarg=testval&service=none");
  67.     connector = SERVICE_CreateConnectorEx(service, fSERV_Any, net_info, 0);
  68.     ConnNetInfo_Destroy(net_info);
  69.     if (!connector)
  70.         CORE_LOG(eLOG_Fatal, "Failed to create service connector");
  71.     if (CONN_Create(connector, &conn) != eIO_Success)
  72.         CORE_LOG(eLOG_Fatal, "Failed to create connection");
  73. #if 0
  74.     for (n = 0; n < 10; n++) {
  75.         int m;
  76.         for (m = 0; m < sizeof(obuf) - 2; m++)
  77.             obuf[m] = "01234567890n"[rand() % 12];
  78.         obuf[m++] = 'n';
  79.         obuf[m]   = '';
  80.         if (CONN_Write(conn, obuf, strlen(obuf), &m, eIO_WritePersist)
  81.             != eIO_Success) {
  82.             if (!n) {
  83.                 CONN_Close(conn);
  84.                 CORE_LOG(eLOG_Fatal, "Error writing to connection");
  85.             } else
  86.                 break;
  87.         }
  88.         assert(m == strlen(obuf));
  89.     }
  90. #else
  91.     if (CONN_Write(conn, obuf, strlen(obuf), &n, eIO_WritePersist)
  92.         != eIO_Success) {
  93.         CONN_Close(conn);
  94.         CORE_LOG(eLOG_Fatal, "Error writing to connection");
  95.     }
  96.     assert(n == strlen(obuf));
  97. #endif
  98.     for (;;) {
  99.         STimeout timeout;
  100.         timeout.sec  = 5;
  101.         timeout.usec = 12345;
  102.         if (CONN_Wait(conn, eIO_Read, &timeout) != eIO_Success) {
  103.             CONN_Close(conn);
  104.             CORE_LOG(eLOG_Fatal, "Error waiting for reading");
  105.         }
  106.         status = CONN_Read(conn, ibuf, sizeof(ibuf), &n, eIO_ReadPersist);
  107.         if (n) {
  108.             char* descr = CONN_Description(conn);
  109.             CORE_DATAF(ibuf, n, ("%lu bytes read from service (%s%s%s):",
  110.                                  (unsigned long) n, CONN_GetType(conn),
  111.                                  descr ? ", " : "", descr ? descr : ""));
  112.             if (descr)
  113.                 free(descr);
  114.         }
  115.         if (status != eIO_Success) {
  116.             if (status != eIO_Closed)
  117.                 CORE_LOGF(n ? eLOG_Error : eLOG_Fatal,
  118.                           ("Read error: %s", IO_StatusStr(status)));
  119.             break;
  120.         }
  121.     }
  122.     CONN_Close(conn);
  123. #if 0
  124.     CORE_LOG(eLOG_Note, "Trying ID1 service");
  125.     net_info = ConnNetInfo_Create(service);
  126.     connector = SERVICE_CreateConnectorEx("ID1", fSERV_Any, net_info);
  127.     ConnNetInfo_Destroy(net_info);
  128.     if (!connector)
  129.         CORE_LOG(eLOG_Fatal, "Service ID1 not available");
  130.     if (CONN_Create(connector, &conn) != eIO_Success)
  131.         CORE_LOG(eLOG_Fatal, "Failed to create connection");
  132.     if (CONN_Write(conn, "xA4x80x02x01x02x00", 7, &n, eIO_WritePersist)
  133.         != eIO_Success) {
  134.         CONN_Close(conn);
  135.         CORE_LOG(eLOG_Fatal, "Error writing to service ID1");
  136.     }
  137.     assert(n == 7);
  138.     if (CONN_Read(conn, ibuf, sizeof(ibuf), &n, eIO_ReadPlain) != eIO_Success){
  139.         CONN_Close(conn);
  140.         CORE_LOG(eLOG_Fatal, "Error reading from service ID1");
  141.     }
  142.     CORE_LOGF(eLOG_Note, ("%d bytes read from service ID1", n));
  143.     CONN_Close(conn);
  144. #endif
  145.     CORE_SetLOG(0);
  146.     return 0/*okay*/;
  147. }
  148. /*
  149.  * --------------------------------------------------------------------------
  150.  * $Log: test_ncbi_service_connector.c,v $
  151.  * Revision 1000.1  2004/02/24 19:22:53  gouriano
  152.  * PRODUCTION: UPGRADED [CORE_001] Dev-tree R6.29
  153.  *
  154.  * Revision 6.29  2004/02/23 15:23:43  lavr
  155.  * New (last) parameter "how" added in CONN_Write() API call
  156.  *
  157.  * Revision 6.28  2003/10/21 11:37:47  lavr
  158.  * Set write timeout from the environment/registry instead of explicitly
  159.  *
  160.  * Revision 6.27  2003/07/24 16:38:59  lavr
  161.  * Add conditional check for early connection drops (#if 0'd)
  162.  *
  163.  * Revision 6.26  2003/05/29 18:03:49  lavr
  164.  * Extend read error message with a reason (if any)
  165.  *
  166.  * Revision 6.25  2003/05/14 03:58:43  lavr
  167.  * Match changes in respective APIs of the tests
  168.  *
  169.  * Revision 6.24  2003/05/05 20:31:23  lavr
  170.  * Add date/time stamp to each log message printed
  171.  *
  172.  * Revision 6.23  2003/04/04 21:01:06  lavr
  173.  * Modify readout procedure
  174.  *
  175.  * Revision 6.22  2002/10/28 15:47:12  lavr
  176.  * Use "ncbi_ansi_ext.h" privately and use strncpy0()
  177.  *
  178.  * Revision 6.21  2002/09/24 15:10:09  lavr
  179.  * Fix test not to dereference NULL pointer resulting from failed connection
  180.  *
  181.  * Revision 6.20  2002/08/07 16:38:08  lavr
  182.  * EIO_ReadMethod enums changed accordingly; log moved to end
  183.  *
  184.  * Revision 6.19  2002/03/22 19:47:41  lavr
  185.  * Test_assert.h made last among the include files
  186.  *
  187.  * Revision 6.18  2002/03/21 22:02:16  lavr
  188.  * Change default server from "ray" into "www.ncbi.nlm.nih.gov"
  189.  *
  190.  * Revision 6.17  2002/02/05 21:45:55  lavr
  191.  * Included header files rearranged
  192.  *
  193.  * Revision 6.16  2002/01/16 21:23:15  vakatov
  194.  * Utilize header "test_assert.h" to switch on ASSERTs in the Release mode too
  195.  *
  196.  * Revision 6.15  2001/09/24 20:36:22  lavr
  197.  * Adjusted parameters in SERVICE_CreateConnectorEx()
  198.  *
  199.  * Revision 6.14  2001/06/11 22:17:28  lavr
  200.  * Wait-for-reading timeout made finite
  201.  *
  202.  * Revision 6.13  2001/06/07 17:53:47  lavr
  203.  * Persistent reading from test connection
  204.  *
  205.  * Revision 6.12  2001/06/01 16:19:10  lavr
  206.  * Added (ifdef'ed out) an internal test connection to service ID1
  207.  *
  208.  * Revision 6.11  2001/05/11 16:05:41  lavr
  209.  * Change log message corrected
  210.  *
  211.  * Revision 6.10  2001/05/11 15:38:01  lavr
  212.  * Print connector type along with read data
  213.  *
  214.  * Revision 6.9  2001/04/24 21:42:43  lavr
  215.  * Brushed code to use CORE_LOG facility only.
  216.  *
  217.  * Revision 6.8  2001/01/25 17:13:22  lavr
  218.  * Added: close/free everything on program exit: useful to check memory leaks
  219.  *
  220.  * Revision 6.7  2001/01/23 23:22:34  lavr
  221.  * debug_printout was given an enum value (instead of "boolean" 1)
  222.  *
  223.  * Revision 6.6  2001/01/09 15:35:20  lavr
  224.  * Removed header <unistd.h>, unknown on WinNT
  225.  *
  226.  * Revision 6.5  2001/01/08 23:13:19  lavr
  227.  * C/C++ -> C only
  228.  *
  229.  * Revision 6.4  2001/01/08 22:42:42  lavr
  230.  * Further development of the test-suite
  231.  *
  232.  * Revision 6.3  2001/01/03 22:40:24  lavr
  233.  * Minor adjustment
  234.  *
  235.  * Revision 6.2  2000/12/29 18:25:27  lavr
  236.  * More tests added (still not yet complete).
  237.  *
  238.  * Revision 6.1  2000/10/20 17:31:07  lavr
  239.  * Initial revision
  240.  *
  241.  * ==========================================================================
  242.  */