roku_builder 3.12.8 → 3.13.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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/CHANGELOG +9 -0
  4. data/Gemfile.lock +17 -11
  5. data/bin/roku +4 -8
  6. data/lib/roku_builder.rb +16 -24
  7. data/lib/roku_builder/config.rb +213 -0
  8. data/lib/roku_builder/config_parser.rb +304 -267
  9. data/lib/roku_builder/config_validator.rb +149 -126
  10. data/lib/roku_builder/controller.rb +34 -184
  11. data/lib/roku_builder/controller_commands.rb +85 -79
  12. data/lib/roku_builder/error_handler.rb +0 -11
  13. data/lib/roku_builder/errors.rb +12 -0
  14. data/lib/roku_builder/inspector.rb +6 -4
  15. data/lib/roku_builder/keyer.rb +1 -1
  16. data/lib/roku_builder/loader.rb +1 -1
  17. data/lib/roku_builder/logger.rb +32 -0
  18. data/lib/roku_builder/manifest_manager.rb +2 -2
  19. data/lib/roku_builder/monitor.rb +1 -1
  20. data/lib/roku_builder/options.rb +113 -0
  21. data/lib/roku_builder/stager.rb +2 -2
  22. data/lib/roku_builder/tester.rb +57 -11
  23. data/lib/roku_builder/util.rb +3 -4
  24. data/lib/roku_builder/version.rb +1 -1
  25. data/roku_builder.gemspec +2 -1
  26. data/test/roku_builder/test_config.rb +168 -0
  27. data/test/roku_builder/test_config_parser.rb +347 -394
  28. data/test/roku_builder/test_config_validator.rb +193 -190
  29. data/test/roku_builder/test_controller.rb +59 -178
  30. data/test/roku_builder/test_controller_commands.rb +407 -394
  31. data/test/roku_builder/test_error_handler.rb +67 -69
  32. data/test/roku_builder/test_files/config_test/bad.json +2 -0
  33. data/test/roku_builder/test_files/config_test/child.json +11 -0
  34. data/test/roku_builder/test_files/config_test/config.json +29 -0
  35. data/test/roku_builder/test_files/config_test/non_json.json +1 -0
  36. data/test/roku_builder/test_files/config_test/parent.json +21 -0
  37. data/test/roku_builder/test_files/config_test/parent_projects.json +35 -0
  38. data/test/roku_builder/test_files/manifest_manager_test/manifest_template_2 +1 -1
  39. data/test/roku_builder/test_helper.rb +55 -45
  40. data/test/roku_builder/test_inspector.rb +278 -213
  41. data/test/roku_builder/test_keyer.rb +144 -147
  42. data/test/roku_builder/test_linker.rb +91 -95
  43. data/test/roku_builder/test_loader.rb +279 -289
  44. data/test/roku_builder/test_logger.rb +47 -0
  45. data/test/roku_builder/test_manifest_manager.rb +92 -94
  46. data/test/roku_builder/test_monitor.rb +101 -103
  47. data/test/roku_builder/test_navigator.rb +240 -245
  48. data/test/roku_builder/test_options.rb +156 -0
  49. data/test/roku_builder/test_packager.rb +108 -108
  50. data/test/roku_builder/test_profiler.rb +20 -19
  51. data/test/roku_builder/test_scripter.rb +83 -81
  52. data/test/roku_builder/test_stager.rb +299 -311
  53. data/test/roku_builder/test_tester.rb +112 -115
  54. data/test/roku_builder/test_util.rb +18 -17
  55. metadata +39 -6
  56. data/lib/roku_builder/config_manager.rb +0 -161
  57. data/test/roku_builder/test_config_manager.rb +0 -372
@@ -2,178 +2,175 @@
2
2
 
3
3
  require_relative "test_helper.rb"
4
4
 
