GridLab
Grid Application Toolkit

A simple API for Grid Applications
GAT

Menu



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

resource_serialisation_tests.c

Go to the documentation of this file.
00001 /** @file resource_serialisation_tests.c
00002  *  Test GATResource serialisation code.
00003  * 
00004  *  @date Wed Dec 03 2003
00005  * 
00006  *  @version $Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/test/internal/resource_serialisation_tests.c,v 1.12 2004/04/28 10:55:51 hartmutkaiser Exp $
00007  *
00008  *  Copyright (C) Hartmut Kaiser
00009  *  This file is part of the GAT Engine.
00010  *  Contributed by Hartmut Kaiser <hartmutkaiser [at] t-online [dot] de>.
00011  *
00012  *  Use, modification and distribution is subject to the Gridlab Software
00013  *  License. (See accompanying file GLlicense.txt or copy at
00014  *  http://www.gridlab.org/GLlicense.txt)
00015  */
00016 
00017 static const char *rcsid = "$Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/test/internal/resource_serialisation_tests.c,v 1.12 2004/04/28 10:55:51 hartmutkaiser Exp $";
00018 
00019 /* System Header Files */
00020 
00021 #include <stdio.h>
00022 #include <stdlib.h>
00023 #include <sys/utsname.h>
00024 
00025 /* GAT Header Files */
00026 
00027 #include "GAT.h"
00028 #include "GATTestUtils.h"
00029 
00030 #include "GATMemoryStream.h"
00031 
00032 /* Macros */
00033 
00034 /* Structures, unions and enums */
00035 
00036 /* Static function prototypes */
00037 static GATResourceDescription
00038   create_hardware_resource_description(GATContext context);
00039 
00040 static GATResult
00041   verify_direct_serialisation(GATContext context, GATResource resource);
00042 static GATResult
00043   verify_generic_serialisation(GATContext context, GATResource resource);
00044 
00045 /* File scope variables */
00046 
00047 /* External functions */
00048 
00049 int main (void)
00050 {
00051   GATResult                     retval    = GAT_FAIL;
00052   GATContext                    context   = NULL;
00053   GATList_GATResource           resources = NULL;
00054   GATResourceDescription        hrd       = NULL;
00055   GATResourceBroker             broker    = NULL;
00056   GATResource                  *resource  = NULL;
00057   GATList_GATResource_Iterator  first     = NULL;
00058 
00059   GAT_TEST_INIT  (-1);
00060   GAT_TEST_SUITE ("Resource Serialization");
00061   
00062   context = GATContext_Create();
00063   GAT_TEST (NULL != context);
00064 
00065   /* the following test makes sure, that there were no errors during the 
00066      creation of the GATContext object */
00067   GAT_TEST_TRACE(GATType_GATContext == GATContext_GetType(context), context);
00068 
00069   GAT_TEST_START ("Resource Serialization Tests");
00070   
00071   /* create a hardware resource description describing the required job 
00072      environment */
00073   hrd = create_hardware_resource_description (context);
00074   GAT_TEST_TRACE(NULL != hrd, context);
00075 
00076   /* submit the job to the resource broker */
00077   broker = GATResourceBroker_Create (context, 0, 0);
00078   GAT_TEST_TRACE(NULL != broker, context);
00079   
00080   retval = GATResourceBroker_FindResources (broker, hrd, &resources);
00081   GAT_TEST_TRACE(GAT_SUCCEEDED(retval), context);
00082   GAT_TEST_TRACE(1      == GATList_GATResource_Size (resources), context);
00083   
00084   /* use the first resource from the list */
00085   first = GATList_GATResource_Begin (resources);
00086   GAT_TEST_TRACE(NULL != first, context)
00087 
00088   resource = GATList_GATResource_Get (first);
00089   GAT_TEST_TRACE(NULL != resource, context)
00090 
00091   GAT_TEST_STOP ();
00092   
00093   /* test serialisation trough the direct GATResource functions */
00094   retval = verify_direct_serialisation (context, *resource);
00095   
00096   /* test serialisation trough the generic GATObject functions */
00097   retval = verify_generic_serialisation (context, *resource);
00098   
00099   /* free up all allocated memory */
00100   GATList_GATResource_Destroy    (&resources);
00101   GATResourceBroker_Destroy      (&broker);
00102   GATResourceDescription_Destroy (&hrd);
00103   GATContext_Destroy             (&context);
00104 
00105   GAT_TEST_FINISH ();
00106 
00107   return (0);
00108 }
00109 
00110 /* Local functions */
00111 
00112 /* test serialisation trough the direct GATLogicalFile functions */
00113 static GATResult
00114 verify_direct_serialisation(GATContext context, GATResource resource)
00115 {
00116   GATResult       retcode      = GAT_FAIL;
00117   GATResource     new_resource = NULL;
00118   GATMemoryStream stream       = GATMemoryStream_Create (0, 0, GATFalse);
00119   GATBool         isequal      = GATFalse;
00120   char           *buffer       = NULL;
00121   GATuint32       buffer_size  = 0;
00122   
00123   GAT_TEST_START ("verify_direct_serialisation");
00124   
00125   retcode = GATResource_Serialise (resource, 
00126                                    GATMemoryStream_ToGATObject (stream), 
00127                                    GATFalse);
00128   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00129 
00130   buffer = GATMemoryStream_GetBuffer (stream, &buffer_size, GATFalse);
00131   GAT_TEST_TRACE(NULL != buffer, context);
00132   GAT_TEST_TRACE(buffer_size > 0, context);
00133 
00134   /* reposition the stream */
00135   GATMemoryStream_Seek (stream, GATOrigin_Set, 0, 0);
00136   
00137   new_resource = GATResource_DeSerialise (context,
00138                                           GATMemoryStream_ToGATObject (stream), 
00139                                           &retcode);
00140   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00141   GAT_TEST_TRACE(NULL != new_resource, context);
00142   
00143   retcode = GATResource_Equals (resource, new_resource, &isequal);
00144   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00145   GAT_TEST_TRACE(GATTrue  == isequal, context);
00146 
00147   GATResource_Destroy     (&new_resource);
00148   GATMemoryStream_Destroy (&stream);
00149   
00150   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00151   
00152   GAT_TEST_STOP ();
00153 
00154   return retcode;
00155 }
00156 
00157 /* test serialisation trough the generic GATObject functions */
00158 static GATResult 
00159 verify_generic_serialisation (GATContext context, GATResource resource)
00160 {
00161   GATResult       retcode      = GAT_FAIL;
00162   GATResource     new_resource = NULL;
00163   GATMemoryStream stream       = GATMemoryStream_Create (0, 0, GATFalse);
00164   GATBool         isequal      = GATFalse;
00165   char           *buffer       = NULL;
00166   GATuint32       buffer_size  = 0;
00167 
00168   GAT_TEST_START ("verify_generic_serialisation");
00169   
00170   retcode = GATSerialisable_Serialise (GATResource_ToGATObject (resource), 
00171                                  GATMemoryStream_ToGATObject(stream), 
00172                                  GATTrue);
00173   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00174 
00175   buffer = GATMemoryStream_GetBuffer(stream, &buffer_size, GATFalse);
00176   GAT_TEST_TRACE(NULL != buffer, context);
00177   GAT_TEST_TRACE(buffer_size > 0, context);
00178 
00179   /* reposition the stream */
00180   GATMemoryStream_Seek (stream, GATOrigin_Set, 0, 0);
00181   
00182   new_resource = (GATResource) GATSerialisable_DeSerialise
00183                  (context, 
00184                   GATMemoryStream_ToGATObject(stream),
00185                   &retcode);
00186   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00187   GAT_TEST_TRACE(NULL != new_resource, context);
00188   
00189   retcode = GATResource_Equals (resource, new_resource, &isequal);
00190   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00191   GAT_TEST_TRACE(GATTrue  == isequal, context);
00192 
00193   GATResource_Destroy     (&new_resource);
00194   GATMemoryStream_Destroy (&stream);
00195   
00196   GAT_TEST_TRACE(GAT_SUCCEEDED(retcode), context);
00197   
00198   GAT_TEST_STOP ();
00199 
00200   return retcode;
00201 }
00202   
00203 /* create a hardware resource description describing the required resource */ 
00204 static GATResourceDescription
00205 create_hardware_resource_description (GATContext context)
00206 {
00207   GATHardwareResourceDescription hw_desc = NULL;
00208   GATTable  requirements = NULL;
00209   struct utsname sysinfo;
00210   
00211   GAT_TEST_START ("create_hardware_resource_description");
00212 
00213   /* create and fill the requirements table */
00214   requirements = GATTable_Create();
00215   GAT_TEST_TRACE(NULL != requirements, context);
00216 
00217   /* query for the system information */
00218   GAT_TEST_TRACE(uname(&sysinfo) >= 0, context);
00219   
00220   /* add required OS parameters to the requirements table */
00221   GATTable_Add_float  (requirements, "memory.size", 0.256f);
00222   GATTable_Add_String (requirements, "machine.type", sysinfo.machine);
00223   GATTable_Add_String (requirements, "machine.node", sysinfo.nodename);
00224   GATTable_Add_String (requirements, "cpu.type", "unknown");
00225   GATTable_Add_float  (requirements, "cpu.speed", 1.f);
00226   GATTable_Add_float  (requirements, "disk.size", 10.f);
00227 
00228   /* create the software Resource description */
00229   hw_desc = GATHardwareResourceDescription_Create (requirements);
00230   GAT_TEST_TRACE(NULL != hw_desc, context);
00231 
00232   GATTable_Destroy (&requirements);
00233 
00234   GAT_TEST_STOP ();
00235   
00236   return (GATHardwareResourceDescription_ToGATResourceDescription (hw_desc));
00237 }
00238