roku_builder 3.3.2 → 3.3.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fb0f1a154541f38d45f4cec4a78800d5442c4de
4
- data.tar.gz: 04f1448deacf24c15223993745750f9298b6107a
3
+ metadata.gz: 57d35cf7d34cc1a61441de8f49007204e480238b
4
+ data.tar.gz: 25124d6fee986c47d3a58cdf0b23c023482c99cb
5
5
  SHA512:
6
- metadata.gz: 40eb84586c9745d4faac4eae184c02be437966d65f71e194d0befb18c78e98e4f73a3fce23ab755ea5721242c928dec6462dea5969c75bd890da8933be0f054d
7
- data.tar.gz: 0370b82f8bf8d258f2c9ab04b88b4624e73129dd01db3e38cc97a1c15e123a7b2064a9e4820d63b3662fb8f2ca6bf24c1b6d2eb13745829cf7add45acec3ae77
6
+ metadata.gz: 4efb6c2af95286dbadf4ef3f769752908516bdc200785194dc59f35739a2f4bd6b5b70d6f50915ae343dc5ab971711c43ef344a1e910d529129f697ae7c4abda
7
+ data.tar.gz: 0a431ada9ec91e6bedcf12ceb14ccca7eb70bd841614741b5ce46e41bcc158b881ed3b221f502eebe841687bf71da6673d38cce507b8928f1750083cc5b93fa8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roku_builder (3.3.1)
4
+ roku_builder (3.3.3)
5
5
  faraday (~> 0.9)
6
6
  faraday-digestauth (~> 0.2)
7
7
  git (~> 1.2.9)
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # RokuBuilder
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/roku_builder.svg)](https://badge.fury.io/rb/roku_builder)
4
+
3
5
  A tool to help with Roku Development. Assists with the following roku
4
6
  development tasks:
5
7
 
@@ -267,8 +269,8 @@ directory:
267
269
 
268
270
  ## Improvements
269
271
 
272
+ * Account for missing folders or files
270
273
  * Increase testing
271
- * More Unit Tests
272
274
  * Intergration Tests
273
275
  * Move RokuBuilder::Controller to RokuBuilder?
274
276
  * Allow start and end delimiter for tests to be configured
data/bin/roku CHANGED
@@ -130,6 +130,10 @@ OptionParser.new do |opts|
130
130
  options[:out] = o
131
131
  end
132
132
 
133
+ opts.on("-I", "--in PATH", "Input file for sideloading") do |i|
134
+ options[:in] = i
135
+ end
136
+
133
137
  opts.on("-V", "--verbose", "Print Info message") do |v|
134
138
  options[:verbose] = v
135
139
  end
@@ -28,6 +28,9 @@ module RokuBuilder
28
28
  # No deeplink options supplied for deeplink
29
29
  BAD_DEEPLINK = 6
30
30
 
31
+ # Incorrect use of the in option
32
+ BAD_IN_FILE = 7
33
+
31
34
 
32
35
 
33
36
  ### Device Codes ###
@@ -36,7 +39,7 @@ module RokuBuilder
36
39
  CHANGED_DEVICE = -1
37
40
 
38
41
  # Device is online
39
- GOOD_DEVCICE = 0
42
+ GOOD_DEVICE = 0
40
43
 
41
44
  # User defined device was not online
42
45
  BAD_DEVICE = 1
@@ -108,11 +111,11 @@ module RokuBuilder
108
111
 
109
112
  options_code = self.validate_options(options: options, logger: logger)
110
113
 
111
- self.handle_error_codes(options_code: options_code, logger: logger)
114
+ self.handle_error_codes(options: options, options_code: options_code, logger: logger)
112
115
 
113
116
  handle_code = self.handle_options(options: options, logger: logger)
114
117
 
115
- self.handle_error_codes(handle_code: handle_code, logger: logger)
118
+ self.handle_error_codes(options: options, handle_code: handle_code, logger: logger)
116
119
  end
117
120
 
118
121
  protected
@@ -133,6 +136,9 @@ module RokuBuilder
133
136
  if sources.include?(:current)
134
137
  return BAD_CURRENT unless options[:build] or options[:sideload]
135
138
  end
139
+ if options[:in]
140
+ return BAD_IN_FILE unless options[:sideload]
141
+ end
136
142
  if options[:deeplink]
137
143
  return BAD_DEEPLINK if !options[:deeplink_options] or options[:deeplink_options].chomp == ""
138
144
  end
@@ -152,7 +158,7 @@ module RokuBuilder
152
158
 
153
159
  # Check devices
154
160
  device_code, configs = self.check_devices(options: options, config: config, configs: configs, logger: logger)
155
- self.handle_error_codes(device_code: device_code, logger: logger)
161
+ self.handle_error_codes(options: options, device_code: device_code, logger: logger)
156
162
 
157
163
  command = (self.commands & options.keys).first
158
164
  case command
@@ -193,7 +199,7 @@ module RokuBuilder
193
199
  when :build
194
200
  ### Build ###
195
201
  loader = Loader.new(**configs[:device_config])
196
- build_version = ManifestManager.build_version(**configs[:manifest_config], logger: logger)
202
+ build_version = ManifestManager.build_version(**configs[:manifest_config])
197
203
  options[:build_version] = build_version
198
204
  configs = self.update_configs(configs: configs, options: options)
199
205
  outfile = loader.build(**configs[:build_config])
@@ -245,7 +251,7 @@ module RokuBuilder
245
251
  def self.check_devices(options:, config:, configs:, logger:)
246
252
  ping = Net::Ping::External.new
247
253
  host = configs[:device_config][:ip]
248
- return [GOOD_DEVCICE, configs] if ping.ping? host, 1, 0.2, 1
254
+ return [GOOD_DEVICE, configs] if ping.ping? host, 1, 0.2, 1
249
255
  return [BAD_DEVICE, nil] if options[:device_given]
250
256
  config[:devices].each_pair {|key, value|
251
257
  unless key == :default
@@ -284,7 +290,7 @@ module RokuBuilder
284
290
  # @param options_code [Integer] the error code returned by validate_options
285
291
  # @param handle_code [Integer] the error code returned by handle_options
286
292
  # @param logger [Logger] system logger
287
- def self.handle_error_codes(options_code: nil, device_code: nil, handle_code: nil, logger:)
293
+ def self.handle_error_codes(options:, options_code: nil, device_code: nil, handle_code: nil, logger:)
288
294
  if options_code
289
295
  case options_code
290
296
  when EXTRA_COMMANDS
@@ -305,6 +311,9 @@ module RokuBuilder
305
311
  when BAD_DEEPLINK
306
312
  logger.fatal "Must supply deeplinking options when deeplinking"
307
313
  abort
314
+ when BAD_IN_FILE
315
+ logger.fatal "Can only supply in file for building"
316
+ abort
308
317
  end
309
318
  elsif device_code
310
319
  case device_code
@@ -497,7 +506,7 @@ module RokuBuilder
497
506
  password: configs[:key][:password],
498
507
  app_name_version: "#{project_config[:app_name]} - #{stage}"
499
508
  }
500
- if options[:outfile]
509
+ if options[:out_file]
501
510
  configs[:package_config][:out_file] = File.join(options[:out_folder], options[:out_file])
502
511
  end
503
512
  # Create Inspector Config
@@ -516,7 +525,8 @@ module RokuBuilder
516
525
  }
