teuton 2.1.8 → 2.1.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.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -8
  3. data/bin/check_teuton +43 -0
  4. data/docs/changelog/contributions.md +32 -0
  5. data/docs/changelog/v2.1.md +22 -0
  6. data/docs/changelog/v2.2.md +29 -0
  7. data/docs/commands/README.md +105 -7
  8. data/docs/commands/example_check.md +54 -0
  9. data/docs/commands/example_run.md +112 -0
  10. data/docs/dsl/README.md +11 -9
  11. data/docs/dsl/definition/expect.md +25 -21
  12. data/docs/dsl/definition/group.md +5 -1
  13. data/docs/dsl/definition/result.md +45 -34
  14. data/docs/dsl/definition/run_local.md +34 -0
  15. data/docs/dsl/definition/run_remote.md +119 -0
  16. data/docs/dsl/definition/target.md +6 -0
  17. data/docs/dsl/execution/export.md +27 -19
  18. data/docs/dsl/execution/play.md +4 -0
  19. data/docs/dsl/execution/send.md +21 -2
  20. data/docs/dsl/execution/show.md +13 -8
  21. data/docs/dsl/setting/get.md +24 -8
  22. data/docs/dsl/setting/set.md +8 -3
  23. data/docs/install/README.md +19 -26
  24. data/docs/install/modes_of_use.md +27 -26
  25. data/docs/install/scripts.md +53 -36
  26. data/docs/install/vagrant_docker.md +56 -0
  27. data/docs/learn/README.md +13 -6
  28. data/docs/learn/example-01-target.md +78 -61
  29. data/docs/learn/example-02-config.md +152 -0
  30. data/docs/learn/example-03-remote-hosts.md +31 -25
  31. data/docs/learn/example-04-use.md +23 -17
  32. data/docs/learn/example-05-debug.md +24 -17
  33. data/docs/learn/example-06-log.md +70 -0
  34. data/lib/teuton/application.rb +7 -4
  35. data/lib/teuton/case_manager/case/case.rb +4 -1
  36. data/lib/teuton/case_manager/case/dsl/expect.rb +3 -1
  37. data/lib/teuton/case_manager/case/dsl/goto.rb +12 -7
  38. data/lib/teuton/case_manager/case/dsl/macro.rb +38 -0
  39. data/lib/teuton/case_manager/case/dsl/main.rb +1 -2
  40. data/lib/teuton/case_manager/case/dsl/target.rb +1 -1
  41. data/lib/teuton/case_manager/case/runner.rb +7 -7
  42. data/lib/teuton/case_manager/case_manager.rb +1 -20
  43. data/lib/teuton/case_manager/check_cases.rb +12 -2
  44. data/lib/teuton/case_manager/dsl.rb +4 -6
  45. data/lib/teuton/case_manager/export_manager.rb +29 -3
  46. data/lib/teuton/case_manager/report.rb +29 -8
  47. data/lib/teuton/case_manager/show.rb +8 -4
  48. data/lib/teuton/cli.rb +1 -0
  49. data/lib/teuton/cli/play.rb +1 -0
  50. data/lib/teuton/cli/version.rb +1 -4
  51. data/lib/teuton/files/config.yaml +0 -1
  52. data/lib/teuton/files/start.rb +1 -1
  53. data/lib/teuton/files/template/case.html +135 -0
  54. data/lib/teuton/files/template/resume.html +115 -0
  55. data/lib/teuton/project/laboratory/builtin.rb +2 -1
  56. data/lib/teuton/project/laboratory/dsl.rb +13 -15
  57. data/lib/teuton/project/laboratory/laboratory.rb +5 -1
  58. data/lib/teuton/project/laboratory/show.rb +21 -13
  59. data/lib/teuton/project/name_file_finder.rb +6 -1
  60. data/lib/teuton/project/project.rb +7 -3
  61. data/lib/teuton/project/readme/dsl.rb +3 -1
  62. data/lib/teuton/project/readme/readme.rb +37 -26
  63. data/lib/teuton/project/skeleton.rb +20 -4
  64. data/lib/teuton/report/close.rb +15 -11
  65. data/lib/teuton/report/formatter/formatter_factory.rb +10 -6
  66. data/lib/teuton/report/formatter/html_formatter.rb +16 -79
  67. data/lib/teuton/report/formatter/resume_html_formatter.rb +39 -0
  68. data/lib/teuton/report/formatter/resume_yaml_formatter.rb +7 -1
  69. data/lib/teuton/report/report.rb +5 -4
  70. data/lib/teuton/report/show.rb +55 -26
  71. metadata +26 -39
  72. data/docs/changelog/todo.md +0 -46
  73. data/docs/commands/create_skeleton.md +0 -31
  74. data/docs/commands/help.md +0 -13
  75. data/docs/commands/revise_test.md +0 -46
  76. data/docs/commands/run_test_unit.md +0 -78
  77. data/docs/commands/show_version.md +0 -9
  78. data/docs/developers/01-telnet.md +0 -121
  79. data/docs/developers/02-ssh.md +0 -93
  80. data/docs/developers/03-encoding.md +0 -153
  81. data/docs/developers/comparative.md +0 -17
  82. data/docs/dsl/_Sidebar.md +0 -30
  83. data/docs/dsl/definition/goto.md +0 -112
  84. data/docs/dsl/definition/run.md +0 -23
  85. data/docs/install/tested_os.md +0 -25
  86. data/docs/install/vagrant.md +0 -9
  87. data/docs/learn/example-02-configfile.md +0 -174
  88. data/docs/learn/quick-demo.md +0 -170
  89. data/lib/teuton/case_manager/case/dsl/check.rb +0 -24
  90. data/lib/teuton/case_manager/case/dsl/missing.rb +0 -12
  91. data/lib/teuton/files/gitignore +0 -2
