teuton 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -8
  3. data/bin/teuton +2 -3
  4. data/docs/commands/README.md +8 -7
  5. data/docs/commands/check.md +17 -15
  6. data/docs/commands/help.md +17 -7
  7. data/docs/commands/readme.md +1 -1
  8. data/docs/devel/todo.md +74 -4
  9. data/docs/dsl/send.md +3 -3
  10. data/docs/dsl/show.md +2 -2
  11. data/docs/dsl/target.md +0 -14
  12. data/docs/install/t-node.md +10 -21
  13. data/docs/learn/02-target.md +49 -47
  14. data/docs/learn/03-remote_hosts.md +14 -15
  15. data/docs/learn/04-config.md +67 -68
  16. data/docs/learn/06-cmd_check.md +26 -24
  17. data/docs/learn/07-target_weight.md +3 -3
  18. data/docs/learn/08-unique_values.md +31 -29
  19. data/docs/learn/10-debug.md +36 -0
  20. data/docs/learn/13-feedback.md +10 -9
  21. data/docs/learn/15-readme.md +2 -2
  22. data/docs/learn/16-include.md +7 -7
  23. data/docs/learn/18-log.md +44 -43
  24. data/docs/learn/23-test-code.md +13 -10
  25. data/docs/learn/24-test-sql.md +5 -5
  26. data/docs/learn/26-expect_sequence.md +1 -1
  27. data/docs/learn/27-run_script.md +8 -5
  28. data/lib/teuton/case/action/action.rb +39 -0
  29. data/lib/teuton/case/action/manager.rb +63 -0
  30. data/lib/teuton/case/case.rb +17 -21
  31. data/lib/teuton/case/close.rb +3 -3
  32. data/lib/teuton/case/dsl/all.rb +1 -0
  33. data/lib/teuton/case/dsl/event.rb +24 -0
  34. data/lib/teuton/case/dsl/expect.rb +13 -12
  35. data/lib/teuton/case/dsl/expect_sequence.rb +1 -2
  36. data/lib/teuton/case/dsl/log.rb +3 -7
  37. data/lib/teuton/case/dsl/macro.rb +3 -2
  38. data/lib/teuton/case/dsl/run.rb +11 -17
  39. data/lib/teuton/case/dsl/send.rb +1 -17
  40. data/lib/teuton/case/dsl/target.rb +8 -4
  41. data/lib/teuton/case/dsl/upload.rb +1 -4
  42. data/lib/teuton/case/dsl/weight.rb +3 -3
  43. data/lib/teuton/case/execute/execute_base.rb +1 -1
  44. data/lib/teuton/case/execute/execute_local.rb +2 -2
  45. data/lib/teuton/case/execute/execute_manager.rb +6 -6
  46. data/lib/teuton/case/execute/execute_ssh.rb +6 -6
  47. data/lib/teuton/case/execute/execute_telnet.rb +4 -4
  48. data/lib/teuton/case/play.rb +8 -9
  49. data/lib/teuton/case/result/ext_compare.rb +10 -10
  50. data/lib/teuton/case_manager/case_manager.rb +4 -4
  51. data/lib/teuton/case_manager/dsl.rb +11 -10
  52. data/lib/teuton/case_manager/export_manager.rb +6 -12
  53. data/lib/teuton/case_manager/ext/check_cases.rb +1 -1
  54. data/lib/teuton/case_manager/ext/report.rb +0 -4
  55. data/lib/teuton/case_manager/show_resume_report.rb +29 -30
  56. data/lib/teuton/check/checker.rb +17 -8
  57. data/lib/teuton/check/dsl/all.rb +18 -10
  58. data/lib/teuton/check/dsl/expect.rb +29 -45
  59. data/lib/teuton/check/dsl/getset.rb +2 -2
  60. data/lib/teuton/check/dsl/run.rb +2 -2
  61. data/lib/teuton/check/show.rb +28 -34
  62. data/lib/teuton/cli/app.rb +123 -0
  63. data/lib/teuton/cli/run.rb +38 -0
  64. data/lib/teuton/errors.rb +94 -0
  65. data/lib/teuton/readme/action.rb +29 -0
  66. data/lib/teuton/readme/dsl/all.rb +17 -6
  67. data/lib/teuton/readme/dsl/expect.rb +3 -3
  68. data/lib/teuton/readme/dsl/run.rb +5 -11
  69. data/lib/teuton/readme/main.rb +13 -6
  70. data/lib/teuton/readme/readme.rb +12 -15
  71. data/lib/teuton/report/formatter/default/array.rb +15 -29
  72. data/lib/teuton/report/formatter/default/txt.rb +43 -32
  73. data/lib/teuton/report/formatter/formatter.rb +4 -13
  74. data/lib/teuton/report/formatter/resume/txt.rb +29 -28
  75. data/lib/teuton/report/formatter/resume/xml.rb +4 -4
  76. data/lib/teuton/report/report.rb +3 -1
  77. data/lib/teuton/utils/config_file_reader.rb +3 -11
  78. data/lib/teuton/utils/logger.rb +15 -10
  79. data/lib/teuton/utils/name_file_finder.rb +3 -11
  80. data/lib/teuton/utils/project.rb +4 -3
  81. data/lib/teuton/version.rb +1 -1
  82. data/lib/teuton.rb +6 -11
  83. metadata +8 -5
  84. data/docs/tutorial/es/nginx/README.md +0 -546
  85. data/lib/teuton/cli.rb +0 -120
  86. data/lib/teuton/deprecated/utils.rb +0 -14