517
526
  # Create Manifest Config
518
527
  configs[:manifest_config] = {
519
- root_dir: project_config[:directory]
528
+ root_dir: project_config[:directory],
529
+ logger: logger
520
530
  }
521
531
  # Create Deeplink Config
522
532
  configs[:deeplink_config] ={
@@ -35,7 +35,7 @@ module RokuBuilder
35
35
  if app_name
36
36
  app_name = app_name[1]
37
37
  dev_id = /Dev ID:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
38
- creation_date = /Creation Date:\s*<\/td>\s*<td>\s*<font[^>]*>\s*<script[^>]*>\s*var d = new Date\(([^\)]*)\)[^<]*<\/script><\/font>\s*<\/td>/.match(response.body.gsub("\n", ''))[1]
38
+ creation_date = /new Date\(([^)]*)\)/.match(response.body.gsub("\n", ''))[1]
39
39
  dev_zip = /dev.zip:\s*<\/td>\s*<td>\s*<font[^>]*>([^<]*)<\/font>\s*<\/td>/.match(response.body)[1]
40
40
  else
41
41
  app_name = /App Name:[^<]*<div[^>]*>([^<]*)<\/div>/.match(response.body)[1]
@@ -10,8 +10,9 @@ module RokuBuilder
10
10
  # @param fetch [Boolean] Flag to fetch all remotes before sideloading. Default: false
11
11
  # @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
12
12
  # @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
13
+ # @param infile [String]
13
14
  # @return [String] Build version on success, nil otherwise
14
- def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil)
15
+ def sideload(root_dir:, branch: nil, update_manifest: false, fetch: false, folders: nil, files: nil, infile: nil)
15
16
  @root_dir = root_dir
