teuton 2.4.0 → 2.4.2
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 +9 -6
- data/docs/changelog/todo.md +10 -1
- data/docs/changelog/v2.4.md +5 -1
- data/docs/commands/README.md +8 -17
- data/docs/commands/example_check.md +4 -4
- data/docs/commands/example_run.md +10 -32
- data/docs/dsl/README.md +27 -39
- data/docs/dsl/{definition/expect.md → expect.md} +2 -18
- data/docs/dsl/{execution/export.md → export.md} +4 -8
- data/docs/dsl/{setting/get.md → get.md} +4 -10
- data/docs/dsl/{definition/group.md → group.md} +2 -7
- data/docs/dsl/{execution/play.md → play.md} +1 -6
- data/docs/dsl/{definition/result.md → result.md} +1 -6
- data/docs/dsl/{definition/run_remote.md → run.md} +57 -23
- data/docs/dsl/{execution/send.md → send.md} +1 -8
- data/docs/dsl/{setting/set.md → set.md} +1 -7
- data/docs/dsl/{execution/show.md → show.md} +7 -16
- data/docs/dsl/target.md +33 -0
- data/docs/ideas/todo.md +35 -115
- data/docs/install/README.md +26 -42
- data/docs/install/s-node.md +35 -0
- data/docs/install/t-node.md +76 -0
- data/docs/learn/01-cmd_new.md +28 -0
- data/docs/learn/{01-target.md → 02-target.md} +21 -28
- data/docs/learn/03-remote_hosts.md +59 -87
- data/docs/learn/04-config.md +147 -0
- data/docs/learn/05-use.md +25 -45
- data/docs/learn/06-cmd_check.md +50 -0
- data/docs/learn/07-target_weight.md +44 -0
- data/docs/learn/08-unique_values.md +70 -0
- data/docs/learn/09-send.md +20 -0
- data/docs/learn/10-debug.md +45 -0
- data/docs/learn/11-export.md +35 -0
- data/docs/learn/{09-preserve.md → 12-preserve.md} +1 -1
- data/docs/learn/13-feedback.md +49 -0
- data/docs/learn/14-moodle_id.md +24 -0
- data/docs/learn/{08-readme.md → 15-readme.md} +5 -9
- data/docs/learn/{13-include.md → 16-include.md} +1 -3
- data/docs/learn/{14-alias.md → 17-alias.md} +0 -0
- data/docs/learn/{07-log.md → 18-log.md} +19 -23
- data/docs/learn/{12-get_vars.md → 19-read_vars.md} +3 -3
- data/docs/learn/20-macros.md +49 -0
- data/docs/learn/{16-exit_codes.md → 21-exit_codes.md} +0 -0
- data/docs/learn/{10-result.md → 22-result.md} +3 -3
- data/docs/learn/23-test-code.md +54 -0
- data/docs/learn/24-test-sql.md +69 -0
- data/docs/learn/README.md +31 -32
- data/lib/teuton/application.rb +2 -5
- data/lib/teuton/case_manager/case/case.rb +2 -1
- data/lib/teuton/case_manager/case/dsl/expect.rb +3 -1
- data/lib/teuton/case_manager/case/dsl/goto.rb +1 -1
- data/lib/teuton/case_manager/case/dsl/log.rb +5 -3
- data/lib/teuton/case_manager/case/dsl/send.rb +2 -2
- data/lib/teuton/case_manager/case/dsl/target.rb +1 -1
- data/lib/teuton/case_manager/case/result/ext_compare.rb +20 -21
- data/lib/teuton/case_manager/case/result/ext_filter.rb +15 -8
- data/lib/teuton/case_manager/case_manager.rb +10 -8
- data/lib/teuton/check/show.rb +1 -1
- data/lib/teuton/files/config.yaml +1 -2
- data/lib/teuton/files/start.rb +4 -4
- data/lib/teuton/readme/dsl.rb +9 -1
- data/lib/teuton/readme/readme.rb +8 -1
- data/lib/teuton/report/formatter/base_formatter.rb +2 -0
- data/lib/teuton/report/formatter/formatter.rb +1 -0
- data/lib/teuton/report/show.rb +8 -0
- data/lib/teuton/version.rb +1 -1
- data/lib/teuton.rb +2 -1
- metadata +72 -54
- data/docs/dsl/definition/run_local.md +0 -33
- data/docs/dsl/definition/target.md +0 -40
- data/docs/install/scripts.md +0 -96
- data/docs/learn/02-config.md +0 -121
- data/docs/learn/04-new_test.md +0 -87
- data/docs/learn/06-debug.md +0 -110
- data/docs/learn/11-moodle_id.md +0 -19
data/docs/learn/02-config.md
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
[<< back](README.md)
|
2
|
-
|
3
|
-
# Example: 02-config
|
4
|
-
|
5
|
-
* Learn how to use config file.
|
6
|
-
* Use params defined into config files.
|
7
|
-
* It's good idea save variable data separated into external config file.
|
8
|
-
|
9
|
-
1. [Config file](#config-file).
|
10
|
-
2. [Definition section](#definition-section).
|
11
|
-
3. [Execution section](#execution-section).
|
12
|
-
4. [Results](#results).
|
13
|
-
|
14
|
-
## Config file
|
15
|
-
|
16
|
-
By default, `config.yaml` is our config file. Let's an example:
|
17
|
-
|
18
|
-
```yaml
|
19
|
-
---
|
20
|
-
global:
|
21
|
-
cases:
|
22
|
-
- tt_members: Student-name-1
|
23
|
-
username: root
|
24
|
-
- tt_members: Student-name-2
|
25
|
-
username: vargas
|
26
|
-
```
|
27
|
-
|
28
|
-
## Definition section
|
29
|
-
|
30
|
-
By default, `start.rb` it's our main execution file.
|
31
|
-
|
32
|
-
```ruby
|
33
|
-
group "Reading params from config file" do
|
34
|
-
|
35
|
-
target "Create user #{get(:username)}"
|
36
|
-
run "id #{get(:username)}"
|
37
|
-
expect get(:username)
|
38
|
-
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
In this section we define targets using keywords: target, run, expect and get.
|
43
|
-
|
44
|
-
* **get** keyword is used to read params from configuracion file. It's posible personalize tests with diferent values for every case.
|
45
|
-
|
46
|
-
> NOTE: In this example, we assume GNU/Linux as localhost's OS.
|
47
|
-
|
48
|
-
## Execution section
|
49
|
-
|
50
|
-
Main execution block:
|
51
|
-
```ruby
|
52
|
-
play do
|
53
|
-
show
|
54
|
-
export
|
55
|
-
end
|
56
|
-
```
|
57
|
-
|
58
|
-
Runing this example and see `show` keyword output:
|
59
|
-
|
60
|
-
```bash
|
61
|
-
> teuton run examples/02-config
|
62
|
-
|
63
|
-
CASE RESULTS
|
64
|
-
+------+----------------+-------+-------+
|
65
|
-
| CASE | MEMBERS | GRADE | STATE |
|
66
|
-
| 01 | Student-name-1 | 100.0 | ✔ |
|
67
|
-
| 02 | Student-name-2 | 0.0 | ? |
|
68
|
-
+------+----------------+-------+-------+
|
69
|
-
```
|
70
|
-
|
71
|
-
## Results
|
72
|
-
|
73
|
-
Output reports are saved into `var/02-config/` directory. Detail output report is created for every case.
|
74
|
-
|
75
|
-
```
|
76
|
-
var/02-config
|
77
|
-
├── case-01.txt
|
78
|
-
├── case-02.txt
|
79
|
-
├── moodle.csv
|
80
|
-
└── resume.txt
|
81
|
-
```
|
82
|
-
|
83
|
-
Let's see `export` keyword output for case 01.
|
84
|
-
|
85
|
-
```
|
86
|
-
> more var/02-config/case-01.txt
|
87
|
-
CONFIGURATION
|
88
|
-
+-------------+----------------+
|
89
|
-
| tt_members | Student-name-1 |
|
90
|
-
| tt_sequence | false |
|
91
|
-
| tt_skip | false |
|
92
|
-
| tt_testname | 02-config |
|
93
|
-
| username | root |
|
94
|
-
+-------------+----------------+
|
95
|
-
|
96
|
-
GROUPS
|
97
|
-
- Reading params from config file
|
98
|
-
01 (1.0/1.0)
|
99
|
-
Description : Create user root
|
100
|
-
Command : id root
|
101
|
-
Duration : 0.002 (local)
|
102
|
-
Alterations : find(root) & count
|
103
|
-
Expected : Greater than 0 (String)
|
104
|
-
Result : 1 (Integer)
|
105
|
-
|
106
|
-
RESULTS
|
107
|
-
+--------------+---------------------------+
|
108
|
-
| case_id | 01 |
|
109
|
-
| start_time | 2022-12-24 13:33:49 +0000 |
|
110
|
-
| finish_time | 2022-12-24 13:33:49 +0000 |
|
111
|
-
| duration | 0.001777756 |
|
112
|
-
| unique_fault | 0 |
|
113
|
-
| max_weight | 1.0 |
|
114
|
-
| good_weight | 1.0 |
|
115
|
-
| fail_weight | 0.0 |
|
116
|
-
| fail_counter | 0 |
|
117
|
-
| grade | 100 |
|
118
|
-
+--------------+---------------------------+
|
119
|
-
```
|
120
|
-
|
121
|
-
> **How to choose another config file?** Read this [document](../commands/example_run.md#3-choosing-config-file).
|
data/docs/learn/04-new_test.md
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
|
2
|
-
[<< back](README.md)
|
3
|
-
|
4
|
-
# Example: 04-new_test
|
5
|
-
|
6
|
-
Steps:
|
7
|
-
1. Create skeleton
|
8
|
-
2. Personalize targets
|
9
|
-
3. Personalize configuration file
|
10
|
-
4. Run the challenge
|
11
|
-
|
12
|
-
## STEP 1: Create skeleton
|
13
|
-
|
14
|
-
Create skeleton for a new project: `teuton create foo`
|
15
|
-
|
16
|
-
```
|
17
|
-
> teuton new foo
|
18
|
-
|
19
|
-
[INFO] Creating foo project skeleton
|
20
|
-
* Create dir => foo
|
21
|
-
* Create file => foo/config.yaml
|
22
|
-
* Create file => foo/start.rb
|
23
|
-
```
|
24
|
-
|
25
|
-
> NOTA: It is posible to create these files by hand.
|
26
|
-
|
27
|
-
This command will create:
|
28
|
-
|
29
|
-
| File/Directory | Description |
|
30
|
-
| --------------- | -------------- |
|
31
|
-
| foo | Base directory |
|
32
|
-
| foo/start.rb | Main Script |
|
33
|
-
| foo/config.yaml | YAML configuration file |
|
34
|
-
|
35
|
-
---
|
36
|
-
|
37
|
-
## STEP 2: Personalize targets
|
38
|
-
|
39
|
-
Write your own targets using the keywords: `target`, `run` and `expect`. Let's see:
|
40
|
-
|
41
|
-
```ruby
|
42
|
-
group "Create new test" do
|
43
|
-
target "Exist </home/vader> directory"
|
44
|
-
run "file /home/vader", on: :host1
|
45
|
-
expect_none "No such file or directory"
|
46
|
-
end
|
47
|
-
```
|
48
|
-
|
49
|
-
The above example checks if exists '/home/david' directory, into *host1* device.
|
50
|
-
|
51
|
-
> Let's see the keywords used:
|
52
|
-
>
|
53
|
-
> * `target "Exist </home/vader> directory"`, Describe the target with our words, so every one could easily understand what we are trying
|
54
|
-
to check.
|
55
|
-
> * `run "file /home/vader", on: :host1`, : Execute the command into the remote machine (host1).
|
56
|
-
> * ` expect_none "No such file or directory"`: Compare command ouput with our expectations.
|
57
|
-
|
58
|
-
## STEP 3: Personalize Configfile
|
59
|
-
|
60
|
-
Use a YAML file (`foo/config.yaml`) or JSON for your own configurations. In this example, the file contains params used by our challenge (script).
|
61
|
-
|
62
|
-
**Example**:
|
63
|
-
|
64
|
-
```yaml
|
65
|
-
---
|
66
|
-
:global:
|
67
|
-
:host1_username: root
|
68
|
-
:cases:
|
69
|
-
- :tt_members: student-name-01
|
70
|
-
:host1_ip: 1.1.1.1
|
71
|
-
:host1_password: root-password-student-01
|
72
|
-
- :tt_members: student-name-02
|
73
|
-
:host1_ip: 2.2.2.2
|
74
|
-
:host1_password: root-password-student-02
|
75
|
-
```
|
76
|
-
|
77
|
-
> The above file configures 2 differents cases with their own params. The script use this information when execute every case.
|
78
|
-
|
79
|
-
## STEP 4: run the challenge
|
80
|
-
|
81
|
-
Now we only have to run the challenge:
|
82
|
-
|
83
|
-
```bash
|
84
|
-
> teuton run foo
|
85
|
-
```
|
86
|
-
|
87
|
-
Output files are saved into `var/foo` directory.
|
data/docs/learn/06-debug.md
DELETED
@@ -1,110 +0,0 @@
|
|
1
|
-
|
2
|
-
[<< back](README.md)
|
3
|
-
|
4
|
-
# Example: 06-debug
|
5
|
-
|
6
|
-
Learn how to:
|
7
|
-
* Check test syntax.
|
8
|
-
* Debug your tests.
|
9
|
-
|
10
|
-
1. [Tree directory](#tree-directory)
|
11
|
-
2. [Execution section](#execution-section)
|
12
|
-
3. [Check test](#check-test)
|
13
|
-
4. [Debug](#debug)
|
14
|
-
|
15
|
-
## Tree directory
|
16
|
-
|
17
|
-
```
|
18
|
-
> tree learn/learn-06-debug
|
19
|
-
|
20
|
-
example/learn-06-debug
|
21
|
-
├── config.yaml
|
22
|
-
├── external.rb
|
23
|
-
├── internal.rb
|
24
|
-
├── README.md
|
25
|
-
└── start.rb
|
26
|
-
```
|
27
|
-
|
28
|
-
## Execution section
|
29
|
-
|
30
|
-
The `start.rb` is main execution rb file, and uses `external` and `internal` rb files.
|
31
|
-
|
32
|
-
Let's see current `start.rb` file:
|
33
|
-
|
34
|
-
```ruby
|
35
|
-
use 'external'
|
36
|
-
use 'internal'
|
37
|
-
|
38
|
-
play do
|
39
|
-
show
|
40
|
-
export :format => :colored_text
|
41
|
-
end
|
42
|
-
```
|
43
|
-
|
44
|
-
## Check test
|
45
|
-
|
46
|
-
Tests grows and becames huge, with a lot of targets (That isn't a problem). Then, we organize them spliting into several files and invoke `use` keywork from our main rb file to load other files (That's good idea) .
|
47
|
-
|
48
|
-
When this happend, sometimes we need to verify or check rb file consistency and syntax, and we will do it with `teuton check PATH/TO/PROJECT/FOLDER`.
|
49
|
-
|
50
|
-
Let's see example `teuton check examples/learn-01-target`:
|
51
|
-
|
52
|
-
```
|
53
|
-
+----------------------------+
|
54
|
-
| GROUP: Learn about targets |
|
55
|
-
+----------------------------+
|
56
|
-
(001) target Create user david
|
57
|
-
weight 1.0
|
58
|
-
run 'id david' on localhost
|
59
|
-
expect david (String)
|
60
|
-
|
61
|
-
+--------------+-------+
|
62
|
-
| DSL Stats | Count |
|
63
|
-
+--------------+-------+
|
64
|
-
| Groups | 1 |
|
65
|
-
| Targets | 1 |
|
66
|
-
| Goto | 1 |
|
67
|
-
| * localhost | 1 |
|
68
|
-
| Uniques | 0 |
|
69
|
-
| Logs | 0 |
|
70
|
-
| | |
|
71
|
-
| Gets | 0 |
|
72
|
-
| Sets | 0 |
|
73
|
-
+--------------+-------+
|
74
|
-
+----------------------+
|
75
|
-
| Revising CONFIG file |
|
76
|
-
+----------------------+
|
77
|
-
[WARN] File /home/david/proy/repos/teuton.d/teuton/examples/01-target/config.yaml not found!
|
78
|
-
[INFO] Recomended content:
|
79
|
-
---
|
80
|
-
:global:
|
81
|
-
:cases:
|
82
|
-
- :tt_members: VALUE
|
83
|
-
|
84
|
-
```
|
85
|
-
|
86
|
-
In this case, Teuton detects that there isn't exist config file, and propose us content for `config.yaml`.
|
87
|
-
|
88
|
-
## Debug
|
89
|
-
|
90
|
-
Every time we invoke `run` or `goto` keywork, an OS command is executed. The output is showed on screen and saved into **result** internal object.
|
91
|
-
|
92
|
-
We could debug it invoking `result.debug` into our tests. Let's see an example from `external.rb` file:
|
93
|
-
|
94
|
-
```ruby
|
95
|
-
group "Windows: external configuration" do
|
96
|
-
|
97
|
-
target "Localhost: Verify connectivity with #{gett(:windows1_ip)}"
|
98
|
-
run "ping #{get(:windows1_ip)} -c 1"
|
99
|
-
result.debug
|
100
|
-
expect_one "0% packet loss"
|
101
|
-
result.debug
|
102
|
-
|
103
|
-
target "Localhost: netbios-ssn service working on #{gett(:windows1_ip)}"
|
104
|
-
run "nmap -Pn #{get(:windows1_ip)}"
|
105
|
-
expect "139/tcp", "open"
|
106
|
-
|
107
|
-
end
|
108
|
-
```
|
109
|
-
|
110
|
-
`result.debug` it's usefull when you are verifying command output captured by Teuton.
|
data/docs/learn/11-moodle_id.md
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
[<< back](README.md)
|
2
|
-
|
3
|
-
# Example: 11-moodle_id
|
4
|
-
|
5
|
-
If you are a teacher and are using the Moodle platform, probably you will want to upload the results of the evaluation carried out by Teuton in Moodle.
|
6
|
-
|
7
|
-
Teuton generates a file called "moodle.csv" with the grades of each student. Only have to import the file into Moodle.
|
8
|
-
|
9
|
-
In the configuration file "config.yaml" add a field called "moodle_id" to each case. Fill it with the student's identification (For example, the email registered on the Moodle).
|
10
|
-
|
11
|
-
Example:
|
12
|
-
```
|
13
|
-
global:
|
14
|
-
cases:
|
15
|
-
- tt_members: Darth Vader
|
16
|
-
tt_moodle_id: vader@starwars.com
|
17
|
-
- tt_members: Obiwan Kenobi
|
18
|
-
tt_moodle_id: obiwan@starwars.com
|
19
|
-
```
|