Class: HybridPlatformsConductor::HpcPlugins::TestReport::Stdout

Inherits:
TestReport
  • Object
show all
Defined in:
lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb

Overview

Report tests results on stdout

Constant Summary collapse

PROGRESS_BAR_SIZE =

Size of the progress bar, in characters

41

Constants included from LoggerHelpers

LoggerHelpers::LEVELS_MODIFIERS, LoggerHelpers::LEVELS_TO_STDERR

Instance Method Summary collapse

Methods inherited from TestReport

#initialize

Methods inherited from Plugin

extend_config_dsl_with, #initialize, valid?

Methods included from LoggerHelpers

#err, #init_loggers, #log_component=, #log_debug?, #log_level=, #out, #section, #set_loggers_format, #stderr_device, #stderr_device=, #stderr_displayed?, #stdout_device, #stdout_device=, #stdout_displayed?, #stdouts_to_s, #with_progress_bar

Constructor Details

This class inherits a constructor from HybridPlatformsConductor::TestReport

Instance Method Details

#reportObject

Handle tests reports



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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb', line 16

def report
  out
  out "========== Error report of #{@tests.size} tests run on #{@tested_nodes.size} nodes"
  out

  errors = group_errors(global_tests, :test_name, filter: :only_as_non_expected)
  out "======= #{errors.size} unexpected failing global tests:"
  out
  errors.each do |test_name, test_errors|
    out "===== #{test_name} found #{test_errors.size} errors:"
    test_errors.each do |error|
      out "    - #{error}"
    end
    out
  end
  out

  errors = group_errors(platform_tests, :test_name, :platform, filter: :only_as_non_expected)
  out "======= #{errors.size} unexpected failing platform tests:"
  out
  errors.each do |test_name, errors_by_platform|
    out "===== #{test_name} found #{errors_by_platform.size} platforms having errors:"
    errors_by_platform.each do |platform, test_errors|
      out "  * [ #{platform.repository_path} ] - #{test_errors.size} errors:"
      test_errors.each do |error|
        out "    - #{error}"
      end
    end
    out
  end
  out

  errors = group_errors(node_tests, :test_name, :node, filter: :only_as_non_expected)
  out "======= #{errors.size} unexpected failing node tests:"
  out
  errors.each do |test_name, errors_by_node|
    out "===== #{test_name} found #{errors_by_node.size} nodes having errors:"
    errors_by_node.each do |node, test_errors|
      out "  * [ #{node} ] - #{test_errors.size} errors:"
      test_errors.each do |error|
        out "    - #{error}"
      end
    end
    out
  end
  out

  errors = group_errors(platform_tests, :platform, :test_name, filter: :only_as_non_expected)
  out "======= #{errors.size} unexpected failing platforms:"
  out
  errors.each do |platform, errors_by_test|
    out "===== #{platform.repository_path} has #{errors_by_test.size} failing tests:"
    errors_by_test.each do |test_name, test_errors|
      out "  * [ #{test_name} ] - #{test_errors.size} errors:"
      test_errors.each do |error|
        out "    - #{error}"
      end
    end
    out
  end
  out

  errors = group_errors(node_tests, :node, :test_name, filter: :only_as_non_expected)
  out "======= #{errors.size} unexpected failing nodes:"
  out
  errors.each do |node, errors_by_test|
    out "===== #{node} has #{errors_by_test.size} failing tests:"
    errors_by_test.each do |test_name, test_errors|
      out "  * [ #{test_name} ] - #{test_errors.size} errors:"
      test_errors.each do |error|
        out "    - #{error}"
      end
    end
    out
  end
  out

  out '========== Stats by nodes list:'
  out
  out(Terminal::Table.new(headings: ['List name', '# nodes', '% tested', '% expected success', '% success', '[Expected] '.yellow.bold + '[Error] '.red.bold + '[Success] '.green.bold + '[Non tested]'.white.bold]) do |table|
    nodes_by_nodes_list.each do |nodes_list, nodes_info|
      table << [
        nodes_list,
        nodes_info[:nodes].size,
        nodes_info[:nodes].empty? ? '' : "#{(nodes_info[:tested_nodes].size*100.0/nodes_info[:nodes].size).to_i} %",
        nodes_info[:tested_nodes].empty? ? '' : "#{((nodes_info[:tested_nodes].size - nodes_info[:tested_nodes_in_error_as_expected].size) * 100.0 / nodes_info[:tested_nodes].size).to_i} %",
        nodes_info[:tested_nodes].empty? ? '' : "#{((nodes_info[:tested_nodes].size - nodes_info[:tested_nodes_in_error].size) * 100.0 / nodes_info[:tested_nodes].size).to_i} %",
        nodes_info[:nodes].empty? ? '' :
          ('=' * ((nodes_info[:tested_nodes_in_error_as_expected].size * PROGRESS_BAR_SIZE.to_f) / nodes_info[:nodes].size).round).yellow.bold +
          ('=' * (((nodes_info[:tested_nodes_in_error].size - nodes_info[:tested_nodes_in_error_as_expected].size).abs * PROGRESS_BAR_SIZE.to_f) / nodes_info[:nodes].size).round).red.bold +
          ('=' * (((nodes_info[:tested_nodes].size - nodes_info[:tested_nodes_in_error].size) * PROGRESS_BAR_SIZE.to_f) / nodes_info[:nodes].size).round).green.bold +
          ('=' * (((nodes_info[:nodes].size - nodes_info[:tested_nodes].size) * PROGRESS_BAR_SIZE.to_f) / nodes_info[:nodes].size).round).white.bold
      ]
    end
  end)

end