16
17
  result = nil
17
18
  stash = nil
@@ -35,14 +35,7 @@ module RokuBuilder
35
35
  all_text = ""
36
36
  while true
37
37
  connection.waitfor(waitfor_config) do |txt|
38
- all_text += txt
39
- while line = all_text.slice!(/^.*\n/) do
40
- puts line
41
- end
42
- if all_text == "BrightScript Debugger> "
43
- print all_text
44
- all_text = ""
45
- end
38
+ all_text = manage_text(all_text: all_text, txt: txt)
46
39
  end
47
40
  end
48
41
  }
@@ -58,5 +51,23 @@ module RokuBuilder
58
51
  end
59
52
  end
60
53
  end
54
+
55
+ private
56
+
57
+ # Handel text from telnet
58
+ # @param all_text [String] remaining partial line text
59
+ # @param txt [String] current string from telnet
60
+ # @return [String] remaining partial line text
61
+ def manage_text(all_text:, txt:)
62
+ all_text += txt
63
+ while line = all_text.slice!(/^.*\n/) do
64
+ puts line
65
+ end
66
+ if all_text == "BrightScript Debugger> "
67
+ print all_text
68
+ all_text = ""
69
+ end
70
+ all_text
71
+ end
61
72
  end
62
73
  end
@@ -5,6 +5,11 @@ module RokuBuilder
5
5
  # with other testing libraries
6
6
  class Tester < Util
7
7
 
8
+ def init()
9
+ @end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
10
+ @start_reg = /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
11
+ end
12
+
8
13
  # Run tests and report results
9
14
  # @param sideload_config [Hash] The config for sideloading the app
10
15
  def run_tests(sideload_config:)
@@ -18,15 +23,25 @@ module RokuBuilder
18
23
  loader.sideload(**sideload_config)
19
24
 
20
25
  in_tests = false
21
- end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
22
- connection.waitfor(end_reg) do |txt|
23
- txt.split("\n").each do |line|
24
- in_tests = false if line =~ end_reg
25
- @logger.unknown line if in_tests
26
- in_tests = true if line =~ /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
27
- end
26
+ connection.waitfor(@end_reg) do |txt|
27
+ in_tests = handle_text(txt: txt, in_tests: in_tests)
28
28
  end
29
29
  connection.puts("cont\n")
30
30
  end
31
+
32
+ private
33
+
34
+ # Handel testing text
35
+ # @param txt [String] current text from telnet
36
+ # @param in_tests [Boolean] currently parsing test text
37
+ # @return [Boolean] currently parsing test text
38
+ def handle_text(txt:, in_tests:)
39
+ txt.split("\n").each do |line|
40
+ in_tests = false if line =~ @end_reg
41
+ @logger.unknown line if in_tests
42
+ in_tests = true if line =~ @start_reg
43
+ end
44
+ in_tests
45
+ end
31
46
  end
32
47
  end
@@ -1,4 +1,4 @@
1
1
  module RokuBuilder
2
2
  # Version of the RokuBuilder Gem
3
- VERSION = "3.3.2"
3
+ VERSION = "3.3.3"
4
4
  end
data/roku_builder.gemspec CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.required_ruby_version = "~> 2.2"
22
+
21
23
  spec.add_dependency "rubyzip", "~> 1.1"
22
24
  spec.add_dependency "faraday", "~> 0.9"
23
25
  spec.add_dependency "faraday-digestauth", "~> 0.2"
@@ -16,6 +16,19 @@ class ConfigManagerTest < Minitest::Test
16
16
  assert_equal :project1, config[:projects][:default], :project1
17
17
  end
18
18
 
19
+ def test_config_manager_read_invalid_config
20
+ logger = Logger.new("/dev/null")
21
+ config_path = "config/file/path"
22
+ io = Minitest::Mock.new
23
+ io.expect(:read, good_config.to_json+"}}}}}")
24
+ config = nil
25
+ File.stub(:open, io) do
26
+ config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
27
+ end
28
+ io.verify
29
+ assert_nil config
30
+ end
31
+
19
32
  def test_config_manager_validate_devices
20
33
  logger = Logger.new("/dev/null")
21
34
  config = good_config