@@ -1,46 +0,0 @@
1
-
2
- # TO-DO list
3
-
4
- List of things to do, classified into 3 sections:
5
- * (A) I know read and write.
6
- * (B) I work as IT teacher
7
- * (C) I want to program ruby language
8
-
9
- > I write this list without any criteria.
10
- > Only an unordered list of interesting/usefull things to be done.
11
-
12
- ## Section A
13
-
14
- Documentation
15
-
16
- * Revise Spanish docs (ES - Mejorar la documentación en español)
17
- * Revise English documents. Update english version with changes done into spanish version.
18
- * Make videos showing how to use this tool
19
- * Video about download and install this tool
20
- * Test installation scripts
21
- * Vídeo with Windows installation.
22
- * Video using examples 01 to 05...
23
- * Write a special documentation for novice
24
-
25
- ## Section B
26
-
27
- * Create your own (simple or complex) educational test.
28
- * Upload your own educational test to this repository.
29
-
30
- ## Section C
31
-
32
- * `goto :host1, :puppet => "Puppet instructions"`
33
- * `goto :host1, :chef => "Chef instructions"`
34
- * `result.test("...")`
35
- * `send :email_to => :members_emails`
36
-
37
- Gamification
38
- * When students demand help they could recibe some advises.
39
- * Define a loop of executions of our activity. For example:
40
- every 5 minutes, run the activity, and repeat this 10 times.
41
- `start :times=>10, :duration=>5 do`
42
- * More ideas: bonus, lives, etc.
43
-
44
- Create 2 evaluation modes:
45
- 1. Evaluate targets (current mode): `start :score=>:targets do ...`
46
- 1. Evaluate task: `start :score=>:tasks do ...`
@@ -1,31 +0,0 @@
1
-
2
- # Create skeleton
3
-
4
- Create skeleton for a new "foo" project: `teuton create foo`
5
-
6
- ## Execution
7
-
8
- ```bash
9
- $ teuton create foo
10
-
11
- [INFO] Create project <foo>
12
- * Create dir => foo
13
- * Create dir => foo/assets
14
- * Create file => foo/start.rb
15
- * Create file => foo/config.yaml
16
- * Create file => foo/.gitignore
17
- * Create file => foo/README.md
18
- ```
19
-
20
- ## Skeleton
21
-
22
- This command will create:
23
-
24
- | File/Directory | Description |
25
- | --------------- | -------------- |
26
- | foo | Base directory |
27
- | foo/assets | Base directory for other resources (images and text files) |
28
- | foo/start.rb | Main Script |
29
- | foo/config.yaml | YAML configuration file |
30
- | foo/.gitignore | Prevent uploading YAML files to git repository |
31
- | foo/README.md | Statement of our practice |
@@ -1,13 +0,0 @@
1
- Running `teuton` without params will show you usage information:
2
-
3
- ```bash
4
- $ teuton
5
- Commands:
6
- teuton [play] [--export=FORMAT] DIRECTORY # Run challenge from directory
7
- teuton create DIRECTORY # Create skeleton for a new project
8
- teuton download # Download Teuton challenges from git repo
9
- teuton help [COMMAND] # Describe available commands or one specific command
10
- teuton test DIRECTORY # Check challenge contents
11
- teuton update # Update TEUTON from git repo
12
- teuton version # Show the program version
13
- ```
@@ -1,46 +0,0 @@
1
-
2
- # Revise Test Unit
3
-
4
- ## Example 01
5
-
6
- Revising Test Unit called `learn\learn-01-target`:
7
-
8
- ```bash
9
- $ teuton test learn/learn-01-target
10
- [INFO] ScriptPath => /home/david/proy/repos/teuton.d/challenges/learn/learn-01-target/start.rb
11
- [INFO] ConfigPath => /home/david/proy/repos/teuton.d/challenges/learn/learn-01-target/config.yaml
12
- [INFO] TestName => learn-01-target
13
-
14
- +------------------------+
15
- | GROUP: learn-01-target |
16
- +------------------------+
17
- (001) target Create user <david>
18
- weight 1.0
19
- goto localhost and {:exec=>"id david"}
20
- expect david (String)
21
-
22
- +--------------+-------+
23
- | DSL Stats | Count |
24
- +--------------+-------+
25
- | Groups | 1 |
26
- | Targets | 1 |
27
- | Goto | 1 |
28
- | * localhost | 1 |
29
- | Uniques | 0 |
30
- | Logs | 0 |
31
- | | |
32
- | Gets | 0 |
33
- | Sets | 0 |
34
- +--------------+-------+
35
- +----------------------+
36
- | Revising CONFIG file |
37
- +----------------------+
38
- [WARN] File /home/david/proy/repos/teuton.d/challenges/learn/learn-01-target/config.yaml not found!
39
- [INFO] Recomended content:
40
- ---
41
- :global:
42
- :cases:
43
- - :tt_members: VALUE
44
- ```
45
-
46
- Notice that this Test Unit hasn't config file, and Teuton suggests us content for our config.file. But it isn't necessary for this example.
@@ -1,78 +0,0 @@
1
-
2
- # Run Test Unit
3
-
4
- We use `teuton play` command to run a Test Unit (or challenge).
5
-
6
- This command executes challenge (Test Unit) from specified directory. By default, show progress on the screen.
7
-
8
- ## Help
9
-
10
- Run `teuton help play` to see help.
11
-
12
- Usage:
13
- * teuton [play] [OPTIONS] DIRECTORY
14
-
15
- Options:
16
- * [--export=EXPORT], select output format.
17
- * [--cname=CNAME], select other config file name.
18
- * [--cpath=CPATH], select absolute path to config file.
19
- * [--case=CASE], select cases to be tested.
20
-
21
- ## Usage
22
-
23
- | ID | Command | Descriptiont |
24
- | -- | -------------------- | ------------ |
25
- | 01 | teuton foo | Run foo/start.rb, with config file foo/config.yaml |
26
- | 02 | teuton play foo | Run foo/start.rb, with config file foo/config.yaml |
27
- | 03 | ruby teuton foo | Same as 01 on Windows OS |
28
- | 04 | ruby teuton play foo | Same as 02 on WIndows OS |
29
- | 05 | teuton . | Run ./start.rb with ./config.yaml file |
30
- | 06 | teuton play --export=json foo | Run foo/start.rb and force json format during exporting. Others output formats availables are: txt, colored_text, json, yaml |
31
- | 07 | teuton play --cname=class foo | Run foo/start.rb with foo/class.yaml config file |
32
- | 08 | teuton foo/demo42.rb | Run foo/demo42.rb with foo/demo42.yaml config file |
33
- | 08 | teuton play --cpath=current/class.yaml foo | Run foo/start.rb with current/class.yaml config file |
34
- | 10 | teuton play --case=6,16 foo | Run foo/start.rb with foo/config.yaml config file but only for case id 6 and 16 |
35
-
36
- ---
37
-
38
- ## Example
39
-
40
- Running example 01:
41
-
42
- ```bash
43
- $ teuton learn/learn-01-target
44
- [INFO] ScriptPath => /home/david/proy/repos/teuton.d/challenges/learn/learn-01-target/start.rb
45
- [INFO] ConfigPath => /home/david/proy/repos/teuton.d/challenges/learn/learn-01-target/config.yaml
46
- [INFO] TestName => learn-01-target
47
-
48
- ==================================
49
- Executing [teuton] (version 2.1.0)
50
- [INFO] Running in parallel (2019-10-04 23:44:19 +0100)
51
- Starting case <anonymous>
52
- * Processing <learn-01-target> .
53
-
54
- [INFO] Duration = 0.006568696 (2019-10-04 23:44:19 +0100)
55
- ==================================
56
-
57
- INITIAL CONFIGURATIONS
58
- +---------------+-------------------------------------------------------+
59
- | tt_title | Executing [teuton] (version 2.1.0) |
60
- | tt_scriptname | ...teuton.d/challenges/learn/learn-01-target/start.rb |
61
- | tt_configfile | ...ton.d/challenges/learn/learn-01-target/config.yaml |
62
- | tt_testname | learn-01-target |
63
- | tt_sequence | false |
64
- +---------------+-------------------------------------------------------+
65
-
66
- CASE RESULTS
67
- +---------+-------+-------+-----------+
68
- | CASE ID | GRADE | STATE | MEMBERS |
69
- | case_01 | 100.0 | | anonymous |
70
- +---------+-------+-------+-----------+
71
-
72
- FINAL VALUES
73
- +-------------+---------------------------+
74
- | start_time | 2019-10-04 23:44:19 +0100 |
75
- | finish_time | 2019-10-04 23:44:19 +0100 |
76
- | duration | 0.006568696 |
77
- +-------------+---------------------------+
78
- ```
@@ -1,9 +0,0 @@
1
- ```bash
2
- $ teuton version
3
- teuton (version 2.0.0)
4
- ```
5
-
6
- **Alias:**
7
- * `teuton v`
8
- * `teuton -v`
9
- * `teuton --version`
@@ -1,121 +0,0 @@
1
-
2
- # 01 - Conexión Telnet
3
-
4
- > ¡Vale, lo sé! No debería estar usando Telnet ni Windows 2012.
5
- > Pero ahora mismo es un reto personal y quiero descubrir qué está pasando.
6
-
7
- ---
8
-
9
- # Herramientas que uso
10
-
11
- He creado el siguiente [programa ruby](../../tests/manual/telnet.rb) para abrir
12
- una conexión telnet a una máquina remota, ejecutar un comando y mostrar
13
- el resutado en pantalla.
14
-
15
- ---
16
-
17
- # Gema net/Telnet
18
-
19
- Estoy usando la gema `net/telnet`, la cual en su [documentación](https://www.rubydoc.info/gems/net-telnet/0.2.0)
20
- pone lo siguiente:
21
-
22
- ```
23
- # Usage
24
- # Log in and send a command, echoing all output to stdout
25
-
26
- localhost = Net::Telnet::new("Host" => "localhost",
27
- "Timeout" => 10,
28
- "Prompt" => /[$%#>] \z/n)
29
- localhost.login("username", "password") { |c| print c }
30
- localhost.cmd("command") { |c| print c }
31
- localhost.close
32
- ```
33
-
34
- > Repositorio GitHub de la gema: https://github.com/ruby/net-telnet/
35
-
36
- ---
37
-
38
- # Comprobaciones
39
-
40
- ## MV GNU/Linux Debian 9 con servidor telnet
41
- * Manualmente -> OK
42
- * Usando el programa -> OK
43
-
44
- ```
45
- Testing : {:ip=>"192.168.1.106", :username=>"root", :password=>"profesor", :cmd=>"whoami"}
46
- Output : ["whoami", "root", "root@vargas42d:~# "]
47
-
48
- Testing : {:ip=>"192.168.1.106", :username=>"profesor", :password=>"profesor", :cmd=>"whoami"}
49
- Output : ["whoami", "profesor", "profesor@vargas42d:~$ "]
50
- ```
51
-
52
- ## MV Windows 2008 server con servidor Telnet
53
- * Manualmente -> OK
54
- * Usando el programa -> OK
55
-
56
- ```
57
- Testing : {:ip=>"192.168.1.115", :username=>"Administrador", :password=>"profesorFP2018", :cmd=>"whoami"}
58
- Output : ["whoami", "vargas42s08\\administrador", "", "C:\\Users\\Administrador>"]
59
-
60
- Testing : {:ip=>"192.168.1.115", :username=>"profesor", :password=>"sayonaraBABY2018", :cmd=>"whoami"}
61
- Output : ["whoami", "vargas42s08\\profesor", "", "C:\\Users\\profesor>"]
62
- ```
63
-
64
- ## MV Windows 2012 server con servidor Telnet
65
- * Manualmente -> OK
66
-
67
- ```
68
- david@camaleon:~/proy/tools/sysadmin-game> telnet 192.168.1.114
69
- Trying 192.168.1.114...
70
- Connected to 192.168.1.114.
71
- Escape character is '^]'.
72
- Welcome to Microsoft Telnet Service
73
-
74
- login: administrador
75
- password:
76
-
77
- *===============================================================
78
- Microsoft Telnet Server.
79
- *===============================================================
80
- C:\Users\Administrador>whoami
81
- vargas42s12\administrador
82
-
83
- C:\Users\Administrador>
84
- C:\Users\Administrador>exitConnection closed by foreign host.
85
- david@camaleon:~/proy/tools/sysadmin-game> telnet 192.168.1.114
86
- Trying 192.168.1.114...
87
- Connected to 192.168.1.114.
88
- Escape character is '^]'.
89
- Welcome to Microsoft Telnet Service
90
-
91
- login: profesor
92
- password:
93
-
94
- *===============================================================
95
- Microsoft Telnet Server.
96
- *===============================================================
97
- C:\>whoami
98
- vargas42s12\profesor
99
-
100
- C:\>exiConnection closed by foreign host.
101
- ```
102
- * Usando el programa -> OK
103
-
104
- ```
105
- david@camaleon:~/proy/tools/sysadmin-game> ./tests/manual/telnet.rb
106
-
107
- Testing : {:ip=>"192.168.1.114", :username=>"Administrador", :password=>"profesorFP2018", :cmd=>"whoami"}
108
- Output : ["whoami", "vargas42s12\\administrador", "", "C:\\Users\\Administrador>"]
109
-
110
- Testing : {:ip=>"192.168.1.114", :username=>"profesor", :password=>"sayonaraBABY2018", :cmd=>"whoami"}
111
- Output : ["whoami", "vargas42s12\\profesor", "", "C:\\Users\\profesor>"]
112
-
113
- ```
114
- ---
115
-
116
- # Problema
117
-
118
- La aplicación falla cuando lo intento con Windows 2012 server.
119
-
120
- Creo que la estoy usando correctamente, pero hay algo que funciona diferente
121
- en Windows 2012 y no consigo identificar el qué.
@@ -1,93 +0,0 @@
1
-
2
- # 02 - Conexión SSH a PowerShell
3
-
4
- ---
5
-
6
- # Herramientas que uso
7
-
8
- He creado el programa de ruby [ssh.rb](../../tests/manual/ssh.rb) para abrir
9
- una conexión SSH a una máquina remota, ejecutar un comando y mostrar
10
- el resutado en pantalla.
11
-
12
- ---
13
-
14
- # Gema net/ssh
15
-
16
- Estoy usando la gema `net/ssh`, la cual en su [documentación](hhttp://net-ssh.github.io/net-ssh/)
17
- pone lo siguiente:
18
-
19
- ```
20
- require 'net/ssh'
21
-
22
- Net::SSH.start('host', 'user', password: "password") do |ssh|
23
- # capture all stderr and stdout output from a remote process
24
- output = ssh.exec!("hostname")
25
- puts output
26
- end
27
- ```
28
-
29
- > Repositorio GitHub de la gema: https://github.com/net-ssh/net-ssh
30
-
31
- ---
32
-
33
- # Comprobaciones
34
-
35
- ## Debian 9 con servidor SSH
36
-
37
- Todos los comandos que se ejecutan vía SSH por esta herramienta funcionan correctamente.
38
-
39
- ## MV Windows 2012 server con servidor SSH
40
-
41
- * Manualmente -> OK (usando ssh con sshpass)
42
-
43
- ```
44
- david@camaleon:~/proy/tools/sysadmin-game> sshpass -p profesorFP2018 ssh administrador@192.168.1.114 'get-windowsfeature -name rds-rd-server'
45
-
46
- Display Name Name
47
- ------------ ----
48
- [ ] Host de sesi�n de Escritorio remoto RDS-RD-Server
49
-
50
- ```
51
-
52
- * Manualmente -> OK (usando ssh)
53
-
54
- ```
55
- david@camaleon:~/proy/tools/sysadmin-game> ssh administrador@192.168.1.114 'get-windowsfeature -name rds-rd-server'
56
- administrador@192.168.1.114's password:
57
-
58
- Display Name Name
59
- ------------ ----
60
- [ ] Host de sesi�n de Escritorio remoto RDS-RD-Server
61
- ```
62
-
63
- * Usando el programa -> OK (Comando whoami)
64
-
65
- ```
66
- david@camaleon:~/proy/tools/sysadmin-game> ./tests/manual/ssh.rb
67
-
68
- Testing : {:ip=>"192.168.1.114", :username=>"Administrador", :password=>"profesorFP2018", :cmd=>"whoami"}
69
- Output : ["vargas42s12\\administrador\r"]
70
-
71
- ```
72
-
73
- * Usando el programa -> ERROR!!!! (Comando get-windowsfeature) La salida está vacía.
74
-
75
- ```
76
- david@camaleon:~/proy/tools/sysadmin-game> ./tests/manual/ssh.rb
77
-
78
- Testing : {:ip=>"192.168.1.114", :username=>"Administrador", :password=>"profesorFP2018", :cmd=>"get-windowsfeature -name rds-rd-server"}
79
- [ArgumentError] SSH on <Administrador@192.168.1.114> exec: get-windowsfeature -name rds-rd-server
80
- Output : []
81
-
82
- ```
83
-
84
- ---
85
-
86
- # Problema
87
-
88
- La librería `net/ssh` parece que no recoge el resultado cuando se ejecuta el comando de PowerShell `get-windowsfeature -name rds-server` en Windows 2012 server.
89
-
90
- Pero si lo hago de forma manual SI funciona.
91
-
92
- ¿Puede ser que algunos comandos de PowerShell no se comportan como lo hacen todos los comandos y generan
93
- una salida que no puede capturar bien la librería?