@@ -41,10 +41,10 @@ module Formatter
41
41
  def self.call(report, options, filename)
42
42
  klass = get(options[:format])
43
43
  if klass.nil?
44
- warn Rainbow("[ERROR] Formatter:").bright.red
45
- warn Rainbow("[ERROR] - Unkown format <#{options[:format]}>. Fix line <export format: FORMAT>").white
46
- warn Rainbow("[ERROR] - Available formats: #{Formatter.available_formats.join(",")}.").white
47
- exit 1
44
+ Logger.warn "Formatter:"
45
+ Logger.warn "- Unkown format <#{options[:format]}>. Fix line <export format: FORMAT>"
46
+ Logger.warn "- Available formats: #{Formatter.available_formats.join(",")}."
47
+ return
48
48
  end
49
49
  formatter = klass.new(report)
50
50
  formatter.init(filename)
@@ -55,13 +55,4 @@ module Formatter
55
55
  def self.get(format)
56
56
  LIST[format]
57
57
  end
58
-
59
- # def self.hide_feedback(report)
60
- # report2 = report.clone
61
- # report2.groups.each do |group|
62
- # group.each do |item|
63
- # puts item
64
- # end
65
- # end
66
- # end
67
58
  end
@@ -25,21 +25,21 @@ class ResumeTXTFormatter < ResumeArrayFormatter
25
25
  private
26
26
 
27
27
  def process_config
28
- w "#{colorize("CONFIGURATION", :bg_blue)}\n"
29
- my_screen_table = Terminal::Table.new do |st|
30
- @data[:config].each do |key, value|
31
- st.add_row [key.to_s, trim(value)]
32
- end
28
+ w "#{colorize(" CONFIGURATION", :bg_blue)}\n"
29
+ table = Terminal::Table.new do |t|
30
+ t.style = {border: :unicode}
31
+ @data[:config].each { |key, value| t.add_row [key.to_s, trim(value)] }
33
32
  end
34
- w "#{my_screen_table}\n\n"
33
+ w "#{table}\n\n"
35
34
  end
36
35
 
37
36
  def process_cases
38
- w "#{colorize("CASES", :bg_blue)}\n"
39
- my_screen_table = Terminal::Table.new do |st|
40
- st.add_row %w[CASE MEMBERS GRADE STATE]
37
+ w "#{colorize(" CASES", :bg_blue)}\n"
38
+ table = Terminal::Table.new do |t|
39
+ t.style = {border: :unicode}
40
+ t.add_row %w[CASE MEMBERS GRADE STATE]
41
41
  @data[:cases].each do |line|
