teuton 2.6.0 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/docs/changelog/todo.md +4 -8
  3. data/docs/changelog/v2.7.md +11 -0
  4. data/docs/diagram.md +16 -15
  5. data/docs/learn/06-cmd_check.md +3 -2
  6. data/docs/learn/21-exit_codes.md +19 -14
  7. data/lib/teuton/case/case.rb +25 -44
  8. data/lib/teuton/case/close.rb +2 -0
  9. data/lib/teuton/case/config.rb +3 -3
  10. data/lib/teuton/case/{runner.rb → deprecated/runner.rb} +14 -10
  11. data/lib/teuton/case/deprecated/utils.rb +40 -0
  12. data/lib/teuton/case/dsl/all.rb +8 -0
  13. data/lib/teuton/case/dsl/expect.rb +25 -9
  14. data/lib/teuton/case/dsl/goto.rb +10 -9
  15. data/lib/teuton/case/dsl/log.rb +1 -2
  16. data/lib/teuton/case/dsl/macro.rb +2 -2
  17. data/lib/teuton/case/dsl/send.rb +3 -8
  18. data/lib/teuton/case/execute/copy_ssh.rb +70 -0
  19. data/lib/teuton/case/execute/execute_base.rb +55 -0
  20. data/lib/teuton/case/execute/execute_local.rb +29 -0
  21. data/lib/teuton/case/execute/execute_manager.rb +56 -0
  22. data/lib/teuton/case/execute/execute_ssh.rb +90 -0
  23. data/lib/teuton/case/execute/execute_telnet.rb +56 -0
  24. data/lib/teuton/case/play.rb +6 -6
  25. data/lib/teuton/case_manager/case_manager.rb +12 -8
  26. data/lib/teuton/case_manager/check_cases.rb +14 -12
  27. data/lib/teuton/case_manager/dsl.rb +6 -8
  28. data/lib/teuton/case_manager/export_manager.rb +2 -3
  29. data/lib/teuton/case_manager/hall_of_fame.rb +9 -10
  30. data/lib/teuton/case_manager/report.rb +11 -9
  31. data/lib/teuton/case_manager/show_report.rb +5 -7
  32. data/lib/teuton/case_manager/utils.rb +2 -48
  33. data/lib/teuton/check/dsl.rb +1 -2
  34. data/lib/teuton/check/laboratory.rb +7 -7
  35. data/lib/teuton/check/show.rb +5 -8
  36. data/lib/teuton/cli.rb +10 -0
  37. data/lib/teuton/readme/dsl.rb +5 -7
  38. data/lib/teuton/readme/lang.rb +3 -2
  39. data/lib/teuton/readme/readme.rb +15 -18
  40. data/lib/teuton/report/formatter/default/array.rb +6 -5
  41. data/lib/teuton/report/formatter/default/txt.rb +1 -0
  42. data/lib/teuton/report/formatter/formatter.rb +1 -1
  43. data/lib/teuton/report/formatter/resume/array.rb +3 -3
  44. data/lib/teuton/report/formatter/resume/html.rb +2 -2
  45. data/lib/teuton/report/report.rb +6 -5
  46. data/lib/teuton/skeleton.rb +8 -10
  47. data/lib/teuton/{application.rb → utils/application.rb} +13 -5
  48. data/lib/teuton/utils/name_file_finder.rb +40 -45
  49. data/lib/teuton/utils/project.rb +73 -0
  50. data/lib/teuton/{result → utils/result}/result.rb +9 -7
  51. data/lib/teuton/utils/settings.rb +12 -0
  52. data/lib/teuton/utils/verbose.rb +2 -2
  53. data/lib/teuton/version.rb +1 -1
  54. data/lib/teuton.rb +19 -18
  55. metadata +20 -9
  56. data/lib/teuton/case/dsl.rb +0 -10
  57. /data/lib/teuton/{result → utils/result}/ext_array.rb +0 -0
  58. /data/lib/teuton/{result → utils/result}/ext_compare.rb +0 -0
  59. /data/lib/teuton/{result → utils/result}/ext_filter.rb +0 -0
@@ -1,10 +1,24 @@
1
1
  require "rainbow"
2
2
 
