teuton 2.3.7 → 2.3.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/teuton.svg)](https://badge.fury.io/rb/teuton)
|
3
3
|
![GitHub](https://img.shields.io/github/license/dvarrui/teuton)
|
4
|
-
![Gem](https://img.shields.io/gem/dv/teuton/2.3.
|
4
|
+
![Gem](https://img.shields.io/gem/dv/teuton/2.3.8)
|
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
|
![logo](./docs/images/logo.png)
|
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.
|