teuton 2.5.0 → 2.6.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/docs/CHANGELOG.md +2 -0
- data/docs/changelog/todo.md +2 -0
- data/docs/changelog/v2.6.md +4 -0
- data/docs/diagram.md +54 -0
- data/docs/learn/02-target.md +37 -12
- data/docs/learn/03-remote_hosts.md +1 -1
- data/docs/learn/04-config.md +1 -1
- data/docs/learn/06-cmd_check.md +1 -4
- data/docs/learn/07-target_weight.md +1 -3
- data/docs/learn/README.md +1 -1
- data/lib/teuton/{case_manager/case → case}/case.rb +9 -12
- data/lib/teuton/{case_manager/case → case}/config.rb +1 -1
- data/lib/teuton/{case_manager/case → case}/dsl/macro.rb +1 -1
- data/lib/teuton/case/dsl.rb +10 -0
- data/lib/teuton/{case_manager/case → case}/play.rb +5 -8
- data/lib/teuton/case_manager/case_manager.rb +9 -32
- data/lib/teuton/case_manager/dsl.rb +1 -1
- data/lib/teuton/case_manager/export_manager.rb +18 -4
- data/lib/teuton/case_manager/send_manager.rb +17 -0
- data/lib/teuton/case_manager/utils.rb +9 -4
- data/lib/teuton/check/laboratory.rb +1 -1
- data/lib/teuton/readme/readme.rb +1 -1
- data/lib/teuton/{case_manager/case/result → result}/ext_array.rb +5 -5
- data/lib/teuton/{case_manager/case/result → result}/result.rb +1 -1
- data/lib/teuton/version.rb +1 -1
- data/lib/teuton.rb +15 -15
- metadata +32 -29
- data/lib/teuton/case_manager/case/dsl/main.rb +0 -10
- data/lib/teuton/case_manager/case/main.rb +0 -7
- data/lib/teuton/case_manager/main.rb +0 -3
- /data/lib/teuton/{case_manager/case → case}/builtin/main.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/builtin/package.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/builtin/service.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/builtin/teuton_file.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/builtin/teuton_host.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/builtin/user.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/close.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/expect.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/getset.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/goto.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/log.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/send.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/target.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/dsl/unique.rb +0 -0
- /data/lib/teuton/{case_manager/case → case}/runner.rb +0 -0
- /data/lib/teuton/{report/show.rb → case_manager/show_report.rb} +0 -0
- /data/lib/teuton/{case_manager/case/result → result}/ext_compare.rb +0 -0
- /data/lib/teuton/{case_manager/case/result → result}/ext_filter.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8d4dba357b30b42efc7a32e8389bd6c7dfa98e835f46907d2f4a3dbe7e5942e8
|
|
4
|
+
data.tar.gz: 0bb5add96b17f02f791568d02e2fc8ca698cc9138c9e25e9075d2e686fb6ba88
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 694a956fde1cb64e76d78bf4513df7f011001654aef7d305c9ac54ea0df6748b945d8b0b69514c7172c2e56404093824dd59636f54e647b33d0b068d9d3ef5eb
|
|
7
|
+
data.tar.gz: 4a8d0fa96fdc396d2da7cd129b1458525abe0d6acb15944f965a3facc692980cd76c33d2321a4997a5e03e3af087eea020054ff308b62d37a9b848778d6c8b79
|
data/docs/CHANGELOG.md
CHANGED
data/docs/changelog/todo.md
CHANGED
data/docs/diagram.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
[<<back](../README.md)
|
|
2
|
+
|
|
3
|
+
# Diagram
|
|
4
|
+
|
|
5
|
+
```mermaid
|
|
6
|
+
flowchart TB
|
|
7
|
+
|
|
8
|
+
subgraph user
|
|
9
|
+
CLI --> Teuton
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
subgraph "create\nnew\nproject"
|
|
13
|
+
Teuton -- create --> Skeleton("Sekeleton\nFiles")
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
subgraph "check\nproject files"
|
|
17
|
+
Teuton -- check --> Laboratory("Laboratory\nDSL\nShow\nBuiltin!")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
subgraph "create readme\nfrom project"
|
|
21
|
+
Teuton -- readme --> Readme("Readme\nDSL\nLang!")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
subgraph manager
|
|
25
|
+
Teuton -- require --> manager/DSL
|
|
26
|
+
manager/DSL -- play --> CaseManager("CaseManager\ncheck_cases\nExportManager\nSendManager\nShowReport")
|
|
27
|
+
ReportManager --> HallOfFame
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
subgraph utils
|
|
31
|
+
manager/DSL -- use/macros/groups --> Application("Application\nNameFileFinder")
|
|
32
|
+
Readme --> ConfigFileReader
|
|
33
|
+
Laboratory --> ConfigFileReader
|
|
34
|
+
CaseManager --> ConfigFileReader
|
|
35
|
+
Verbose
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
subgraph "case folder"
|
|
39
|
+
CaseManager --> Case("Case\nConfig\nClose\nPlay\nRunner")
|
|
40
|
+
Case --> case/DSL
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
subgraph "result class"
|
|
44
|
+
Laboratory --> Result
|
|
45
|
+
Readme --> Result("Result\next_array\next_compare\next_filter")
|
|
46
|
+
Case --> Result
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
subgraph report
|
|
50
|
+
CaseManager --> Report
|
|
51
|
+
Report --> Formatter
|
|
52
|
+
Formatter --> files/template
|
|
53
|
+
end
|
|
54
|
+
```
|
data/docs/learn/02-target.md
CHANGED
|
@@ -15,13 +15,31 @@ group "Learn about targets" do
|
|
|
15
15
|
|
|
16
16
|
target "Create user david"
|
|
17
17
|
run "id david"
|
|
18
|
-
expect "david"
|
|
18
|
+
expect ["uid=", "(david)", "gid="]
|
|
19
|
+
|
|
20
|
+
target "Delete user vader"
|
|
21
|
+
run "id vader"
|
|
22
|
+
expect ["id:", "vader", "no exist"]
|
|
19
23
|
|
|
20
24
|
end
|
|
21
25
|
```
|
|
22
26
|
|
|
23
27
|
> In this example, our localhost's OS is GNU/Linux (or any other compatible OS) because the command executed is `id david`.
|
|
24
28
|
|
|
29
|
+
When the user exists, we expect this words: `uid=, (david), gid=`.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
❯ id david
|
|
33
|
+
uid=1000(david) gid=1000(david) grupos=1000(david)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
But when user does not exist, we expect different words: `id:, vader, no exist`.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
❯ id vader
|
|
40
|
+
id: «vader»: no existe ese usuario
|
|
41
|
+
```
|
|
42
|
+
|
|
25
43
|
## Execution section
|
|
26
44
|
|
|
27
45
|
When we run this teuton test, the execution section (`play`) is processed. This seccion now contains this:
|
|
@@ -41,7 +59,7 @@ end
|
|
|
41
59
|
Execute this command to run the test:
|
|
42
60
|
|
|
43
61
|
```console
|
|
44
|
-
> teuton run examples/
|
|
62
|
+
> teuton run examples/02-target
|
|
45
63
|
|
|
46
64
|
CASE RESULTS
|
|
47
65
|
+------+-----------+-------+-------+
|
|
@@ -54,7 +72,7 @@ Report files are created into `var/02-target/` folder:
|
|
|
54
72
|
|
|
55
73
|
```console
|
|
56
74
|
var
|
|
57
|
-
└──
|
|
75
|
+
└── 02-target
|
|
58
76
|
├── case-01.txt
|
|
59
77
|
├── moodle.csv
|
|
60
78
|
└── resume.txt
|
|
@@ -63,35 +81,42 @@ var
|
|
|
63
81
|
Let's see one report:
|
|
64
82
|
|
|
65
83
|
```
|
|
66
|
-
|
|
67
|
-
|
|
84
|
+
❯ cat var/02-target/case-01.txt
|
|
68
85
|
CONFIGURATION
|
|
69
86
|
+-------------+-----------+
|
|
70
87
|
| tt_members | anonymous |
|
|
71
88
|
| tt_sequence | false |
|
|
72
89
|
| tt_skip | false |
|
|
73
|
-
| tt_testname |
|
|
90
|
+
| tt_testname | 02-target |
|
|
74
91
|
+-------------+-----------+
|
|
75
92
|
|
|
93
|
+
|
|
76
94
|
GROUPS
|
|
77
95
|
- Learn about targets
|
|
78
96
|
01 (1.0/1.0)
|
|
79
97
|
Description : Create user david
|
|
80
98
|
Command : id david
|
|
81
99
|
Duration : 0.002 (local)
|
|
82
|
-
Alterations : find(david) & count
|
|
100
|
+
Alterations : find(uid=) & find((david)) & find(gid=) & count
|
|
101
|
+
Expected : Greater than 0 (String)
|
|
102
|
+
Result : 1 (Integer)
|
|
103
|
+
02 (1.0/1.0)
|
|
104
|
+
Description : Delete user vader
|
|
105
|
+
Command : id vader
|
|
106
|
+
Duration : 0.002 (local)
|
|
107
|
+
Alterations : find(id:) & find(vader) & find(no exist) & count
|
|
83
108
|
Expected : Greater than 0 (String)
|
|
84
109
|
Result : 1 (Integer)
|
|
85
110
|
|
|
86
111
|
RESULTS
|
|
87
112
|
+--------------+---------------------------+
|
|
88
113
|
| case_id | 01 |
|
|
89
|
-
| start_time |
|
|
90
|
-
| finish_time |
|
|
91
|
-
| duration | 0.
|
|
114
|
+
| start_time | 2023-04-10 09:09:30 +0100 |
|
|
115
|
+
| finish_time | 2023-04-10 09:09:30 +0100 |
|
|
116
|
+
| duration | 0.003863242 |
|
|
92
117
|
| unique_fault | 0 |
|
|
93
|
-
| max_weight |
|
|
94
|
-
| good_weight |
|
|
118
|
+
| max_weight | 2.0 |
|
|
119
|
+
| good_weight | 2.0 |
|
|
95
120
|
| fail_weight | 0.0 |
|
|
96
121
|
| fail_counter | 0 |
|
|
97
122
|
| grade | 100 |
|
data/docs/learn/04-config.md
CHANGED
data/docs/learn/06-cmd_check.md
CHANGED
|
@@ -14,7 +14,7 @@ Check Teuton test syntax and show statistics.
|
|
|
14
14
|
(001) target Create user get(username)
|
|
15
15
|
weight 1.0
|
|
16
16
|
run 'id get(username)' on host1
|
|
17
|
-
expect get(username) (
|
|
17
|
+
expect ["uid=", "(get(username))", "gid="] (Array)
|
|
18
18
|
|
|
19
19
|
+----------------------------+
|
|
20
20
|
| GROUP: Using file: network |
|
|
@@ -44,7 +44,4 @@ Check Teuton test syntax and show statistics.
|
|
|
44
44
|
| * hostname | 2 |
|
|
45
45
|
| Sets | 0 |
|
|
46
46
|
+-------------+-------+
|
|
47
|
-
+----------------------+
|
|
48
|
-
| Revising CONFIG file |
|
|
49
|
-
+----------------------+
|
|
50
47
|
```
|
|
@@ -19,15 +19,13 @@ end
|
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
```
|
|
22
|
-
❯ teuton check examples/07-target_weight
|
|
23
|
-
|
|
24
22
|
+--------------------------+
|
|
25
23
|
| GROUP: Using file: users |
|
|
26
24
|
+--------------------------+
|
|
27
25
|
(001) target Create user get(username)
|
|
28
26
|
weight 1.0
|
|
29
27
|
run 'id get(username)' on host1
|
|
30
|
-
expect get(username) (
|
|
28
|
+
expect ["uid=", "(get(username))", "gid="] (Array)
|
|
31
29
|
|
|
32
30
|
+----------------------------+
|
|
33
31
|
| GROUP: Using file: network |
|
data/docs/learn/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Learn how write your own Teuton tests:
|
|
|
17
17
|
1. [Export other FORMATS](11-export.md)
|
|
18
18
|
1. [PRESERVE old reports](12-preserve.md)
|
|
19
19
|
1. [Hide FEEDBACK from reports](13-feedback.md)
|
|
20
|
-
1. [MOODLE
|
|
20
|
+
1. [MOODLE](14-moodle_id.md)
|
|
21
21
|
1. [Build README from test](15-readme.md)
|
|
22
22
|
1. [INCLUDE more configuration files](16-include.md)
|
|
23
23
|
1. [ALIAS](17-alias.md)
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "
|
|
4
|
-
require_relative "
|
|
5
|
-
require_relative "
|
|
6
|
-
require_relative "../
|
|
7
|
-
require_relative "
|
|
8
|
-
require_relative "
|
|
3
|
+
require_relative "../application"
|
|
4
|
+
require_relative "../report/report"
|
|
5
|
+
require_relative "../case_manager/utils"
|
|
6
|
+
require_relative "../result/result"
|
|
7
|
+
require_relative "dsl"
|
|
8
|
+
require_relative "config"
|
|
9
|
+
require_relative "close"
|
|
10
|
+
require_relative "play"
|
|
11
|
+
require_relative "runner"
|
|
9
12
|
require_relative "builtin/main"
|
|
10
13
|
|
|
11
|
-
# TODO: split Case class into several classes:
|
|
12
|
-
# * Case, Action?, Session?, RunCommand class
|
|
13
|
-
|
|
14
14
|
# Case class
|
|
15
15
|
# * initialize
|
|
16
16
|
# * export
|
|
@@ -29,9 +29,6 @@ class Case
|
|
|
29
29
|
attr_reader :skip
|
|
30
30
|
@@id = "01" # First case ID value
|
|
31
31
|
|
|
32
|
-
##
|
|
33
|
-
# Initialize case from specified config
|
|
34
|
-
# @param config (Hash)
|
|
35
32
|
def initialize(config)
|
|
36
33
|
app = Application.instance
|
|
37
34
|
@config = Case::Config.new(local: config, global: app.global)
|
|
@@ -0,0 +1,10 @@
|
|
|
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"
|
|
@@ -13,15 +13,11 @@ class Case
|
|
|
13
13
|
return false
|
|
14
14
|
end
|
|
15
15
|
start_time = Time.now
|
|
16
|
-
|
|
17
|
-
play_in_sequence
|
|
18
|
-
else
|
|
19
|
-
play_in_parallel
|
|
20
|
-
end
|
|
16
|
+
play_groups_in_sequence
|
|
21
17
|
fill_report(start_time, Time.now)
|
|
22
18
|
close_opened_sessions
|
|
23
19
|
end
|
|
24
|
-
|
|
20
|
+
alias_method :start, :play
|
|
25
21
|
|
|
26
22
|
def close_opened_sessions
|
|
27
23
|
@sessions.each_value do |s|
|
|
@@ -31,14 +27,15 @@ class Case
|
|
|
31
27
|
|
|
32
28
|
private
|
|
33
29
|
|
|
34
|
-
def
|
|
30
|
+
def play_groups_in_sequence
|
|
31
|
+
verboseln "\n=> Starting case [#{@config.get(:tt_members)}]" if get(:tt_sequence) == true
|
|
35
32
|
@groups.each do |t|
|
|
36
33
|
@action[:groupname] = t[:name]
|
|
37
34
|
instance_eval(&t[:block])
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
|
|
41
|
-
def
|
|
38
|
+
def play_groups_in_parallel
|
|
42
39
|
verboseln "Starting case [#{@config.get(:tt_members)}]"
|
|
43
40
|
@groups.each do |t|
|
|
44
41
|
verbose "* Processing [#{t[:name]}] "
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
require "rainbow"
|
|
2
|
-
require "singleton"
|
|
3
1
|
require_relative "../application"
|
|
2
|
+
require_relative "../case/case"
|
|
4
3
|
require_relative "../report/report"
|
|
5
|
-
require_relative "../report/show"
|
|
6
4
|
require_relative "../utils/configfile_reader"
|
|
7
|
-
require_relative "case/case"
|
|
8
5
|
require_relative "export_manager"
|
|
9
|
-
require_relative "
|
|
6
|
+
require_relative "send_manager"
|
|
7
|
+
require_relative "show_report"
|
|
8
|
+
require_relative "check_cases"
|
|
9
|
+
require_relative "report"
|
|
10
|
+
require_relative "utils"
|
|
10
11
|
|
|
11
12
|
# This class does all the job
|
|
12
13
|
# Organize the hole job, sending orders to others classes
|
|
@@ -18,7 +19,6 @@ require_relative "main"
|
|
|
18
19
|
# * case_manager/hall_of_fame
|
|
19
20
|
# * case_manager/report
|
|
20
21
|
class CaseManager
|
|
21
|
-
include Singleton
|
|
22
22
|
include Utils
|
|
23
23
|
attr_reader :report, :cases
|
|
24
24
|
|
|
@@ -30,7 +30,6 @@ class CaseManager
|
|
|
30
30
|
|
|
31
31
|
##
|
|
32
32
|
# Execute "play" order: Start every single case test
|
|
33
|
-
# @param block (Block)
|
|
34
33
|
def play(&block)
|
|
35
34
|
check_cases!
|
|
36
35
|
instance_eval(&block)
|
|
@@ -42,37 +41,15 @@ class CaseManager
|
|
|
42
41
|
export(format: i.to_sym) unless i.nil?
|
|
43
42
|
end
|
|
44
43
|
|
|
45
|
-
##
|
|
46
|
-
# Execute "export" order: Export every case report
|
|
47
|
-
# @param args (Hash) Export options
|
|
48
44
|
def export(args = {})
|
|
49
|
-
|
|
50
|
-
puts Rainbow("[ERROR] Argument error with 'export'!").red
|
|
51
|
-
puts Rainbow(" Code : CaseManager#export").red
|
|
52
|
-
puts Rainbow(" Line : export #{args}").red
|
|
53
|
-
puts Rainbow(" Use : export format: 'txt'").red
|
|
54
|
-
puts ""
|
|
55
|
-
exit 1
|
|
56
|
-
end
|
|
57
|
-
ExportManager.run(@report, @cases, args)
|
|
45
|
+
ExportManager.new.call(@report, @cases, args)
|
|
58
46
|
end
|
|
59
47
|
|
|
60
|
-
##
|
|
61
|
-
# Execute "send" order: Send every case report
|
|
62
|
-
# @param args (Hash) Send options
|
|
63
48
|
def send(args = {})
|
|
64
|
-
|
|
65
|
-
puts ""
|
|
66
|
-
puts Rainbow("-" * 50).green
|
|
67
|
-
puts Rainbow("Sending files...#{args}").color(:green)
|
|
68
|
-
@cases.each { |c| threads << Thread.new { c.send(args) } }
|
|
69
|
-
threads.each(&:join)
|
|
70
|
-
puts Rainbow("Sending finished!").color(:green)
|
|
71
|
-
puts Rainbow("-" * 50).green
|
|
49
|
+
SendManager.new.call(@cases, args)
|
|
72
50
|
end
|
|
73
51
|
|
|
74
52
|
def show(options = {verbose: 1})
|
|
75
|
-
|
|
76
|
-
ShowReport.new(@report).call(verbose)
|
|
53
|
+
ShowReport.new(@report).call(options[:verbose])
|
|
77
54
|
end
|
|
78
55
|
end
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "rainbow"
|
|
3
4
|
require_relative "../application"
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
##
|
|
7
|
+
# Execute "export" order: Export every case report
|
|
8
|
+
# @param args (Hash) Export options
|
|
9
|
+
class ExportManager
|
|
6
10
|
##
|
|
7
11
|
# Run export function
|
|
8
12
|
# @param main_report (Report)
|
|
9
13
|
# @param cases (Array)
|
|
10
14
|
# @param input (Hash) Selected export options
|
|
11
|
-
def
|
|
15
|
+
def call(main_report, cases, args)
|
|
16
|
+
if args.class != Hash
|
|
17
|
+
puts Rainbow("[ERROR] Export argument error!").red
|
|
18
|
+
puts Rainbow(" Revise: export #{args}").red
|
|
19
|
+
puts Rainbow(" Use : export format: 'txt'").red
|
|
20
|
+
puts ""
|
|
21
|
+
exit 1
|
|
22
|
+
end
|
|
23
|
+
|
|
12
24
|
options = strings2symbols(args)
|
|
13
25
|
if options[:format].nil?
|
|
14
26
|
options[:format] = Application.instance.default[:format]
|
|
@@ -26,10 +38,12 @@ module ExportManager
|
|
|
26
38
|
preserve_files if options[:preserve] == true
|
|
27
39
|
end
|
|
28
40
|
|
|
41
|
+
private
|
|
42
|
+
|
|
29
43
|
##
|
|
30
44
|
# Convert Hash String values into Symbol values
|
|
31
45
|
# @param input (Hash)
|
|
32
|
-
|
|
46
|
+
def strings2symbols(input)
|
|
33
47
|
args = {}
|
|
34
48
|
input.each_pair do |key, value|
|
|
35
49
|
args[key] = if value.instance_of? String
|
|
@@ -43,7 +57,7 @@ module ExportManager
|
|
|
43
57
|
|
|
44
58
|
##
|
|
45
59
|
# Preserve output files for current project execution
|
|
46
|
-
|
|
60
|
+
def preserve_files
|
|
47
61
|
app = Application.instance
|
|
48
62
|
t = Time.now
|
|
49
63
|
data = {year: t.year, month: t.month, day: t.day, hour: t.hour, min: t.min, sec: t.sec}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require "rainbow"
|
|
2
|
+
|
|
3
|
+
class SendManager
|
|
4
|
+
##
|
|
5
|
+
# Execute "send" order: Send every case report
|
|
6
|
+
# @param args (Hash) Send options
|
|
7
|
+
def call(cases, args)
|
|
8
|
+
threads = []
|
|
9
|
+
puts ""
|
|
10
|
+
puts Rainbow("-" * 50).green
|
|
11
|
+
puts Rainbow("Sending files...#{args}").color(:green)
|
|
12
|
+
cases.each { |c| threads << Thread.new { c.send(args) } }
|
|
13
|
+
threads.each(&:join)
|
|
14
|
+
puts Rainbow("Sending finished!").color(:green)
|
|
15
|
+
puts Rainbow("-" * 50).green
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
require_relative "../application"
|
|
2
2
|
require "fileutils"
|
|
3
|
+
require "open3"
|
|
4
|
+
require "rainbow"
|
|
3
5
|
|
|
4
6
|
module Utils
|
|
5
7
|
def ensure_dir(dirname)
|
|
@@ -33,11 +35,14 @@ module Utils
|
|
|
33
35
|
return {exitstatus: 0, content: ""} if Application.instance.debug
|
|
34
36
|
|
|
35
37
|
begin
|
|
36
|
-
text = `#{cmd}`
|
|
37
|
-
exitstatus = $CHILD_STATUS.exitstatus
|
|
38
|
+
# text = `#{cmd}`
|
|
39
|
+
# exitstatus = $CHILD_STATUS.exitstatus
|
|
40
|
+
text, status = Open3.capture2e(cmd)
|
|
41
|
+
exitstatus = status.exitstatus
|
|
38
42
|
rescue => e
|
|
39
|
-
verbose "!"
|
|
40
|
-
|
|
43
|
+
verbose Rainbow("!").green
|
|
44
|
+
text = e.to_s
|
|
45
|
+
exitstatus = 1
|
|
41
46
|
end
|
|
42
47
|
content = encode_and_split(encoding, text)
|
|
43
48
|
{exitstatus: exitstatus, content: content}
|
data/lib/teuton/readme/readme.rb
CHANGED
|
@@ -35,9 +35,9 @@ class Result
|
|
|
35
35
|
@content.empty
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
alias_method :count!, :count
|
|
39
|
+
alias_method :length, :count
|
|
40
|
+
alias_method :len, :count
|
|
41
|
+
alias_method :size, :count
|
|
42
|
+
alias_method :empty?, :empty
|
|
43
43
|
end
|
data/lib/teuton/version.rb
CHANGED
data/lib/teuton.rb
CHANGED
|
@@ -6,34 +6,34 @@ module Teuton
|
|
|
6
6
|
Skeleton.create(path_to_new_dir)
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
def self.check(projectpath, options = {})
|
|
10
|
+
Application.instance.add_input_params(projectpath, options)
|
|
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]
|
|
16
|
+
lab.show_onlyconfig
|
|
17
|
+
else
|
|
18
|
+
lab.show
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
9
22
|
def self.run(projectpath, options = {})
|
|
10
23
|
Application.instance.add_input_params(projectpath, options)
|
|
11
|
-
require_dsl_and_script("teuton/case_manager/dsl") # Define DSL
|
|
24
|
+
require_dsl_and_script("teuton/case_manager/dsl") # Define DSL
|
|
12
25
|
end
|
|
13
26
|
|
|
14
27
|
def self.readme(projectpath, options = {})
|
|
15
28
|
# Create Readme file for a teuton test
|
|
16
29
|
Application.instance.add_input_params(projectpath, options)
|
|
17
|
-
require_dsl_and_script("teuton/readme/readme") # Define DSL
|
|
30
|
+
require_dsl_and_script("teuton/readme/readme") # Define DSL
|
|
18
31
|
|
|
19
32
|
app = Application.instance
|
|
20
33
|
readme = Readme.new(app.script_path, app.config_path)
|
|
21
34
|
readme.show
|
|
22
35
|
end
|
|
23
36
|
|
|
24
|
-
def self.check(projectpath, options = {})
|
|
25
|
-
Application.instance.add_input_params(projectpath, options)
|
|
26
|
-
require_dsl_and_script("teuton/check/laboratory") # Define DSL keywords
|
|
27
|
-
|
|
28
|
-
app = Application.instance
|
|
29
|
-
lab = Laboratory.new(app.script_path, app.config_path)
|
|
30
|
-
if options[:onlyconfig]
|
|
31
|
-
lab.show_onlyconfig
|
|
32
|
-
else
|
|
33
|
-
lab.show
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
37
|
private_class_method def self.require_dsl_and_script(dslpath)
|
|
38
38
|
app = Application.instance
|
|
39
39
|
require_relative dslpath
|
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.
|
|
4
|
+
version: 2.6.0
|
|
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-
|
|
11
|
+
date: 2023-04-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rainbow
|
|
@@ -132,10 +132,12 @@ extra_rdoc_files:
|
|
|
132
132
|
- docs/changelog/v2.3.md
|
|
133
133
|
- docs/changelog/v2.4.md
|
|
134
134
|
- docs/changelog/v2.5.md
|
|
135
|
+
- docs/changelog/v2.6.md
|
|
135
136
|
- docs/changelog/version2.1.md
|
|
136
137
|
- docs/commands/README.md
|
|
137
138
|
- docs/commands/example_check.md
|
|
138
139
|
- docs/commands/example_run.md
|
|
140
|
+
- docs/diagram.md
|
|
139
141
|
- docs/dsl/README.md
|
|
140
142
|
- docs/dsl/expect.md
|
|
141
143
|
- docs/dsl/export.md
|
|
@@ -199,10 +201,12 @@ files:
|
|
|
199
201
|
- docs/changelog/v2.3.md
|
|
200
202
|
- docs/changelog/v2.4.md
|
|
201
203
|
- docs/changelog/v2.5.md
|
|
204
|
+
- docs/changelog/v2.6.md
|
|
202
205
|
- docs/changelog/version2.1.md
|
|
203
206
|
- docs/commands/README.md
|
|
204
207
|
- docs/commands/example_check.md
|
|
205
208
|
- docs/commands/example_run.md
|
|
209
|
+
- docs/diagram.md
|
|
206
210
|
- docs/dsl/README.md
|
|
207
211
|
- docs/dsl/expect.md
|
|
208
212
|
- docs/dsl/export.md
|
|
@@ -256,38 +260,34 @@ files:
|
|
|
256
260
|
- docs/videos.md
|
|
257
261
|
- lib/teuton.rb
|
|
258
262
|
- lib/teuton/application.rb
|
|
259
|
-
- lib/teuton/
|
|
260
|
-
- lib/teuton/
|
|
261
|
-
- lib/teuton/
|
|
262
|
-
- lib/teuton/
|
|
263
|
-
- lib/teuton/
|
|
264
|
-
- lib/teuton/
|
|
265
|
-
- lib/teuton/
|
|
266
|
-
- lib/teuton/
|
|
267
|
-
- lib/teuton/
|
|
268
|
-
- lib/teuton/
|
|
269
|
-
- lib/teuton/
|
|
270
|
-
- lib/teuton/
|
|
271
|
-
- lib/teuton/
|
|
272
|
-
- lib/teuton/
|
|
273
|
-
- lib/teuton/
|
|
274
|
-
- lib/teuton/
|
|
275
|
-
- lib/teuton/
|
|
276
|
-
- lib/teuton/
|
|
277
|
-
- lib/teuton/
|
|
278
|
-
- lib/teuton/
|
|
279
|
-
- lib/teuton/case_manager/case/result/ext_array.rb
|
|
280
|
-
- lib/teuton/case_manager/case/result/ext_compare.rb
|
|
281
|
-
- lib/teuton/case_manager/case/result/ext_filter.rb
|
|
282
|
-
- lib/teuton/case_manager/case/result/result.rb
|
|
283
|
-
- lib/teuton/case_manager/case/runner.rb
|
|
263
|
+
- lib/teuton/case/builtin/main.rb
|
|
264
|
+
- lib/teuton/case/builtin/package.rb
|
|
265
|
+
- lib/teuton/case/builtin/service.rb
|
|
266
|
+
- lib/teuton/case/builtin/teuton_file.rb
|
|
267
|
+
- lib/teuton/case/builtin/teuton_host.rb
|
|
268
|
+
- lib/teuton/case/builtin/user.rb
|
|
269
|
+
- lib/teuton/case/case.rb
|
|
270
|
+
- lib/teuton/case/close.rb
|
|
271
|
+
- lib/teuton/case/config.rb
|
|
272
|
+
- lib/teuton/case/dsl.rb
|
|
273
|
+
- lib/teuton/case/dsl/expect.rb
|
|
274
|
+
- lib/teuton/case/dsl/getset.rb
|
|
275
|
+
- lib/teuton/case/dsl/goto.rb
|
|
276
|
+
- lib/teuton/case/dsl/log.rb
|
|
277
|
+
- lib/teuton/case/dsl/macro.rb
|
|
278
|
+
- lib/teuton/case/dsl/send.rb
|
|
279
|
+
- lib/teuton/case/dsl/target.rb
|
|
280
|
+
- lib/teuton/case/dsl/unique.rb
|
|
281
|
+
- lib/teuton/case/play.rb
|
|
282
|
+
- lib/teuton/case/runner.rb
|
|
284
283
|
- lib/teuton/case_manager/case_manager.rb
|
|
285
284
|
- lib/teuton/case_manager/check_cases.rb
|
|
286
285
|
- lib/teuton/case_manager/dsl.rb
|
|
287
286
|
- lib/teuton/case_manager/export_manager.rb
|
|
288
287
|
- lib/teuton/case_manager/hall_of_fame.rb
|
|
289
|
-
- lib/teuton/case_manager/main.rb
|
|
290
288
|
- lib/teuton/case_manager/report.rb
|
|
289
|
+
- lib/teuton/case_manager/send_manager.rb
|
|
290
|
+
- lib/teuton/case_manager/show_report.rb
|
|
291
291
|
- lib/teuton/case_manager/utils.rb
|
|
292
292
|
- lib/teuton/check/builtin.rb
|
|
293
293
|
- lib/teuton/check/dsl.rb
|
|
@@ -319,7 +319,10 @@ files:
|
|
|
319
319
|
- lib/teuton/report/formatter/resume/txt.rb
|
|
320
320
|
- lib/teuton/report/formatter/resume/yaml.rb
|
|
321
321
|
- lib/teuton/report/report.rb
|
|
322
|
-
- lib/teuton/
|
|
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
|
|
323
326
|
- lib/teuton/skeleton.rb
|
|
324
327
|
- lib/teuton/utils/configfile_reader.rb
|
|
325
328
|
- lib/teuton/utils/name_file_finder.rb
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|