5
- class KeyerTest < Minitest::Test
6
- def test_keyer_dev_id
7
- connection = Minitest::Mock.new
8
- faraday = Minitest::Mock.new
9
- response = Minitest::Mock.new
10
-
11
- device_config = {
12
- ip: "111.222.333",
13
- user: "user",
14
- password: "password",
15
- logger: Logger.new("/dev/null")
16
- }
17
- path = "/plugin_package"
18
- body = "v class=\"roku-font-5\"><label>Your Dev ID: &nbsp;</label> dev_id<hr></div>"
19
-
20
- connection.expect(:get, response, [path])
21
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
22
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
23
- response.expect(:body, body)
24
- response.expect(:body, body)
25
-
26
-
27
- dev_id = nil
28
- keyer = RokuBuilder::Keyer.new(**device_config)
29
- Faraday.stub(:new, connection, faraday) do
30
- dev_id = keyer.dev_id
31
- end
5
+ module RokuBuilder
6
+ class KeyerTest < Minitest::Test
7
+ def test_keyer_dev_id
8
+ connection = Minitest::Mock.new
9
+ faraday = Minitest::Mock.new
10
+ response = Minitest::Mock.new
11
+
12
+ device_config = {
13
+ ip: "111.222.333",
14
+ user: "user",
15
+ password: "password"
16
+ }
17
+ path = "/plugin_package"
18
+ body = "v class=\"roku-font-5\"><label>Your Dev ID: &nbsp;</label> dev_id<hr></div>"
19
+
20
+ connection.expect(:get, response, [path])
21
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
22
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
23
+ response.expect(:body, body)
24
+ response.expect(:body, body)
25
+
26
+
27
+ dev_id = nil
28
+ keyer = Keyer.new(**device_config)
29
+ Faraday.stub(:new, connection, faraday) do
30
+ dev_id = keyer.dev_id
31
+ end
32
32
 
33
- assert_equal "dev_id", dev_id
33
+ assert_equal "dev_id", dev_id
34
34
 
35
- connection.verify
36
- faraday.verify
37
- response.verify
38
- end
39
- def test_keyer_dev_id_old_interface
40
- connection = Minitest::Mock.new
41
- faraday = Minitest::Mock.new
42
- response = Minitest::Mock.new
43
-
44
- device_config = {
45
- ip: "111.222.333",
46
- user: "user",
47
- password: "password",
48
- logger: Logger.new("/dev/null")
49
- }
50
- path = "/plugin_package"
51
- body = "<p> Your Dev ID: <font face=\"Courier\">dev_id</font> </p>"
52
-
53
- connection.expect(:get, response, [path])
54
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
55
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
56
- response.expect(:body, body)
57
-
58
-
59
- dev_id = nil
60
- keyer = RokuBuilder::Keyer.new(**device_config)
61
- Faraday.stub(:new, connection, faraday) do
62
- dev_id = keyer.dev_id
35
+ connection.verify
36
+ faraday.verify
37
+ response.verify
63
38
  end
39
+ def test_keyer_dev_id_old_interface
40
+ connection = Minitest::Mock.new
41
+ faraday = Minitest::Mock.new
42
+ response = Minitest::Mock.new
43
+
44
+ device_config = {
45
+ ip: "111.222.333",
46
+ user: "user",
47
+ password: "password"
48
+ }
49
+ path = "/plugin_package"
50
+ body = "<p> Your Dev ID: <font face=\"Courier\">dev_id</font> </p>"
51
+
52
+ connection.expect(:get, response, [path])
53
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
54
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
55
+ response.expect(:body, body)
56
+
57
+
58
+ dev_id = nil
59
+ keyer = Keyer.new(**device_config)
60
+ Faraday.stub(:new, connection, faraday) do
61
+ dev_id = keyer.dev_id
62
+ end
64
63
 
65
- assert_equal "dev_id", dev_id
64
+ assert_equal "dev_id", dev_id
66
65
 
67
- connection.verify
68
- faraday.verify
69
- response.verify
70
- end
71
-
72
- def test_keyer_rekey_changed
73
- connection = Minitest::Mock.new
74
- faraday = Minitest::Mock.new
75
- io = Minitest::Mock.new
76
- response = Minitest::Mock.new
77
-
78
- device_config = {
79
- ip: "111.222.333",
80
- user: "user",
81
- password: "password",
82
- logger: Logger.new("/dev/null")
83
- }
84
- path = "/plugin_inspect"
85
- password = "password"
86
- payload ={
87
- mysubmit: "Rekey",
88
- password: password,
89
- archive: io
90
- }
91
-
92
- connection.expect(:post, response) do |arg1, arg2|
93
- assert_equal path, arg1
94
- assert_equal payload[:mysubmit], arg2[:mysubmit]
95
- assert_equal payload[:password], arg2[:passwd]
96
- assert payload[:archive] === arg2[:archive]
66
+ connection.verify
67
+ faraday.verify
68
+ response.verify
97
69
  end
