teuton 2.1.7 → 2.1.8dev1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f3afa907473fea0072b32db4ce5b6d8fd2f93d1e48c0937fd37e5c74756dfb3
4
- data.tar.gz: 44065354ff9987c8e92477767064e5a62afea9f9da03eecf49e71e6c116ddddc
3
+ metadata.gz: f9adfc25439c6c4041e3ebe2c3defd49f2377fd5bc9283da0849e5e2ad220581
4
+ data.tar.gz: ddfb9194f6ce7d070fd53aa796094ffa25faa19f7d7142bb044ce9d92ed6725a
5
5
  SHA512:
6
- metadata.gz: cbab8d53ac2945943316c789e6efb5e83bc9c2dd4435a6f7c9c231d7bd4d8bfb9e5a1e27fff4f8d7cd7c82536f85fe5d2cd46234c02b091e1d6c3b75557c04b5
7
- data.tar.gz: e8088367c4d4182c5cd50cce7aad58bae68df6303356a9daa94980cf0db97307244de09254879cf59f29de0aee2506bfd577f9001e89c8da92e42a33253e8a7e
6
+ metadata.gz: ca261f8258065c3684c82dae7ea8929c1d77bfeeb64baea71dd60c2aa52d99f1767af1bd2467a1747881a4e37ba4078df1dc9541895bcee6f0695b73874e8cc8
7
+ data.tar.gz: 001aa6f198e560ec39cac6a1cca65ed67d7ef887751e7f9e13759309c7bf42cf772c8c8fb32fc8e0f8ec1ddc92477ef2a8bfbdae7c74851cad4afb7123eadeff
@@ -8,6 +8,7 @@
8
8
 
9
9
  > This example is on GitHub repository at `examples/learn-02-config`.
10
10
 
11
+ ---
11
12
  ## Config file
12
13
 
13
14
  By default, `config.yaml` is our config file. Let's an example:
@@ -47,10 +48,8 @@ In this section we define targets using keywords: target, run, expect and get.
47
48
  ```ruby
48
49
  play do
49
50
  show
50
- # export using other output formats
51
- export :format => :colored_text
51
+ export
52
52
  end
53
-
54
53
  ```
55
54
 
56
55
  Runing this example and see `show` keyword output:
@@ -100,7 +99,7 @@ HALL OF FAME
100
99
 
101
100
  ## Results
102
101
 
103
- Output reports are saved into `var/learn-02-config/` directory.
102
+ Output reports are saved into `var/learn-02-config/` directory. Detail output report is created for every case.
104
103
 
105
104
  ```
106
105
  var/learn-02-config
@@ -109,7 +108,7 @@ var/learn-02-config
109
108
  └── resume.txt
110
109
  ```
111
110
 
112
- Let's see `export` keyword output.
111
+ Let's see `export` keyword output for case 01.
113
112
 
114
113
  ```
115
114
  $ more var/learn-02-config/case-01.txt
@@ -156,18 +155,18 @@ By default, when you run `teuton run foo`, this will search for:
156
155
  * `foo/config.yaml` config file.
157
156
 
158
157
  **Using cname param:**
159
- But it's posible run `teuton run --cname=rock foo`, and this will search for:
158
+ But it's posible run `teuton run --cname=rock foo`, and choose diferent config file into projet folder:
160
159
  * `foo/start.rb` test file and
161
160
  * `foo/rock.yaml` config file.
162
161
 
163
162
  `cname` param searchs YAML config file into the same project folder.
164
163
 
165
164
  **Using cpath param:**
166
- An also, it's posible run `teuton run --cpath=/home/david/startwars.yaml foo`, and this will search for:
165
+ An also, it's posible run `teuton run --cpath=/home/david/startwars.yaml foo`, and choose config file using its absolute path:
167
166
  * `foo/start.rb` test file and
168
167
  * `/home/david/starwars.yaml` config file.
169
168
 
170
- `cpath` param use YAML config file, from the specified path.
169
+ `cpath` param selects YAML config file, from the specified path.
171
170
 
172
171
  **Using diferent main rb name:**
173
172
  When you run `teuton run foo/mazingerz.rb`, this will search for:
@@ -1,4 +1,8 @@
1
1
 
2
+ [<< back](README.md)
3
+
4
+ # Example: learn-03-remote-hosts
5
+
2
6
  Learn how to:
3
7
  * Check a group of remote hosts.
4
8
  * Export reports using other output formats.
@@ -6,7 +10,9 @@ Learn how to:
6
10
 
7
11
  > This example is on GitHub repository at `examples/learn-03-remote-hosts`.
8
12
 
9
- ## Config file (`config.yaml`)
13
+ ## Config file
14
+
15
+ `config.yaml` file:
10
16
 
11
17
  ```yaml
