teuton 2.3.7 → 2.3.9
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 +3 -4
- data/docs/CHANGELOG.md +21 -1
- data/docs/learn/14-alias.md +47 -0
- data/docs/videos.md +8 -7
- data/lib/teuton/case_manager/case/case.rb +0 -16
- data/lib/teuton/case_manager/case/close.rb +0 -1
- data/lib/teuton/case_manager/case/dsl/macro.rb +2 -2
- data/lib/teuton/case_manager/case/play.rb +0 -9
- data/lib/teuton/case_manager/dsl.rb +0 -5
- data/lib/teuton/check/dsl.rb +39 -52
- data/lib/teuton/check/laboratory.rb +7 -10
- data/lib/teuton/check/show.rb +0 -4
- data/lib/teuton/readme/dsl.rb +2 -0
- data/lib/teuton/readme/lang.rb +6 -6
- data/lib/teuton/version.rb +1 -1
- metadata +8 -22
- data/docs/changelog/v2.4.md +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44964e011d270c87d22b3571bd8637a1da2397dd66ad69cc869c591ed12147f2
|
4
|
+
data.tar.gz: 835924c003e68e42f697613c03324ff207b772ed7ed39601627a5d5a8a8c924a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17f65a4398602b5baaa80fa86f801c953462c76021cc630dd4d5c6634e26459b34bececd59aa7e2a78f2fd8d1bf5b77214f3883052a44ce743a7da524695faa8
|
7
|
+
data.tar.gz: 2f376375fa4186d5eb3414f422d81ccd5035f33303b8091cd0166e494512e0e1bad7d8dbb7dd797b1c80bb1b5637b4ecc71189d6863c5ef7fcf2b723aa2a987c
|
data/README.md
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
|
2
2
|
[](https://badge.fury.io/rb/teuton)
|
3
3
|

|
4
|
-

|
5
5
|
|
6
6
|
# TEUTON
|
7
7
|
|
8
|
-
_Create Unit Test for your machines
|
9
|
-
test your infraestructure as code._
|
8
|
+
_Create Unit Test for your machines. Test your infraestructure as code._
|
10
9
|
|
11
10
|

|
12
11
|
|
@@ -24,7 +23,7 @@ Teuton allow us:
|
|
24
23
|
* [Installation](https://github.com/teuton-software/teuton/tree/master/docs/install/README.md)
|
25
24
|
* Install Ruby on your system.
|
26
25
|
* Install Teuton as normal user: `gem install --user-install teuton` (or install as superuser `gem install teuton`).
|
27
|
-
* [
|
26
|
+
* [Blogs and videos](docs/videos.md)
|
28
27
|
* [Learning](docs/learn/README.md)
|
29
28
|
* [Commands](docs/commands/README.md)
|
30
29
|
* [Language reference](docs/dsl/README.md)
|
data/docs/CHANGELOG.md
CHANGED
@@ -2,7 +2,27 @@
|
|
2
2
|
|
3
3
|
# Changelog
|
4
4
|
|
5
|
-
|
5
|
+
## TO-DO
|
6
|
+
|
7
|
+
- Teuton readme --lang=es
|
8
|
+
|
9
|
+
## [2.4.0]
|
10
|
+
|
11
|
+
New features:
|
12
|
+
- Add new DSL keyword: expect_last, expect_fisrt
|
13
|
+
- New doc and example: learn-15-exit_codes
|
14
|
+
- Remove os gem.
|
15
|
+
- Change test output colors to green as use others test tools.
|
16
|
+
|
17
|
+
Bug fixed:
|
18
|
+
- All "expect*" keywords must require 2 arguments. The second is optional.
|
19
|
+
|
20
|
+
Revise
|
21
|
+
- Remove colors to log text
|
22
|
+
- teuton readme: macros, getvars, expect_last, expect_first
|
23
|
+
- Formatter: xml, csv, list, etc.
|
24
|
+
|
25
|
+
|
6
26
|
* [version 2.2](changelog/v2.2.md)
|
7
27
|
* [version 2.1](changelog/v2.1.md)
|
8
28
|
* [version 2.0](changelog/v2.0.md)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
[<< back](README.md)
|
2
|
+
|
3
|
+
# Example: 14-alias
|
4
|
+
|
5
|
+
Supongamos que tenemos un test como el siguiente:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
group "Using alias" do
|
9
|
+
target "Verify user #{get(:super)} with key alias."
|
10
|
+
run "id #{get(:super)}"
|
11
|
+
expect get(:super)
|
12
|
+
|
13
|
+
target "Verify user #{_username} with method alias."
|
14
|
+
run "id #{_username}"
|
15
|
+
expect _username
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
Tenemos sólo 2 targets pero podríamos tener muchos más.
|
20
|
+
|
21
|
+
> Recordemos que `_username` es equivalente a `get(:username)`
|
22
|
+
|
23
|
+
Sabemos que el fichero de configuración debe definir los valores para los parámetros `super` y `username`. Queremos aprovechar un fichero de configuración que ya teníamos de otro test, pero tiene el siguiente contenido:
|
24
|
+
|
25
|
+
```yaml
|
26
|
+
# Version 1
|
27
|
+
# File: config.yaml
|
28
|
+
global:
|
29
|
+
cases:
|
30
|
+
- tt_members: Anonymous
|
31
|
+
superuser: root
|
32
|
+
username: obiwan
|
33
|
+
```
|
34
|
+
|
35
|
+
Podemos comprobar que nuestro test require el parámetro `super` pero el fichero de configuración lo ha nombrado como `superuser`.
|
36
|
+
|
37
|
+
```yaml
|
38
|
+
# Version 2
|
39
|
+
# File: config.yaml
|
40
|
+
alias:
|
41
|
+
super: :superuser
|
42
|
+
global:
|
43
|
+
cases:
|
44
|
+
- tt_members: Anonymous
|
45
|
+
superuser: root
|
46
|
+
username: obiwan
|
47
|
+
```
|
data/docs/videos.md
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
[<< back](../README.md)
|
2
2
|
|
3
|
-
#
|
3
|
+
# Blogs
|
4
4
|
|
5
|
-
* [Introducción a Teuton](https://elpuig.xeill.net/Members/vcarceler/articulos/introduccion-a-teuton): iniciarse en el uso de Teutón gracias al fantástico artículo de Víctor Carceler.
|
6
|
-
* [Verificar prácticas de GNS3 con Teuton](https://elpuig.xeill.net/Members/juanmorote/articulos/verificar-practicas-de-gns3-con-teuton): GNS3 es un excelente simulador de red Open Source que además se entiende con Teuton a las mil maravillas.
|
5
|
+
* ES - [Introducción a Teuton](https://elpuig.xeill.net/Members/vcarceler/articulos/introduccion-a-teuton): iniciarse en el uso de Teutón gracias al fantástico artículo de Víctor Carceler.
|
6
|
+
* ES - [Verificar prácticas de GNS3 con Teuton](https://elpuig.xeill.net/Members/juanmorote/articulos/verificar-practicas-de-gns3-con-teuton): GNS3 es un excelente simulador de red Open Source que además se entiende con Teuton a las mil maravillas.
|
7
7
|
|
8
8
|
# Videos
|
9
9
|
|
10
|
+
Teuton:
|
11
|
+
* [Apuntes FP Informática - I Congreso Virtual - Mayo 2020](https://youtu.be/RxIV26BAoGo)
|
12
|
+
* [Teuton Software 2.1 - Tutorial - Oct 2020](https://youtu.be/cyBN-rOYQeY)
|
13
|
+
|
10
14
|
Teuton en el 2016 se llamaba "sysadmingame".
|
11
|
-
* [CHAPI16 - Presentación sysadmingame chapi16 - Abril 2016](https://youtu.be/cNJaB5xzHHQ)
|
15
|
+
* ES -[CHAPI16 - Presentación sysadmingame chapi16 - Abril 2016](https://youtu.be/cNJaB5xzHHQ)
|
12
16
|
* sysadmingame:
|
13
17
|
1. [Instalación del programa](https://youtu.be/dnyMq9_KDco)
|
14
18
|
2. [Crear un caso simple](https://youtu.be/0e2g5Izvc6c)
|
15
19
|
3. [Crear un caso complejo](https://youtu.be/ebEK6OXH8kQ)
|
16
20
|
|
17
|
-
Teuton:
|
18
|
-
* [Apuntes FP Informática - I Congreso Virtual - Mayo 2020](https://youtu.be/RxIV26BAoGo)
|
19
|
-
* [Teuton Software 2.1 - Tutorial - Oct 2020](https://youtu.be/cyBN-rOYQeY)
|
@@ -76,46 +76,30 @@ class Case
|
|
76
76
|
tempfile :default
|
77
77
|
end
|
78
78
|
|
79
|
-
##
|
80
|
-
# Export Case with specific output format
|
81
|
-
# @param format (Symbol)
|
82
79
|
def export(format)
|
83
80
|
return if skip?
|
84
81
|
|
85
82
|
@report.export format
|
86
83
|
end
|
87
84
|
|
88
|
-
##
|
89
|
-
# Return case report filename
|
90
|
-
# @return String
|
91
85
|
def filename
|
92
86
|
@report.filename
|
93
87
|
end
|
94
88
|
|
95
|
-
##
|
96
|
-
# Return case grade
|
97
|
-
# @return grade
|
98
89
|
def grade
|
99
90
|
return 0.0 if skip
|
100
91
|
|
101
92
|
@report.tail[:grade]
|
102
93
|
end
|
103
94
|
|
104
|
-
## Return case members
|
105
|
-
# @return members
|
106
95
|
def members
|
107
96
|
return "-" if skip
|
108
97
|
|
109
98
|
@report.head[:tt_members] || "noname"
|
110
99
|
end
|
111
100
|
|
112
|
-
##
|
113
|
-
# Return case skip value
|
114
|
-
# @return skip
|
115
101
|
alias skip? skip
|
116
102
|
|
117
|
-
##
|
118
|
-
# Show case report data on screen
|
119
103
|
def show
|
120
104
|
@report.show
|
121
105
|
end
|
@@ -32,8 +32,8 @@ module DSL
|
|
32
32
|
# * Invoke macro (assert)
|
33
33
|
def method_missing(method, args = {})
|
34
34
|
a = method.to_s
|
35
|
-
if a.start_with?("_")
|
36
|
-
return instance_eval("get(:#{a[1, a.size -
|
35
|
+
if a.start_with?("_")
|
36
|
+
return instance_eval("get(:#{a[1, a.size - 1]})", __FILE__, __LINE__)
|
37
37
|
end
|
38
38
|
return macro a[6, a.size], args if a[0, 6] == "macro_"
|
39
39
|
macro a, args
|
@@ -7,8 +7,6 @@
|
|
7
7
|
# * fill_report
|
8
8
|
# * close_opened_sessions
|
9
9
|
class Case
|
10
|
-
##
|
11
|
-
# Execute "play" order on this case
|
12
10
|
def play
|
13
11
|
if skip?
|
14
12
|
verbose "Skipping case <#{@config.get(:tt_members)}>\n"
|
@@ -34,9 +32,6 @@ class Case
|
|
34
32
|
|
35
33
|
private
|
36
34
|
|
37
|
-
##
|
38
|
-
# Execute every play#group in parallel
|
39
|
-
# TO-DO: Under construction!
|
40
35
|
def play_in_parallel
|
41
36
|
@groups.each do |t|
|
42
37
|
@action[:groupname] = t[:name]
|
@@ -44,8 +39,6 @@ class Case
|
|
44
39
|
end
|
45
40
|
end
|
46
41
|
|
47
|
-
##
|
48
|
-
# Execute every play#group in sequence
|
49
42
|
def play_in_sequence
|
50
43
|
verboseln "Starting case [#{@config.get(:tt_members)}]"
|
51
44
|
@groups.each do |t|
|
@@ -57,8 +50,6 @@ class Case
|
|
57
50
|
verboseln "\n"
|
58
51
|
end
|
59
52
|
|
60
|
-
##
|
61
|
-
# Fill case report with time information
|
62
53
|
def fill_report(start_time, finish_time)
|
63
54
|
@report.head.merge! @config.global
|
64
55
|
@report.head.merge! @config.local
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require_relative "../application"
|
2
2
|
require_relative "case_manager"
|
3
3
|
|
4
|
-
# Define filename to be used into our test
|
5
|
-
# @param filename (String) Filename to be required
|
6
4
|
def use(filename)
|
7
5
|
filename += ".rb"
|
8
6
|
app = Application.instance
|
@@ -14,9 +12,6 @@ def use(filename)
|
|
14
12
|
app.uses << File.basename(findfiles.first)
|
15
13
|
end
|
16
14
|
|
17
|
-
# Define macro. That's a name to predefined target-run-expect evaluation.
|
18
|
-
# @param name (String) macro name
|
19
|
-
# @param block (Block) macro code
|
20
15
|
def define_macro(name, *args, &block)
|
21
16
|
Application.instance.macros[name] = {args: args, block: block}
|
22
17
|
end
|
data/lib/teuton/check/dsl.rb
CHANGED
@@ -3,14 +3,10 @@
|
|
3
3
|
##
|
4
4
|
# Include Teuton DSL keywords into Laboratory class
|
5
5
|
class Laboratory
|
6
|
-
##
|
7
|
-
# Execute Teuton DSL readme keyword
|
8
6
|
def readme(_text)
|
9
7
|
# Usefull for "teuton readme" command action.
|
10
8
|
end
|
11
9
|
|
12
|
-
##
|
13
|
-
# Execute Teuton DSL target keyword
|
14
10
|
def target(desc, args = {})
|
15
11
|
@stats[:targets] += 1
|
16
12
|
@targetid += 1
|
@@ -20,55 +16,36 @@ class Laboratory
|
|
20
16
|
end
|
21
17
|
alias goal target
|
22
18
|
|
23
|
-
##
|
24
|
-
# Execute Teuton DSL run keyword
|
25
|
-
def run(command, args = {})
|
26
|
-
args[:exec] = command
|
27
|
-
host = :localhost
|
28
|
-
host = args[:on] if args[:on]
|
29
|
-
goto(host, args)
|
30
|
-
end
|
31
|
-
|
32
|
-
##
|
33
|
-
# Execute Teuton DSL goto keyword
|
34
|
-
def goto(host = :localhost, args = {})
|
35
|
-
result.reset
|
36
|
-
args[:on] = host unless args[:on]
|
37
|
-
|
38
|
-
if @hosts[host]
|
39
|
-
@hosts[host] += 1
|
40
|
-
else
|
41
|
-
@hosts[host] = 1
|
42
|
-
end
|
43
|
-
verboseln " run '#{args[:exec]}' on #{args[:on]}"
|
44
|
-
end
|
45
|
-
|
46
|
-
##
|
47
|
-
# Execute Teuton DSL expect keyword
|
48
19
|
def expect(cond)
|
49
20
|
verboseln " alter #{result.alterations}" unless result.alterations.empty?
|
50
21
|
verboseln " expect #{cond} (#{cond.class})"
|
51
22
|
verboseln ""
|
52
23
|
end
|
53
24
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
verboseln "
|
58
|
-
|
25
|
+
def expect_first(cond)
|
26
|
+
verboseln " alter #{result.alterations}" unless result.alterations.empty?
|
27
|
+
verboseln " expect_first #{cond} (#{cond.class})"
|
28
|
+
verboseln ""
|
29
|
+
end
|
30
|
+
|
31
|
+
def expect_last(cond)
|
32
|
+
verboseln " alter #{result.alterations}" unless result.alterations.empty?
|
33
|
+
verboseln " expect_last #{cond} (#{cond.class})"
|
59
34
|
verboseln ""
|
60
35
|
end
|
61
36
|
|
62
|
-
##
|
63
|
-
# Execute Teuton DSL expect_none keyword
|
64
37
|
def expect_none(cond)
|
65
38
|
verboseln " alter #{result.alterations}" unless result.alterations.empty?
|
66
39
|
verboseln " expect_none #{cond} (#{cond.class})"
|
67
40
|
verboseln ""
|
68
41
|
end
|
69
42
|
|
70
|
-
|
71
|
-
|
43
|
+
def expect_one(cond)
|
44
|
+
verboseln " alter #{result.alterations}" unless result.alterations.empty?
|
45
|
+
verboseln " expect_one #{cond} (#{cond.class})"
|
46
|
+
verboseln ""
|
47
|
+
end
|
48
|
+
|
72
49
|
def get(varname)
|
73
50
|
@stats[:gets] += 1
|
74
51
|
|
@@ -81,23 +58,37 @@ class Laboratory
|
|
81
58
|
"get(#{varname})"
|
82
59
|
end
|
83
60
|
|
84
|
-
|
85
|
-
|
86
|
-
|
61
|
+
def run(command, args = {})
|
62
|
+
args[:exec] = command
|
63
|
+
host = :localhost
|
64
|
+
host = args[:on] if args[:on]
|
65
|
+
goto(host, args)
|
66
|
+
end
|
67
|
+
|
68
|
+
def goto(host = :localhost, args = {})
|
69
|
+
result.reset
|
70
|
+
args[:on] = host unless args[:on]
|
71
|
+
|
72
|
+
if @hosts[host]
|
73
|
+
@hosts[host] += 1
|
74
|
+
else
|
75
|
+
@hosts[host] = 1
|
76
|
+
end
|
77
|
+
verboseln " run '#{args[:exec]}' on #{args[:on]}"
|
78
|
+
end
|
79
|
+
|
80
|
+
# Check macros and _get_vars
|
81
|
+
def method_missing(method, *args, &block)
|
87
82
|
a = method.to_s
|
88
|
-
|
83
|
+
if args.nil? && block.nil?
|
84
|
+
instance_eval("get(:#{a[0, a.size - 1]})", __FILE__, __LINE__) if a[a.size - 1] == "?"
|
85
|
+
end
|
89
86
|
end
|
90
|
-
# rubocop:enable Style/MissingRespondToMissing
|
91
87
|
|
92
|
-
##
|
93
|
-
# Execute Teuton DSL gett keyword
|
94
|
-
# Same as get keyword, but show pretty output when used by readme command.
|
95
88
|
def gett(option)
|
96
89
|
get(option)
|
97
90
|
end
|
98
91
|
|
99
|
-
##
|
100
|
-
# Execute Teuton DSL unique keyword
|
101
92
|
def unique(key, _value)
|
102
93
|
@stats[:uniques] += 1
|
103
94
|
|
@@ -105,15 +96,11 @@ class Laboratory
|
|
105
96
|
verboseln ""
|
106
97
|
end
|
107
98
|
|
108
|
-
##
|
109
|
-
# Execute Teuton DSL log keyword
|
110
99
|
def log(text = "", type = :info)
|
111
100
|
@stats[:logs] += 1
|
112
101
|
verboseln " log [#{type}]: " + text.to_s
|
113
102
|
end
|
114
103
|
|
115
|
-
##
|
116
|
-
# Execute Teuton DSL set keyword
|
117
104
|
def set(key, value)
|
118
105
|
@stats[:sets] += 1
|
119
106
|
|
@@ -6,9 +6,6 @@ require_relative "show"
|
|
6
6
|
require_relative "dsl"
|
7
7
|
require_relative "builtin"
|
8
8
|
|
9
|
-
##
|
10
|
-
# DSL use: import filename instructions
|
11
|
-
# @param filename (String)
|
12
9
|
def use(filename)
|
13
10
|
filename += ".rb"
|
14
11
|
app = Application.instance
|
@@ -19,18 +16,18 @@ def use(filename)
|
|
19
16
|
require_relative use[0]
|
20
17
|
end
|
21
18
|
|
22
|
-
##
|
23
|
-
# DSL group: Define a group of test
|
24
|
-
# @param name (String or Symbol)
|
25
|
-
# @param block (Proc)
|
26
19
|
def group(name, &block)
|
27
20
|
Application.instance.groups << {name: name, block: block}
|
28
21
|
end
|
29
22
|
alias task group
|
30
23
|
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
def define_macro(name, *args, &block)
|
25
|
+
Application.instance.macros[name] = {args: args, block: block}
|
26
|
+
end
|
27
|
+
alias def_macro define_macro
|
28
|
+
alias defmacro define_macro
|
29
|
+
|
30
|
+
|
34
31
|
def start(&block)
|
35
32
|
# Don't do nothing. We are checking test not running it
|
36
33
|
end
|
data/lib/teuton/check/show.rb
CHANGED
@@ -9,8 +9,6 @@ require_relative "../utils/configfile_reader"
|
|
9
9
|
# * show_stats
|
10
10
|
# * show_config
|
11
11
|
class Laboratory
|
12
|
-
##
|
13
|
-
# Display DSL checking on screen
|
14
12
|
def show
|
15
13
|
@verbose = true
|
16
14
|
process_content
|
@@ -18,8 +16,6 @@ class Laboratory
|
|
18
16
|
revise_config_content
|
19
17
|
end
|
20
18
|
|
21
|
-
##
|
22
|
-
# Display config for teuton panel on screen
|
23
19
|
def show_panelconfig
|
24
20
|
@verbose = false
|
25
21
|
process_content
|
data/lib/teuton/readme/dsl.rb
CHANGED
data/lib/teuton/readme/lang.rb
CHANGED
@@ -7,9 +7,9 @@ module Lang
|
|
7
7
|
version: "Teuton version : %s",
|
8
8
|
testname: "Test unit name : %s",
|
9
9
|
date: "Date : %s",
|
10
|
-
hosts: "\n
|
11
|
-
params: "\n
|
12
|
-
goto: "\nGo to [%s](
|
10
|
+
hosts: "\n### Required hosts\n",
|
11
|
+
params: "\n### Required params\n",
|
12
|
+
goto: "\nGo to [%s](#required-hosts) host, and do next:\n",
|
13
13
|
global: "\nGlobal parameters that can be modified:\n",
|
14
14
|
created: "\nParams created during challenge execution:\n"
|
15
15
|
}
|
@@ -17,9 +17,9 @@ module Lang
|
|
17
17
|
version: "Versión de Teuton : %s",
|
18
18
|
testname: "Nombre del test : %s",
|
19
19
|
date: "Fecha : %s",
|
20
|
-
hosts: "\n
|
21
|
-
params: "\n
|
22
|
-
goto: "\nIr a la máquina [%s](
|
20
|
+
hosts: "\n### Máquinas que se necesitan\n",
|
21
|
+
params: "\n### Parámetros de necesarios\n",
|
22
|
+
goto: "\nIr a la máquina [%s](#required-hosts), y hacer lo siguiente:\n",
|
23
23
|
global: "\nParámetros globales que pueden ser modificados:\n",
|
24
24
|
created: "\nParámetros creados durante la ejecución del reto:\n"
|
25
25
|
}
|
data/lib/teuton/version.rb
CHANGED
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.3.
|
4
|
+
version: 2.3.9
|
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: 2022-
|
11
|
+
date: 2022-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
103
|
+
version: '1.2'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '1.2'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: terminal-table
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +122,6 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.8'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: minitest
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '5.15'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '5.15'
|
139
125
|
description: |2
|
140
126
|
Intrastructure test, useful for:
|
141
127
|
(1) Sysadmin teachers to evaluate students remote machines.
|
@@ -156,7 +142,6 @@ extra_rdoc_files:
|
|
156
142
|
- docs/changelog/v2.0.md
|
157
143
|
- docs/changelog/v2.1.md
|
158
144
|
- docs/changelog/v2.2.md
|
159
|
-
- docs/changelog/v2.4.md
|
160
145
|
- docs/changelog/version2.1.md
|
161
146
|
- docs/commands/README.md
|
162
147
|
- docs/commands/example_check.md
|
@@ -198,6 +183,7 @@ extra_rdoc_files:
|
|
198
183
|
- docs/learn/11-moodle_id.md
|
199
184
|
- docs/learn/12-get_vars.md
|
200
185
|
- docs/learn/13-include.md
|
186
|
+
- docs/learn/14-alias.md
|
201
187
|
- docs/learn/16-exit_codes.md
|
202
188
|
- docs/learn/README.md
|
203
189
|
- docs/learn/videos.md
|
@@ -210,7 +196,6 @@ files:
|
|
210
196
|
- docs/changelog/v2.0.md
|
211
197
|
- docs/changelog/v2.1.md
|
212
198
|
- docs/changelog/v2.2.md
|
213
|
-
- docs/changelog/v2.4.md
|
214
199
|
- docs/changelog/version2.1.md
|
215
200
|
- docs/commands/README.md
|
216
201
|
- docs/commands/example_check.md
|
@@ -252,6 +237,7 @@ files:
|
|
252
237
|
- docs/learn/11-moodle_id.md
|
253
238
|
- docs/learn/12-get_vars.md
|
254
239
|
- docs/learn/13-include.md
|
240
|
+
- docs/learn/14-alias.md
|
255
241
|
- docs/learn/16-exit_codes.md
|
256
242
|
- docs/learn/README.md
|
257
243
|
- docs/learn/videos.md
|
@@ -342,14 +328,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
342
328
|
requirements:
|
343
329
|
- - ">="
|
344
330
|
- !ruby/object:Gem::Version
|
345
|
-
version: 2.
|
331
|
+
version: 2.6.0
|
346
332
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
347
333
|
requirements:
|
348
334
|
- - ">="
|
349
335
|
- !ruby/object:Gem::Version
|
350
336
|
version: '0'
|
351
337
|
requirements: []
|
352
|
-
rubygems_version: 3.
|
338
|
+
rubygems_version: 3.2.33
|
353
339
|
signing_key:
|
354
340
|
specification_version: 4
|
355
341
|
summary: Teuton (Infrastructure test)
|
data/docs/changelog/v2.4.md
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
## [2.4.0]
|
3
|
-
|
4
|
-
New features:
|
5
|
-
- Add new DSL keyword: expect_last, expect_fisrt
|
6
|
-
- New doc and example: learn-15-exit_codes
|
7
|
-
- Remove os gem.
|
8
|
-
- Change test output colors to green as use others test tools.
|
9
|
-
|
10
|
-
Bug fixed:
|
11
|
-
- All "expect*" keywords must require 2 arguments. The second is optional.
|
12
|
-
|
13
|
-
Revise
|
14
|
-
- Remove colors to log text
|
15
|
-
- teuton readme: macros, getvars, expect_last, expect_first
|
16
|
-
- Formatter: xml, csv, list, etc.
|