3
- module NameFileFinder
3
+ class NameFileFinder
4
+ attr_reader :options
5
+ attr_reader :project_path
6
+ attr_reader :script_path
7
+ attr_reader :config_path
8
+ attr_reader :test_name
9
+
10
+ def initialize(options = {})
11
+ @options = options
12
+ @project_path = nil
13
+ @script_path = nil
14
+ @config_path = nil
15
+ @test_name = nil
16
+ end
17
+
4
18
  ##
5
19
  # Find project filenames from input project relative path
6
20
  # @param relprojectpath (String)
7
- def self.find_filenames_for(relprojectpath)
21
+ def find_filenames_for(relprojectpath)
8
22
  projectpath = File.absolute_path(relprojectpath)
9
23
 
10
24
  # Define:
@@ -20,10 +34,10 @@ module NameFileFinder
20
34
  true
21
35
  end
22
36
 
23
- ##
24
- # Find project filenames from input folder path
25
- # @param folder_path (String)
26
- def self.find_filenames_from_directory(folder_path)
37
+ private
38
+
39
+ def find_filenames_from_directory(folder_path)
40
+ # Find project filenames from input folder path
27
41
  # COMPLEX MODE: We use start.rb as main RB file
28
42
  script_path = File.join(folder_path, "start.rb")
29
43
  unless File.exist? script_path
@@ -31,38 +45,34 @@ module NameFileFinder
31
45
  exit 1
32
46
  end
33
47
 
34
- app = Application.instance
35
- app.project_path = folder_path
36
- app.script_path = script_path
37
- app.test_name = folder_path.split(File::SEPARATOR)[-1]
48
+ @project_path = folder_path
49
+ @script_path = script_path
50
+ @test_name = folder_path.split(File::SEPARATOR)[-1]
38
51
 
39
52
  find_configfilename_from_directory(folder_path)
40
53
  end
41
54
 
42
- ##
43
- # Find project config filename from input folder path
44
- # @param folder_path (String)
45
- def self.find_configfilename_from_directory(folder_path)
55
+ def find_configfilename_from_directory(folder_path)
56
+ # Find project config filename from input folder path
46
57
  # COMPLEX MODE: We use config.yaml by default
47
- app = Application.instance
48
58
  config_path = ""
49
59
 
50
- if app.options["cpath"].nil?
60
+ if options["cpath"].nil?
51
61
  config_name = "config"
52
62
  # Config name file is introduced by cname arg option from teuton command
53
- config_name = app.options["cname"] unless app.options["cname"].nil?
63
+ config_name = options["cname"] unless options["cname"].nil?
54
64
  config_path = File.join(folder_path, "#{config_name}.json")
55
65
  unless File.exist? config_path
56
66
  config_path = File.join(folder_path, "#{config_name}.yaml")
57
67
  end
58
68
  else
59
69
  # Config path file is introduced by cpath arg option from teuton command
60
- config_path = app.options["cpath"]
70
+ config_path = options["cpath"]
61
71
  end
62
- app.config_path = config_path
72
+ @config_path = config_path
63
73
  end
64
74
 
65
- def self.find_filenames_from_rb(script_path)
75
+ def find_filenames_from_rb(script_path)
66
76
  # SIMPLE MODE: We use script_path as main RB file
67
77
  # This must be fullpath to DSL script file
68
78
  if File.extname(script_path) != ".rb"
@@ -71,44 +81,29 @@ module NameFileFinder
71
81
  exit 1
72
82
  end
73
83
 
74
- app = Application.instance
75
- app.project_path = File.dirname(script_path)
76
- app.script_path = script_path
77
- app.test_name = File.basename(script_path, ".rb")
78
-
84
+ @project_path = File.dirname(script_path)
85
+ @script_path = script_path
86
+ @test_name = File.basename(script_path, ".rb")
79
87
  find_configfilenames_from_rb(script_path)
80
88
  end
81
89
 
82
- def self.find_configfilenames_from_rb(script_path)
90
+ def find_configfilenames_from_rb(script_path)
83
91
  # SIMPLE MODE: We use script_path as main RB file
84
92
  # This must be fullpath to DSL script file
85
- app = Application.instance
86
-
87
93
  config_path = ""
88
- if app.options["cpath"].nil?
94
+ if options["cpath"].nil?
89
95
  config_name = File.basename(script_path, ".rb")