98
- faraday.expect(:headers, {})
99
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
100
- faraday.expect(:request, nil, [:multipart])
101
- faraday.expect(:request, nil, [:url_encoded])
102
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
103
-
104
- # This test fails with the following seeds due to the random number
105
- # generator spitting out the same number twice
106
- # SEED=21894
107
- # SEED=31813
108
- dev_id = Proc.new {"#{Random.rand(100)}"}
109
- keyer = RokuBuilder::Keyer.new(**device_config)
110
- key_changed = nil
111
- Faraday.stub(:new, connection, faraday) do
112
- Faraday::UploadIO.stub(:new, io) do
113
- keyer.stub(:dev_id, dev_id) do
114
- key_changed = keyer.rekey(keyed_pkg: "pkg/path", password: password)
70
+
71
+ def test_keyer_rekey_changed
72
+ connection = Minitest::Mock.new
73
+ faraday = Minitest::Mock.new
74
+ io = Minitest::Mock.new
75
+ response = Minitest::Mock.new
76
+
77
+ device_config = {
78
+ ip: "111.222.333",
79
+ user: "user",
80
+ password: "password"
81
+ }
82
+ path = "/plugin_inspect"
83
+ password = "password"
84
+ payload ={
85
+ mysubmit: "Rekey",
86
+ password: password,
87
+ archive: io
88
+ }
89
+
90
+ connection.expect(:post, response) do |arg1, arg2|
91
+ assert_equal path, arg1
92
+ assert_equal payload[:mysubmit], arg2[:mysubmit]
93
+ assert_equal payload[:password], arg2[:passwd]
94
+ assert payload[:archive] === arg2[:archive]
95
+ end
96
+ faraday.expect(:headers, {})
97
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
98
+ faraday.expect(:request, nil, [:multipart])
99
+ faraday.expect(:request, nil, [:url_encoded])
100
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
101
+
102
+ # This test fails with the following seeds due to the random number
103
+ # generator spitting out the same number twice
104
+ # SEED=21894
105
+ # SEED=31813
106
+ dev_id = Proc.new {"#{Random.rand(100)}"}
107
+ keyer = Keyer.new(**device_config)
108
+ key_changed = nil
109
+ Faraday.stub(:new, connection, faraday) do
110
+ Faraday::UploadIO.stub(:new, io) do
111
+ keyer.stub(:dev_id, dev_id) do
112
+ key_changed = keyer.rekey(keyed_pkg: "pkg/path", password: password)
113
+ end
115
114
  end
116
115
  end
117
- end
118
116
 
119
- assert key_changed
117
+ assert key_changed
120
118
 
121
- connection.verify
122
- faraday.verify
123
- io.verify
124
- response.verify
125
- end
119
+ connection.verify
120
+ faraday.verify
121
+ io.verify
122
+ response.verify
123
+ end
126
124
 
127
- def test_keyer_generate_new_key
128
- connection = Minitest::Mock.new
125
+ def test_keyer_generate_new_key
126
+ connection = Minitest::Mock.new
129
127
 
130
- connection.expect(:puts, nil, ["genkey"])
131
- connection.expect(:waitfor, nil) do |config, &blk|
128
+ connection.expect(:puts, nil, ["genkey"])
129
+ connection.expect(:waitfor, nil) do |config, &blk|
132
130
  assert_equal(/./, config['Match'])
133
131
  assert_equal(false, config['Timeout'])
134
132
  txt = "Password: password\nDevID: devid\n"
135
133
  blk.call(txt)
136
134
  true
135
+ end
136
+ connection.expect(:close, nil, [])
137
+
138
+ device_config = {
139
+ ip: "111.222.333",
140
+ user: "user",
141
+ password: "password"
142
+ }
143
+ keyer = Keyer.new(**device_config)
144
+ Net::Telnet.stub(:new, connection) do
145
+ keyer.send(:generate_new_key)
146
+ end
137
147
  end
138
- connection.expect(:close, nil, [])
139
-
140
- device_config = {
141
- ip: "111.222.333",
142
- user: "user",
143
- password: "password",
144
- logger: Logger.new("/dev/null")
145
- }
146
- keyer = RokuBuilder::Keyer.new(**device_config)
147
- Net::Telnet.stub(:new, connection) do
148
- keyer.send(:generate_new_key)
149
- end
150
- end
151
148
 
152
- def test_keyer_genkey
153
- loader = Minitest::Mock.new
154
- packager = Minitest::Mock.new
149
+ def test_keyer_genkey
150
+ loader = Minitest::Mock.new
151
+ packager = Minitest::Mock.new
155
152
 