42
- st.add_row [
42
+ t.add_row [
43
43
  line[:id],
44
44
  line[:members],
45
45
  format(" %<grade>3d", {grade: line[:grade]}),
@@ -47,38 +47,39 @@ class ResumeTXTFormatter < ResumeArrayFormatter
47
47
  ]
48
48
  end
49
49
  end
50
- w "#{my_screen_table}\n\n"
50
+ w "#{table}\n\n"
51
51
  end
52
52
 
53
53
  def process_conn_errors
54
- my_screen_table = Terminal::Table.new do |st|
55
- st.add_row %w[CASE MEMBERS HOST ERROR]
54
+ table = Terminal::Table.new do |t|
55
+ t.style = {border: :unicode}
56
+ t.add_row %w[CASE MEMBERS HOST ERROR]
56
57
  @data[:cases].each do |line|
57
58
  line[:conn_status].each_pair do |h, e|
58
- st.add_row [line[:id], line[:members], h, colorize(e, :red_bright)]
59
+ t.add_row [line[:id], line[:members], h, colorize(e, :red_bright)]
59
60
  end
60
61
  end
61
62
  end
62
- return unless my_screen_table.rows.size > 1
63
+ return unless table.rows.size > 1
63
64
 
64
- w "#{colorize("CONN ERRORS", :bg_blue)}\n#{my_screen_table}\n\n"
65
+ w "#{colorize(" CONN ERRORS", :bg_blue)}\n#{table}\n\n"
65
66
  end
66
67
 
67
68
  def process_results
68
- w "#{colorize("RESULTS", :bg_blue)}\n"
69
- my_screen_table = Terminal::Table.new do |st|
70
- @data[:results].each do |key, value|
71
- st.add_row [key.to_s, value.to_s]
72
- end
69
+ w "#{colorize(" RESULTS", :bg_blue)}\n"
70
+ table = Terminal::Table.new do |t|
71
+ t.style = {border: :unicode}
72
+ @data[:results].each { |key, value| t.add_row([key.to_s, value.to_s]) }
73
73
  end
74
- w "#{my_screen_table}\n\n"
74
+ w "#{table}\n\n"
75
75
  end
76
76
 
77
77
  def process_hof
78
78
  return if @data[:hall_of_fame].size < MIN_HALL_OF_FAME
79
79
 
80
- w "#{colorize("HALL OF FAME", :bg_blue)}\n"
81
- my_screen_table = Terminal::Table.new do |st|
80
+ w "#{colorize(" HALL OF FAME", :bg_blue)}\n"
81
+ table = Terminal::Table.new do |t|
82
+ t.style = {border: :unicode}
82
83
  @data[:hall_of_fame].each do |line|
83
84
  color = :green
84
85
  color = :red if line[0] < 50
@@ -88,10 +89,10 @@ class ResumeTXTFormatter < ResumeArrayFormatter
88
89
  text1 = colorize(text1, :bright)
89
90
  text2 = colorize(text2, :bright)
90
91
  end
91
- st.add_row [text1, text2]
92
+ t.add_row [text1, text2]
92
93
  end
93
94
  end
94
- w "#{my_screen_table}\n"
95
+ w "#{table}\n"
95
96
  end
96
97
 
97
98
  def colorize(text, option)
@@ -113,8 +114,8 @@ class ResumeTXTFormatter < ResumeArrayFormatter
113
114
  when :red_bright
114
115
  Rainbow(text).red.bright
115
116
  else
116
- puts "[ERROR] ResumeTXTFormatter#colorize option=#{option}"
117
- exit 1
117
+ Logger.warn "[ResumeTXTFormatter] colorize option=#{option}"
118
+ text
118
119
  end
119
120
  end
120
121
  end
@@ -61,10 +61,10 @@ class ResumeXMLFormatter < ResumeArrayFormatter
61
61
  end
62
62
  lines << " </conn_errors>"
63
63
 
64
- if lines.size > 2
65
- w lines.join("\n")
66
- w "\n"
67
- end
64
+ return unless lines.size > 2
65
+
66
+ w lines.join("\n")
67
+ w "\n\n"
68
68
  end
69
69
 
70
70
  def process_results
@@ -9,10 +9,12 @@ class Report
9
9
  def initialize(id = "00")
10
10
  @id = id
11
11
  @filename = "case-#{@id}"
12
- @output_dir = Project.value[:output_basedir]
12
+ @output_dir = Project.value[:output_dir]
13
+
13
14
  @head = {}
14
15
  @lines = []
15
16
  @tail = {unique_fault: 0}
17
+ # TODO
16
18
  # [String] with 1 char for every target in @lines
17
19
  # For example: "..F." means: good, good, fail and good
18
20
  @history = ""
@@ -61,9 +61,7 @@ module ConfigFileReader
61
61
  begin
62
62
  data = YAML.load(File.open(filepath))
63
63
  rescue => e
64
- warn Rainbow("[ERROR] ConfigFileReader.read_yaml: #{e}").bright.red
65
- warn Rainbow("[ERROR] Revise file content! <#{filepath}>").white
66
- exit 1
64
+ raise Teuton::ConfigFileError.new(filepath, e)
67
65
  end
68
66
  data = convert_string_keys_to_symbol(data)
69
67
  data[:global] = data[:global] || {}
@@ -111,10 +109,7 @@ module ConfigFileReader
111
109
  begin
112
110
  data = YAML.load(File.open(filepath))
113
111
  rescue => e
114
- warn Rainbow("[ERROR] Reading configurations from yaml:").bright.red
115
- warn Rainbow("[ERROR] - File : #{filepath}").white
116
- warn Rainbow("[ERROR] - Type : #{e}").white
117
- exit 1
112
+ raise Teuton::ConfigFileError.new(filepath, e)
118
113
  end
119
114
  data[:tt_source_file] = relative_path(filepath)
120
115
  convert_string_keys_to_symbol(data)
@@ -124,10 +119,7 @@ module ConfigFileReader
124
119
  begin
125
120
  data = JSON.parse(File.read(filepath), symbolize_names: true)
126
121
  rescue => e
127
- warn Rainbow("[ERROR] Reading configurations from json:").bright.red
128
- warn Rainboe("[ERROR] - File : #{filepath}").white
129
- warn Rainbow("[ERROR] - Type : #{e}").white
130
- exit 1
122
+ raise Teuton::ConfigFileError.new(filepath, e)
131
123
  end
132
124
  data[:tt_source_file] = relative_path(filepath)
133
125
  convert_string_keys_to_symbol(data)
@@ -3,30 +3,35 @@ require "rainbow"
3
3
  class Logger
4
4
  @verbose = true
5
5
 
6
- def self.verbose=(value)
7
- @verbose = value
6
+ class << self
7
+ attr_writer :verbose
8
8
  end
9
9
 
10
- def self.verbose
11
- @verbose
10
+ class << self
11
+ attr_reader :verbose
12
+ end
13
+
14
+ def self.puts(message)
15
+ Kernel.puts message if @verbose
12
16
  end
13
17
 
14
18
  def self.info(message)
15
- puts message if @verbose
19
+ text = Rainbow("Info | #{message}").white
20
+ Kernel.puts text if @verbose
16
21
  end
17
22
 
18
23
  def self.warn(message)
19
- text = Rainbow(message).bright.yellow
20
- info(text)
24
+ text = Rainbow("Warn | #{message}").bright.yellow
25
+ Kernel.warn text if @verbose
21
26
  end
22
27
 
23
28
  def self.error(message)
24
- text = Rainbow(message).bright.red
25
- info(text)
29
+ text = Rainbow("Error | #{message}").bright.red
30
+ Kernel.warn text if @verbose
26
31
  end
27
32
 
28
33
  def self.debug(message)
29
34
  text = Rainbow(message).white
30
- info(text)
35
+ puts text if @verbose
31
36
  end
32
37
  end
@@ -1,4 +1,4 @@
1
- require "rainbow"
1
+ require_relative "logger"
2
2
 
3
3
  class NameFileFinder
4
4
  attr_reader :options, :project_path, :script_path, :config_path, :testname
@@ -33,10 +33,7 @@ class NameFileFinder
33
33
  # Find project filenames into directory <folder path>
34
34
  # COMPLEX MODE: main RB file is <start.rb>
35
35
  script_path = File.join(folder_path, "start.rb")
36
- unless File.exist? script_path
37
- warn Rainbow("[ERROR] Main script file not found! <#{script_path}>").bright.red
38
- exit 1
39
- end
36
+ raise Teuton::MainScriptNotFoundError, script_path unless File.exist? script_path
40
37
 
41
38
  @project_path = folder_path
42
39
  @script_path = script_path
@@ -66,12 +63,7 @@ class NameFileFinder
66
63
  def find_filenames_from_rb(script_path)
67
64
  # SIMPLE MODE: We use script_path as main RB file
68
65
  # This must be fullpath to DSL script file
69
- if File.extname(script_path) != ".rb"
70
- warn Rainbow("[ERROR] Main script file not found!").bright.red
71
- warn Rainbow("[ERROR] Not found <#{script_path}/start.rb>").white
72
- warn Rainbow("[ERROR] Not found <#{script_path}.rb>").white
73
- exit 1
74
- end
66
+ raise Teuton::MainScriptNotFoundError, script_path if File.extname(script_path) != ".rb"
75
67
 
76
68
  @project_path = File.dirname(script_path)
77
69
  @script_path = script_path
@@ -8,6 +8,7 @@ class Project
8
8
  @project[:running_basedir] = Dir.getwd
9
9
  @project[:output_basedir] = "var"
10
10
  @project[:output_dir] = @project[:output_basedir]
11
+ @project[:base_case_id] = "00"
11
12
  @project[:name] = "teuton"
12
13
  @project[:format] = :txt # Default export format
13
14
  @project[:debug] = false # Disable/enable local executions
@@ -18,12 +19,12 @@ class Project
18
19
  "quiet" => false
19
20
  }
