teuton 3.2.1 → 3.4.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.
- checksums.yaml +4 -4
- data/README.md +18 -20
- data/docs/commands/README.md +12 -10
- data/docs/commands/check.md +17 -15
- data/docs/commands/{readme.md → doc.md} +3 -5
- data/docs/commands/help.md +23 -13
- data/docs/devel/todo.md +2 -8
- data/docs/dsl/README.md +9 -8
- data/docs/dsl/event.md +172 -0
- data/docs/dsl/target.md +0 -14
- data/docs/install/t-node.md +10 -21
- data/docs/learn/01-cmd_new.md +1 -1
- data/docs/learn/02-target.md +52 -50
- data/docs/learn/03-remote_hosts.md +15 -16
- data/docs/learn/04-config.md +70 -69
- data/docs/learn/05-use.md +1 -1
- data/docs/learn/06-cmd_check.md +28 -26
- data/docs/learn/07-target_weight.md +7 -5
- data/docs/learn/08-unique_values.md +32 -30
- data/docs/learn/09-send.md +2 -2
- data/docs/learn/10-debug.md +38 -1
- data/docs/learn/11-export.md +1 -1
- data/docs/learn/12-preserve.md +4 -4
- data/docs/learn/13-feedback.md +12 -11
- data/docs/learn/14-moodle_id.md +3 -3
- data/docs/learn/15-readme.md +12 -12
- data/docs/learn/16-include.md +9 -9
- data/docs/learn/17-alias.md +2 -2
- data/docs/learn/18-log.md +46 -44
- data/docs/learn/19-read_vars.md +1 -1
- data/docs/learn/20-macros.md +1 -1
- data/docs/learn/21-exit_codes.md +1 -1
- data/docs/learn/22-result.md +1 -1
- data/docs/learn/23-test-code.md +14 -11
- data/docs/learn/24-test-sql.md +6 -6
- data/docs/learn/25-expect-result.md +1 -1
- data/docs/learn/26-expect_sequence.md +2 -2
- data/docs/learn/27-run_script.md +9 -6
- data/docs/learn/28-upload.md +3 -1
- data/docs/learn/31-event-stop.md +134 -0
- data/docs/learn/32-event-zero.md +127 -0
- data/docs/more.md +4 -1
- data/lib/teuton/case/{action.rb → action/action.rb} +18 -10
- data/lib/teuton/case/action/manager.rb +198 -0
- data/lib/teuton/case/case.rb +15 -13
- data/lib/teuton/case/close.rb +7 -7
- data/lib/teuton/case/dsl/all.rb +1 -0
- data/lib/teuton/case/dsl/event.rb +5 -0
- data/lib/teuton/case/dsl/expect.rb +6 -4
- data/lib/teuton/case/dsl/log.rb +10 -9
- data/lib/teuton/case/dsl/macro.rb +1 -1
- data/lib/teuton/case/dsl/run.rb +10 -15
- data/lib/teuton/case/dsl/target.rb +10 -3
- data/lib/teuton/case/play.rb +1 -1
- data/lib/teuton/case/result/ext_compare.rb +10 -10
- data/lib/teuton/case_manager/dsl.rb +6 -2
- data/lib/teuton/case_manager/ext/report.rb +0 -4
- data/lib/teuton/case_manager/show_resume_report.rb +29 -30
- data/lib/teuton/check/checker.rb +19 -8
- data/lib/teuton/check/dsl/all.rb +10 -16
- data/lib/teuton/check/dsl/event.rb +10 -0
- data/lib/teuton/check/dsl/expect.rb +21 -45
- data/lib/teuton/check/dsl/getset.rb +2 -2
- data/lib/teuton/check/dsl/run.rb +2 -2
- data/lib/teuton/check/dsl/target.rb +17 -0
- data/lib/teuton/check/show.rb +35 -41
- data/lib/teuton/cli/app.rb +16 -8
- data/lib/teuton/readme/dsl/all.rb +16 -2
- data/lib/teuton/readme/main.rb +2 -2
- data/lib/teuton/report/formatter/default/array.rb +15 -29
- data/lib/teuton/report/formatter/default/txt.rb +42 -30
- data/lib/teuton/report/formatter/resume/txt.rb +27 -26
- data/lib/teuton/report/formatter/resume/xml.rb +4 -4
- data/lib/teuton/report/report.rb +5 -36
- data/lib/teuton/utils/project.rb +4 -3
- data/lib/teuton/version.rb +1 -1
- metadata +14 -7
- data/docs/tutorial/es/nginx/README.md +0 -546
- data/lib/teuton/deprecated/utils.rb +0 -14
|
@@ -32,8 +32,8 @@ class Result
|
|
|
32
32
|
case external.class.to_s
|
|
33
33
|
when "Fixnum"
|
|
34
34
|
internal = @content[0].to_i
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
Logger.warn "Fixnum class is deprecated!"
|
|
36
|
+
Logger.warn "- Upgrade your Ruby version."
|
|
37
37
|
when "Float"
|
|
38
38
|
internal = @content[0].to_f
|
|
39
39
|
when "Integer"
|
|
@@ -55,8 +55,8 @@ class Result
|
|
|
55
55
|
case input.class.to_s
|
|
56
56
|
when "Fixnum"
|
|
57
57
|
value = @content[0].to_i
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
Logger.warn "Fixnum class is deprecated!"
|
|
59
|
+
Logger.warn "Upgrade your Ruby version."
|
|
60
60
|
when "Float"
|
|
61
61
|
value = @content[0].to_f
|
|
62
62
|
when "Integer"
|
|
@@ -75,8 +75,8 @@ class Result
|
|
|
75
75
|
case input.class.to_s
|
|
76
76
|
when "Fixnum"
|
|
77
77
|
value = @content[0].to_i
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
Logger.warn "Fixnum class is deprecated!"
|
|
79
|
+
Logger.warn "Upgrade your Ruby version."
|
|
80
80
|
when "Float"
|
|
81
81
|
value = @content[0].to_f
|
|
82
82
|
when "Integer"
|
|
@@ -96,8 +96,8 @@ class Result
|
|
|
96
96
|
case input.class.to_s
|
|
97
97
|
when "Fixnum"
|
|
98
98
|
value = @content[0].to_i
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
Logger.warn "Fixnum class is deprecated!"
|
|
100
|
+
Logger.warn "Upgrade your Ruby version."
|
|
101
101
|
when "Float"
|
|
102
102
|
value = @content[0].to_f
|
|
103
103
|
when "Integer"
|
|
@@ -116,8 +116,8 @@ class Result
|
|
|
116
116
|
case input.class.to_s
|
|
117
117
|
when "Fixnum"
|
|
118
118
|
value = @content[0].to_i
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
Logger.warn "Fixnum class is deprecated!"
|
|
120
|
+
Logger.warn "Upgrade your Ruby version."
|
|
121
121
|
when "Float"
|
|
122
122
|
value = @content[0].to_f
|
|
123
123
|
when "Integer"
|
|
@@ -16,14 +16,18 @@ alias defmacro define_macro
|
|
|
16
16
|
def group(name, &block)
|
|
17
17
|
Project.value[:groups] << { name: name, block: block }
|
|
18
18
|
end
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
def task(...)
|
|
21
|
+
Logger.warn("Keyword deprecated: Replace 'task' by 'group'.")
|
|
22
|
+
group(...)
|
|
23
|
+
end
|
|
20
24
|
|
|
21
25
|
def play(&block)
|
|
22
26
|
CaseManager.new.play(&block)
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def start(...)
|
|
26
|
-
Logger.warn "
|
|
30
|
+
Logger.warn "Keywaord deprecaed: Replace 'start do' by `play do'"
|
|
27
31
|
play(...)
|
|
28
32
|
end
|
|
29
33
|
|
|
@@ -32,13 +32,12 @@ class ShowResumeReport
|
|
|
32
32
|
private
|
|
33
33
|
|
|
34
34
|
def show_initial_configurations
|
|
35
|
-
puts Rainbow("INITIAL CONFIGURATIONS").bright
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
end
|
|
35
|
+
Logger.puts Rainbow(" INITIAL CONFIGURATIONS").bright
|
|
36
|
+
table = Terminal::Table.new do |t|
|
|
37
|
+
t.style = {border: :unicode}
|
|
38
|
+
@report.head.each { |key, value| t.add_row [key.to_s, trim(value)] }
|
|
40
39
|
end
|
|
41
|
-
puts "#{
|
|
40
|
+
Logger.puts "#{table}\n\n"
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
def show_resume
|
|
@@ -47,14 +46,15 @@ class ShowResumeReport
|
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
def show_case_list
|
|
50
|
-
puts Rainbow("CASE RESULTS").bright
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
Logger.puts Rainbow(" \u{2630} CASE RESULTS").bright
|
|
50
|
+
table = Terminal::Table.new do |t|
|
|
51
|
+
t.style = {border: :unicode}
|
|
52
|
+
t.add_row %w[CASE MEMBERS GRADE STATE]
|
|
53
53
|
@report.lines.each do |line|
|
|
54
|
-
|
|
54
|
+
t.add_row [line[:id], line[:members], line[:grade], line[:letter]]
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
-
puts "#{
|
|
57
|
+
Logger.puts "#{table}\n\n"
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def show_conn_status
|
|
@@ -62,21 +62,22 @@ class ShowResumeReport
|
|
|
62
62
|
@report.lines.each { |line| errors += line[:conn_status].size }
|
|
63
63
|
return if errors.zero?
|
|
64
64
|
|
|
65
|
-
puts Rainbow("CONN ERRORS").bright
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
Logger.puts Rainbow(" \u{1f5f2} CONN ERRORS").bright
|
|
66
|
+
table = Terminal::Table.new do |t|
|
|
67
|
+
t.style = {border: :unicode}
|
|
68
|
+
t.add_row %w[CASE MEMBERS HOST ERROR]
|
|
68
69
|
@report.lines.each do |line|
|
|
69
70
|
line[:conn_status].each_pair do |host, error|
|
|
70
|
-
|
|
71
|
+
t.add_row [line[:id], line[:members], host, Rainbow(error).blue.bright]
|
|
71
72
|
end
|
|
72
73
|
end
|
|
73
74
|
end
|
|
74
|
-
puts "#{
|
|
75
|
+
Logger.puts "#{table}\n\n"
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def show_targets_history
|
|
78
79
|
tab = " "
|
|
79
|
-
puts Rainbow("CASE RESULTS").bright
|
|
80
|
+
Logger.puts Rainbow(" CASE RESULTS").bright
|
|
80
81
|
if @report.lines.size == 1
|
|
81
82
|
puts lines[0]
|
|
82
83
|
else
|
|
@@ -93,30 +94,28 @@ class ShowResumeReport
|
|
|
93
94
|
end
|
|
94
95
|
end
|
|
95
96
|
end
|
|
96
|
-
puts "\n\n"
|
|
97
|
+
Logger.puts "\n\n"
|
|
97
98
|
end
|
|
98
99
|
|
|
99
100
|
def show_final_values
|
|
100
|
-
puts Rainbow("FINAL VALUES").bright
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
end
|
|
101
|
+
Logger.puts Rainbow(" FINAL VALUES").bright
|
|
102
|
+
table = Terminal::Table.new do |t|
|
|
103
|
+
t.style = {border: :unicode}
|
|
104
|
+
@report.tail.each { |key, value| t.add_row [key.to_s, value.to_s] }
|
|
105
105
|
end
|
|
106
|
-
puts "#{
|
|
106
|
+
Logger.puts "#{table}\n\n"
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
def show_hall_of_fame
|
|
110
110
|
hall_of_fame = Project.value[:hall_of_fame]
|
|
111
111
|
return if hall_of_fame.size < MIN_HALL_OF_FAME
|
|
112
112
|
|
|
113
|
-
puts Rainbow("HALL OF FAME").bright
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
end
|
|
113
|
+
Logger.puts Rainbow(" HALL OF FAME").bright
|
|
114
|
+
table = Terminal::Table.new do |t|
|
|
115
|
+
t.style = {border: :unicode}
|
|
116
|
+
hall_of_fame.each { |line| t.add_row [line[0], line[1]] }
|
|
118
117
|
end
|
|
119
|
-
puts "#{
|
|
118
|
+
Logger.puts "#{table}\n\n"
|
|
120
119
|
end
|
|
121
120
|
|
|
122
121
|
def trim(input)
|
data/lib/teuton/check/checker.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "../case/action/manager"
|
|
3
4
|
require_relative "../case/dsl/macro"
|
|
4
5
|
require_relative "../case/result/result"
|
|
5
6
|
require_relative "../utils/project"
|
|
@@ -14,6 +15,7 @@ class Checker
|
|
|
14
15
|
attr_reader :result
|
|
15
16
|
|
|
16
17
|
def initialize(script_path, config_path)
|
|
18
|
+
@action_manager = Case::ActionManager.new
|
|
17
19
|
@path = {}
|
|
18
20
|
@path[:script] = script_path
|
|
19
21
|
@path[:dirname] = File.dirname(script_path)
|
|
@@ -28,6 +30,7 @@ class Checker
|
|
|
28
30
|
@stats = {
|
|
29
31
|
groups: 0,
|
|
30
32
|
targets: 0,
|
|
33
|
+
events: 0,
|
|
31
34
|
logs: 0,
|
|
32
35
|
readmes: 0,
|
|
33
36
|
uniques: 0,
|
|
@@ -69,22 +72,30 @@ class Checker
|
|
|
69
72
|
groups = Project.value[:groups]
|
|
70
73
|
option = Project.value[:options]
|
|
71
74
|
|
|
72
|
-
Logger.
|
|
75
|
+
Logger.puts ""
|
|
73
76
|
if Project.value[:uses].size.positive?
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
table = Terminal::Table.new do |t|
|
|
78
|
+
t.style = {border: :unicode}
|
|
79
|
+
t.add_row ["USE: external libraries"]
|
|
80
|
+
end
|
|
81
|
+
Logger.puts table
|
|
82
|
+
Project.value[:uses].each_with_index { Logger.puts " #{_2 + 1}. #{_1}" }
|
|
83
|
+
Logger.puts ""
|
|
76
84
|
end
|
|
77
85
|
groups.each do |t|
|
|
78
86
|
@stats[:groups] += 1
|
|
79
87
|
unless option[:panel]
|
|
80
88
|
msg = "GROUP: #{t[:name]}"
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
table = Terminal::Table.new do |t|
|
|
90
|
+
t.style = {border: :unicode}
|
|
91
|
+
t.add_row [msg]
|
|
92
|
+
end
|
|
93
|
+
Logger.puts table
|
|
83
94
|
end
|
|
84
95
|
instance_eval(&t[:block])
|
|
85
96
|
end
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
return unless @target_begin
|
|
98
|
+
|
|
99
|
+
Logger.warn "Last 'target' requires 'expect'\n"
|
|
89
100
|
end
|
|
90
101
|
end
|
data/lib/teuton/check/dsl/all.rb
CHANGED
|
@@ -1,37 +1,31 @@
|
|
|
1
1
|
require_relative "builtin"
|
|
2
2
|
require_relative "expect"
|
|
3
|
+
require_relative "event"
|
|
3
4
|
require_relative "getset"
|
|
4
5
|
require_relative "run"
|
|
6
|
+
require_relative "target"
|
|
5
7
|
|
|
6
8
|
module CheckDSL
|
|
7
9
|
def log(text = "", type = :info)
|
|
8
10
|
@stats[:logs] += 1
|
|
9
11
|
prefix = (type == :info) ? "" : "#{type.to_s.upcase}: "
|
|
10
|
-
Logger.
|
|
12
|
+
Logger.puts " log #{prefix}" + text.to_s
|
|
11
13
|
end
|
|
12
14
|
|
|
13
|
-
def
|
|
15
|
+
def doc(text)
|
|
14
16
|
@stats[:readmes] += 1
|
|
15
|
-
Logger.
|
|
17
|
+
Logger.puts " doc #{text}"
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
def
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
@target_begin = true
|
|
23
|
-
@stats[:targets] += 1
|
|
24
|
-
@targetid += 1
|
|
25
|
-
weight = args[:weight] ? args[:weight].to_f : 1.0
|
|
26
|
-
Logger.info format("(%03<targetid>d) target %<desc>s", targetid: @targetid, desc: desc)
|
|
27
|
-
Logger.info " weight #{weight}"
|
|
20
|
+
def readme(...)
|
|
21
|
+
Logger.warn("Keyword deprecated: Replace 'readme' by 'doc'.")
|
|
22
|
+
doc(...)
|
|
28
23
|
end
|
|
29
|
-
alias_method :goal, :target
|
|
30
24
|
|
|
31
25
|
def unique(key, _value)
|
|
32
26
|
@stats[:uniques] += 1
|
|
33
27
|
|
|
34
|
-
Logger.
|
|
35
|
-
Logger.
|
|
28
|
+
Logger.puts " \u{26bf} unique value for <#{key}>"
|
|
29
|
+
Logger.puts ""
|
|
36
30
|
end
|
|
37
31
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module CheckDSL
|
|
2
|
+
def event(**args)
|
|
3
|
+
if @action_manager.check_event(args)
|
|
4
|
+
@stats[:events] += 1
|
|
5
|
+
Logger.puts " \u{1f5f2} event on: #{args[:on]}, when: #{args[:when]}"
|
|
6
|
+
else
|
|
7
|
+
Logger.puts " \u{2718} event on: #{args[:on]}, when: #{args[:when]} (UNKOWN!)"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -2,60 +2,42 @@ require_relative "expect_sequence"
|
|
|
2
2
|
|
|
3
3
|
module CheckDSL
|
|
4
4
|
def expect(cond)
|
|
5
|
-
unless @target_begin
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Logger.info " alter #{result.alterations}" unless result.alterations.empty?
|
|
9
|
-
Logger.info " expect #{cond} (#{cond.class})"
|
|
10
|
-
Logger.info ""
|
|
5
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
6
|
+
Logger.puts " alter #{result.alterations}" unless result.alterations.empty?
|
|
7
|
+
Logger.puts " expect #{cond} (#{cond.class})"
|
|
11
8
|
@target_begin = false
|
|
12
9
|
end
|
|
13
10
|
|
|
14
11
|
def expect_exit(cond)
|
|
15
|
-
unless @target_begin
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
Logger.info " expect_exit #{cond} (#{cond.class})"
|
|
19
|
-
Logger.info ""
|
|
12
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
13
|
+
Logger.puts " expect_exit #{cond} (#{cond.class})"
|
|
20
14
|
@target_begin = false
|
|
21
15
|
end
|
|
22
16
|
|
|
23
17
|
def expect_fail
|
|
24
|
-
unless @target_begin
|
|
25
|
-
|
|
26
|
-
end
|
|
27
|
-
Logger.info " expect_fail"
|
|
28
|
-
Logger.info ""
|
|
18
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
19
|
+
Logger.puts " expect_fail"
|
|
29
20
|
@target_begin = false
|
|
30
21
|
end
|
|
31
22
|
|
|
32
23
|
def expect_first(cond)
|
|
33
|
-
unless @target_begin
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Logger.info " alter #{result.alterations}" unless result.alterations.empty?
|
|
37
|
-
Logger.info " expect_first #{cond} (#{cond.class})"
|
|
38
|
-
Logger.info ""
|
|
24
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
25
|
+
Logger.puts " alter #{result.alterations}" unless result.alterations.empty?
|
|
26
|
+
Logger.puts " expect_first #{cond} (#{cond.class})"
|
|
39
27
|
@target_begin = false
|
|
40
28
|
end
|
|
41
29
|
|
|
42
30
|
def expect_last(cond)
|
|
43
|
-
unless @target_begin
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
Logger.info " alter #{result.alterations}" unless result.alterations.empty?
|
|
47
|
-
Logger.info " expect_last #{cond} (#{cond.class})"
|
|
48
|
-
Logger.info ""
|
|
31
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
32
|
+
Logger.puts " alter #{result.alterations}" unless result.alterations.empty?
|
|
33
|
+
Logger.puts " expect_last #{cond} (#{cond.class})"
|
|
49
34
|
@target_begin = false
|
|
50
35
|
end
|
|
51
36
|
|
|
52
37
|
def expect_none(cond = nil, args = {})
|
|
53
|
-
unless @target_begin
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Logger.info " alter #{result.alterations}" unless result.alterations.empty?
|
|
57
|
-
Logger.info " expect_none #{cond} (#{cond.class})"
|
|
58
|
-
Logger.info ""
|
|
38
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
39
|
+
Logger.puts " alter #{result.alterations}" unless result.alterations.empty?
|
|
40
|
+
Logger.puts " expect_none #{cond} (#{cond.class})"
|
|
59
41
|
@target_begin = false
|
|
60
42
|
end
|
|
61
43
|
|
|
@@ -68,23 +50,17 @@ module CheckDSL
|
|
|
68
50
|
end
|
|
69
51
|
|
|
70
52
|
def expect_one(cond)
|
|
71
|
-
unless @target_begin
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
Logger.info " alter #{result.alterations}" unless result.alterations.empty?
|
|
75
|
-
Logger.info " expect_one #{cond} (#{cond.class})"
|
|
76
|
-
Logger.info ""
|
|
53
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
54
|
+
Logger.puts " alter #{result.alterations}" unless result.alterations.empty?
|
|
55
|
+
Logger.puts " expect_one #{cond} (#{cond.class})"
|
|
77
56
|
@target_begin = false
|
|
78
57
|
end
|
|
79
58
|
|
|
80
59
|
def expect_sequence(&block)
|
|
81
|
-
unless @target_begin
|
|
82
|
-
Logger.warn "WARN 'expect' with no previous 'target'"
|
|
83
|
-
end
|
|
60
|
+
Logger.warn " \u{1f6c8} 'expect' with no previous 'target'" unless @target_begin
|
|
84
61
|
seq = CheckDSL::ExpectSequence.new
|
|
85
62
|
seq.is_valid?(&block)
|
|
86
|
-
Logger.
|
|
87
|
-
Logger.info ""
|
|
63
|
+
Logger.puts " expect_sequence #{seq.expected}"
|
|
88
64
|
@target_begin = false
|
|
89
65
|
end
|
|
90
66
|
end
|
|
@@ -14,10 +14,10 @@ module CheckDSL
|
|
|
14
14
|
value = ":" + value.to_s if value.instance_of? Symbol
|
|
15
15
|
|
|
16
16
|
@stats[:sets] << "#{key}=#{value}"
|
|
17
|
-
Logger.
|
|
17
|
+
Logger.puts " set(#{key},#{value})"
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def unset(key)
|
|
21
|
-
Logger.
|
|
21
|
+
Logger.puts " unset(#{key})"
|
|
22
22
|
end
|
|
23
23
|
end
|
data/lib/teuton/check/dsl/run.rb
CHANGED
|
@@ -17,7 +17,7 @@ module CheckDSL
|
|
|
17
17
|
def goto(host = :localhost, args = {})
|
|
18
18
|
result.reset
|
|
19
19
|
@stats[:hosts][host] = @stats[:hosts][host] ? (@stats[:hosts][host] + 1) : 1
|
|
20
|
-
Logger.
|
|
20
|
+
Logger.puts " run '#{args[:exec]}' on #{host}"
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def upload(filename, args = {})
|
|
@@ -30,6 +30,6 @@ module CheckDSL
|
|
|
30
30
|
"and #{values.join(",")}"
|
|
31
31
|
end
|
|
32
32
|
@stats[:uploads] << filename
|
|
33
|
-
Logger.
|
|
33
|
+
Logger.puts " upload '#{filename}' to #{host} #{custom}"
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module CheckDSL
|
|
2
|
+
def target(desc, args = {})
|
|
3
|
+
Logger.warn "Previous 'target' requires 'expect'" if @target_begin
|
|
4
|
+
@target_begin = true
|
|
5
|
+
@stats[:targets] += 1
|
|
6
|
+
@targetid += 1
|
|
7
|
+
weight = args[:weight] ? args[:weight].to_f : 1.0
|
|
8
|
+
Logger.puts ""
|
|
9
|
+
Logger.puts format("(%03<targetid>d) target %<desc>s", targetid: @targetid, desc: desc)
|
|
10
|
+
Logger.puts " weight #{weight}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def goal(...)
|
|
14
|
+
Logger.warn("Keyword deprecated: Replace 'goal' by 'target'.")
|
|
15
|
+
target(...)
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/teuton/check/show.rb
CHANGED
|
@@ -15,14 +15,14 @@ class ShowCheck
|
|
|
15
15
|
output = {"global" => nil, "cases" => [{}]}
|
|
16
16
|
script_vars = find_script_vars
|
|
17
17
|
script_vars.each { |i| output["cases"][0][i.to_s] = "TOCHANGE" }
|
|
18
|
-
Logger.
|
|
18
|
+
Logger.puts YAML.dump(output)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def revise_config_content
|
|
22
22
|
unless File.exist?(@path[:config])
|
|
23
|
-
Logger.warn "
|
|
24
|
-
Logger.debug "
|
|
25
|
-
Logger.
|
|
23
|
+
Logger.warn "Configfile not found"
|
|
24
|
+
Logger.debug "- File: #{@path[:config]}"
|
|
25
|
+
Logger.info "Recomended content:"
|
|
26
26
|
suggest_config_content
|
|
27
27
|
return
|
|
28
28
|
end
|
|
@@ -52,50 +52,44 @@ class ShowCheck
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def show_stats
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
table = Terminal::Table.new do |t|
|
|
56
|
+
t.style = {border: :unicode}
|
|
57
|
+
t.add_row ["DSL Stats", "Count"]
|
|
58
|
+
t.add_separator
|
|
58
59
|
|
|
59
|
-
if Project.value[:uses].size.positive?
|
|
60
|
-
st.add_row ["Uses", Project.value[:uses].size]
|
|
61
|
-
end
|
|
60
|
+
t.add_row ["Uses", Project.value[:uses].size] if Project.value[:uses].size.positive?
|
|
62
61
|
if Project.value[:macros].size.positive?
|
|
63
|
-
|
|
64
|
-
Project.value[:macros].each_key { |value|
|
|
65
|
-
end
|
|
66
|
-
st.add_row ["Groups", @stats[:groups]]
|
|
67
|
-
st.add_row ["Targets", @stats[:targets]]
|
|
68
|
-
runs = @stats[:hosts].values.inject(0) { |acc, item| acc + item }
|
|
69
|
-
st.add_row ["Runs", runs]
|
|
70
|
-
@stats[:hosts].each_pair { |k, v| st.add_row [" * #{k}", v] }
|
|
71
|
-
if @stats[:uniques].positive?
|
|
72
|
-
st.add_row ["Uniques", @stats[:uniques]]
|
|
73
|
-
end
|
|
74
|
-
if @stats[:logs].positive?
|
|
75
|
-
st.add_row ["Logs", @stats[:logs]]
|
|
76
|
-
end
|
|
77
|
-
if @stats[:readmes].positive?
|
|
78
|
-
st.add_row ["Readmes", @stats[:readmes]]
|
|
62
|
+
t.add_row ["Macros", Project.value[:macros].size]
|
|
63
|
+
Project.value[:macros].each_key { |value| t.add_row ["", value] }
|
|
79
64
|
end
|
|
65
|
+
t.add_row ["Groups", @stats[:groups]]
|
|
66
|
+
t.add_row ["Targets", @stats[:targets]]
|
|
67
|
+
t.add_row ["Events", @stats[:events]]
|
|
68
|
+
runs = @stats[:hosts].values.sum
|
|
69
|
+
t.add_row ["Runs", runs]
|
|
70
|
+
@stats[:hosts].each_pair { |k, v| t.add_row ["- #{k}", v] }
|
|
71
|
+
t.add_row ["Uniques", @stats[:uniques]] if @stats[:uniques].positive?
|
|
72
|
+
t.add_row ["Logs", @stats[:logs]] if @stats[:logs].positive?
|
|
73
|
+
t.add_row ["Docs", @stats[:readmes]] if @stats[:readmes].positive?
|
|
80
74
|
|
|
81
75
|
if @stats[:gets].size.positive?
|
|
82
|
-
total = @stats[:gets].values.
|
|
83
|
-
|
|
76
|
+
total = @stats[:gets].values.sum
|
|
77
|
+
t.add_row ["Gets", total]
|
|
84
78
|
list = @stats[:gets].sort_by { |_k, v| v }
|
|
85
|
-
list.reverse_each { |item|
|
|
79
|
+
list.reverse_each { |item| t.add_row [" - #{item[0]}", item[1].to_s] }
|
|
86
80
|
end
|
|
87
81
|
|
|
88
82
|
if @stats[:sets].size.positive?
|
|
89
|
-
|
|
90
|
-
@stats[:sets].each { |value|
|
|
83
|
+
t.add_row ["Sets", @stats[:sets].size]
|
|
84
|
+
@stats[:sets].each { |value| t.add_row ["", value] }
|
|
91
85
|
end
|
|
92
86
|
if @stats[:uploads].size.positive?
|
|
93
|
-
|
|
87
|
+
t.add_row ["Uploads", @stats[:uploads].size]
|
|
94
88
|
uploads = @stats[:uploads].select { _1 }
|
|
95
|
-
uploads.each { |value|
|
|
89
|
+
uploads.each { |value| t.add_row ["", value] }
|
|
96
90
|
end
|
|
97
91
|
end
|
|
98
|
-
Logger.
|
|
92
|
+
Logger.puts "\n#{table}\n"
|
|
99
93
|
end
|
|
100
94
|
|
|
101
95
|
private
|
|
@@ -106,16 +100,16 @@ class ShowCheck
|
|
|
106
100
|
next if k == :localhost
|
|
107
101
|
|
|
108
102
|
if k.instance_of? Symbol
|
|
109
|
-
script_vars <<
|
|
110
|
-
script_vars <<
|
|
111
|
-
script_vars <<
|
|
103
|
+
script_vars << :"#{k}_ip"
|
|
104
|
+
script_vars << :"#{k}_username"
|
|
105
|
+
script_vars << :"#{k}_password"
|
|
112
106
|
else
|
|
113
|
-
script_vars << k
|
|
114
|
-
script_vars << k
|
|
115
|
-
script_vars << k
|
|
107
|
+
script_vars << "#{k}_ip"
|
|
108
|
+
script_vars << "#{k}_username"
|
|
109
|
+
script_vars << "#{k}_password"
|
|
116
110
|
end
|
|
117
111
|
end
|
|
118
|
-
@stats[:gets].
|
|
112
|
+
@stats[:gets].each_key { |value| script_vars << value }
|
|
119
113
|
script_vars
|
|
120
114
|
end
|
|
121
115
|
end
|
data/lib/teuton/cli/app.rb
CHANGED
|
@@ -40,7 +40,7 @@ module Teuton
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
map ["co", "-co", "--config"] => "config"
|
|
43
|
-
desc "config
|
|
43
|
+
desc "config DIRECTORY", "Suggest configuration."
|
|
44
44
|
long_desc <<~LONGDESC
|
|
45
45
|
config DIRECTORY, "Suggest the content of the configuration file based on the test"
|
|
46
46
|
LONGDESC
|
|
@@ -50,22 +50,30 @@ module Teuton
|
|
|
50
50
|
Teuton.check(projectpath, opt)
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
map ["--
|
|
53
|
+
map ["--doc"] => "doc"
|
|
54
54
|
option :lang, type: :string
|
|
55
|
-
desc "
|
|
55
|
+
desc "doc DIRECTORY", "Display practice exercise statement"
|
|
56
56
|
long_desc <<-LONGDESC
|
|
57
57
|
|
|
58
|
-
(1) teuton
|
|
59
|
-
,
|
|
58
|
+
(1) teuton doc foo
|
|
59
|
+
, Display exercise statement from foo/start.rb.
|
|
60
60
|
|
|
61
|
-
(2) teuton
|
|
62
|
-
,
|
|
61
|
+
(2) teuton doc foo/demo.rb
|
|
62
|
+
, Display exercise statement from foo/demo.rb.
|
|
63
63
|
LONGDESC
|
|
64
64
|
|
|
65
|
-
def
|
|
65
|
+
def doc(projectpath)
|
|
66
66
|
Teuton.readme(projectpath, options)
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
+
map ["--readme"] => "readme"
|
|
70
|
+
desc "readme DIRECTORY", "DEPRECATED! Use 'teuton doc'"
|
|
71
|
+
|
|
72
|
+
def readme(projectpath)
|
|
73
|
+
Logger.info "Use: teuton doc"
|
|
74
|
+
Logger.warn "'teuton readme' has been DEPRECATED!"
|
|
75
|
+
end
|
|
76
|
+
|
|
69
77
|
map ["--run", "run"] => "play"
|
|
70
78
|
option :export, type: :string
|
|
71
79
|
option :cname, type: :string
|