teuton 2.1.8 → 2.1.9

Sign up to get free protection for your applications and to get access to all the features.
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?