20
21
  @project[:verbose] = true # Enable/disable screen outputs
21
- @project[:global] = {}
22
22
  @project[:ialias] = {} # Hash of Internal alias
23
- @project[:macros] = {}
23
+ @project[:global] = {}
24
24
  @project[:groups] = []
25
- @project[:uses] = []
26
25
  @project[:hall_of_fame] = [] # Hall of fame content
26
+ @project[:macros] = {}
27
+ @project[:uses] = []
27
28
  end
28
29
 
29
30
  def self.value
@@ -1,5 +1,5 @@
1
1
  module Teuton
2
- VERSION = "3.2.0".freeze
2
+ VERSION = "3.3.0".freeze
3
3
  APPNAME = "teuton".freeze
4
4
  GEMNAME = "teuton".freeze
5
5
  DOCKERNAME = "dvarrui/#{GEMNAME}".freeze
data/lib/teuton.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require_relative "teuton/utils/project"
2
- # require_relative "teuton/version"
2
+ require_relative "teuton/errors"
3
3
 
4
4
  module Teuton
5
5
  def self.create(path_to_new_dir)
@@ -36,15 +36,10 @@ module Teuton
36
36
  private_class_method def self.require_dsl_and_script(dslpath)
37
37
  # Load DSL file and then load script file
38
38
  require_relative dslpath
