]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
added support for specifying what order nodes should be tested in.
authorelijah <elijah@riseup.net>
Sun, 9 Mar 2014 07:05:10 +0000 (23:05 -0800)
committerelijah <elijah@riseup.net>
Sun, 9 Mar 2014 07:05:10 +0000 (23:05 -0800)
lib/leap_cli/commands/test.rb
lib/leap_cli/config/node.rb
lib/leap_cli/config/object_list.rb

index da4a4b54bc45033f0fbecc7a277057442c2b38d3..024ca25a030476c6a6cbb6c1effa5d660a7fe8af 100644 (file)
@@ -13,7 +13,12 @@ module LeapCli; module Commands
     test.command :run do |run|
       run.switch 'continue', :desc => 'Continue over errors and failures (default is --no-continue).', :negatable => true
       run.action do |global_options,options,args|
-        manager.filter!(args).each_node do |node|
+        test_order = File.join(Path.platform, 'tests/order.rb')
+        if File.exists?(test_order)
+          require test_order
+        end
+        manager.filter!(args).names_in_test_dependency_order.each do |node_name|
+          node = manager.nodes[node_name]
           ssh_connect(node) do |ssh|
             ssh.run(test_cmd(options))
           end
index 5b911bf28a529894b27273261333ddb576370a65..740f9bb36e1b2c7af4f4a236386acff9a299c0a4 100644 (file)
@@ -32,6 +32,14 @@ module LeapCli; module Config
       end
       return vagrant_range.include?(ip_address)
     end
+
+    #
+    # can be overridden by the platform.
+    # returns a list of node names that should be tested before this node
+    #
+    def test_dependencies
+      []
+    end
   end
 
 end; end
index 9ca46975e630df51b78eeeed7feede278392675e..910e2f72495afcaddc7c2d564c9ade1e852c82b5 100644 (file)
@@ -1,9 +1,12 @@
+require 'tsort'
+
 module LeapCli
   module Config
     #
     # A list of Config::Object instances (internally stored as a hash)
     #
     class ObjectList < Hash
+      include TSort
 
       def initialize(config=nil)
         if config
@@ -171,6 +174,21 @@ module LeapCli
         end
       end
 
+      #
+      # topographical sort based on test dependency
+      #
+      def tsort_each_node(&block)
+        self.each_key(&block)
+      end
+
+      def tsort_each_child(node_name, &block)
+        self[node_name].test_dependencies.each(&block)
+      end
+
+      def names_in_test_dependency_order
+        self.tsort
+      end
+
     end
   end
 end