@@ -0,0 +1,19 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class ControllerConfigTest < Minitest::Test
4
+ def test_manifest_config
5
+ logger = Logger.new("/dev/null")
6
+ options = {
7
+ config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
8
+ stage: 'production',
9
+ update_manifest: false,
10
+ fetch: false,
11
+ }
12
+ code, config, configs = RokuBuilder::Controller.load_config(options: options, logger: logger)
13
+
14
+ assert_equal "/dev/null", configs[:manifest_config][:root_dir]
15
+ assert_equal logger, configs[:manifest_config][:logger]
16
+
17
+
18
+ end
19
+ end
@@ -1,5 +1,13 @@
1
1
  require_relative "test_helper.rb"
2
2
 
3
+ class RokuBuilder::Controller
4
+ class << self
5
+ def abort
6
+ #do nothing
7
+ end
8
+ end
9
+ end
10
+
3
11
  class ControllerTest < Minitest::Test
4
12
  def test_controller_validate_options
5
13
  logger = Logger.new("/dev/null")
@@ -7,38 +15,50 @@ class ControllerTest < Minitest::Test
7
15
  sideload: true,
8
16
  package: true
9
17
  }
10
- assert_equal 1, RokuBuilder::Controller.validate_options(options: options, logger: logger)
18
+ assert_equal RokuBuilder::Controller::EXTRA_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
11
19
  options = {}
12
- assert_equal 2, RokuBuilder::Controller.validate_options(options: options, logger: logger)
20
+ assert_equal RokuBuilder::Controller::NO_COMMANDS, RokuBuilder::Controller.validate_options(options: options, logger: logger)
13
21
  options = {
14
22
  sideload: true,
15
23
  working: true,
16
24
  current: true
17
25
  }
18
- assert_equal 3, RokuBuilder::Controller.validate_options(options: options, logger: logger)
26
+ assert_equal RokuBuilder::Controller::EXTRA_SOURCES, RokuBuilder::Controller.validate_options(options: options, logger: logger)
19
27
  options = {
20
28
  sideload: true,
21
29
  working: true
22
30
  }
23
- assert_equal 0, RokuBuilder::Controller.validate_options(options: options, logger: logger)
31
+ assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
24
32
  options = {
25
33
  package: true
26
34
  }
27
- assert_equal 4, RokuBuilder::Controller.validate_options(options: options, logger: logger)
35
+ assert_equal RokuBuilder::Controller::NO_SOURCE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
28
36
  options = {
29
37
  package: true,
30
38
  current: true
31
39
  }
32
- assert_equal 5, RokuBuilder::Controller.validate_options(options: options, logger: logger)
40
+ assert_equal RokuBuilder::Controller::BAD_CURRENT, RokuBuilder::Controller.validate_options(options: options, logger: logger)
33
41
  options = {
34
42
  deeplink: true
35
43
  }
36
- assert_equal 6, RokuBuilder::Controller.validate_options(options: options, logger: logger)
44
+ assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
37
45
  options = {
38
46
  deeplink: true,
39
47
  deeplink_options: ""
40
48
  }
41
- assert_equal 6, RokuBuilder::Controller.validate_options(options: options, logger: logger)
49
+ assert_equal RokuBuilder::Controller::BAD_DEEPLINK, RokuBuilder::Controller.validate_options(options: options, logger: logger)
50
+ options = {
51
+ sideload: true,
52
+ in: "",
53
+ current: true
54
+ }
55
+ assert_equal RokuBuilder::Controller::VALID, RokuBuilder::Controller.validate_options(options: options, logger: logger)
56
+ options = {
57
+ package: true,
58
+ in: "",
59
+ set_stage: true
60
+ }
61
+ assert_equal RokuBuilder::Controller::BAD_IN_FILE, RokuBuilder::Controller.validate_options(options: options, logger: logger)
42
62
  end
43
63
  def test_controller_configure
44
64
  logger = Logger.new("/dev/null")
@@ -66,6 +86,16 @@ class ControllerTest < Minitest::Test
66
86
  assert File.exists?(target_config)
67
87
  config = RokuBuilder::ConfigManager.get_config(config: target_config, logger: logger)
68
88
  assert_equal "111.222.333.444", config[:devices][:roku][:ip]
89
+
90
+ options = {
91
+ configure: true,
92
+ config: target_config
93
+ }
94
+
95
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
96
+
97
+ assert_equal RokuBuilder::Controller::CONFIG_OVERWRITE, code
98
+
69
99
  File.delete(target_config) if File.exists?(target_config)
70
100
  end
71
101
 
@@ -169,8 +199,99 @@ class ControllerTest < Minitest::Test
169
199
  target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
170
200
  File.delete(target_config) if File.exists?(target_config)
171
201
  FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
202
+ keyer = Minitest::Mock.new
172
203
  loader = Minitest::Mock.new