90
96
  # Config name file is introduced by cname arg option from teuton command
91
- config_name = app.options["cname"] unless app.options["cname"].nil?
97
+ config_name = options["cname"] unless options["cname"].nil?
92
98
 
93
- config_path = File.join(app.project_path, config_name + ".json")
99
+ config_path = File.join(@project_path, config_name + ".json")
94
100
  unless File.exist? config_path
95
- config_path = File.join(app.project_path, config_name + ".yaml")
101
+ config_path = File.join(@project_path, config_name + ".yaml")
96
102
  end
97
103
  else
98
104
  # Config path file is introduced by cpath arg option from teuton command
99
- config_path = app.options["cpath"]
105
+ config_path = options["cpath"]
100
106
  end
101
- app.config_path = config_path
102
- end
103
-
104
- def self.verboseln(text)
105
- verbose(text + "\n")
106
- end
107
-
108
- def self.verbose(text)
109
- return unless Application.instance.verbose
110
- return if Application.instance.options["quiet"]
111
-
112
- print text
107
+ @config_path = config_path
113
108
  end
114
109
  end
@@ -0,0 +1,73 @@
1
+ # Development in progress...
2
+
3
+ require_relative "name_file_finder"
4
+
5
+ class Project
6
+ def self.init
7
+ @project = {}
8
+ @project[:running_basedir] = Dir.getwd
9
+ @project[:output_basedir] = "var"
10
+ @project[:name] = "teuton"
11
+ @project[:format] = :txt
12
+ @project[:debug] = false
13
+ @project[:options] = {
14
+ "color" => true,
15
+ "lang" => "en",
16
+ "panel" => false,
17
+ "quiet" => false
18
+ }
19
+ @project[:verbose] = true
20
+ @project[:global] = {} # Hash of Global configuration params
21
+ @project[:ialias] = {} # Hash of Internal alias
22
+ @project[:macros] = {} # Hash of macros
23
+ @project[:groups] = [] # Array of groups
24
+ @project[:uses] = [] # TODO: Array of files used
25
+ @project[:hall_of_fame] = []
26
+ end
27
+
28
+ def self.value
29
+ @project
30
+ end
31
+
32
+ init
33
+
34
+ def self.debug?
35
+ value[:debug]
36
+ end
37
+
38
+ def self.name
39
+ value[:name]
40
+ end
41
+
42
+ def self.quiet?
43
+ return true if value[:options]["quiet"]
44
+ return true unless value[:verbose]
45
+
46
+ false
47
+ end
48
+
49
+ def self.verbose
50
+ value[:verbose]
51
+ end
52
+
53
+ ##
54
+ # Preprocess input options:
55
+ # * Convert input case options String to an Array of integers
56
+ # * Read color input option
57
+ def self.add_input_params(projectpath, options)
58
+ value[:options].merge! options
59
+ Rainbow.enabled = value[:options]["color"]
60
+
61
+ finder = NameFileFinder.new(value[:options])
62
+ finder.find_filenames_for(projectpath)
63
+ value[:project_path] = finder.project_path
64
+ value[:script_path] = finder.script_path
65
+ value[:config_path] = finder.config_path
66
+ value[:test_name] = finder.test_name
67
+
68
+ unless value[:options]["case"].nil?
69
+ numbers = value[:options]["case"].split(",")
70
+ value[:options]["case"] = numbers.collect!(&:to_i)
71
+ end
72
+ end
73
+ end
@@ -15,14 +15,19 @@ require_relative "ext_filter"
15
15
  # * value
16
16
  class Result
17
17
  attr_reader :content
18
- attr_accessor :exitstatus
18
+ attr_accessor :exitcode
19
+ attr_writer :alterations
19
20
 
20
21
  def initialize
21
22
  reset
22
23
  end
23
24
 
24
25
  def alterations
25
- @alterations.join(" & ")
26
+ if @alterations.is_a? String
27
+ @alterations
28
+ else
29
+ @alterations.join(" & ")
30
+ end
26
31
  end
27
32
 
28
33
  def content=(content)
@@ -47,17 +52,14 @@ class Result
47
52
  def reset
48
53
  @content_backup = []
49
54
  @content = []