156
- loader.expect(:sideload, nil)
157
- packager.expect(:package, nil, [app_name_version: "key_dev_id", out_file: "/tmp/key_dev_id.pkg", password: "password"])
153
+ loader.expect(:sideload, nil)
154
+ packager.expect(:package, nil, [app_name_version: "key_dev_id", out_file: "/tmp/key_dev_id.pkg", password: "password"])
158
155
 
159
- device_config = {
160
- ip: "111.222.333",
161
- user: "user",
162
- password: "password",
163
- logger: Logger.new("/dev/null")
164
- }
156
+ device_config = {
157
+ ip: "111.222.333",
158
+ user: "user",
159
+ password: "password"
160
+ }
165
161
 
166
- keyer = RokuBuilder::Keyer.new(**device_config)
162
+ keyer = Keyer.new(**device_config)
167
163
 
168
- RokuBuilder::Loader.stub(:new, loader) do
169
- RokuBuilder::Packager.stub(:new, packager) do
170
- keyer.stub(:generate_new_key, ["password", "dev_id"]) do
171
- keyer.genkey
164
+ Loader.stub(:new, loader) do
165
+ Packager.stub(:new, packager) do
166
+ keyer.stub(:generate_new_key, ["password", "dev_id"]) do
167
+ keyer.genkey
168
+ end
172
169
  end
173
170
  end
174
- end
175
171
 
176
- loader.verify
177
- packager.verify
172
+ loader.verify
173
+ packager.verify
174
+ end
178
175
  end
179
176
  end
@@ -2,113 +2,109 @@
2
2
 
3
3
  require_relative "test_helper.rb"
4
4
 
5
- class LinkerTest < Minitest::Test
6
- def test_linker_link
7
- connection = Minitest::Mock.new
8
- faraday = Minitest::Mock.new
9
- response = Minitest::Mock.new
5
+ module RokuBuilder
6
+ class LinkerTest < Minitest::Test
7
+ def test_linker_link
8
+ connection = Minitest::Mock.new
9
+ faraday = Minitest::Mock.new
10
+ response = Minitest::Mock.new
10
11
 
11
- device_config = {
12
- ip: "111.222.333",
13
- user: "user",
14
- password: "password",
15
- logger: Logger.new("/dev/null")
16
- }
17
- path = "/launch/dev?a=A&b=B%3AC&d=a%5Cb"
18
- options = 'a:A, b:B:C, d:a\b'
12
+ device_config = {
13
+ ip: "111.222.333",
14
+ user: "user",
15
+ password: "password"
16
+ }
17
+ path = "/launch/dev?a=A&b=B%3AC&d=a%5Cb"
18
+ options = 'a:A, b:B:C, d:a\b'
19
19
 
20
- connection.expect(:post, response, [path])
21
- faraday.expect(:headers, {})
22
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
23
- faraday.expect(:request, nil, [:multipart])
24
- faraday.expect(:request, nil, [:url_encoded])
25
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
26
- response.expect(:success?, true)
20
+ connection.expect(:post, response, [path])
21
+ faraday.expect(:headers, {})
22
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
23
+ faraday.expect(:request, nil, [:multipart])
24
+ faraday.expect(:request, nil, [:url_encoded])
25
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
26
+ response.expect(:success?, true)
27
27
 
28
- linker = RokuBuilder::Linker.new(**device_config)
29
- success = nil
30
- Faraday.stub(:new, connection, faraday) do
31
- success = linker.launch(options: options)
32
- end
28
+ linker = Linker.new(**device_config)
29
+ success = nil
30
+ Faraday.stub(:new, connection, faraday) do
31
+ success = linker.launch(options: options)
32
+ end
33
33
 
34
- assert success
34
+ assert success
35
35
 
36
- connection.verify
37
- faraday.verify
38
- response.verify
39
- end
40
- def test_linker_link_nothing
41
- logger = Minitest::Mock.new
42
- connection = Minitest::Mock.new
43
- faraday = Minitest::Mock.new
44
- response = Minitest::Mock.new
45
-
46
- device_config = {
47
- ip: "111.222.333",
48
- user: "user",
49
- password: "password",
50
- logger: logger
51
- }
52
- path = "/launch/dev"
53
- options = ''
54
- logger.expect(:warn, nil, ["No options sent to launched app"])
55
- connection.expect(:post, response, [path])
56
- faraday.expect(:headers, {})
57
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
58
- faraday.expect(:request, nil, [:multipart])
59
- faraday.expect(:request, nil, [:url_encoded])
60
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
61
- response.expect(:success?, true)
62
- linker = RokuBuilder::Linker.new(**device_config)
63
- success = nil
64
- Faraday.stub(:new, connection, faraday) do
65
- success = linker.launch(options: options)
36
+ connection.verify
37
+ faraday.verify
38
+ response.verify
66
39
  end