173
- #TODO
204
+ packager = Minitest::Mock.new
205
+ inspector = Minitest::Mock.new
206
+
207
+ options = {package: true, inspect: true, stage: 'production', out_folder: "/tmp", config: target_config}
208
+ configs = {
209
+ device_config: {},
210
+ sideload_config: {},
211
+ key: {},
212
+ package_config: {
213
+ app_name_version: "app - production - build_version",
214
+ out_file: "/tmp/app_production_build_version.pkg"
215
+ },
216
+ project_config: {app_name: "app"},
217
+ inspect_config: {}
218
+ }
219
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
220
+
221
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
222
+ keyer.expect(:rekey, true, [configs[:key]])
223
+ packager.expect(:package, true, [configs[:package_config]])
224
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
225
+
226
+ code = nil
227
+ RokuBuilder::Keyer.stub(:new, keyer) do
228
+ RokuBuilder::Loader.stub(:new, loader) do
229
+ RokuBuilder::Packager.stub(:new, packager) do
230
+ RokuBuilder::Inspector.stub(:new, inspector) do
231
+ RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
232
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
233
+ end
234
+ end
235
+ end
236
+ end
237
+ end
238
+ assert_equal RokuBuilder::Controller::SUCCESS, code
239
+
240
+ keyer.verify
241
+ loader.verify
242
+ packager.verify
243
+ inspector.verify
244
+ File.delete(target_config) if File.exists?(target_config)
245
+ end
246
+
247
+ def test_controller_package_outfile
248
+ logger = Logger.new("/dev/null")
249
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
250
+ File.delete(target_config) if File.exists?(target_config)
251
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
252
+ keyer = Minitest::Mock.new
253
+ loader = Minitest::Mock.new
254
+ packager = Minitest::Mock.new
255
+ inspector = Minitest::Mock.new
256
+
257
+ options = {package: true, inspect: true, stage: 'production', out: "/tmp/out.pkg", config: target_config}
258
+ configs = {
259
+ device_config: {},
260
+ sideload_config: {},
261
+ key: {},
262
+ package_config: {
263
+ app_name_version: "app - production - build_version",
264
+ out_file: "/tmp/out.pkg"
265
+ },
266
+ project_config: {app_name: "app"},
267
+ inspect_config: {}
268
+ }
269
+ info = {app_name: "app", dev_id: "id", creation_date: "date", dev_zip: ""}
270
+
271
+ loader.expect(:sideload, "build_version", [configs[:sideload_config]])
272
+ keyer.expect(:rekey, true, [configs[:key]])
273
+ packager.expect(:package, true, [configs[:package_config]])
274
+ inspector.expect(:inspect, info, [configs[:inspect_config]])
275
+
276
+ code = nil
277
+ RokuBuilder::Keyer.stub(:new, keyer) do
278
+ RokuBuilder::Loader.stub(:new, loader) do
279
+ RokuBuilder::Packager.stub(:new, packager) do
280
+ RokuBuilder::Inspector.stub(:new, inspector) do
281
+ RokuBuilder::Controller.stub(:check_devices, [0, configs]) do
282
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
288
+ assert_equal RokuBuilder::Controller::SUCCESS, code
289
+
290
+ keyer.verify
291
+ loader.verify
292
+ packager.verify
293
+ inspector.verify
294
+ File.delete(target_config) if File.exists?(target_config)
174
295
  end
175
296
 
176
297
  def test_controller_build
@@ -199,6 +320,8 @@ class ControllerTest < Minitest::Test
199
320
  end
200
321
  end
201
322
  assert_equal RokuBuilder::Controller::SUCCESS, code
323
+ loader.verify
324
+ File.delete(target_config) if File.exists?(target_config)
202
325
  end
203
326
  def test_controller_update
204
327
  logger = Logger.new("/dev/null")
@@ -223,6 +346,7 @@ class ControllerTest < Minitest::Test
223
346
  end
224
347
  mock.verify
225
348
  assert_equal RokuBuilder::Controller::SUCCESS, code
349
+ File.delete(target_config) if File.exists?(target_config)
226
350
  end
227
351
 
228
352
  def test_controller_deeplink
@@ -245,6 +369,361 @@ class ControllerTest < Minitest::Test
245
369
  end
246
370
  mock.verify
247
371
  assert_equal RokuBuilder::Controller::SUCCESS, code
