Author: sandervanderburg
Date: Mon Feb 13 15:24:08 2012
New Revision: 32259
URL: https://nixos.org/websvn/nix/?rev=32259&sc=1

Log:
Added option, which temporarily disconnects the inter-dependencies, which can 
be used for robustness testing

Modified:
   disnix/disnixtesting/trunk/data/testing.nix.in
   disnix/disnixtesting/trunk/src/test/main.c
   disnix/disnixtesting/trunk/src/test/test.c
   disnix/disnixtesting/trunk/src/test/test.h

Modified: disnix/disnixtesting/trunk/data/testing.nix.in
==============================================================================
--- disnix/disnixtesting/trunk/data/testing.nix.in      Mon Feb 13 13:59:12 
2012        (r32258)
+++ disnix/disnixtesting/trunk/data/testing.nix.in      Mon Feb 13 15:24:08 
2012        (r32259)
@@ -27,7 +27,7 @@
     inherit nixpkgs system disnixos;
   };
   
-  generateTestCases = {manifest, servicesFile}:
+  generateTestCases = {manifest, servicesFile, disconnectInterDependencies}:
   
     let
       pkgs = import nixpkgs { inherit system; };
@@ -47,7 +47,7 @@
     stdenv.mkDerivation {
       name = "testcases.nix";
       buildInputs = [ disnixtesting ];
-      buildCommand = "(echo \"''\" && disnixtest ${manifest}/manifest.xml 
${servicesXMLFile} && echo \"''\") > $out";
+      buildCommand = "(echo \"''\" && disnixtest ${manifest}/manifest.xml 
${servicesXMLFile} ${if disconnectInterDependencies then "1" else ""} && echo 
\"''\") > $out";
     };
     
   generateNetworkFile = {servicesFile, configurationFile}:
@@ -129,7 +129,7 @@
     };
 
   disnixTest = 
-    {name, manifest, tarball, servicesFile, configurationFile}:
+    {name, manifest, tarball, servicesFile, configurationFile, 
disconnectInterDependencies}:
     
     let
       manifestSrc = generateManifestSrc {
@@ -145,7 +145,7 @@
       externalNetworkFile = true;
       
       testScript = ''
-        ${import (generateTestCases { inherit manifest; servicesFile = 
"${manifestSrc}/${servicesFile}"; })}
+        ${import (generateTestCases { inherit manifest 
disconnectInterDependencies; servicesFile = "${manifestSrc}/${servicesFile}"; 
})}
       '';
     };
 }

Modified: disnix/disnixtesting/trunk/src/test/main.c
==============================================================================
--- disnix/disnixtesting/trunk/src/test/main.c  Mon Feb 13 13:59:12 2012        
(r32258)
+++ disnix/disnixtesting/trunk/src/test/main.c  Mon Feb 13 15:24:08 2012        
(r32259)
@@ -2,6 +2,6 @@
 
 int main(int argc, char *argv[])
 {
-    test(argv[1], argv[2], "test");
+    test(argv[1], argv[2], "test", (argc > 3));
     return 0;
 }

Modified: disnix/disnixtesting/trunk/src/test/test.c
==============================================================================
--- disnix/disnixtesting/trunk/src/test/test.c  Mon Feb 13 13:59:12 2012        
(r32258)
+++ disnix/disnixtesting/trunk/src/test/test.c  Mon Feb 13 15:24:08 2012        
(r32259)
@@ -1,7 +1,7 @@
 #include "activationmapping.h"
 #include "serviceproperties.h"
 
-static void visit(GArray *activation_array, GArray *service_property_array, 
char *test_property, ActivationMapping *mapping)
+static void visit(GArray *activation_array, GArray *service_property_array, 
char *test_property, ActivationMapping *mapping, const gboolean 
disconnect_interdependencies)
 {
     if(mapping->depends_on != NULL)
     {
@@ -21,7 +21,7 @@
            
            dependency_mapping = g_array_index(activation_array, 
ActivationMapping*, index);
            
-           visit(activation_array, service_property_array, test_property, 
dependency_mapping);
+           visit(activation_array, service_property_array, test_property, 
dependency_mapping, disconnect_interdependencies);
        }
     }
 
@@ -37,11 +37,49 @@
        
        gchar *hostname = NULL;
        
+       if(disconnect_interdependencies)
+       {
+           /* Temporarily disconnect the inter-dependencies */
+           
+           for(i = 0; i < mapping->depends_on->len; i++)
+           {
+               Dependency *dependency = g_array_index(mapping->depends_on, 
Dependency*, i);
+               ActivationMapping lookup;
+               gint index;
+               ActivationMapping *dependency_mapping;
+               gchar *hostname = NULL;
+               unsigned int j;
+           
+               lookup.service = dependency->service;
+               lookup.target = dependency->target;
+           
+               index = activation_mapping_index(activation_array, &lookup);
+           
+               dependency_mapping = g_array_index(activation_array, 
ActivationMapping*, index);
+               
+               /* Search hostname */
+               
+               for(j = 0; j < dependency_mapping->target->len; j++)
+               {
+                   TargetProperty *target_property = 
g_array_index(dependency_mapping->target, TargetProperty*, j);
+                   
+                   if(g_strcmp0(target_property->name, "hostname") == 0)
+                       hostname = target_property->value;
+               }
+               
+               /* Print stop and start job commands */
+               g_print("$%s->mustSucceed(\"ifconfig eth1 down\");\n", 
hostname);
+               g_print("$%s->sleep(3);\n", hostname);
+               g_print("$%s->mustSucceed(\"ifconfig eth1 up\");\n", hostname);
+           }
+       }
+       
        /* Generate environment variable stuff from infrastructure properties */
        
        for(i = 0; i < mapping->target->len; i++)
        {
            TargetProperty *target_property = g_array_index(mapping->target, 
TargetProperty*, i);
+           
            arguments[i] = g_strconcat("my $", target_property->name, "='", 
target_property->value, "';\n", NULL);
            
            if(g_strcmp0(target_property->name, "hostname") == 0)
@@ -66,7 +104,7 @@
     }
 }
 
-void test(const char *manifest_file, const char *services_xml_file, char 
*test_property)
+void test(const char *manifest_file, const char *services_xml_file, char 
*test_property, const gboolean disconnect_interdependencies)
 {
     GArray *activation_array = create_activation_array(manifest_file);
     GArray *service_property_array = 
create_service_property_array(services_xml_file);
@@ -86,7 +124,7 @@
     {
        ActivationMapping *current_activation_mapping = 
g_array_index(activation_array, ActivationMapping*, i);
        
-       visit(activation_array, service_property_array, test_property, 
current_activation_mapping);
+       visit(activation_array, service_property_array, test_property, 
current_activation_mapping, disconnect_interdependencies);
     }
     
     delete_service_property_array(service_property_array);

Modified: disnix/disnixtesting/trunk/src/test/test.h
==============================================================================
--- disnix/disnixtesting/trunk/src/test/test.h  Mon Feb 13 13:59:12 2012        
(r32258)
+++ disnix/disnixtesting/trunk/src/test/test.h  Mon Feb 13 15:24:08 2012        
(r32259)
@@ -1,6 +1,7 @@
 #ifndef __DISNIXTEST_TEST_H
 #define __DISNIXTEST_TEST_H
+#include <glib.h>
 
-void test(const char *manifest_file, const char *services_xml_file, char 
*test_property);
+void test(const char *manifest_file, const char *services_xml_file, char 
*test_property, const gboolean disconnect_interdependencies);
 
 #endif
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits

Reply via email to