summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/test.rb
blob: f506d849b6dda8c04ef26609be3b6401da556ab0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
module LeapCli; module Commands

  desc 'Run tests.'
  command [:test, :t] do |test|
    test.desc 'Run the test suit on FILTER nodes.'
    test.arg_name 'FILTER', :optional => true
    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|
        test_order = File.join(Path.platform, 'tests/order.rb')
        if File.exist?(test_order)
          require test_order
        end
        manager.filter!(args).names_in_test_dependency_order.each do |node_name|
          node = manager.nodes[node_name]
          begin
            ssh_connect(node) do |ssh|
              ssh.run(test_cmd(options))
            end
          rescue Capistrano::CommandError
            if options[:continue]
              exit_status(1)
            else
              bail!
            end
          end
        end
      end
    end

    test.desc 'Creates files needed to run tests.'
    test.command :init do |init|
      init.action do |global_options,options,args|
        generate_test_client_openvpn_configs
      end
    end

    test.default_command :run
  end

  private

  def test_cmd(options)
    if options[:continue]
      "#{Leap::Platform.leap_dir}/bin/run_tests --continue"
    else
      "#{Leap::Platform.leap_dir}/bin/run_tests"
    end
  end

  #
  # generates a whole bunch of openvpn configs that can be used to connect to different openvpn gateways
  #
  def generate_test_client_openvpn_configs
    assert_config! 'provider.ca.client_certificates.unlimited_prefix'
    assert_config! 'provider.ca.client_certificates.limited_prefix'
    template = read_file! Path.find_file(:test_client_openvpn_template)
    manager.environment_names.each do |env|
      vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_limited' => true]
      if vpn_nodes.any?
        generate_test_client_cert(provider.ca.client_certificates.limited_prefix) do |key, cert|
          write_file! [:test_openvpn_config, [env, 'limited'].compact.join('_')], Util.erb_eval(template, binding)
        end
      end
      vpn_nodes = manager.nodes[:environment => env][:services => 'openvpn']['openvpn.allow_unlimited' => true]
      if vpn_nodes.any?
        generate_test_client_cert(provider.ca.client_certificates.unlimited_prefix) do |key, cert|
          write_file! [:test_openvpn_config, [env, 'unlimited'].compact.join('_')], Util.erb_eval(template, binding)
        end
      end
    end
  end

end; end