teuton 2.4.4 → 2.5.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 +6 -10
- data/docs/changelog/todo.md +0 -9
- data/docs/changelog/v2.4.md +6 -0
- data/docs/changelog/v2.5.md +6 -0
- data/docs/commands/example_check.md +2 -3
- data/docs/install/README.md +3 -2
- data/docs/learn/14-moodle_id.md +20 -2
- data/lib/teuton/application.rb +4 -4
- data/lib/teuton/case_manager/case/runner.rb +9 -3
- data/lib/teuton/check/show.rb +7 -11
- data/lib/teuton/cli.rb +9 -10
- data/lib/teuton/report/formatter/moodle_csv_formatter.rb +6 -1
- data/lib/teuton/version.rb +1 -1
- data/lib/teuton.rb +2 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f53359ed5f8eae1b3a798630c5d56ae46076073bface7d3788de57b245a80cb
|
4
|
+
data.tar.gz: 366afd9ccee6db9bdf5756fe5954050231681763489bab11b1841e9279998c08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a40866560ec0d622b48322c0689dfe36cb9820cf565ce4258a8b71d38a1a3cc88e57f68e208c0d2a6c1a0787b7a2698af0446757bb2167fdf04d2bcd8002178f
|
7
|
+
data.tar.gz: 288e6105576a15ac25eb20d298bb552b77347b65a3a2df6632d0ef26063061c77c32ef02af88a6f7244790df9573b6e79d7e9fee8b0606006a41b0cd171a51c5
|
data/README.md
CHANGED
@@ -3,21 +3,16 @@
|
|
3
3
|
|
4
4
|
[](https://badge.fury.io/rb/teuton)
|
5
5
|

|
6
|
-

|
7
6
|
|
8
7
|
_Create Unit Test for your machines. Test your infrastructure as code._
|
9
8
|
|
10
9
|

|
11
10
|
|
12
|
-
|
11
|
+
Infrastructure test, useful for:
|
13
12
|
* Sysadmin teachers who want to evaluate students remote machines.
|
14
13
|
* Sysadmin apprentices who want to evaluate their learning process as a game.
|
15
14
|
* Professional sysadmin who want to monitor remote machines.
|
16
15
|
|
17
|
-
Teuton allow us:
|
18
|
-
* Write unit tests for real or virtual devices, using simple DSL.
|
19
|
-
* Check compliance with requirements on local or remote devices.
|
20
|
-
|
21
16
|
# Installation
|
22
17
|
|
23
18
|
Install Ruby and then:
|
@@ -40,18 +35,19 @@ CASE RESULTS
|
|
40
35
|
| CASE | MEMBERS | GRADE | STATE |
|
41
36
|
| 01 | anonymous | 100.0 | ✔ |
|
42
37
|
+------+-----------+-------+-------+
|
43
|
-
|
44
38
|
```
|
45
39
|
|
46
40
|
# Features
|
47
41
|
|
48
|
-
*
|
42
|
+
* Simple DSL to define your tests: `target`, `run`,`expect` and more.
|
43
|
+
* Remote devices only require SSH or Telnet service installed.
|
44
|
+
* Output format: txt, html, json, yaml, etc.
|
49
45
|
* Multiplatform.
|
50
|
-
*
|
46
|
+
* [Free Software License](LICENSE).
|
51
47
|
|
52
48
|
# Documentation
|
53
49
|
|
54
|
-
* [
|
50
|
+
* [Getting started](docs/learn/README.md)
|
55
51
|
* [Language reference](docs/dsl/README.md)
|
56
52
|
* [Commands](docs/commands/README.md)
|
57
53
|
* [Installation](docs/install/README.md)
|
data/docs/changelog/todo.md
CHANGED
@@ -10,18 +10,9 @@ Revise:
|
|
10
10
|
* verify get(:key) and get('key') works fine!
|
11
11
|
* Formatter: xml,
|
12
12
|
|
13
|
-
Revise documentation:
|
14
|
-
* Doc learn 10,11, 12,13 y 14
|
15
|
-
* 10 result and moodle_id
|
16
|
-
* 12 alias
|
17
|
-
* 13 include
|
18
|
-
* 14 macro
|
19
|
-
* Doc tt_include
|
20
|
-
|
21
13
|
Internal changes:
|
22
14
|
* Application to Settings
|
23
15
|
* Laboratory to Checker
|
24
|
-
* Colorize to Rainbow
|
25
16
|
* Unify messages ERROR, INFO, WARN. etc
|
26
17
|
* Create SendManager as ExportManager?
|
27
18
|
* Add tt_label as alias of tt_members
|
data/docs/changelog/v2.4.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## [2.4.5]
|
2
|
+
|
3
|
+
-- FIX: "expect_nothing" was always TRUE when SSH/Telnet connections fails!
|
4
|
+
Now when SSH/Telnet connections fails result contains "SSH: NO CONNECTION!"
|
5
|
+
So "expect_nothing" will fail.
|
6
|
+
|
1
7
|
## [2.4.4]
|
2
8
|
|
3
9
|
-- Modify: teuton check output colors and exit codes.
|
@@ -0,0 +1,6 @@
|
|
1
|
+
|
2
|
+
## [2.5.0]
|
3
|
+
|
4
|
+
- ADD: "tt_moodle_max_score" global configuration param. Teuton grades (0-100) are divided by this value when exporting data into "moodle.csv" output file.
|
5
|
+
- UPDATE: Revise documentation. Doc learn 10,11, 12,13 y 14. 10 result and moodle_id, 12 alias, 13 include, 14 macro, Doc tt_include
|
6
|
+
- UPDATE: Internal changes. Remove Colorize gem and replace with Rainbow.
|
@@ -51,11 +51,10 @@ Example:
|
|
51
51
|
:global:
|
52
52
|
:cases:
|
53
53
|
- :tt_members: VALUE
|
54
|
-
|
55
|
-
Check OK!
|
56
54
|
```
|
57
55
|
|
58
56
|
The check process notifies that
|
59
57
|
* This test hasn't config file
|
60
58
|
* and recommends content for our config file. But it isn't necessary for this example.
|
61
|
-
* Syntax
|
59
|
+
* exit_code 0 = Syntax ok.
|
60
|
+
* exit code 1 = Syntax ERROR.
|
data/docs/install/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
[<< back](../../README.md)
|
2
2
|
|
3
|
-
# Installation
|
3
|
+
# Installation
|
4
4
|
|
5
|
-
There are 2 types of nodes/hosts:
|
5
|
+
There are 2 types of nodes/hosts, so there are 2 installations:
|
6
6
|
|
7
7
|
| ID | Software | Description |
|
8
8
|
| -- | -------- | ----------- |
|
@@ -20,6 +20,7 @@ Read [modes of use](modes_of_use.md) to know more about differents T-NODE/S-NODE
|
|
20
20
|
| | Fedora | Workstation 29 | x84-64 | Ok | |
|
21
21
|
| | LinuxMint | 18.3 | x86-64 | Ok | |
|
22
22
|
| | openSUSE | Leap 15 | x86-64 | Ok | Ok |
|
23
|
+
| | openSUSE | Tumbleweed | x86-64 | Ok | Ok |
|
23
24
|
| | Ubuntu | 18.04 | x86-64 | Ok | Ok |
|
24
25
|
| Microsoft | Windows | 7 Enterprise | x86 | Ok | |
|
25
26
|
| | Windows | 10 Pro | x86-64 | Ok | Ok |
|
data/docs/learn/14-moodle_id.md
CHANGED
@@ -8,7 +8,7 @@ Teuton generates a file called `moodle.csv` with the grades of each student into
|
|
8
8
|
|
9
9
|
## tt_moodle_id
|
10
10
|
|
11
|
-
Add a new field called `tt_moodle_id` to each case in "config.yaml". Fill it with the student's identification
|
11
|
+
Add a new field called `tt_moodle_id` to each case in "config.yaml". Fill it with the student's Moodle identification. For example, registered email on or ID number on Moodle platform.
|
12
12
|
|
13
13
|
Example:
|
14
14
|
|
@@ -21,4 +21,22 @@ cases:
|
|
21
21
|
tt_moodle_id: obiwan@starwars.com
|
22
22
|
```
|
23
23
|
|
24
|
-
Now, when
|
24
|
+
Now, when after test execution, use "moodle.csv" output file to load students grades and feedback into your Moodle platform.
|
25
|
+
|
26
|
+
## tt_moodle_max_score
|
27
|
+
|
28
|
+
By default, teuton evaluates grades from 0 to 100. So grade max score is 100.0 by default. Sometimes teachers configure their moodle tasks with diferents max score, so it is necesary adjust Teuton output grades with Moodle input grades.
|
29
|
+
|
30
|
+
We use `tt_moodle_max_score` to customize Moodle max score. So when Teuton export `moodle.csv` values, divides Teuton grades by this value.
|
31
|
+
|
32
|
+
Example:
|
33
|
+
|
34
|
+
```
|
35
|
+
global:
|
36
|
+
tt_moodle_max_score: 10
|
37
|
+
cases:
|
38
|
+
- tt_members: Darth Vader
|
39
|
+
tt_moodle_id: vader@starwars.com
|
40
|
+
- tt_members: Obiwan Kenobi
|
41
|
+
tt_moodle_id: obiwan@starwars.com
|
42
|
+
```
|
data/lib/teuton/application.rb
CHANGED
@@ -70,9 +70,9 @@ class Application
|
|
70
70
|
Rainbow.enabled = @options["color"]
|
71
71
|
@options["panel"] = false if @options["panel"].nil?
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
unless @options["case"].nil?
|
74
|
+
numbers = @options["case"].split(",")
|
75
|
+
@options["case"] = numbers.collect!(&:to_i)
|
76
|
+
end
|
77
77
|
end
|
78
78
|
end
|
@@ -98,8 +98,13 @@ class Case
|
|
98
98
|
non_interactive: true
|
99
99
|
)
|
100
100
|
end
|
101
|
-
if @sessions[hostname].instance_of? Net::SSH::Connection::Session
|
102
|
-
|
101
|
+
text = if @sessions[hostname].instance_of? Net::SSH::Connection::Session
|
102
|
+
@sessions[hostname].exec!(@action[:command])
|
103
|
+
# ssh.exec!("ls -l /home/jamis") do |channel, stream, data|
|
104
|
+
# stdout << data if stream == :stdout
|
105
|
+
# end
|
106
|
+
else
|
107
|
+
"SSH: NO CONNECTION!"
|
103
108
|
end
|
104
109
|
rescue Errno::EHOSTUNREACH
|
105
110
|
@sessions[hostname] = :nosession
|
@@ -148,10 +153,11 @@ class Case
|
|
148
153
|
# "Prompt" => Regexp.new(username[1, 40]))
|
149
154
|
# "Prompt" => /[$%#>] \z/n)
|
150
155
|
h.login(username, password)
|
151
|
-
text = ""
|
152
156
|
h.cmd(@action[:command]) { |i| text << i }
|
153
157
|
h.close
|
154
158
|
@sessions[hostname] = :ok
|
159
|
+
else
|
160
|
+
text = "TELNET: NO CONNECTION!"
|
155
161
|
end
|
156
162
|
rescue Net::OpenTimeout
|
157
163
|
@sessions[hostname] = :nosession
|
data/lib/teuton/check/show.rb
CHANGED
@@ -16,7 +16,7 @@ class Laboratory
|
|
16
16
|
revise_config_content
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def show_onlyconfig
|
20
20
|
@verbose = false
|
21
21
|
process_content
|
22
22
|
@verbose = true
|
@@ -69,9 +69,9 @@ class Laboratory
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def recomended_config_content
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
warn Rainbow("[WARN] Configfile not found").bright.yellow
|
73
|
+
warn Rainbow(" #{@path[:config]}").white
|
74
|
+
warn Rainbow("[INFO] Recomended content:").bright.yellow
|
75
75
|
output = {global: nil, cases: []}
|
76
76
|
output[:cases][0] = {}
|
77
77
|
script_vars = find_script_vars
|
@@ -80,18 +80,14 @@ class Laboratory
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def recomended_panelconfig_content
|
83
|
-
output = {global:
|
83
|
+
output = {global: nil, cases: [{}]}
|
84
84
|
script_vars = find_script_vars
|
85
|
-
script_vars.each { |i| output[:global][i] = "VALUE" }
|
85
|
+
# script_vars.each { |i| output[:global][i] = "VALUE" }
|
86
|
+
script_vars.each { |i| output[:cases][0][i] = "VALUE" }
|
86
87
|
verboseln YAML.dump(output)
|
87
88
|
end
|
88
89
|
|
89
90
|
def revise_config_content
|
90
|
-
my_screen_table = Terminal::Table.new do |st|
|
91
|
-
st.add_row ["Revising CONFIG file"]
|
92
|
-
end
|
93
|
-
verboseln my_screen_table
|
94
|
-
|
95
91
|
unless File.exist?(@path[:config])
|
96
92
|
recomended_config_content
|
97
93
|
return
|
data/lib/teuton/cli.rb
CHANGED
@@ -15,23 +15,22 @@ class CLI < Thor
|
|
15
15
|
end
|
16
16
|
|
17
17
|
map ["c", "-c", "--check"] => "check"
|
18
|
-
option :
|
18
|
+
option :onlyconfig, type: :boolean
|
19
|
+
option :color, type: :boolean
|
19
20
|
option :cname, type: :string
|
20
21
|
option :cpath, type: :string
|
21
22
|
desc "check [OPTIONS] DIRECTORY", "Check test and config file content"
|
22
|
-
long_desc
|
23
|
+
long_desc <<~LONGDESC
|
24
|
+
|
25
|
+
(1) teuton check PATH/TO/DIR , Check content of start.rb and config.yaml files.
|
23
26
|
|
24
|
-
|
25
|
-
, Check content of start.rb and config.yaml files.
|
27
|
+
(2) teuton check PATH/TO/DIR --cname=demo , Check content of start.rb and demo.yaml files:
|
26
28
|
|
27
|
-
|
28
|
-
, Check content of start.rb and demo.yaml files.
|
29
|
+
(3) teuton check PATH/TO/DIR --onlyconfig , Only show config file recomendations
|
29
30
|
|
30
|
-
|
31
|
-
, Check content of foo.rb and foo.yaml files.
|
31
|
+
(4) teuton check PATH/TO/DIR/foo.rb , Check content of foo.rb and foo.yaml files.
|
32
32
|
|
33
|
-
|
34
|
-
, Check content of foo.rb and demo.yaml files.
|
33
|
+
(5) teuton check PATH/TO/DIR/foo.rb --cname=demo , Check content of foo.rb and demo.yaml files.
|
35
34
|
|
36
35
|
LONGDESC
|
37
36
|
def check(projectpath)
|
@@ -16,13 +16,18 @@ class MoodleCSVFormatter < ResumeArrayFormatter
|
|
16
16
|
private
|
17
17
|
|
18
18
|
def process_cases
|
19
|
+
max = @data[:config][:tt_moodle_max_score] || 100.0
|
20
|
+
grade_adjust = max.to_f / 100.0
|
19
21
|
# MoodleID, Grade, Feedback
|
20
22
|
w "MoodleID, TeutonGrade, TeutonFeedback\n"
|
21
23
|
@data[:cases].each do |line|
|
22
24
|
moodle_id = line[:moodle_id]
|
23
25
|
moodle_id = line[:moodle_id].split(",") if moodle_id.instance_of? String
|
24
26
|
moodle_id.each do |id|
|
25
|
-
|
27
|
+
unless line[:skip]
|
28
|
+
grade = line[:grade].to_f * grade_adjust
|
29
|
+
w "#{id.strip},#{grade},#{line[:moodle_feedback]}\n"
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
data/lib/teuton/version.rb
CHANGED
data/lib/teuton.rb
CHANGED
@@ -27,13 +27,11 @@ module Teuton
|
|
27
27
|
|
28
28
|
app = Application.instance
|
29
29
|
lab = Laboratory.new(app.script_path, app.config_path)
|
30
|
-
if options[:
|
31
|
-
lab.
|
30
|
+
if options[:onlyconfig]
|
31
|
+
lab.show_onlyconfig
|
32
32
|
else
|
33
33
|
lab.show
|
34
34
|
end
|
35
|
-
puts Rainbow("Check OK!").green
|
36
|
-
exit 0
|
37
35
|
end
|
38
36
|
|
39
37
|
private_class_method def self.require_dsl_and_script(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.5.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-
|
11
|
+
date: 2023-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -131,6 +131,7 @@ extra_rdoc_files:
|
|
131
131
|
- docs/changelog/v2.2.md
|
132
132
|
- docs/changelog/v2.3.md
|
133
133
|
- docs/changelog/v2.4.md
|
134
|
+
- docs/changelog/v2.5.md
|
134
135
|
- docs/changelog/version2.1.md
|
135
136
|
- docs/commands/README.md
|
136
137
|
- docs/commands/example_check.md
|
@@ -197,6 +198,7 @@ files:
|
|
197
198
|
- docs/changelog/v2.2.md
|
198
199
|
- docs/changelog/v2.3.md
|
199
200
|
- docs/changelog/v2.4.md
|
201
|
+
- docs/changelog/v2.5.md
|
200
202
|
- docs/changelog/version2.1.md
|
201
203
|
- docs/commands/README.md
|
202
204
|
- docs/commands/example_check.md
|