Skip to content
Extraits de code Groupes Projets
integration.rake 1,35 ko
Newer Older
  • Learn to ignore specific revisions
  • #   Copyright (c) 2010, Diaspora Inc.  This file is
    #   licensed under the Affero General Public License version 3 or later.  See
    #   the COPYRIGHT file.
    
    
    namespace :integration do
      desc "rebuild and prepare test db"
      task :gogogo => ['db:integration:prepare', :start_servers, :run_specs]
    
      task :start_servers => :environment do
        abcs = ActiveRecord::Base.configurations
        envs = abcs.keys.select{ |k| k.include?("integration") }
        if servers_active?(envs.map{ |env| abcs[env]["app_server_port"] })
          puts "Servers are already running, using running integration servers."
          next
        end
        $integration_server_pids = []
        envs.each do |env|
          $integration_server_pids << fork do
            Process.exec "thin start -e #{env} -p #{abcs[env]["app_server_port"]}"
          end
        end
        while(!servers_active?(envs.map{ |env| abcs[env]["app_server_port"] })) do
          sleep(1)
        end
      end
    
      task :run_servers => :start_servers do
        while(true) do
          sleep 1000
        end
      end
    
      require 'rspec/core'
      require 'rspec/core/rake_task'
      RSpec::Core::RakeTask.new(:run_specs => :start_servers) do |t|
        t.pattern = "./spec/multi_server/**/*_spec.rb"
      end
    
      def servers_active? ports
        begin
          ports.each { |port| RestClient.get("localhost:#{port}/users/sign_in") }
          true
        rescue
          false
        end
      end
    
    end