teuton 2.4.0 → 2.4.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
```
|