50
- @exitstatus = nil
55
+ @exitcode = -1
51
56
  @value = nil
52
57
  @expected = nil
53
58
  @alterations = []
54
59
  end
55
60
 
56
61
  def ok?
57
- # REVISE THIS
58
- return false if @exitstatus.nil?
59
-
60
- @exitstatus.zero?
62
+ @exitcode.zero?
61
63
  end
62
64
 
63
65
  def restore
@@ -0,0 +1,12 @@
1
+ class Settings
2
+ def self.letter
3
+ {
4
+ good: ".",
5
+ bad: "F",
6
+ error: "?",
7
+ none: " ",
8
+ ok: "\u{2714}",
9
+ cross: "\u{2716}"
10
+ }
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
- require_relative "../application"
1
+ require_relative "project"
2
2
 
3
3
  module Verbose
4
4
  def verboseln(text)
@@ -6,7 +6,7 @@ module Verbose
6
6
  end
7
7
 
8
8
  def verbose(text)
9
- return if Application.instance.quiet?
9
+ return if Project.quiet?
10
10
 
11
11
  print text
12
12
  end
@@ -1,5 +1,5 @@
1
1
  module Teuton
2
- VERSION = "2.6.0"
2
+ VERSION = "2.7.1"
3
3
  APPNAME = "teuton"
4
4
  GEMNAME = "teuton"
5
5
  DOCKERNAME = "dvarrui/#{GEMNAME}"
data/lib/teuton.rb CHANGED
@@ -1,18 +1,19 @@
1
- require_relative "teuton/application"
1
+ require_relative "teuton/utils/project"
2
2
 
3
3
  module Teuton
4
4
  def self.create(path_to_new_dir)
5
5
  require_relative "teuton/skeleton"
6
- Skeleton.create(path_to_new_dir)
6
+ Skeleton.new.create(path_to_new_dir)
7
7
  end
8
8
 
9
9
  def self.check(projectpath, options = {})
10
- Application.instance.add_input_params(projectpath, options)
10
+ Project.add_input_params(projectpath, options)
11
11
  require_dsl_and_script("teuton/check/laboratory") # Define DSL
12
-
13
- app = Application.instance
14
- lab = Laboratory.new(app.script_path, app.config_path)
15
- if options[:onlyconfig]
12
+ lab = Laboratory.new(
13
+ Project.value[:script_path],
14
+ Project.value[:config_path]
15
+ )
16
+ if options["onlyconfig"]
16
17
  lab.show_onlyconfig
17
18
  else
18
19
  lab.show
@@ -20,28 +21,28 @@ module Teuton
20
21
  end
21
22
 
22
23
  def self.run(projectpath, options = {})
23
- Application.instance.add_input_params(projectpath, options)
24
+ # Application.instance.add_input_params(projectpath, options)
25
+ Project.add_input_params(projectpath, options)
24
26
  require_dsl_and_script("teuton/case_manager/dsl") # Define DSL
25
27
  end
26
28
 
27
29
  def self.readme(projectpath, options = {})
28
- # Create Readme file for a teuton test
29
- Application.instance.add_input_params(projectpath, options)
30
+ Project.add_input_params(projectpath, options)
30
31
  require_dsl_and_script("teuton/readme/readme") # Define DSL
31
-
32
- app = Application.instance
33
- readme = Readme.new(app.script_path, app.config_path)
32
+ readme = Readme.new(
33
+ Project.value[:script_path],
34
+ Project.value[:config_path]
35
+ )
34
36
  readme.show
35
37
  end
36
38
 
37
39
  private_class_method def self.require_dsl_and_script(dslpath)
38
- app = Application.instance
39
40
  require_relative dslpath
40
41
  begin
41
- require_relative app.script_path
42
- rescue
43
- warn e.to_s
44
- warn Rainbow.new("[FAIL ] Reading file #{app.script_path}").red
42
+ require_relative Project.value[:script_path]
43
+ rescue => e
44
+ warn e
45
+ warn Rainbow.new("[FAIL ] Reading file #{Project.value[:script_path]}").red
45
46
  warn Rainbow.new("[ERROR] Syntax Error!").red
46
47
  exit 1
47
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teuton
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-10 00:00:00.000000000 Z
11
+ date: 2023-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rainbow
@@ -133,6 +133,7 @@ extra_rdoc_files:
133
133
  - docs/changelog/v2.4.md
