Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Rework all examples and test cases of the properties
[simgrid.git] / examples / gras / properties / properties.c
index 2315240..732d0cc 100644 (file)
@@ -4,73 +4,75 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(test,"Simple Property example");
 
-int master(int argc, char *argv[]);
-int slave(int argc, char *argv[]);
+int alice(int argc, char *argv[]);
+int bob(int argc, char *argv[]);
 
-
-int slave(int argc, char *argv[]) {
+int alice(int argc, char *argv[]) {
   gras_init(&argc,argv);
 
   /* Get the properties */
-  xbt_dict_t props = gras_process_properties();
+  xbt_dict_t process_props = gras_process_properties();
+  xbt_dict_t host_props = gras_os_host_properties();
+
   xbt_dict_cursor_t cursor = NULL;
   char *key,*data;
+  const char *value;
+
+  /* Let the other process change the host props */
+  gras_os_sleep(1); 
+   
+  INFO0("== Dump all the properties of current host");
+  xbt_dict_foreach(host_props,cursor,key,data)
+       INFO2("  Host property: '%s' has value: '%s'",key,data);
 
-  /* Print the properties of the workstation 1 */
-  xbt_dict_foreach(props,cursor,key,data) {
-    INFO2("Process property: %s has value: %s",key,data);
-  }
+  INFO0("== Dump all the properties of alice");
+  xbt_dict_foreach(process_props,cursor,key,data)
+    if (!strncmp(key,"SG_TEST_",8))
+       INFO2("  Process property: '%s' has value: '%s'",key,data);
  
-  /* Try to get a property that does not exist */
-  const char *noexist="Nonexisting";
-  const char *value = gras_process_property_value(noexist);
-  if ( value == NULL) 
-    INFO1("Process property: %s is undefined", noexist);
-  else
-    INFO2("Process property: %s has value: %s", noexist, value);
+  INFO0("== Try to get a process property that does not exist");
+  value = gras_process_property_value("Nonexisting");
+  xbt_assert0(!value, "nonexisting property exists!!");
  
-   /* Modify an existing property. First check it exists */
-    INFO0("Trying to modify a process property");
-    const char *exist="otherprop";
-    value = gras_process_property_value(exist);
-    if (value == NULL) 
-      INFO1("\tProperty: %s is undefined", exist);
-    else {
-      INFO2("\tProperty: %s old value: %s", exist, value);
-      xbt_dict_set(props, exist, xbt_strdup("newValue"), free);  
-    }
+  /* Modify an existing property. First check it exists */
+  INFO0("== Trying to modify a process property");
+  value = gras_process_property_value("new prop");
+  xbt_assert0(!value,"Property 'new prop' exists before I add it!");
+  xbt_dict_set(process_props, "new prop", xbt_strdup("new value"), xbt_free_f);
  
-    /* Test if we have changed the value */
-    value = gras_process_property_value(exist);
-    if (value == NULL) 
-      INFO1("\tProperty: %s is undefined", exist);
-    else
-      INFO2("\tProperty: %s new value: %s", exist, value);
+  /* Test if we have changed the value */
+  value = gras_process_property_value("new prop");
+  xbt_assert1(!strcmp(value,"new value"), "New property does have the value I've set ('%s' != 'new value')",value);
 
-  gras_os_sleep(1);
   gras_exit();
   return 0;
 }
 
-int master(int argc, char *argv[]) {
+int bob(int argc, char *argv[]) {
   gras_init(&argc,argv);
 
   /* Get the properties */
-  xbt_dict_t props = gras_os_host_properties();
+  xbt_dict_t host_props = gras_os_host_properties();
   xbt_dict_cursor_t cursor = NULL;
   char *key,*data;
+  const char *value;
 
-  /* Print the properties of the workstation 1 */
-  xbt_dict_foreach(props,cursor,key,data) {
-    INFO2("Host property: %s has value: %s",key,data);
-  }
+  INFO0("== Dump all the properties of host1");
+  xbt_dict_foreach(host_props,cursor,key,data)
+     INFO2("  Host property: '%s' has value: '%s'",key,data);
  
-  /* Try to get a property that does not exist */
-  const char *noexist="Nonexisting";
-  const char *value = gras_os_host_property_value(noexist);
-  xbt_assert2(value == NULL, "Host property: %s has value: %s", noexist, value);
-  
-  gras_os_sleep(1);
+  INFO0("== Try to get a property that does not exist");
+  value = gras_os_host_property_value("non existing key");
+  xbt_assert1(value == NULL, "The key 'non existing key' exists (with value '%s')!!",value);
+
+  INFO0("== Set a host property that alice will try to retrieve in SG (from bob->hello)");
+  xbt_dict_set(host_props,"from bob",xbt_strdup("hello"), xbt_free_f);
+
+  INFO0("== Dump all the properties of host1 again to check the addition");
+  xbt_dict_foreach(host_props,cursor,key,data)
+     INFO2("  Host property: '%s' has value: '%s'",key,data);
+   
+  gras_os_sleep(1); /* KILLME once bug on empty main is solved */
   gras_exit();
   return 0;
 }