372
+ File.delete(target_config) if File.exists?(target_config)
373
+ end
374
+ def test_controller_delete
375
+ logger = Logger.new("/dev/null")
376
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
377
+ File.delete(target_config) if File.exists?(target_config)
378
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
379
+ loader = Minitest::Mock.new
380
+
381
+ options = {delete: true, stage: 'production', config: target_config}
382
+ loader.expect(:unload, nil)
383
+ code = nil
384
+ RokuBuilder::Loader.stub(:new, loader) do
385
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
386
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
387
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
388
+ end
389
+ end
390
+ end
391
+ assert_equal RokuBuilder::Controller::SUCCESS, code
392
+ loader.verify
393
+ File.delete(target_config) if File.exists?(target_config)
394
+ end
395
+ def test_controller_monitor
396
+ logger = Logger.new("/dev/null")
397
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
398
+ File.delete(target_config) if File.exists?(target_config)
399
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
400
+ monitor = Minitest::Mock.new
401
+
402
+ options = {monitor: "main", stage: 'production', config: target_config}
403
+ monitor.expect(:monitor, nil, [{}])
404
+ code = nil
405
+ RokuBuilder::Monitor.stub(:new, monitor) do
406
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
407
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, monitor_config: {}}]) do
408
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
409
+ end
410
+ end
411
+ end
412
+ assert_equal RokuBuilder::Controller::SUCCESS, code
413
+ monitor.verify
414
+ File.delete(target_config) if File.exists?(target_config)
415
+ end
416
+ def test_controller_navigate
417
+ logger = Logger.new("/dev/null")
418
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
419
+ File.delete(target_config) if File.exists?(target_config)
420
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
421
+ navigator = Minitest::Mock.new
422
+
423
+ options = {navigate: "up", stage: 'production', config: target_config}
424
+ navigator.expect(:nav, true, [{}])
425
+ code = nil
426
+ RokuBuilder::Navigator.stub(:new, navigator) do
427
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
428
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
429
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
430
+ end
431
+ end
432
+ end
433
+ assert_equal RokuBuilder::Controller::SUCCESS, code
434
+ navigator.verify
435
+ File.delete(target_config) if File.exists?(target_config)
436
+ end
437
+ def test_controller_navigate_fail
438
+ logger = Logger.new("/dev/null")
439
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
440
+ File.delete(target_config) if File.exists?(target_config)
441
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
442
+ navigator = Minitest::Mock.new
443
+
444
+ options = {navigate: "up", stage: 'production', config: target_config}
445
+ navigator.expect(:nav, nil, [{}])
446
+ code = nil
447
+ RokuBuilder::Navigator.stub(:new, navigator) do
448
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
449
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, navigate_config: {}}]) do
450
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
451
+ end
452
+ end
453
+ end
454
+ assert_equal RokuBuilder::Controller::FAILED_NAVIGATING, code
455
+ navigator.verify
456
+ File.delete(target_config) if File.exists?(target_config)
457
+ end
458
+ def test_controller_screen
459
+ logger = Logger.new("/dev/null")
460
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
461
+ File.delete(target_config) if File.exists?(target_config)
462
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
463
+ navigator = Minitest::Mock.new
464
+
465
+ options = {screen: "secret", stage: 'production', config: target_config}
466
+ navigator.expect(:screen, true, [{}])
467
+ code = nil
468
+ RokuBuilder::Navigator.stub(:new, navigator) do
469
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
470
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screen_config: {}}]) do
471
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
472
+ end
473
+ end
474
+ end
475
+ assert_equal RokuBuilder::Controller::SUCCESS, code
476
+ navigator.verify
477
+ File.delete(target_config) if File.exists?(target_config)
478
+ end
479
+ def test_controller_screens
480
+ logger = Logger.new("/dev/null")
481
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
482
+ File.delete(target_config) if File.exists?(target_config)
483
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
484
+ navigator = Minitest::Mock.new
485
+
486
+ options = {screens: true, stage: 'production', config: target_config}
487
+ navigator.expect(:screens, true)
488
+ code = nil
489
+ RokuBuilder::Navigator.stub(:new, navigator) do
490
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
491
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}}]) do
492
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
493
+ end
494
+ end
495
+ end
496
+ assert_equal RokuBuilder::Controller::SUCCESS, code
497
+ navigator.verify
498
+ File.delete(target_config) if File.exists?(target_config)
499
+ end
500
+ def test_controller_text
501
+ logger = Logger.new("/dev/null")
502
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
503
+ File.delete(target_config) if File.exists?(target_config)
504
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
505
+ navigator = Minitest::Mock.new
506
+
507
+ options = {text: "text string", stage: 'production', config: target_config}
508
+ navigator.expect(:type, true, [{}])
509
+ code = nil
510
+ RokuBuilder::Navigator.stub(:new, navigator) do
511
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
512
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, text_config: {}}]) do
513
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
514
+ end
515
+ end
516
+ end
517
+ assert_equal RokuBuilder::Controller::SUCCESS, code
518
+ navigator.verify
519
+ File.delete(target_config) if File.exists?(target_config)
520
+ end
521
+ def test_controller_test
522
+ logger = Logger.new("/dev/null")
523
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
524
+ File.delete(target_config) if File.exists?(target_config)
525
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
526
+ tester = Minitest::Mock.new
527
+
528
+ options = {test: true, stage: 'production', config: target_config}
529
+ tester.expect(:run_tests, true, [{}])
530
+ code = nil
531
+ RokuBuilder::Tester.stub(:new, tester) do
532
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
533
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, test_config: {}}]) do
534
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
535
+ end
536
+ end
537
+ end
538
+ assert_equal RokuBuilder::Controller::SUCCESS, code
539
+ tester.verify
540
+ File.delete(target_config) if File.exists?(target_config)
541
+ end
542
+ def test_controller_screencapture
543
+ logger = Logger.new("/dev/null")
544
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
545
+ File.delete(target_config) if File.exists?(target_config)
546
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
547
+ inspector = Minitest::Mock.new
548
+
549
+ options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: target_config}
550
+ inspector.expect(:screencapture, true, [{}])
551
+ code = nil
552
+ RokuBuilder::Inspector.stub(:new, inspector) do
553
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
554
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
555
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
556
+ end
557
+ end
558
+ end
559
+ assert_equal RokuBuilder::Controller::SUCCESS, code
560
+ inspector.verify
561
+ File.delete(target_config) if File.exists?(target_config)
562
+ end
563
+ def test_controller_screencapture_fail
564
+ logger = Logger.new("/dev/null")
565
+ target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
566
+ File.delete(target_config) if File.exists?(target_config)
567
+ FileUtils.cp(File.join(File.dirname(target_config), "valid_config.json"), target_config)
568
+ inspector = Minitest::Mock.new
569
+
570
+ options = {screencapture: true, stage: 'production', out: "/tmp", config: target_config}
571
+ inspector.expect(:screencapture, false, [{}])
572
+ code = nil
573
+ RokuBuilder::Inspector.stub(:new, inspector) do
574
+ RokuBuilder::ManifestManager.stub(:build_version, "1") do
575
+ RokuBuilder::Controller.stub(:check_devices, [0, {device_config: {}, screencapture_config: {}}]) do
576
+ code = RokuBuilder::Controller.handle_options(options: options, logger: logger)
577
+ end
578
+ end
579
+ end
580
+ assert_equal RokuBuilder::Controller::FAILED_SCREENCAPTURE, code
581
+ inspector.verify
582
+ File.delete(target_config) if File.exists?(target_config)
583
+ end
584
+
585
+ def test_controller_handel_error_codes
586
+ errors = {
587
+ fatal: {
588
+ options_code: [
589
+ RokuBuilder::Controller::EXTRA_COMMANDS,
590
+ RokuBuilder::Controller::NO_COMMANDS,
591
+ RokuBuilder::Controller::EXTRA_SOURCES,
592
+ RokuBuilder::Controller::NO_SOURCE,
593
+ RokuBuilder::Controller::BAD_CURRENT,
594
+ RokuBuilder::Controller::BAD_DEEPLINK,
595
+ RokuBuilder::Controller::BAD_IN_FILE
596
+ ],
597
+ device_code: [
598
+ RokuBuilder::Controller::BAD_DEVICE,
599
+ RokuBuilder::Controller::NO_DEVICES,
600
+ ],
601
+ handle_code: [
602
+ RokuBuilder::Controller::CONFIG_OVERWRITE,
603
+ RokuBuilder::Controller::MISSING_CONFIG,
604
+ RokuBuilder::Controller::INVALID_CONFIG,
605
+ RokuBuilder::Controller::MISSING_MANIFEST,
606
+ RokuBuilder::Controller::UNKNOWN_DEVICE,
607
+ RokuBuilder::Controller::UNKNOWN_PROJECT,
608
+ RokuBuilder::Controller::UNKNOWN_STAGE,
609
+ RokuBuilder::Controller::FAILED_SIDELOAD,
610
+ RokuBuilder::Controller::FAILED_SIGNING,
611
+ RokuBuilder::Controller::FAILED_DEEPLINKING,
612
+ RokuBuilder::Controller::FAILED_NAVIGATING,
613
+ RokuBuilder::Controller::FAILED_SCREENCAPTURE
614
+ ]
615
+ },
616
+ info: {
617
+ device_code: [
618
+ RokuBuilder::Controller::CHANGED_DEVICE
619
+ ]
620
+ },
621
+ warn: {
622
+ handle_code: [
623
+ RokuBuilder::Controller::DEPRICATED_CONFIG
624
+ ]
625
+ }
626
+ }
627
+
628
+ errors.each_pair do |type,errors|
629
+ errors.each_pair do |key,value|
630
+ value.each do |code|
631
+ logger = Minitest::Mock.new
632
+ options = {options: {}, logger: logger}
633
+ options[key] = code
634
+ logger.expect(type, nil) {|string| string.class == String}
635
+ RokuBuilder::Controller.handle_error_codes(**options)
636
+ logger.verify
637
+ end
638
+ end
639
+ end
640
+ end
641
+
642
+ def test_controller_check_devices
643
+ logger = Logger.new("/dev/null")
644
+ ping = Minitest::Mock.new
645
+ options = {device_given: false}
646
+ config = {}
647
+ config[:devices] = {
648
+ a: {ip: "2.2.2.2"},
649
+ b: {ip: "3.3.3.3"}
650
+ }
651
+ configs = {
652
+ device_config: {ip: "1.1.1.1"}
653
+ }
654
+
655
+ Net::Ping::External.stub(:new, ping) do
656
+
657
+ ping.expect(:ping?, true, [configs[:device_config][:ip], 1, 0.2, 1])
658
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
659
+ assert_equal RokuBuilder::Controller::GOOD_DEVICE, code
660
+
661
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
662
+ ping.expect(:ping?, false, [config[:devices][:a][:ip], 1, 0.2, 1])
663
+ ping.expect(:ping?, false, [config[:devices][:b][:ip], 1, 0.2, 1])
664
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
665
+ assert_equal RokuBuilder::Controller::NO_DEVICES, code
666
+
667
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
668
+ ping.expect(:ping?, true, [config[:devices][:a][:ip], 1, 0.2, 1])
669
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
670
+ assert_equal RokuBuilder::Controller::CHANGED_DEVICE, code
671
+ assert_equal config[:devices][:a][:ip], ret[:device_config][:ip]
672
+
673
+ options[:device_given] = true
674
+ ping.expect(:ping?, false, [configs[:device_config][:ip], 1, 0.2, 1])
675
+ code, ret = RokuBuilder::Controller.check_devices(options: options, config: config, configs: configs, logger: logger)
676
+ assert_equal RokuBuilder::Controller::BAD_DEVICE, code
677
+ end
678
+ end
679
+
680
+ def test_controller_run_debug
681
+ logger = Minitest::Mock.new
682
+ options = {debug: true}
683
+
684
+ logger.expect(:formater=, nil) do |proc_object|
685
+ proc_object.class == PROC and proc_object.arity == 4
686
+ end
687
+ logger.expect(:level=, nil, [Logger::DEBUG])
688
+ RokuBuilder::Controller.stub(:validate_options, nil) do
689
+ RokuBuilder::Controller.stub(:handle_options, nil) do
690
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
691
+ RokuBuilder::Controller.run(options: options)
692
+ end
693
+ end
694
+ end
695
+ end
696
+ def test_controller_run_info
697
+ logger = Minitest::Mock.new
698
+ options = {verbose: true}
699
+
700
+ logger.expect(:formater=, nil) do |proc_object|
701
+ proc_object.class == PROC and proc_object.arity == 4
702
+ end
703
+ logger.expect(:level=, nil, [Logger::INFO])
704
+ RokuBuilder::Controller.stub(:validate_options, nil) do
705
+ RokuBuilder::Controller.stub(:handle_options, nil) do
706
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
707
+ RokuBuilder::Controller.run(options: options)
708
+ end
709
+ end
710
+ end
711
+ end
712
+ def test_controller_run_warn
713
+ logger = Minitest::Mock.new
714
+ options = {}
715
+
716
+ logger.expect(:formater=, nil) do |proc_object|
717
+ proc_object.class == PROC and proc_object.arity == 4
718
+ end
719
+ logger.expect(:level=, nil, [Logger::WARN])
720
+ RokuBuilder::Controller.stub(:validate_options, nil) do
721
+ RokuBuilder::Controller.stub(:handle_options, nil) do
722
+ RokuBuilder::Controller.stub(:handle_error_codes, nil) do
723
+ RokuBuilder::Controller.run(options: options)
724
+ end
725
+ end
726
+ end
248
727
  end
249
728
  end
250
729