GridLab
Grid Application Toolkit

A simple API for Grid Applications
GAT

Menu



Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members  

file_copy_tests.c

Go to the documentation of this file.
00001 /** @file file_copy.c
00002  * Example of using the GAT to copy a file.
00003  * 
00004  * Uses the GAT to copy a file given two URIs on the command line.
00005  * 
00006  * @date Wed Sep 24 2003
00007  * 
00008  * @version $Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/test/simple/file_copy_tests.c,v 1.12 2004/04/20 12:43:02 hartmutkaiser Exp $
00009  *
00010  *  Copyright (C) Tom Goodale
00011  *  This file is part of the GAT Engine.
00012  *  Contributed by Tom Goodale <goodale@aei.mpg.de>.
00013  *
00014  *  Use, modification and distribution is subject to the Gridlab Software
00015  *  License. (See accompanying file GLlicense.txt or copy at
00016  *  http://www.gridlab.org/GLlicense.txt)
00017  */
00018 
00019 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/test/simple/file_copy_tests.c,v 1.12 2004/04/20 12:43:02 hartmutkaiser Exp $";
00020 
00021 /* System Header Files */
00022 
00023 #include <stdio.h>
00024 #include <stdlib.h>
00025 #include <string.h>
00026 
00027 /* GAT Header Files */
00028 
00029 #include <GAT.h>
00030 #include <GATTestUtils.h>
00031 
00032 /* Macros */
00033 
00034 /* Structures, unions and enums */
00035 
00036 /* Static function prototypes */
00037 static GATResult 
00038   Listener_FileCopied (void *data, GATMetricEvent event);
00039 
00040 /* File scope variables */
00041 static GATStaticMetric metric_data = {
00042   /* fileops.file_copied event */
00043   "fileops.file_copied",          /* name */
00044   GATMeasurementType_EventLike,   /* type */
00045   GATType_String,                 /* data type */
00046   "",                             /* unit */
00047   0,                              /* parameter count */
00048   0                               /* parameters */
00049 };
00050 
00051 /* External functions */
00052 
00053 int main (void)
00054 {
00055   GATResult   retcode  = GAT_FAIL;
00056   GATContext  context  = NULL;
00057   GATLocation source   = NULL;
00058   GATLocation target   = NULL;
00059   GATMetric   metric   = NULL;
00060   GATFile     file     = NULL;
00061   GATuint32   cookie   = 0;
00062   const char* src      = NULL;
00063   const char* dst      = NULL;
00064 
00065   GAT_TEST_INIT  (-1);
00066   GAT_TEST_SUITE ("File")
00067 
00068   context = GATContext_Create();
00069   GAT_TEST(NULL != context);
00070   
00071   /* the following test makes sure, that there were no errors during the 
00072      creation of the GATContext object */
00073   GAT_TEST_TRACE(GATType_GATContext == GATContext_GetType(context), context);
00074 
00075   GAT_TEST_START ("File Copy Test");
00076 
00077   src = GATTest_CreateTempFile  ("gat_src");
00078   GAT_TEST_TRACE(NULL != src, context);
00079   
00080   source = GATLocation_Create   (src);
00081   GAT_TEST_TRACE(NULL != source, context);
00082 
00083   dst = GATTest_GetTempFileName ("gat_dst");
00084   GAT_TEST_TRACE(NULL != dst, context);
00085 
00086   target = GATLocation_Create   (dst);
00087   GAT_TEST_TRACE(NULL != target, context);
00088 
00089   file = GATFile_Create (context, source, NULL);
00090   GAT_TEST_TRACE(NULL != file, context);
00091   
00092   /* install the event handler */
00093   retcode = GATMetric_CreateMetric (&metric_data, &metric);
00094   GAT_TEST_TRACE(GAT_SUCCESS == retcode, context);
00095   
00096   retcode = GATMonitorable_AddMetricListener(GATFile_ToGATObject(file), 
00097     Listener_FileCopied, (char*) src, metric, &cookie);
00098   GAT_TEST_TRACE(retcode == GAT_SUCCESS, context);
00099   
00100   retcode = GATFile_Copy(file, target, GATFileMode_Overwrite);
00101   GAT_TEST_TRACE(retcode == GAT_SUCCESS, context);
00102 
00103   retcode = GATContext_ServiceActions(context, 0);
00104   GAT_TEST_TRACE(retcode == GAT_SUCCESS, context);
00105   
00106   if (0 != cookie)
00107   {
00108     retcode = GATMonitorable_RemoveRegisteredMetric(GATFile_ToGATObject(file), 
00109       metric, cookie);
00110     GAT_TEST_TRACE(GAT_SUCCESS == retcode, context);
00111   }
00112     
00113   GATFile_Destroy     (&file);
00114   GATMetric_Destroy   (&metric);
00115   GATLocation_Destroy (&source);
00116   GATLocation_Destroy (&target);
00117   GATContext_Destroy  (&context);
00118 
00119   GAT_TEST_STOP ();
00120   GAT_TEST_FINISH();
00121   
00122   return (retcode);
00123 }
00124 
00125 /* Local functions */
00126 static GATResult 
00127 Listener_FileCopied(void *data, GATMetricEvent event)
00128 {
00129   int     retval     = GAT_FAIL;
00130   char    name[1024] = { 0 };
00131   GATType type       = GATType_NoType;
00132   
00133   GAT_TEST_START ("Listener_FileCopied");
00134 
00135   type       = GATMetricEvent_GetValueType (event);
00136   GAT_TEST (type == GATType_String);
00137   
00138   retval = GATMetricEvent_GetValue (event, name, sizeof (name));
00139   
00140   GAT_TEST (GAT_SUCCESS    == retval);
00141   GAT_TEST (GATType_String == type);
00142   GAT_TEST (!strcmp ((char const *)data, name));
00143 
00144   GAT_TEST_STOP ();
00145 
00146   return (GAT_SUCCESS);
00147 }
00148