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
@@ -1,372 +0,0 @@
1
- # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
-
3
- require_relative "test_helper.rb"
4
-
5
- class ConfigManagerTest < Minitest::Test
6
-
7
- def test_config_manager_read_config
8
- logger = Logger.new("/dev/null")
9
- config_path = "config/file/path"
10
- io = Minitest::Mock.new
11
- io.expect(:read, good_config.to_json)
12
- config = nil
13
- File.stub(:open, io) do
14
- config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
15
- end
16
- io.verify
17
- assert_equal :roku, config[:devices][:default], :roku
18
- assert_equal :project1, config[:projects][:default], :project1
19
- end
20
-
21
- def test_config_manager_read_config_parent
22
- logger = Logger.new("/dev/null")
23
- config_path = "config/file/path"
24
- io = Minitest::Mock.new
25
- parent_config = good_config
26
- parent_config[:projects].delete(:project1)
27
- parent_config[:projects].delete(:project2)
28
- child_config = good_config
29
- child_config.delete(:devices)
30
- child_config.delete(:keys)
31
- child_config.delete(:input_mapping)
32
- child_config[:parent_config] = "config/file/path"
33
- io.expect(:read, child_config.to_json)
34
- io.expect(:read, parent_config.to_json)
35
- config = nil
36
- File.stub(:open, io) do
37
- config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
38
- end
39
- io.verify
40
- assert_equal "user", config[:devices][:roku][:user]
41
- assert_equal "<app name>", config[:projects][:project1][:app_name]
42
- end
43
-
44
- def test_config_manager_read_config_parent_too_deep
45
- logger = Logger.new("/dev/null")
46
- config_path = "config/file/path"
47
- io = Minitest::Mock.new
48
- parent_config = good_config
49
- parent_config[:parent_config] = "config/file/path"
50
- 10.times {|_i| io.expect(:read, parent_config.to_json)}
51
- config = nil
52
- File.stub(:open, io) do
53
- config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
54
- end
55
- io.verify
56
- assert_nil config
57
- end
58
-
59
- def test_config_manger_load_config
60
- logger = Logger.new("/dev/null")
61
- target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
62
- File.delete(target_config) if File.exist?(target_config)
63
-
64
- code = nil
65
- config = nil
66
- configs = nil
67
- # Test Missing Config
68
- options = {validate: true, config: target_config}
69
- code = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
70
- assert_equal RokuBuilder::MISSING_CONFIG, code
71
-
72
- FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
73
-
74
- # Test Invalid config json
75
- options = {validate: true, config: target_config}
76
- RokuBuilder::ConfigManager.stub(:get_config, nil) do
77
- code = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
78
- end
79
- assert_equal RokuBuilder::INVALID_CONFIG, code
80
- assert_nil config
81
- assert_nil configs
82
-
83
- # Test Invalid config
84
- options = {validate: true, config: target_config}
85
- RokuBuilder::ConfigValidator.stub(:validate_config, [1]) do
86
- code, config, configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
87
- end
88
- assert_equal RokuBuilder::INVALID_CONFIG, code
89
- assert_nil config
90
- assert_nil configs
91
-
92
- # Test Unknown Device
93
- options = {validate: true, device: :bad, config: target_config}
94
- code, config, configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
95
- assert_equal RokuBuilder::UNKNOWN_DEVICE, code
96
- assert_nil config
97
- assert_nil configs
98
-
99
- # Test Depricated Config
100
- options = {validate: true, stage: 'production', config: target_config}
101
- RokuBuilder::ConfigValidator.stub(:validate_config, [-1]) do
102
- code, config, configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
103
- end
104
- assert_equal RokuBuilder::DEPRICATED_CONFIG, code
105
- assert_equal Hash, config.class
106
- assert_equal Hash, configs.class
107
-
108
- # Test valid Config
109
- options = {validate: true, stage: 'production', config: target_config}
110
- RokuBuilder::ConfigValidator.stub(:validate_config, [0]) do
111
- code, config, configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
112
- end
113
- assert_equal RokuBuilder::SUCCESS, code
114
- assert_equal Hash, config.class
115
- assert_equal Hash, configs.class
116
-
117
- # Test valid config in pwd
118
- options = {validate: true, stage: 'production', config: target_config}
119
- RokuBuilder::ConfigValidator.stub(:validate_config, [0]) do
120
- RokuBuilder::Controller.stub(:system, "/dev/null/test") do
121
- code, config, configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
122
- end
123
- end
124
- assert_equal RokuBuilder::SUCCESS, code
125
- assert_equal Hash, config.class
126
- assert_equal Hash, configs.class
127
-
128
- File.delete(target_config) if File.exist?(target_config)
129
- end
130
-
131
- def test_config_manager_read_invalid_config
132
- logger = Logger.new("/dev/null")
133
- config_path = "config/file/path"
134
- io = Minitest::Mock.new
135
- io.expect(:read, good_config.to_json+"}}}}}")
136
- config = nil
137
- File.stub(:open, io) do
138
- config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
139
- end
140
- io.verify
141
- assert_nil config
142
- end
143
-
144
- def test_config_manager_edit_ip
145
- logger = Logger.new("/dev/null")
146
- config_path = "config/file/path"
147
- args = {
148
- config: config_path,
149
- options: {edit_params: "ip:192.168.0.200",
150
- device: :roku,
151
- },
152
- logger: logger
153
- }
154
- new_config = good_config
155
- new_config[:devices][:roku][:ip] = "192.168.0.200"
156
-
157
- io = Minitest::Mock.new
158
- io.expect(:read, good_config.to_json)
159
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
160
- io.expect(:close, nil)
161
- File.stub(:open, io) do
162
- RokuBuilder::ConfigManager.edit_config(**args)
163
- end
164
- io.verify
165
- end
166
-
167
- def test_config_manager_edit_user
168
- logger = Logger.new("/dev/null")
169
- config_path = "config/file/path"
170
- args = {
171
- config: config_path,
172
- options: {edit_params: "user:new_user"},
173
- logger: logger
174
- }
175
- new_config = good_config
176
- new_config[:devices][:roku][:user] = "new_user"
177
-
178
- io = Minitest::Mock.new
179
- io.expect(:read, good_config.to_json)
180
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
181
- io.expect(:close, nil)
182
- File.stub(:open, io) do
183
- RokuBuilder::ConfigManager.edit_config(**args)
184
- end
185
- io.verify
186
- end
187
-
188
- def test_config_manager_edit_password
189
- logger = Logger.new("/dev/null")
190
- config_path = "config/file/path"
191
- args = {
192
- config: config_path,
193
- options: {edit_params: "password:new_password"},
194
- logger: logger
195
- }
196
- new_config = good_config
197
- new_config[:devices][:roku][:password] = "new_password"
198
-
199
- io = Minitest::Mock.new
200
- io.expect(:read, good_config.to_json)
201
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
202
- io.expect(:close, nil)
203
- File.stub(:open, io) do
204
- RokuBuilder::ConfigManager.edit_config(**args)
205
- end
206
- io.verify
207
- end
208
-
209
- def test_config_manager_edit_app_name
210
- logger = Logger.new("/dev/null")
211
- config_path = "config/file/path"
212
- args = {
213
- config: config_path,
214
- options: {edit_params: "app_name:new name",
215
- project: :project1
216
- },
217
- logger: logger
218
- }
219
- new_config = good_config
220
- new_config[:projects][:project1][:app_name] = "new name"
221
-
222
- io = Minitest::Mock.new
223
- io.expect(:read, good_config.to_json)
224
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
225
- io.expect(:close, nil)
226
- File.stub(:open, io) do
227
- RokuBuilder::ConfigManager.edit_config(**args)
228
- end
229
- io.verify
230
- end
231
-
232
- def test_config_manager_edit_directory
233
- logger = Logger.new("/dev/null")
234
- config_path = "config/file/path"
235
- args = {
236
- config: config_path,
237
- options: {edit_params: "directory:new/directory/path",
238
- project: :project1
239
- },
240
- logger: logger
241
- }
242
- new_config = good_config
243
- new_config[:projects][:project1][:directory] = "new/directory/path"
244
-
245
- io = Minitest::Mock.new
246
- io.expect(:read, good_config.to_json)
247
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
248
- io.expect(:close, nil)
249
- File.stub(:open, io) do
250
- RokuBuilder::ConfigManager.edit_config(**args)
251
- end
252
- io.verify
253
- end
254
-
255
- def test_config_manager_edit_branch
256
- logger = Logger.new("/dev/null")
257
- config_path = "config/file/path"
258
- args = {
259
- config: config_path,
260
- options: {edit_params: "branch:new-branch",
261
- stage: :production
262
- },
263
- logger: logger
264
- }
265
- new_config = good_config
266
- new_config[:projects][:project1][:stages][:production][:branch] = "new-branch"
267
-
268
- io = Minitest::Mock.new
269
- io.expect(:read, good_config.to_json)
270
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
271
- io.expect(:close, nil)
272
- File.stub(:open, io) do
273
- RokuBuilder::ConfigManager.edit_config(**args)
274
- end
275
- io.verify
276
- end
277
-
278
- def test_config_manager_edit_default_stage
279
- logger = Logger.new("/dev/null")
280
- config_path = "config/file/path"
281
- args = {
282
- config: config_path,
283
- options: {edit_params: "branch:new-branch"},
284
- logger: logger
285
- }
286
- new_config = good_config
287
- new_config[:projects][:project1][:stages][:production][:branch] = "new-branch"
288
-
289
- io = Minitest::Mock.new
290
- io.expect(:read, good_config.to_json)
291
- io.expect(:write, nil, [JSON.pretty_generate(new_config)])
292
- io.expect(:close, nil)
293
- File.stub(:open, io) do
294
- RokuBuilder::ConfigManager.edit_config(**args)
295
- end
296
- io.verify
297
- end
298
-
299
- def test_config_manager_parent_config
300
- logger = Logger.new("/dev/null")
301
- target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
302
- File.delete(target_config) if File.exist?(target_config)
303
- FileUtils.cp(File.join(File.dirname(target_config), "parent_config.json"), target_config)
304
-
305
- options = {validate: true, config: target_config, stage: :production}
306
- code, config, _configs = RokuBuilder::ConfigManager.load_config(options: options, logger: logger)
307
- assert_equal RokuBuilder::SUCCESS, code
308
- assert_equal "app2", config[:projects][:p2][:app_name]
309
- assert_equal "/dev/null", config[:projects][:p2][:directory]
310
- assert_equal 2, config[:projects][:p2][:files].count
311
- assert_equal 2, config[:projects][:p2][:folders].count
312
- File.delete(target_config) if File.exist?(target_config)
313
- end
314
-
315
- def test_config_manager_update_configs
316
- configs = {
317
- project_config: { app_name: "<app_name>" },
318
- package_config: {},
319
- stage: "<stage>",
320
- out: { file: nil, folder: "/tmp" }
321
- }
322
- options = {
323
- build_version: "<build_version>"
324
- }
325
- configs = RokuBuilder::ConfigManager.update_configs(configs: configs, options: options)
326
- assert_equal "<app_name> - <stage> - <build_version>", configs[:package_config][:app_name_version]
327
- assert_equal "<app_name>_<stage>_<build_version>", configs[:out][:file]
328
- assert_equal "/tmp/<app_name>_<stage>_<build_version>", configs[:package_config][:out_file]
329
-
330
- configs = {
331
- project_config: { app_name: "<app_name>" },
332
- package_config: {},
333
- stage: "<stage>",
334
- out: { file: "file.pkg", folder: "/home/user" }
335
- }
336
- options = {
337
- build_version: "<build_version>"
338
- }
339
- configs = RokuBuilder::ConfigManager.update_configs(configs: configs, options: options)
340
- assert_equal "<app_name> - <stage> - <build_version>", configs[:package_config][:app_name_version]
341
- assert_equal "file.pkg", configs[:out][:file]
342
- assert_equal "/home/user/file.pkg", configs[:package_config][:out_file]
343
-
344
- configs = {
345
- project_config: { app_name: "<app_name>" },
346
- build_config: {},
347
- stage: "<stage>",
348
- out: { file: nil, folder: "/tmp" }
349
- }
350
- options = {
351
- build_version: "<build_version>"
352
- }
353
- configs = RokuBuilder::ConfigManager.update_configs(configs: configs, options: options)
354
- assert_equal "<app_name>_<stage>_<build_version>", configs[:out][:file]
355
- assert_equal "/tmp/<app_name>_<stage>_<build_version>", configs[:build_config][:out_file]
356
-
357
- configs = {
358
- project_config: { app_name: "<app_name>" },
359
- inspect_config: {},
360
- package_config: {},
361
- stage: "<stage>",
362
- out: { file: nil, folder: "/tmp" }
363
- }
364
- options = {
365
- build_version: "<build_version>"
366
- }
367
- configs = RokuBuilder::ConfigManager.update_configs(configs: configs, options: options)
368
- assert_equal "<app_name>_<stage>_<build_version>", configs[:out][:file]
369
- assert_equal "/tmp/<app_name>_<stage>_<build_version>", configs[:package_config][:out_file]
370
- assert_equal "/tmp/<app_name>_<stage>_<build_version>", configs[:inspect_config][:pkg]
371
- end
372
- end