roku_builder 3.12.8 → 3.13.0

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