GridLab
Grid Application Toolkit

A simple API for Grid Applications
GAT

Menu



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

resourcedescription_tests.c

Go to the documentation of this file.
00001 /** @file resourcedescription_test.c
00002  * Source file for the GATResourceDescription tests.
00003  *
00004  * @date Mon Oct 20 2003
00005  *
00006  * @version $Header: /export/cvs-gridlab/wp-1/Codes/GATEngine/C-reference/test/internal/resourcedescription_tests.c,v 1.9 2004/04/20 17:04:43 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/resourcedescription_tests.c,v 1.9 2004/04/20 17:04:43 hartmutkaiser Exp $";
00018  
00019 /* System Header Files */
00020 #include <stdio.h>
00021 #include <string.h>
00022 
00023 /* GAT Header Files */
00024 #include "GAT.h"
00025 #include "GATMemoryStream.h"
00026 
00027 #include "GATTestUtils.h"
00028 
00029 /* Macros */
00030 
00031 /* Structures, unions and enums */
00032 
00033 /* Static function prototypes */
00034 static GATSoftwareResourceDescription
00035 get_os_software_rd_direct(void);
00036 
00037 static GATSoftwareResourceDescription
00038 get_os_software_rd_indirect(void);
00039 
00040 static void 
00041 test_os_requirements(GATSoftwareResourceDescription desc);
00042 
00043 static GATHardwareResourceDescription
00044 get_hardware_rd_direct(void);
00045 
00046 static GATHardwareResourceDescription
00047 get_hardware_rd_indirect(void);
00048 
00049 static void 
00050 test_hw_requirements(GATHardwareResourceDescription desc);
00051 
00052 /* File scope variables */
00053 
00054 /* External functions */
00055 int main (void)
00056 {
00057   GATContext                     context  = NULL;
00058   GATSoftwareResourceDescription os_desc1 = NULL;
00059   GATSoftwareResourceDescription os_desc2 = NULL;
00060   GATHardwareResourceDescription hw_desc1 = NULL;
00061   GATHardwareResourceDescription hw_desc2 = NULL;
00062 
00063   GATResult retval  = GAT_FAIL;
00064   GATBool   isequal = GATFalse;
00065   
00066   GAT_TEST_INIT (-1);
00067   GAT_TEST_SUITE("Resource Description");
00068 
00069   context = GATContext_Create();
00070   GAT_TEST(NULL != context);
00071   
00072   /* the following test makes sure, that there were no errors during the 
00073      creation of the GATContext object */
00074   GAT_TEST_TRACE(GATType_GATContext == GATContext_GetType(context), context);
00075 
00076   /* test GATSoftwareDescription */
00077   os_desc1 = get_os_software_rd_direct();
00078   os_desc2 = get_os_software_rd_indirect();
00079   hw_desc1 = get_hardware_rd_direct();
00080   hw_desc2 = get_hardware_rd_indirect();
00081   
00082   GAT_TEST_START ("Resource Description basic tests");
00083 
00084   /* compare the two softwareresourcedescriptions */
00085   {
00086     isequal = GATFalse;
00087     retval  = GATSoftwareResourceDescription_Equals (os_desc1, os_desc2, &isequal);
00088 
00089     GAT_TEST (GAT_SUCCEEDED(retval));
00090     GAT_TEST (GATTrue     == isequal);
00091   }
00092   
00093   /* compare the two hardwareresourcedescriptions */
00094   {
00095     isequal = GATFalse;
00096     retval  = GATHardwareResourceDescription_Equals (hw_desc1, hw_desc2, &isequal);
00097     
00098     GAT_TEST (GAT_SUCCEEDED(retval));
00099     GAT_TEST (GATTrue     == isequal);
00100   }
00101   
00102   /* compare the embedded tables */
00103   {
00104     GATTable_const a = GATSoftwareResourceDescription_GetDescription (os_desc1);
00105     GATTable_const b = GATSoftwareResourceDescription_GetDescription (os_desc2);
00106 
00107     GAT_TEST (NULL != a);
00108     GAT_TEST (NULL != b);
00109     GAT_TEST (a != b);   /* the handles should differ */
00110 
00111     isequal = GATFalse;
00112     retval  = GATTable_Equals (a, b, &isequal);
00113 
00114     GAT_TEST (GAT_SUCCEEDED(retval));
00115     GAT_TEST (GATTrue     == isequal);
00116   }
00117   
00118   {
00119     GATTable_const a = GATHardwareResourceDescription_GetDescription (hw_desc1);
00120     GATTable_const b = GATHardwareResourceDescription_GetDescription (hw_desc2);
00121 
00122     GAT_TEST (NULL != a);
00123     GAT_TEST (NULL != b);
00124     GAT_TEST(a != b);   /* the handles should differ */
00125     
00126     isequal = GATFalse;
00127     retval  = GATTable_Equals (a, b, &isequal);
00128     
00129     GAT_TEST (GAT_SUCCEEDED(retval));
00130     GAT_TEST (GATTrue     == isequal);
00131   }
00132 
00133   /* test serialisation of GATSoftwareResourceDescription */
00134   {
00135     char      *buffer      = NULL;
00136     GATuint32  buffer_size = 0;
00137     GATSoftwareResourceDescription new_description = NULL;
00138 
00139     GATMemoryStream stream = GATMemoryStream_Create (0, 0, GATFalse);
00140     GAT_TEST (NULL != stream);
00141 
00142     retval = GATSoftwareResourceDescription_Serialise (os_desc1, 
00143                                                        GATMemoryStream_ToGATObject(stream),
00144                                                        GATFalse);
00145     GAT_TEST (GAT_SUCCEEDED(retval));
00146     
00147     buffer = GATMemoryStream_GetBuffer (stream, &buffer_size, GATFalse);
00148     GAT_TEST (NULL != buffer);
00149     GAT_TEST (buffer_size > 0);
00150     
00151     /* reposition the stream */
00152     GATMemoryStream_Seek (stream, GATOrigin_Set, 0, 0);
00153     
00154     new_description = GATSoftwareResourceDescription_DeSerialise (context,
00155                                                                   GATMemoryStream_ToGATObject(stream),
00156                                                                   &retval);
00157     GAT_TEST (GAT_SUCCEEDED(retval));
00158     GAT_TEST (NULL != new_description);
00159     
00160     retval = GATSoftwareResourceDescription_Equals (os_desc1, new_description, &isequal);
00161     GAT_TEST (retval  == GAT_SUCCESS);
00162     GAT_TEST (GATTrue == isequal);
00163 
00164     GATSoftwareResourceDescription_Destroy (&new_description);
00165     GATMemoryStream_Destroy                (&stream);
00166   }
00167   
00168   /* test, if the Equals function returns false, if the objects are different */
00169   {
00170     retval = GATSoftwareResourceDescription_RemoveResourceAttribute (os_desc1, "os.name");
00171     GAT_TEST (GAT_SUCCEEDED(retval));
00172     
00173     isequal = GATTrue;
00174     retval  = GATSoftwareResourceDescription_Equals (os_desc1, os_desc2, &isequal);
00175     GAT_TEST (GAT_SUCCEEDED(retval));
00176     GAT_TEST (GATFalse    == isequal);
00177   }
00178   
00179   {
00180     retval = GATHardwareResourceDescription_RemoveResourceAttribute (hw_desc1, "memory.size");
00181     GAT_TEST (GAT_SUCCEEDED(retval));
00182     
00183     isequal = GATTrue;
00184     retval  = GATSoftwareResourceDescription_Equals (os_desc1, os_desc2, &isequal);
00185     GAT_TEST (GAT_SUCCEEDED(retval));
00186     GAT_TEST (GATFalse    == isequal);
00187   }
00188   
00189   /* add the software requirements to the hardware description */
00190   retval = GATHardwareResourceDescription_AddResourceDescription (hw_desc1, 
00191     GATSoftwareResourceDescription_ToGATResourceDescription (os_desc1));
00192   
00193   GAT_TEST (GAT_SUCCEEDED(retval));
00194   
00195   retval = GATHardwareResourceDescription_AddResourceDescription (hw_desc1, 
00196     GATSoftwareResourceDescription_ToGATResourceDescription (os_desc2));
00197   
00198   GAT_TEST (GAT_SUCCEEDED(retval));
00199   
00200   retval = GATHardwareResourceDescription_AddResourceDescription (hw_desc2, 
00201     GATSoftwareResourceDescription_ToGATResourceDescription (os_desc1));
00202   
00203   GAT_TEST (GAT_SUCCEEDED(retval));
00204   
00205   retval = GATHardwareResourceDescription_AddResourceDescription (hw_desc2, 
00206     GATSoftwareResourceDescription_ToGATResourceDescription (os_desc2));
00207   
00208   GAT_TEST (GAT_SUCCEEDED(retval));
00209   
00210   
00211   /* test for equality of the hardware descriptions */
00212   {
00213     isequal = GATFalse;
00214     retval  = GATHardwareResourceDescription_Equals (hw_desc1, hw_desc2, &isequal);
00215 
00216     GAT_TEST (GAT_SUCCEEDED(retval));
00217     GAT_TEST (GATFalse    == isequal);
00218   }
00219   
00220   /* test serialisation of GATHardwareResourceDescription */
00221   {
00222     char      *buffer      = NULL;
00223     GATuint32  buffer_size = 0;
00224     GATHardwareResourceDescription new_description = NULL;
00225 
00226     GATMemoryStream stream = GATMemoryStream_Create (0, 0, GATFalse);
00227     GAT_TEST (NULL != stream);
00228 
00229     retval = GATHardwareResourceDescription_Serialise(hw_desc1, 
00230              GATMemoryStream_ToGATObject(stream), GATFalse);
00231     GAT_TEST (GAT_SUCCEEDED(retval));
00232     
00233     buffer = GATMemoryStream_GetBuffer (stream, &buffer_size, GATFalse);
00234     GAT_TEST (NULL != buffer);
00235     GAT_TEST (buffer_size > 0);
00236     
00237     /* reposition the stream */
00238     GATMemoryStream_Seek (stream, GATOrigin_Set, 0, 0);
00239     
00240     new_description =  GATHardwareResourceDescription_DeSerialise(context,
00241                        GATMemoryStream_ToGATObject(stream), &retval);
00242     GAT_TEST(GAT_SUCCEEDED(retval));
00243     GAT_TEST(NULL != new_description);
00244     
00245     retval = GATHardwareResourceDescription_Equals (hw_desc1, new_description, &isequal);
00246     GAT_TEST (retval  == GAT_SUCCESS);
00247     GAT_TEST (GATTrue == isequal);
00248 
00249     GATHardwareResourceDescription_Destroy (&new_description);
00250     GATMemoryStream_Destroy                (&stream);
00251   }
00252   
00253   /* test, if the Equals function returns false, if the objects are different */
00254   {
00255     retval = GATHardwareResourceDescription_RemoveResourceDescription (hw_desc1, 
00256       GATSoftwareResourceDescription_ToGATResourceDescription (os_desc2));
00257     
00258     GAT_TEST (GAT_SUCCEEDED(retval));
00259     
00260     isequal = GATTrue;
00261     retval  = GATHardwareResourceDescription_Equals(hw_desc1, hw_desc2, &isequal);
00262     
00263     GAT_TEST (GAT_SUCCEEDED(retval));
00264     GAT_TEST (GATFalse    == isequal);
00265   }
00266 
00267   /* clean up memory */
00268   GATHardwareResourceDescription_Destroy (&hw_desc2);
00269   GATHardwareResourceDescription_Destroy (&hw_desc1);
00270   GATSoftwareResourceDescription_Destroy (&os_desc2);
00271   GATSoftwareResourceDescription_Destroy (&os_desc1);
00272 
00273   GAT_TEST_STOP   ();
00274   GAT_TEST_FINISH ();
00275 
00276   return (0);
00277 }
00278 
00279 /* Local functions */
00280 static void 
00281 test_os_requirements (GATSoftwareResourceDescription desc)
00282 {
00283   GATTable_const t = GATSoftwareResourceDescription_GetDescription(desc);
00284   char buffer[32];
00285   GATResult retval;
00286   
00287   retval = GATTable_Get_String(t, "os.name", buffer, sizeof(buffer)); 
00288   GAT_TEST (retval > 0);
00289   GAT_TEST (!strcmp(buffer, "some_name"));
00290 
00291   retval = GATTable_Get_String(t, "os.type", buffer, sizeof(buffer)); 
00292   GAT_TEST (retval > 0);
00293   GAT_TEST (!strcmp(buffer, "some_type"));
00294 
00295   retval = GATTable_Get_String(t, "os.version", buffer, sizeof(buffer)); 
00296   GAT_TEST (retval > 0);
00297   GAT_TEST (!strcmp(buffer, "some_version"));
00298 
00299   retval = GATTable_Get_String(t, "os.release", buffer, sizeof(buffer)); 
00300   GAT_TEST (retval > 0);
00301   GAT_TEST (!strcmp(buffer, "some_release"));
00302 }
00303   
00304 static GATSoftwareResourceDescription
00305 get_os_software_rd_direct(void)
00306 {
00307   GATTable requirements = NULL;
00308   GATSoftwareResourceDescription sw_desc = NULL;
00309 
00310   GAT_TEST_START ("get_os_software_rd_direct");
00311   
00312   /* create and fill the requirements table */
00313   requirements = GATTable_Create();
00314   GAT_TEST (NULL != requirements);
00315   
00316   /* add required OS parameters to the requirements table */
00317   GATTable_Add_String (requirements, "os.name", "some_name");
00318   GATTable_Add_String (requirements, "os.type", "some_type");
00319   GATTable_Add_String (requirements, "os.version", "some_version");
00320   GATTable_Add_String (requirements, "os.release", "some_release");
00321 
00322   /* create the software Resource description */
00323   sw_desc = GATSoftwareResourceDescription_Create (requirements);
00324   GAT_TEST (NULL != sw_desc);
00325 
00326   test_os_requirements (sw_desc);    /* verify contents */
00327 
00328   GATSoftwareResourceDescription_SetDescription (sw_desc, requirements);
00329   test_os_requirements (sw_desc);    /* verify contents */
00330 
00331   GATTable_Destroy (&requirements);
00332 
00333   GAT_TEST_STOP ();
00334 
00335   return (sw_desc);
00336 }
00337 
00338 static GATSoftwareResourceDescription
00339 get_os_software_rd_indirect(void)
00340 {
00341   GATSoftwareResourceDescription sw_desc = NULL;
00342   
00343   GAT_TEST_START("get_os_software_rd_indirect");
00344 
00345   /* create the software Resource description */
00346   sw_desc = GATSoftwareResourceDescription_Create(0);
00347   GAT_TEST (NULL != sw_desc);
00348   
00349   /* add required OS parameters to the requirements table */
00350   GATSoftwareResourceDescription_AddResourceAttribute_String (sw_desc, "os.name", "some_name");
00351   GATSoftwareResourceDescription_AddResourceAttribute_String (sw_desc, "os.type", "some_type");
00352   GATSoftwareResourceDescription_AddResourceAttribute_String (sw_desc, "os.version", "some_version");
00353   GATSoftwareResourceDescription_AddResourceAttribute_String (sw_desc, "os.release", "some_release");
00354 
00355   /* verify the attributes */
00356   test_os_requirements (sw_desc);
00357 
00358   /* add just another key, just to remove it later */
00359   GATSoftwareResourceDescription_AddResourceAttribute_String (sw_desc, "test_key", "some_value");
00360   GATSoftwareResourceDescription_RemoveResourceAttribute     (sw_desc, "test_key");
00361   
00362   /* verify the attributes */
00363   test_os_requirements (sw_desc);
00364   
00365   GAT_TEST_STOP ();
00366 
00367   return (sw_desc);
00368 }
00369 
00370 static void 
00371 test_hw_requirements(GATHardwareResourceDescription desc)
00372 {
00373   GATTable_const t = NULL;
00374   GATResult retval = GAT_SUCCESS;
00375   char  buffer[32];
00376   float fvar = 0;
00377     
00378   GAT_TEST_START("test_hw_requirements");
00379 
00380   t = GATHardwareResourceDescription_GetDescription (desc);
00381   GAT_TEST (NULL != t);
00382   
00383   retval = GATTable_Get_float(t, "memory.size", &fvar); 
00384   GAT_TEST (GAT_SUCCEEDED(retval));
00385   GAT_TEST (fvar == 0.256f);
00386 
00387   retval = GATTable_Get_float(t, "memory.accesstime", &fvar); 
00388   GAT_TEST (GAT_SUCCEEDED(retval));
00389   GAT_TEST (fvar == 2e-9f);
00390 
00391   retval = GATTable_Get_float(t, "memory.str", &fvar); 
00392   GAT_TEST (GAT_SUCCEEDED(retval));
00393   GAT_TEST (fvar == 0.1f);
00394   
00395   retval = GATTable_Get_String(t, "machine.type", buffer, sizeof(buffer)); 
00396   GAT_TEST (retval > 0 );
00397   GAT_TEST (!strcmp(buffer, "some_machine_type"));
00398 
00399   retval = GATTable_Get_String(t, "machine.node", buffer, sizeof(buffer)); 
00400   GAT_TEST (retval > 0 );
00401   GAT_TEST (!strcmp(buffer, "some_machine_nodename"));
00402 
00403   GAT_TEST_STOP ();
00404 }
00405   
00406 static GATHardwareResourceDescription
00407 get_hardware_rd_direct(void)
00408 {
00409   GATHardwareResourceDescription hw_desc = NULL;
00410   GATTable requirements = NULL;
00411   
00412   GAT_TEST_START("get_hardware_rd_direct");
00413 
00414   /* create and fill the requirements table */
00415   requirements = GATTable_Create();
00416   GAT_TEST (NULL != requirements);
00417   
00418   /* add required OS parameters to the requirements table */
00419   GATTable_Add_float  (requirements, "memory.size", 0.256f);
00420   GATTable_Add_float  (requirements, "memory.accesstime", 2e-9f);
00421   GATTable_Add_float  (requirements, "memory.str", 0.1f);
00422   GATTable_Add_String (requirements, "machine.type", "some_machine_type");
00423   GATTable_Add_String (requirements, "machine.node", "some_machine_nodename");
00424 
00425   /* create the software Resource description */
00426   hw_desc = GATHardwareResourceDescription_Create(requirements);
00427   GAT_TEST (NULL != hw_desc);
00428   
00429   /* verify the attributes */
00430   test_hw_requirements (hw_desc);
00431 
00432   /* add just another key, just to remove it later */
00433   GATHardwareResourceDescription_AddResourceAttribute_String (hw_desc, "test_key", "some_value");
00434   GATHardwareResourceDescription_RemoveResourceAttribute     (hw_desc, "test_key");
00435   
00436   /* verify the attributes */
00437   test_hw_requirements (hw_desc);
00438   
00439   GATTable_Destroy (&requirements);
00440 
00441   GAT_TEST_STOP ();
00442 
00443   return hw_desc;
00444 }
00445 
00446 static GATHardwareResourceDescription
00447 get_hardware_rd_indirect(void)
00448 {
00449   GATHardwareResourceDescription hw_desc = NULL;
00450   
00451   GAT_TEST_START ("get_hardware_rd_indirect");
00452 
00453   /* create the software Resource description */
00454   hw_desc = GATHardwareResourceDescription_Create (0);
00455   GAT_TEST (NULL != hw_desc);
00456   
00457   /* add required hardware parameters to the requirements table */
00458   GATHardwareResourceDescription_AddResourceAttribute_float  (hw_desc, "memory.size", 0.256f);
00459   GATHardwareResourceDescription_AddResourceAttribute_float  (hw_desc, "memory.accesstime", 2e-9f);
00460   GATHardwareResourceDescription_AddResourceAttribute_float  (hw_desc, "memory.str", 0.1f);
00461   GATHardwareResourceDescription_AddResourceAttribute_String (hw_desc, "machine.type", "some_machine_type");
00462   GATHardwareResourceDescription_AddResourceAttribute_String (hw_desc, "machine.node", "some_machine_nodename");
00463     
00464   GAT_TEST_STOP ();
00465 
00466   return hw_desc;
00467 }
00468