40
+ def test_linker_link_nothing
41
+ connection = Minitest::Mock.new
42
+ faraday = Minitest::Mock.new
43
+ response = Minitest::Mock.new
67
44
 
68
- assert success
69
- logger.verify
70
- connection.verify
71
- faraday.verify
72
- response.verify
73
- end
45
+ device_config = {
46
+ ip: "111.222.333",
47
+ user: "user",
48
+ password: "password"
49
+ }
50
+ path = "/launch/dev"
51
+ options = ''
52
+ connection.expect(:post, response, [path])
53
+ faraday.expect(:headers, {})
54
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
55
+ faraday.expect(:request, nil, [:multipart])
56
+ faraday.expect(:request, nil, [:url_encoded])
57
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
58
+ response.expect(:success?, true)
59
+ linker = Linker.new(**device_config)
60
+ success = nil
61
+ Faraday.stub(:new, connection, faraday) do
62
+ success = linker.launch(options: options)
63
+ end
64
+
65
+ assert success
66
+ connection.verify
67
+ faraday.verify
68
+ response.verify
69
+ end
74
70
 
75
- def test_linker_list
76
- connection = Minitest::Mock.new
77
- faraday = Minitest::Mock.new
78
- response = Minitest::Mock.new
71
+ def test_linker_list
72
+ connection = Minitest::Mock.new
73
+ faraday = Minitest::Mock.new
74
+ response = Minitest::Mock.new
79
75
 
80
- device_config = {
81
- ip: "111.222.333",
82
- user: "user",
83
- password: "password",
84
- logger: Logger.new("/dev/null")
85
- }
86
- path = "/query/apps"
87
- body = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<apps>\n\t
88
- <app id=\"31012\" type=\"menu\" version=\"1.6.3\">Movie Store and TV Store</app>\n\t
89
- <app id=\"31863\" type=\"menu\" version=\"1.2.6\">Roku Home News</app>\n\t
90
- <app id=\"65066\" type=\"appl\" version=\"1.3.0\">Nick</app>\n\t
91
- <app id=\"68161\" type=\"appl\" version=\"1.3.0\">Nick</app>\n\t
92
- </apps>\n"
93
- connection.expect(:get, response, [path])
94
- faraday.expect(:headers, {})
95
- faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
96
- faraday.expect(:request, nil, [:multipart])
97
- faraday.expect(:request, nil, [:url_encoded])
98
- faraday.expect(:adapter, nil, [Faraday.default_adapter])
99
- response.expect(:success?, true)
100
- response.expect(:body, body)
101
- linker = RokuBuilder::Linker.new(**device_config)
76
+ device_config = {
77
+ ip: "111.222.333",
78
+ user: "user",
79
+ password: "password"
80
+ }
81
+ path = "/query/apps"
82
+ body = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<apps>\n\t
83
+ <app id=\"31012\" type=\"menu\" version=\"1.6.3\">Movie Store and TV Store</app>\n\t
84
+ <app id=\"31863\" type=\"menu\" version=\"1.2.6\">Roku Home News</app>\n\t
85
+ <app id=\"65066\" type=\"appl\" version=\"1.3.0\">Nick</app>\n\t
86
+ <app id=\"68161\" type=\"appl\" version=\"1.3.0\">Nick</app>\n\t
87
+ </apps>\n"
88
+ connection.expect(:get, response, [path])
89
+ faraday.expect(:headers, {})
90
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
91
+ faraday.expect(:request, nil, [:multipart])
92
+ faraday.expect(:request, nil, [:url_encoded])
93
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
94
+ response.expect(:success?, true)
95
+ response.expect(:body, body)
96
+ linker = Linker.new(**device_config)
102
97
 
103
- print_count = 0
104
- did_print = Proc.new { |msg| print_count+=1 }
98
+ print_count = 0
99
+ did_print = Proc.new { |msg| print_count+=1 }
105
100
 
106
- Faraday.stub(:new, connection, faraday) do
107
- linker.stub(:printf, did_print) do
108
- linker.list
101
+ Faraday.stub(:new, connection, faraday) do
102
+ linker.stub(:printf, did_print) do
103
+ linker.list
104
+ end
109
105
  end
110
- end
111
106
 
112
- assert_equal 6, print_count
107
+ assert_equal 6, print_count
108
+ end
113
109
  end
114
110
  end