134
134
  - docs/changelog/v2.5.md
135
135
  - docs/changelog/v2.6.md
136
+ - docs/changelog/v2.7.md
136
137
  - docs/changelog/version2.1.md
137
138
  - docs/commands/README.md
138
139
  - docs/commands/example_check.md
@@ -202,6 +203,7 @@ files:
202
203
  - docs/changelog/v2.4.md
203
204
  - docs/changelog/v2.5.md
204
205
  - docs/changelog/v2.6.md
206
+ - docs/changelog/v2.7.md
205
207
  - docs/changelog/version2.1.md
206
208
  - docs/commands/README.md
207
209
  - docs/commands/example_check.md
@@ -259,7 +261,6 @@ files:
259
261
  - docs/learn/videos.md
260
262
  - docs/videos.md
261
263
  - lib/teuton.rb
262
- - lib/teuton/application.rb
263
264
  - lib/teuton/case/builtin/main.rb
264
265
  - lib/teuton/case/builtin/package.rb
265
266
  - lib/teuton/case/builtin/service.rb
@@ -269,7 +270,9 @@ files:
269
270
  - lib/teuton/case/case.rb
270
271
  - lib/teuton/case/close.rb
271
272
  - lib/teuton/case/config.rb
272
- - lib/teuton/case/dsl.rb
273
+ - lib/teuton/case/deprecated/runner.rb
274
+ - lib/teuton/case/deprecated/utils.rb
275
+ - lib/teuton/case/dsl/all.rb
273
276
  - lib/teuton/case/dsl/expect.rb
274
277
  - lib/teuton/case/dsl/getset.rb
275
278
  - lib/teuton/case/dsl/goto.rb
@@ -278,8 +281,13 @@ files:
278
281
  - lib/teuton/case/dsl/send.rb
279
282
  - lib/teuton/case/dsl/target.rb
280
283
  - lib/teuton/case/dsl/unique.rb
284
+ - lib/teuton/case/execute/copy_ssh.rb
285
+ - lib/teuton/case/execute/execute_base.rb
286
+ - lib/teuton/case/execute/execute_local.rb
287
+ - lib/teuton/case/execute/execute_manager.rb
288
+ - lib/teuton/case/execute/execute_ssh.rb
289
+ - lib/teuton/case/execute/execute_telnet.rb
281
290
  - lib/teuton/case/play.rb
282
- - lib/teuton/case/runner.rb
283
291
  - lib/teuton/case_manager/case_manager.rb
284
292
  - lib/teuton/case_manager/check_cases.rb
285
293
  - lib/teuton/case_manager/dsl.rb
@@ -319,13 +327,16 @@ files:
319
327
  - lib/teuton/report/formatter/resume/txt.rb
320
328
  - lib/teuton/report/formatter/resume/yaml.rb
321
329
  - lib/teuton/report/report.rb
322
- - lib/teuton/result/ext_array.rb
323
- - lib/teuton/result/ext_compare.rb
324
- - lib/teuton/result/ext_filter.rb
325
- - lib/teuton/result/result.rb
326
330
  - lib/teuton/skeleton.rb
331
+ - lib/teuton/utils/application.rb
327
332
  - lib/teuton/utils/configfile_reader.rb
328
333
  - lib/teuton/utils/name_file_finder.rb
334
+ - lib/teuton/utils/project.rb
335
+ - lib/teuton/utils/result/ext_array.rb
336
+ - lib/teuton/utils/result/ext_compare.rb
337
+ - lib/teuton/utils/result/ext_filter.rb
338
+ - lib/teuton/utils/result/result.rb
339
+ - lib/teuton/utils/settings.rb
329
340
  - lib/teuton/utils/verbose.rb
330
341
  - lib/teuton/version.rb
331
342
  homepage: https://github.com/teuton-software/teuton
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "dsl/expect"
4
- require_relative "dsl/getset"
5
- require_relative "dsl/goto"
6
- require_relative "dsl/log"
7
- require_relative "dsl/macro"
8
- require_relative "dsl/send"
9
- require_relative "dsl/target"
10
- require_relative "dsl/unique"
File without changes
File without changes
File without changes