12
18
  ---
@@ -30,7 +36,7 @@ Learn how to:
30
36
 
31
37
  ## Definitions (group section)
32
38
 
33
- Defining 3 targets to be checked:
39
+ Define 3 targets (items to be checked):
34
40
 
35
41
  ```ruby
36
42
  group "learn 03 remote hosts" do
@@ -87,4 +93,4 @@ var
87
93
  * `case-01`, report with details about case 01 (maul)
88
94
  * `case-02`, report with details about case 02 (r2d2)
89
95
  * `case-03`, report with details about case 03 (obiwan)
90
- * `cresume`, report with global resumed information about all cases.
96
+ * `resume`, report with global resumed information about all cases.
@@ -1,4 +1,8 @@
1
1
 
2
+ [<< back](README.md)
3
+
4
+ # Example: learn-04-use
5
+
2
6
  Learn how to:
3
7
  * Organize huge amount of groups/targets into several files.
4
8
  * Checking Windows OS infrastructure (host1).
@@ -1,4 +1,8 @@
1
1
 
2
+ [<< back](README.md)
3
+
4
+ # Example: learn-05-debug
5
+
2
6
  Learn how to:
3
7
  * Check test syntax.
4
8
  * Debug your tests.
@@ -35,23 +39,23 @@ end
35
39
 
36
40
  ## Debugging: Testing rb files
37
41
 
38
- Tests grows and becames huge, with a lot of targets (That isn't a problem). Then, we organize them spliting into several files and invoke `use` keywork from our main rb file (That's good) to load other files.
42
+ Tests grows and becames huge, with a lot of targets (That isn't a problem). Then, we organize them spliting into several files and invoke `use` keywork from our main rb file to load other files (That's good idea) .
39
43
 
40
- When this happend, sometimes we need to verify or check rb file consistency and syntax, and we will do it with `teuton test PATH/TO/PROJECT/FOLDER`. Let's see an example:
44
+ When this happend, sometimes we need to verify or check rb file consistency and syntax, and we will do it with `teuton check PATH/TO/PROJECT/FOLDER`. Let's see an example:
41
45
 
42
46
  ```bash
43
- $ teuton test learn/learn-01-target
44
- [INFO] ScriptPath => ...epos/teuton.d/units/learn/learn-01-target/start.rb
45
- [INFO] ConfigPath => ...s/teuton.d/units/learn/learn-01-target/config.yaml
47
+ teuton check examples/learn-01-target
48
+ [INFO] ScriptPath => .../teuton.d/teuton/examples/learn-01-target/start.rb
49
+ [INFO] ConfigPath => ...uton.d/teuton/examples/learn-01-target/config.yaml
46
50
  [INFO] TestName => learn-01-target
47
51
 
48
52
  +------------------------+
49
53
  | GROUP: learn-01-target |
50
54
  +------------------------+
51
55
  (001) target Create user <david>
52
- weight 1.0
53
- goto localhost and {:exec=>"id david"}
54
- expect david (String)
56
+ weight 1.0
57
+ goto localhost and {:exec=>"id david"}
58
+ expect david (String)
55
59
 
56
60
  +--------------+-------+
57
61
  | DSL Stats | Count |
@@ -69,7 +73,7 @@ $ teuton test learn/learn-01-target
69
73
  +----------------------+
70
74
  | Revising CONFIG file |
71
75
  +----------------------+
72
- [WARN] File /home/david/proy/repos/teuton.d/units/learn/learn-01-target/config.yaml not found!
76
+ [WARN] File ./examples/learn-01-target/config.yaml not found!
73
77
  [INFO] Recomended content:
74
78
  ---
75
79
  :global:
@@ -77,13 +81,13 @@ $ teuton test learn/learn-01-target
77
81
  - :tt_members: VALUE