39
- begin
40
- mainscriptfile = Project.value[:script_path]
41
- require_relative mainscriptfile
42
- rescue => e
43
- warn Rainbow("[ERROR] #{e}").bright.red
44
- e.backtrace&.first(3)&.each do |line|
45
- warn Rainbow("[ERROR] #{line}").white
46
- end
47
- exit 1
48
- end
39
+
40
+ mainscriptfile = Project.value[:script_path]
41
+ raise MainScriptNotFoundError.new(mainscriptfile) unless File.exist?(mainscriptfile)
42
+
43
+ require_relative mainscriptfile
49
44
  end
50
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teuton
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
@@ -184,7 +184,6 @@ extra_rdoc_files:
184
184
  - docs/learn/README.md
185
185
  - docs/modes_of_use.md
186
186
  - docs/more.md
187
- - docs/tutorial/es/nginx/README.md
188
187
  files:
189
188
  - LICENSE
190
189
  - README.md
@@ -250,8 +249,9 @@ files:
250
249
  - docs/learn/README.md
251
250
  - docs/modes_of_use.md
252
251
  - docs/more.md
253
- - docs/tutorial/es/nginx/README.md
254
252
  - lib/teuton.rb
253
+ - lib/teuton/case/action/action.rb
254
+ - lib/teuton/case/action/manager.rb
255
255
  - lib/teuton/case/builtin/main.rb
256
256
  - lib/teuton/case/builtin/package.rb
257
257
  - lib/teuton/case/builtin/service.rb
@@ -262,6 +262,7 @@ files:
262
262
  - lib/teuton/case/close.rb
263
263
  - lib/teuton/case/config.rb
264
264
  - lib/teuton/case/dsl/all.rb
265
+ - lib/teuton/case/dsl/event.rb
265
266
  - lib/teuton/case/dsl/expect.rb
266
267
  - lib/teuton/case/dsl/expect_exitcode.rb
267
268
  - lib/teuton/case/dsl/expect_sequence.rb
@@ -305,12 +306,14 @@ files:
305
306
  - lib/teuton/check/dsl/run.rb
306
307
  - lib/teuton/check/main.rb
307
308
  - lib/teuton/check/show.rb
308
- - lib/teuton/cli.rb
309
- - lib/teuton/deprecated/utils.rb
309
+ - lib/teuton/cli/app.rb
310
+ - lib/teuton/cli/run.rb
311
+ - lib/teuton/errors.rb
310
312
  - lib/teuton/files/config.yaml
311
313
  - lib/teuton/files/start.rb
312
314
  - lib/teuton/files/template/case.html
313
315
  - lib/teuton/files/template/resume.html
316
+ - lib/teuton/readme/action.rb
314
317
  - lib/teuton/readme/dsl/all.rb
315
318
  - lib/teuton/readme/dsl/expect.rb
316
319
  - lib/teuton/readme/dsl/getset.rb