78
82
  ```
79
83
 
80
- In this case, Teuton detects that there isn't config file and propose us content for `config.yaml`.
84
+ In this case, Teuton detects that there isn't exist config file, and propose us content for `config.yaml`.
81
85
 
82
86
  ## Debugging: Result content
83
87
 
84
- Every time we invoke `goto` or `run` keywork, a OS command is executed and the output showed on screen is captured by Teuton and saved into `result` internal object.
88
+ Every time we invoke `goto` or `run` keywork, an OS command is executed and the output showed on screen is captured by Teuton and saved into `result` internal object.
85
89
 
86
- We coul debug it invoking `result.debug` into our rb file. Let's see an example from `external.rb.rb` file:
90
+ We could debug it invoking `result.debug` into our rb file. Let's see an example from `external.rb.rb` file:
87
91
 
88
92
  ```ruby
89
93
  group "Windows: external configuration" do
@@ -101,4 +105,4 @@ group "Windows: external configuration" do
101
105
  end
102
106
  ```
103
107
 
104
- `result.debug` it's usefull when you are verifying what command ouput has been captured by Teuton.
108
+ `result.debug` it's usefull when you are verifying command output captured by Teuton.
@@ -4,7 +4,7 @@ require 'singleton'
4
4
  class Application
5
5
  include Singleton
6
6
 
7
- VERSION = '2.1.7' # Application version
7
+ VERSION = '2.1.8dev1' # Application version
8
8
  NAME = 'teuton' # Application name
9
9
 
10
10
  attr_reader :letter
@@ -26,7 +26,7 @@ class Case
26
26
  attr_accessor :result
27
27
  attr_accessor :action # TODO: why not reader only???
28
28
  attr_reader :id, :config, :uniques, :conn_status
29
- @@id = 1
29
+ @@id = '01'
30
30
 
31
31
  def initialize(config)
32
32
  app = Application.instance
@@ -34,7 +34,7 @@ class Case
34
34
  @groups = app.groups
35
35
 
36
36
  @id = @@id
37
- @@id += 1
37
+ @@id = @@id.next
38
38
 
39
39
  # Define Case Report
40
40
  @report = Report.new(@id)
@@ -7,16 +7,14 @@ module DSL
7
7
  # Record log message
8
8
  # @param text (String)
9
9
  # @param type (Symbol) Values :info, :warn or :error
10
- # rubocop:disable Style/FormatStringToken
11
10
  def log(text = '', type = :info)
12
11
  s = ''
13
12
  s = Rainbow('WARN!').color(:yellow) if type == :warn
14
13
  s = Rainbow('ERROR').bg(:red) if type == :error
15
14
  t = Time.now
16
- # f = format('%02d:%02d:%02d', t.hour, t.min, t.sec)
17
- f = '%02d:%02d:%02d' % [t.hour, t.min, t.sec]
15
+ f = format('%<hour>02d:%<min>02d:%<sec>02d',
16
+ { hour: t.hour, min: t.min, sec: t.sec })
18
17
  @report.lines << "[#{f}] #{s}: #{text}"
19
18
  end
20
- # rubocop:enable Style/FormatStringToken
21
19
  alias msg log
22
20
  end
@@ -61,9 +61,7 @@ class CaseManager
61
61
  srcdir = File.join(app.output_basedir, app.global[:tt_testname])
62
62
  puts "[INFO] Preserving files => #{logdir}"
63
63
  FileUtils.mkdir(logdir)
64
- Dir.glob('var/learn-08-preserve/**.*').each do |file|
65
- FileUtils.cp(file, logdir)
66
- end
64
+ Dir.glob(srcdir, '**.*').each { |file| FileUtils.cp(file, logdir) }
67
65
  end
68
66
 
69
67
  def send(args = {})
@@ -2,8 +2,14 @@
2
2
 
3
3
  require_relative '../application'
4
4
 
5
- # ExportManager#run
5
+ ##
6
+ # ExportManager is used by CaseManager to export output reports)
6
7
  module ExportManager
8
+ ##
9
+ # Run export function
10
+ # @param main_report (Report)
11
+ # @param cases (Array)
12
+ # @param args (Hash) Selected export options
7
13
  def self.run(main_report, cases, args)
8
14
  # default :mode=>:all, :format=>:txt
9
15
  format = args[:format] || Application.instance.default[:format]
@@ -38,7 +38,7 @@ class CaseManager
38
38
  moodle_id: '', moodle_feedback: '' }
39
39
  else
40
40
  line[:skip] = false
41
- line[:id] = format('case_%02d', c.id.to_i)
41
+ line[:id] = format('%<id>02d', { id: c.id.to_i })
42
42
  line[:letter] = app.letter[:error] if c.grade < 50.0
43
43
  line[:grade] = c.grade.to_f #format(' %3d', c.grade.to_f)
44
44
  line[:members] = c.members
@@ -2,13 +2,19 @@
2
2
 
3
3
  require_relative 'resume_array_formatter'
4
4
 
5
- # MoodleCSVFormatter class
5
+ ##
6
+ # Format data to Moodle CSV
6
7
  class MoodleCSVFormatter < ResumeArrayFormatter
8
+ ##
9
+ # initialize instance
10
+ # @param report (Report)
7
11
  def initialize(report)
8
12
  super(report)
9
13
  @data = {}
10
14
  end
11
15
 
16
+ ##
17
+ # Process internal data and generates data with format
12
18
  def process
13
19
  build_data
14
20
  process_cases
@@ -21,8 +27,12 @@ class MoodleCSVFormatter < ResumeArrayFormatter
21
27
  # MoodleID, Grade, Feedback
22
28
  w "MoodleID, TeutonGrade, TeutonFeedback\n"
23
29
  @data[:cases].each do |line|
24
- w "#{line[:moodle_id]},#{line[:grade]}," \
25
- "#{line[:moodle_feedback]}\n" unless line[:skip]
30
+ moodle_id = line[:moodle_id]
31
+ moodle_id = line[:moodle_id].split(',') if moodle_id.class == String
32
+ moodle_id.each do |id|
33
+ w "#{id.strip},#{line[:grade]}," \
34
+ "#{line[:moodle_feedback]}\n" unless line[:skip]
35
+ end
26
36
  end
27
37
  end
28
38
  end
@@ -6,7 +6,7 @@ require_relative 'resume_array_formatter'
6
6
 
7
7
  # TXTFormatter class
8
8
  class ResumeTXTFormatter < ResumeArrayFormatter
9
- def initialize(report, color=false)
9
+ def initialize(report, color = false)
10
10
  @color = color
11
11
  super(report)
12
12
  @data = {}
@@ -30,60 +30,61 @@ class ResumeTXTFormatter < ResumeArrayFormatter
30
30
  private
31
31
 
32
32
  def process_config
33
- w "#{Rainbow("CONFIGURATION").bg(:blue)}\n"
33
+ w "#{Rainbow('CONFIGURATION').bg(:blue)}\n"
34
34
  my_screen_table = Terminal::Table.new do |st|
35
- @data[:config].each do |key,value|
36
- st.add_row [ key.to_s, trim(value)]
35
+ @data[:config].each do |key, value|
36
+ st.add_row [key.to_s, trim(value)]
37
37
  end
38
38
  end
39
- w my_screen_table.to_s+"\n\n"
39
+ w "#{my_screen_table}\n\n"
40
40
  end
41
41
 
42
+ # rubocop:disable Metrics/MethodLength
42
43
  def process_cases
43
44
  w "#{Rainbow('CASES').bg(:blue)}\n"
44
-
45
45
  my_screen_table = Terminal::Table.new do |st|
46
- st.add_row [ 'CASE ID', 'MEMBERS', 'GRADE', 'STATE' ]
46
+ st.add_row %w[CASE MEMBERS GRADE STATE]
47
47
  @data[:cases].each do |line|
48
- st.add_row [ line[:id],
49
- line[:members],
50
- format(' %3d', line[:grade]),
51
- line[:letter] ]
48
+ st.add_row [line[:id],
49
+ line[:members],
50
+ format(' %<grade>3d', { grade: line[:grade] }),
51
+ line[:letter]]
52
52
  end
53
53
  end
54
- w my_screen_table.to_s+"\n\n"
54
+ w "#{my_screen_table}\n\n"
55
55
  end
56
+ # rubocop:enable Metrics/MethodLength
56
57
 
57
58
  def process_conn_errors
58
- w "#{Rainbow('CONN ERRORS').bg(:red)}\n"
59
-
60
59
  my_screen_table = Terminal::Table.new do |st|
61
- st.add_row [ 'CASE ID', 'MEMBERS', 'HOST', 'ERROR' ]
60
+ st.add_row %w[CASE MEMBERS HOST ERROR]
62
61
  @data[:cases].each do |line|
63
62
  line[:conn_status].each_pair do |h, e|
64
- st.add_row [ line[:id],
65
- line[:members],
66
- h, e ]
63
+ st.add_row [line[:id], line[:members], h, e]
67
64
  end
68
65
  end
69
66
  end
70
- w my_screen_table.to_s+"\n"
67
+ return unless my_screen_table.rows.size > 1
68
+ w "#{Rainbow('CONN ERRORS').bg(:red)}\n"
69
+ w "#{my_screen_table}\n"
71
70
  end
72
71
 
73
72
  def process_results
74
- w "\n#{Rainbow("RESULTS").bg(:blue)}\n"
73
+ w "\n#{Rainbow('RESULTS').bg(:blue)}\n"
75
74
  my_screen_table = Terminal::Table.new do |st|
76
- @data[:results].each do |key,value|
77
- st.add_row [ key.to_s, value.to_s]
75
+ @data[:results].each do |key, value|
76
+ st.add_row [key.to_s, value.to_s]
78
77
  end
79
78
  end
80
- w my_screen_table.to_s+"\n"
79
+ w "#{my_screen_table}\n"
81
80
  end
82
81
 
82
+ # rubocop:disable Metrics/MethodLength
83
+ # rubocop:disable Metrics/AbcSize
83
84
  def process_hof
84
85
  return if @data[:hall_of_fame].size < 3
85
86
 
86
- w "\n#{Rainbow("HALL OF FAME").bg(:blue)}\n"
87
+ w "\n#{Rainbow('HALL OF FAME').bg(:blue)}\n"
87
88
  my_screen_table = Terminal::Table.new do |st|
88
89
  @data[:hall_of_fame].each do |line|
89
90
  mycolor = :green
@@ -97,6 +98,8 @@ class ResumeTXTFormatter < ResumeArrayFormatter
97
98
  st.add_row [text1, text2]
98
99
  end
99
100
  end
100
- w my_screen_table.to_s + "\n"
101
+ w "#{my_screen_table}\n"
101
102
  end
103
+ # rubocop:enable Metrics/MethodLength
104
+ # rubocop:enable Metrics/AbcSize
102
105
  end
@@ -28,11 +28,9 @@ class Report
28
28
  attr_reader :history
29
29
  ##
30
30
  # Class constructor
31
- def initialize(id = 0)
31
+ def initialize(id = '00')
32
32
  @id = id
33
- number = '0' + @id.to_s
34
- number = @id.to_s if @id > 9
35
- @filename = "case-#{number}"
33
+ @filename = "case-#{@id}"
36
34
  @output_dir = Application.instance.output_basedir
37
35
  @head = {}
38
36
  @lines = []
@@ -35,7 +35,7 @@ class Report
35
35
  def show_case_list
36
36
  puts 'CASE RESULTS'
37
37
  my_screen_table = Terminal::Table.new do |st|
38
- st.add_row ['CASE ID', 'MEMBERS', 'GRADE', 'STATE' ]
38
+ st.add_row ['CASE', 'MEMBERS', 'GRADE', 'STATE' ]
39
39
  @lines.each do |line|
40
40
  st.add_row [line[:id], line[:members], line[:grade], line[:letter]]
41
41
  end
@@ -50,7 +50,7 @@ class Report
50
50
 
51
51
  puts 'CONN ERRORS'
52
52
  my_screen_table = Terminal::Table.new do |st|
53
- st.add_row ['CASE ID', 'MEMBERS', 'HOST', 'ERROR']
53
+ st.add_row ['CASE', 'MEMBERS', 'HOST', 'ERROR']
54
54
  @lines.each do |line|
55
55
  line[:conn_status].each_pair do |h,e|
56
56
  st.add_row [line[:id], line[:members], h, e]
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: 2.1.7
4
+ version: 2.1.8dev1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Vargas Ruiz
@@ -336,9 +336,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
336
336
  version: 2.5.0
337
337
  required_rubygems_version: !ruby/object:Gem::Requirement
338
338
  requirements:
339
- - - ">="
339
+ - - ">"
340
340
  - !ruby/object:Gem::Version
341
- version: '0'
341
+ version: 1.3.1
342
342
  requirements: []
343
343
  rubygems_version: 3.1.2
344
344
  signing_key: