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
@@ -5,11 +5,11 @@ module RokuBuilder
5
5
  # Change stage of roku application
6
6
  class Stager
7
7
 
8
- def initialize(key: nil, method:, root_dir: nil, logger:)
8
+ def initialize(key: nil, method:, root_dir: nil)
9
9
  @method = method
10
10
  @key = key
11
11
  @root_dir = root_dir
12
- @logger = logger
12
+ @logger = Logger.instance
13
13
  @stage_success = true
14
14
  @stash_key = "roku-builder-temp-stash"
15
15
  end
@@ -8,9 +8,16 @@ module RokuBuilder
8
8
  class Tester < Util
9
9
 
10
10
  # Initialize starting and ending regular expressions
11
- def init()
12
- @end_reg = /\*\*\*\*\* ENDING TESTS \*\*\*\*\*/
13
- @start_reg = /\*\*\*\*\* STARTING TESTS \*\*\*\*\*/
11
+ def init(root_dir:)
12
+ @root_dir = root_dir
13
+ @end_reg = /\*+\s*End testing\s*\*+/
14
+ @start_reg = /\*+\s*Start testing\s*\*+/
15
+ @test_logger = ::Logger.new(STDOUT)
16
+ @test_logger.formatter = proc {|_severity, _datetime, _progname, msg|
17
+ "%s\n\r" % [msg]
18
+ }
19
+ @in_tests = false
20
+ @logs = []
14
21
  end
15
22
 
16
23
  # Run tests and report results
@@ -21,15 +28,21 @@ module RokuBuilder
21
28
  'Port' => 8085
22
29
  }
23
30
 
31
+ @device_config[:init_params] = {
32
+ root_dir: @root_dir
33
+ }
24
34
  loader = Loader.new(**@device_config)
25
35
  connection = Net::Telnet.new(telnet_config)
26
36
  code, _build_version = loader.sideload(**sideload_config)
27
-
28
37
  if code == SUCCESS
29
- in_tests = false
38
+ @device_config[:init_params] = nil
39
+ linker = Linker.new(**@device_config)
40
+ linker.launch(options: "RunTests:true")
41
+
30
42
  connection.waitfor(@end_reg) do |txt|
31
- in_tests = handle_text(txt: txt, in_tests: in_tests)
43
+ handle_text(txt: txt)
32
44
  end
45
+ print_logs
33
46
  connection.puts("cont\n")
34
47
  end
35
48
  end
@@ -40,13 +53,46 @@ module RokuBuilder
40
53
  # @param txt [String] current text from telnet
41
54
  # @param in_tests [Boolean] currently parsing test text
42
55
  # @return [Boolean] currently parsing test text
43
- def handle_text(txt:, in_tests:)
56
+ def handle_text(txt:)
57
+ check_for_used_connection(txt: txt)
44
58
  txt.split("\n").each do |line|
45
- in_tests = false if line =~ @end_reg
46
- @logger.unknown line if in_tests
47
- in_tests = true if line =~ @start_reg
59
+ check_for_end(line: line)
60
+ @logs.push line if @in_tests
61
+ check_for_start(line: line)
62
+ end
63
+ end
64
+
65
+ def check_for_used_connection(txt:)
66
+ if txt =~ /connection already in use/
67
+ raise IOError, "Telnet Connection Already in Use"
68
+ end
69
+ end
70
+
71
+ def check_for_end(line:)
72
+ if line =~ @end_reg
73
+ @in_tests = false
74
+ breakline = line.gsub(/./, '*')
75
+ @logs.push line
76
+ @logs.push breakline
77
+ @logs.push breakline
78
+ end
79
+ end
80
+
81
+ def check_for_start(line:)
82
+ if line =~ @start_reg
83
+ @logs = []
84
+ @in_tests = true
85
+ breakline = line.gsub(/./, '*')
86
+ @logs.push breakline
87
+ @logs.push breakline
88
+ @logs.push line
89
+ end
90
+ end
91
+
92
+ def print_logs
93
+ @logs.each do |log|
94
+ @test_logger.unknown log
48
95
  end
49
- in_tests
50
96
  end
51
97
  end
52
98
  end
@@ -11,18 +11,17 @@ module RokuBuilder
11
11
  # @param ip [String] IP address of roku device
12
12
  # @param user [String] Username for roku device
13
13
  # @param password [String] Password for roku device
14
- def initialize(ip:, user:, password:, logger:, init_params: nil)
14
+ def initialize(ip:, user:, password:, init_params: nil)
15
+ @logger = Logger.instance
15
16
  @device_config = {
16
17
  ip: ip,
17
18
  user: user,
18
- password: password,
19
- logger: logger
19
+ password: password
20
20
  }
21
21
  @roku_ip_address = ip
22
22
  @dev_username = user
23
23
  @dev_password = password
24
24
  @url = "http://#{@roku_ip_address}"
25
- @logger = logger
26
25
  if init_params
27
26
  init(**init_params)
28
27
  else
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "3.12.8"
5
+ VERSION = "3.13.0"
6
6
  end
data/roku_builder.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = %q{Build Tool for Roku Apps}
12
12
  spec.description = %q{Allows the user to easily sideload, package, deeplink, test, roku apps.}
13
13
  spec.homepage = ""
14
- spec.license = "MIT"
14
+ spec.license = "Apache-2.0"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "net-ping", "~> 2.0"
28
28
  spec.add_dependency "net-telnet", "~> 0.1"
29
29
  spec.add_dependency "nokogiri", "~> 1.7"
30
+ spec.add_dependency "win32-security", "~> 0.5" # For windows compatibility
30
31
 
31
32
  spec.add_development_dependency "bundler", "~> 1.7"
32
33
  spec.add_development_dependency "rake", "~> 12.0"
@@ -0,0 +1,168 @@
1
+ # ********** Copyright Viacom, Inc. Apache 2.0 **********
2
+
3
+ require_relative "test_helper.rb"
4
+
5
+ module RokuBuilder
6
+ class ConfigTest < Minitest::Test
7
+
8
+ def test_config_init
9
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
10
+ config = Config.new(options: options)
11
+ config.load
12
+ end
13
+
14
+ def test_config_expand_path
15
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
16
+ options[:config].sub!(/#{File.expand_path("~")}/, "~")
17
+ config = Config.new(options: options)
18
+ config.load
19
+ end
20
+
21
+ def test_missing_config
22
+ options = build_options({config: File.join(test_files_path(ConfigTest), "missing.json"), validate: true})
23
+ assert_raises ArgumentError do
24
+ config = Config.new(options: options)
25
+ config.load
26
+ end
27
+ end
28
+
29
+ def test_invalid_config
30
+ options = build_options({config: File.join(test_files_path(ConfigTest), "bad.json"), validate: true})
31
+ assert_raises InvalidConfig do
32
+ config = Config.new(options: options)
33
+ config.load
34
+ config.validate
35
+ end
36
+ end
37
+
38
+ def test_non_json_config
39
+ options = build_options({config: File.join(test_files_path(ConfigTest), "non_json.json"), validate: true})
40
+ assert_raises InvalidConfig do
41
+ config = Config.new(options: options)
42
+ config.load
43
+ end
44
+ end
45
+
46
+ def test_config_parse
47
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
48
+ config = Config.new(options: options)
49
+ config.load
50
+ config.parse
51
+ assert_equal Hash, config.parsed.class
52
+ end
53
+
54
+ def test_config_read
55
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), validate: true})
56
+ config = Config.new(options: options)
57
+ config.load
58
+ assert_equal :roku, config.raw[:devices][:default]
59
+ assert_equal :p1, config.raw[:projects][:default]
60
+ end
61
+
62
+ def test_config_read_parent
63
+ options = build_options({config: File.join(test_files_path(ConfigTest), "child.json"), validate: true})
64
+ config = Config.new(options: options)
65
+ config.load
66
+ assert_equal :roku, config.raw[:devices][:default]
67
+ assert_equal :p1, config.raw[:projects][:default]
68
+ end
69
+
70
+ def test_config_read_parent
71
+ options = build_options({config: File.join(test_files_path(ConfigTest), "parent_projects.json"), validate: true})
72
+ config = Config.new(options: options)
73
+ config.load
74
+ assert_equal "app", config.raw[:projects][:p1][:app_name]
75
+ end
76
+
77
+ def test_config_edit
78
+ orginal = File.join(test_files_path(ConfigTest), "config.json")
79
+ tmp = File.join(test_files_path(ConfigTest), "tmpconfig.json")
80
+ FileUtils.cp(orginal, tmp)
81
+ options = build_options({config: tmp, edit_params: "ip:123.456.789", validate: true})
82
+ config = Config.new(options: options)
83
+ config.load
84
+ config.edit
85
+ options = build_options({config: tmp, validate: true})
86
+ config = Config.new(options: options)
87
+ config.load
88
+ assert_equal "123.456.789", config.raw[:devices][:roku][:ip]
89
+ FileUtils.rm(tmp)
90
+ end
91
+
92
+ def test_config_update_package
93
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), package: true, stage: :production, set_stage: true})
94
+ config = Config.new(options: options)
95
+ config.load
96
+ config.parse
97
+ options[:build_version] = "BUILDVERSION"
98
+ config.update
99
+ assert_equal "app - production - BUILDVERSION", config.parsed[:package_config][:app_name_version]
100
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:package_config][:out_file]
101
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:inspect_config][:pkg]
102
+ end
103
+
104
+ def test_config_update_build
105
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), build: true, stage: :production, set_stage: true})
106
+ config = Config.new(options: options)
107
+ config.load
108
+ config.parse
109
+ options[:build_version] = "BUILDVERSION"
110
+ config.update
111
+ assert_equal "/tmp/app_production_BUILDVERSION", config.parsed[:build_config][:out_file]
112
+ end
113
+
114
+ def test_config_update_sideload
115
+ options = build_options({config: File.join(test_files_path(ConfigTest), "config.json"), sideload: true, stage: :production, set_stage: true, out: "/tmp2"})
116
+ config = Config.new(options: options)
117
+ config.load
118
+ config.parse
119
+ options[:build_version] = "BUILDVERSION"
120
+ config.update
121
+ assert_equal "/tmp2/app_production_BUILDVERSION", config.parsed[:sideload_config][:out_file]
122
+ end
123
+
124
+ def test_config_configure_creation
125
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
126
+ options = build_options({config: target_config, configure: true})
127
+ File.delete(target_config) if File.exist?(target_config)
128
+ refute File.exist?(target_config)
129
+ config = Config.new(options: options)
130
+ config.configure
131
+ assert File.exist?(target_config)
132
+ File.delete(target_config) if File.exist?(target_config)
133
+ end
134
+
135
+ def test_config_configure_edit_params
136
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
137
+ options = build_options({
138
+ config: target_config,
139
+ configure: true,
140
+ edit_params: "ip:111.222.333.444"
141
+ })
142
+ File.delete(target_config) if File.exist?(target_config)
143
+ refute File.exist?(target_config)
144
+ config = Config.new(options: options)
145
+ config.configure
146
+ assert File.exist?(target_config)
147
+ assert_equal "111.222.333.444", config.raw[:devices][config.raw[:devices][:default]][:ip]
148
+ File.delete(target_config) if File.exist?(target_config)
149
+ end
150
+
151
+ def test_config_configure_edit_params
152
+ target_config = File.join(test_files_path(ConfigTest), "configure_test.json")
153
+ options = build_options({
154
+ config: target_config,
155
+ configure: true
156
+ })
157
+ File.delete(target_config) if File.exist?(target_config)
158
+ refute File.exist?(target_config)
159
+ config = Config.new(options: options)
160
+ config.configure
161
+ assert File.exist?(target_config)
162
+ assert_raises InvalidOptions do
163
+ config.configure
164
+ end
165
+ File.delete(target_config) if File.exist?(target_config)
166
+ end
167
+ end
168
+ end
@@ -2,438 +2,391 @@
2
2
 
3
3
  require_relative "test_helper.rb"
4
4
 
5
- class ConfigParserTest < Minitest::Test
6
- def test_manifest_config
7
- logger = Logger.new("/dev/null")
8
- options = {
9
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
10
- stage: 'production',
11
- update_manifest: false,
12
- fetch: false,
13
- sideload: true
14
- }
15
- config = good_config
16
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
17
-
18
- assert_equal RokuBuilder::SUCCESS, code
19
- assert_equal Hash, config.class
20
- assert_equal "/tmp", configs[:manifest_config][:root_dir]
21
- end
22
-
23
- def test_manifest_config_in
24
- logger = Logger.new("/dev/null")
25
- options = {
26
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
27
- in: "/dev/null/infile",
28
- update_manifest: false,
29
- fetch: false,
30
- sideload: true
31
- }
32
- config = good_config
33
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
34
-
35
- assert_equal RokuBuilder::SUCCESS, code
36
- assert_equal Hash, config.class
37
- assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
38
- assert_equal :in, configs[:stage_config][:method]
39
- end
40
-
41
- def test_manifest_config_in_expand
42
- logger = Logger.new("/dev/null")
43
- options = {
44
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
45
- in: "./infile",
46
- update_manifest: false,
47
- fetch: false,
48
- sideload: true
49
- }
50
- config = good_config
51
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
52
-
53
- assert_equal RokuBuilder::SUCCESS, code
54
- assert_equal Hash, config.class
55
- assert_equal File.join(Dir.pwd, "infile"), configs[:manifest_config][:root_dir]
56
- assert_equal :in, configs[:stage_config][:method]
57
- end
58
-
59
- def test_manifest_config_current
60
- logger = Logger.new("/dev/null")
61
- options = {
62
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
63
- current: true,
64
- update_manifest: false,
65
- fetch: false,
66
- sideload: true
67
- }
68
- code, configs = nil
69
- config = good_config
70
- Pathname.stub(:pwd, "/dev/null/infile") do
71
- File.stub(:exist?, true) do
72
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
73
- end
5
+ module RokuBuilder
6
+ class ConfigParserTest < Minitest::Test
7
+ def test_manifest_config
8
+ options = build_options({
9
+ sideload: true,
10
+ working: true
11
+ })
12
+ config = good_config
13
+ configs = ConfigParser.parse(options: options, config: config)
14
+
15
+ assert_equal Hash, config.class
16
+ assert_equal "/tmp", configs[:manifest_config][:root_dir]
74
17
  end
75
18
 
76
- assert_equal RokuBuilder::SUCCESS, code
77
- assert_equal Hash, config.class
78
- assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
79
- assert_equal :current, configs[:stage_config][:method]
80
- end
81
-
82
- def test_setup_project_config_current
83
- args = {
84
- config: {},
85
- options: {current: true }
86
- }
87
- project = {}
88
- File.stub(:exist?, true) do
89
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
90
- end
91
- assert_equal Pathname.pwd.to_s, project[:directory]
92
- assert_equal :current, project[:stage_method]
93
- assert_nil project[:folders]
94
- assert_nil project[:files]
95
- end
96
-
97
- def test_setup_project_config_good_project_dir
98
- config = good_config
99
- args = {
100
- config: config,
101
- options: {sideload: true, project: :project1}
102
- }
103
- project = {}
104
- File.stub(:exist?, true) do
105
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
106
- end
107
- refute_equal RokuBuilder::BAD_PROJECT_DIR, project
108
- end
19
+ def test_manifest_config_in
20
+ options = build_options({
21
+ in: "/dev/null/infile",
22
+ sideload: true
23
+ })
24
+ config = good_config
25
+ configs = ConfigParser.parse(options: options, config: config)
26
+
27
+ assert_equal Hash, config.class
28
+ assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
29
+ assert_equal :in, configs[:stage_config][:method]
30
+ end
109
31
 
110
- def test_setup_project_config_bad_project_dir
111
- config = good_config
112
- config[:projects][:project1][:directory] = "/dev/null"
113
- args = {
114
- config: config,
115
- options: {sideload: true, project: :project1}
116
- }
117
- project = {}
118
- File.stub(:exist?, true) do
119
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
120
- end
121
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
122
- end
32
+ def test_manifest_config_in_expand
33
+ options = build_options({
34
+ in: "./infile",
35
+ sideload: true
36
+ })
37
+ config = good_config
38
+ configs = ConfigParser.parse(options: options, config: config)
39
+
40
+ assert_equal Hash, config.class
41
+ assert_equal File.join(Dir.pwd, "infile"), configs[:manifest_config][:root_dir]
42
+ assert_equal :in, configs[:stage_config][:method]
43
+ end
123
44
 
124
- def test_setup_project_config_bad_child_project_dir
125
- config = good_config
126
- config[:projects][:project_dir] = "/tmp"
127
- config[:projects][:project1][:directory] = "bad"
128
- args = {
129
- config: config,
130
- options: {sideload: true, project: :project1}
131
- }
132
- project = {}
133
- File.stub(:exist?, true) do
134
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
135
- end
136
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
137
- end
45
+ def test_manifest_config_current
46
+ options = build_options({
47
+ current: true,
48
+ sideload: true
49
+ })
50
+ configs = nil
51
+ config = good_config
52
+ Pathname.stub(:pwd, "/dev/null/infile") do
53
+ File.stub(:exist?, true) do
54
+ configs = ConfigParser.parse(options: options, config: config)
55
+ end
56
+ end
138
57
 
139
- def test_setup_project_config_bad_parent_project_dir
140
- config = good_config
141
- config[:projects][:project_dir] = "/bad"
142
- config[:projects][:project1][:directory] = "good"
143
- args = {
144
- config: config,
145
- options: {sideload: true, project: :project1}
146
- }
147
- project = {}
148
- File.stub(:exist?, true) do
149
- project = RokuBuilder::ConfigParser.send(:setup_project_config, **args)
150
- end
151
- assert_equal RokuBuilder::BAD_PROJECT_DIR, project
152
- end
58
+ assert_equal Hash, config.class
59
+ assert_equal "/dev/null/infile", configs[:manifest_config][:root_dir]
60
+ assert_equal :current, configs[:stage_config][:method]
61
+ end
153
62
 
154
- def test_setup_stage_config_script
155
- args = {
156
- configs: {project_config: {directory: "/tmp", stage_method: :script, stages: {production: {script: "script"}}}},
157
- options: {stage: "production", sideload: true},
158
- logger: Logger.new("/dev/null")
159
- }
160
- config = RokuBuilder::ConfigParser.send(:setup_stage_config, **args)[0]
161
- assert_equal args[:configs][:project_config][:stages][:production][:script], config[:key]
162
- end
63
+ def test_setup_project_config_bad_project
64
+ config = good_config
65
+ options = build_options({sideload: true, project: :project3, set_stage: true})
66
+ assert_raises ParseError do
67
+ File.stub(:exist?, true) do
68
+ ConfigParser.parse(options: options, config: config)
69
+ end
70
+ end
71
+ end
163
72
 
164
- def test_setup_stage_config_git_ref
165
- args = {
166
- configs: {project_config: {directory: "/tmp", stage_method: :git, }},
167
- options: {stage: "production", ref: "git-ref", sideload: true},
168
- logger: Logger.new("/dev/null")
169
- }
170
- config = RokuBuilder::ConfigParser.send(:setup_stage_config, **args)[0]
171
- assert_equal args[:options][:ref], config[:key]
172
- end
73
+ def test_setup_project_config_current
74
+ options = build_options({ sideload: true, current: true })
75
+ config = good_config
76
+ configs = nil
77
+ File.stub(:exist?, true) do
78
+ configs = ConfigParser.parse(options: options, config: config)
79
+ end
80
+ project = configs[:project_config]
81
+ assert_equal Pathname.pwd.to_s, project[:directory]
82
+ assert_equal :current, project[:stage_method]
83
+ assert_nil project[:folders]
84
+ assert_nil project[:files]
85
+ end
173
86
 
174
- def test_manifest_config_project_select
175
- logger = Logger.new("/dev/null")
176
- options = {
177
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
178
- stage: 'production',
179
- update_manifest: false,
180
- fetch: false,
181
- sideload: true
182
- }
183
- config = good_config
87
+ def test_setup_project_config_good_project_dir
88
+ config = good_config
89
+ options = build_options({sideload: true, project: :project1, set_stage: true})
90
+ File.stub(:exist?, true) do
91
+ ConfigParser.parse(options: options, config: config)
92
+ end
93
+ end
184
94
 
185
- code = nil
186
- configs = nil
95
+ def test_setup_project_config_bad_project_dir
96
+ config = good_config
97
+ config[:projects][:project1][:directory] = "/dev/null"
98
+ options = build_options({sideload: true, project: :project1, working: true})
99
+ assert_raises ParseError do
100
+ File.stub(:exist?, true) do
101
+ ConfigParser.parse(options: options, config: config)
102
+ end
103
+ end
104
+ end
187
105
 
188
- Pathname.stub(:pwd, Pathname.new("/dev/nuller")) do
189
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
106
+ def test_setup_project_config_bad_child_project_dir
107
+ config = good_config
108
+ config[:projects][:project_dir] = "/tmp"
109
+ config[:projects][:project1][:directory] = "bad"
110
+ options = build_options({sideload: true, project: :project1, working: true})
111
+ assert_raises ParseError do
112
+ File.stub(:exist?, true) do
113
+ ConfigParser.parse(options: options, config: config)
114
+ end
115
+ end
190
116
  end
191
117
 
192
- assert_equal RokuBuilder::SUCCESS, code
193
- assert_equal Hash, config.class
194
- assert_equal "/tmp", configs[:project_config][:directory]
195
- end
118
+ def test_setup_project_config_bad_parent_project_dir
119
+ config = good_config
120
+ config[:projects][:project_dir] = "/bad"
121
+ config[:projects][:project1][:directory] = "good"
122
+ options = build_options({sideload: true, project: :project1, set_stage: true})
123
+ assert_raises ParseError do
124
+ File.stub(:exist?, true) do
125
+ ConfigParser.parse(options: options, config: config)
126
+ end
127
+ end
128
+ end
196
129
 
197
- def test_manifest_config_project_directory
198
- logger = Logger.new("/dev/null")
199
- options = {
200
- sideload: true
201
- }
202
- config = good_config
203
- config[:projects][:project_dir] = "/tmp"
204
- config[:projects][:project1][:directory] = "project1"
205
- config[:projects][:project2][:directory] = "project2"
130
+ def test_setup_stage_config_bad_stage
131
+ config = good_config
132
+ options = build_options({sideload: true, project: :project1, stage: :bad, set_stage: true})
133
+ assert_raises ParseError do
134
+ File.stub(:exist?, true) do
135
+ ConfigParser.parse(options: options, config: config)
136
+ end
137
+ end
138
+ end
206
139
 
140
+ def test_setup_stage_config_bad_method
141
+ config = good_config
142
+ config[:projects][:project1][:stage_method] = :bad
143
+ options = build_options({sideload: true, project: :project1, set_stage: true})
144
+ assert_raises ParseError do
145
+ File.stub(:exist?, true) do
146
+ ConfigParser.parse(options: options, config: config)
147
+ end
148
+ end
149
+ end
207
150
 
208
- code = nil
209
- configs = nil
151
+ def test_setup_stage_config_missing_method
152
+ config = good_config
153
+ config[:projects][:project1][:stage_method] = nil
154
+ options = build_options({sideload: true, project: :project1, set_stage: true})
155
+ assert_raises ParseError do
156
+ File.stub(:exist?, true) do
157
+ ConfigParser.parse(options: options, config: config)
158
+ end
159
+ end
160
+ end
210
161
 
211
- Dir.stub(:exist?, true) do
212
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
162
+ def test_setup_stage_config_script
163
+ config = good_config
164
+ config[:projects][:project1][:stage_method] = :script
165
+ config[:projects][:project1][:stages][:production][:script] = {stage: "script", unstage: "script"}
166
+ options = build_options({stage: "production", sideload: true, set_stage: true})
167
+ parsed = ConfigParser.parse(options: options, config: config)
168
+ assert_equal parsed[:project_config][:stages][:production][:script], config[:projects][:project1][:stages][:production][:script]
213
169
  end
214
170
 
215
- assert_equal RokuBuilder::SUCCESS, code
216
- assert_equal Hash, config.class
217
- assert_equal "/tmp/project1", configs[:project_config][:directory]
218
- end
171
+ def test_setup_stage_config_git_ref
172
+ config = good_config
173
+ options = build_options({stage: "production", ref: "git-ref", sideload: true})
174
+ parsed = ConfigParser.parse(options: options, config: config)
175
+ assert_equal options[:ref], parsed[:stage_config][:key]
176
+ end
219
177
 
220
- def test_manifest_config_project_directory_select
221
- logger = Logger.new("/dev/null")
222
- options = {
223
- config: File.expand_path(File.join(File.dirname(__FILE__), "test_files", "controller_config_test", "valid_config.json")),
224
- stage: 'production',
225
- update_manifest: false,
226
- fetch: false,
227
- sideload: true
228
- }
229
- config = good_config
230
- config[:projects][:project_dir] = "/tmp"
231
- config[:projects][:project1][:directory] = "project1"
232
- config[:projects][:project2][:directory] = "project2"
233
-
234
- code = nil
235
- configs = nil
236
-
237
- Pathname.stub(:pwd, Pathname.new("/tmp/project2")) do
238
- Dir.stub(:exist?, true) do
239
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
178
+ def test_manifest_config_project_select
179
+ options = build_options({ sideload: true, working: true })
180
+ config = good_config
181
+ configs = nil
182
+ Pathname.stub(:pwd, Pathname.new("/dev/nuller")) do
183
+ configs = ConfigParser.parse(options: options, config: config)
240
184
  end
185
+ assert_equal Hash, config.class
186
+ assert_equal "/tmp", configs[:project_config][:directory]
241
187
  end
242
188
 
243
- assert_equal RokuBuilder::SUCCESS, code
244
- assert_equal Hash, config.class
245
- assert_equal "/tmp/project2", configs[:project_config][:directory]
246
- end
189
+ def test_manifest_config_project_directory
190
+ options = build_options({
191
+ sideload: true,
192
+ working: true
193
+ })
194
+ config = good_config
195
+ config[:projects][:project_dir] = "/tmp"
196
+ config[:projects][:project1][:directory] = "project1"
197
+ config[:projects][:project2][:directory] = "project2"
247
198
 
248
- def test_manifest_config_key_directory
249
- tmp_file = Tempfile.new("pkg")
250
- logger = Logger.new("/dev/null")
251
- options = {key: true, project: :project2}
252
- config = good_config
253
- config[:keys][:key_dir] = File.dirname(tmp_file.path)
254
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
199
+ configs = nil
255
200
 
201
+ Dir.stub(:exist?, true) do
202
+ configs = ConfigParser.parse(options: options, config: config)
203
+ end
256
204
 
257
- code = nil
258
- configs = nil
205
+ assert_equal Hash, config.class
206
+ assert_equal "/tmp/project1", configs[:project_config][:directory]
207
+ end
259
208
 
260
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
209
+ def test_manifest_config_project_directory_select
210
+ options = build_options({sideload: true, working: true})
211
+ config = good_config
212
+ config[:projects][:project_dir] = "/tmp"
213
+ config[:projects][:project1][:directory] = "project1"
214
+ config[:projects][:project2][:directory] = "project2"
215
+
216
+ configs = nil
217
+ Pathname.stub(:pwd, Pathname.new("/tmp/project2")) do
218
+ Dir.stub(:exist?, true) do
219
+ configs = ConfigParser.parse(options: options, config: config)
220
+ end
221
+ end
261
222
 
262
- assert_equal RokuBuilder::SUCCESS, code
263
- assert_equal Hash, config.class
264
- assert_equal tmp_file.path, configs[:key][:keyed_pkg]
265
- tmp_file.close
266
- end
223
+ assert_equal Hash, config.class
224
+ assert_equal "/tmp/project2", configs[:project_config][:directory]
225
+ end
267
226
 
268
- def test_manifest_config_key_directory_bad
269
- tmp_file = Tempfile.new("pkg")
270
- logger = Logger.new("/dev/null")
271
- options = {key: true, project: :project2}
272
- config = good_config
273
- config[:keys][:key_dir] = "/bad"
274
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
227
+ def test_key_config_key_directory
228
+ tmp_file = Tempfile.new("pkg")
229
+ options = build_options({key: true, project: :project2, set_stage: true})
230
+ config = good_config
231
+ config[:keys][:key_dir] = File.dirname(tmp_file.path)
232
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
275
233
 
276
- code = nil
277
- configs = nil
234
+ configs = ConfigParser.parse(options: options, config: config)
278
235
 
279
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
236
+ assert_equal Hash, config.class
237
+ assert_equal tmp_file.path, configs[:key][:keyed_pkg]
238
+ tmp_file.close
239
+ end
280
240
 
281
- assert_equal RokuBuilder::BAD_KEY_FILE, code
282
- end
241
+ def test_key_config_key_directory_bad
242
+ tmp_file = Tempfile.new("pkg")
243
+ options = build_options({key: true, project: :project2, set_stage: true})
244
+ config = good_config
245
+ config[:keys][:key_dir] = "/bad"
246
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)
247
+
248
+ assert_raises ParseError do
249
+ ConfigParser.parse(options: options, config: config)
250
+ end
251
+ end
283
252
 
284
- def test_manifest_config_key_path_bad
285
- tmp_file = Tempfile.new("pkg")
286
- logger = Logger.new("/dev/null")
287
- options = {key: true, project: :project2}
288
- config = good_config
289
- config[:keys][:key_dir] = File.dirname(tmp_file.path)
290
- config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)+".bad"
253
+ def test_key_config_key_path_bad
254
+ tmp_file = Tempfile.new("pkg")
255
+ options = build_options({key: true, project: :project2, set_stage: true})
256
+ config = good_config
257
+ config[:keys][:key_dir] = File.dirname(tmp_file.path)
258
+ config[:keys][:a][:keyed_pkg] = File.basename(tmp_file.path)+".bad"
291
259
 
292
- code = nil
293
- configs = nil
260
+ assert_raises ParseError do
261
+ ConfigParser.parse(options: options, config: config)
262
+ end
263
+ end
294
264
 
295
- code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
265
+ def test_key_config_bad_key
266
+ options = build_options({key: true, project: :project1, set_stage: true})
267
+ config = good_config
268
+ config[:projects][:project1][:stages][:production][:key] = "bad"
296
269
 
297
- assert_equal RokuBuilder::BAD_KEY_FILE, code
298
- end
270
+ assert_raises ParseError do
271
+ ConfigParser.parse(options: options, config: config)
272
+ end
273
+ end
299
274
 
300
- def test_setup_sideload_config
301
- args = {
302
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
303
- options: {sideload: true}
304
- }
305
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
306
-
307
- refute_nil args[:configs][:sideload_config]
308
- refute_nil args[:configs][:sideload_config][:content]
309
- refute_nil args[:configs][:build_config]
310
- refute_nil args[:configs][:build_config][:content]
311
- refute_nil args[:configs][:init_params][:loader]
312
- refute_nil args[:configs][:init_params][:loader][:root_dir]
313
-
314
- assert_nil args[:configs][:sideload_config][:content][:excludes]
315
- assert_nil args[:configs][:sideload_config][:update_manifest]
316
- assert_nil args[:configs][:sideload_config][:infile]
317
- end
318
- def test_setup_sideload_config_exclude
319
- args = {
320
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
321
- options: {sideload: true}
322
- }
323
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
324
- assert_nil args[:configs][:sideload_config][:content][:excludes]
325
-
326
- args = {
327
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
328
- options: {build: true}
329
- }
330
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
331
- refute_nil args[:configs][:sideload_config][:content][:excludes]
332
-
333
- args = {
334
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
335
- options: {package: true}
336
- }
337
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
338
- refute_nil args[:configs][:sideload_config][:content][:excludes]
339
-
340
- args = {
341
- configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
342
- options: {sideload: true, exclude: true}
343
- }
344
- RokuBuilder::ConfigParser.send(:setup_sideload_config, **args)
345
- refute_nil args[:configs][:sideload_config][:content][:excludes]
346
- end
275
+ def test_setup_sideload_config
276
+ config = good_config
277
+ options = build_options({sideload: true, working: true})
278
+ parsed = ConfigParser.parse(options: options, config: config)
279
+
280
+ refute_nil parsed[:sideload_config]
281
+ refute_nil parsed[:sideload_config][:content]
282
+ refute_nil parsed[:build_config]
283
+ refute_nil parsed[:build_config][:content]
284
+ refute_nil parsed[:init_params][:loader]
285
+ refute_nil parsed[:init_params][:loader][:root_dir]
286
+
287
+ assert_nil parsed[:sideload_config][:content][:excludes]
288
+ assert_nil parsed[:sideload_config][:update_manifest]
289
+ assert_nil parsed[:sideload_config][:infile]
290
+ end
291
+ def test_setup_sideload_config_exclude
292
+ config = good_config
293
+ config[:projects][:project1][:excludes] = []
294
+ options = build_options({sideload: true, working: true})
295
+ parsed = ConfigParser.parse(options: options, config: config)
296
+ assert_nil parsed[:sideload_config][:content][:excludes]
297
+
298
+ options = build_options({build: true, working: true})
299
+ parsed = ConfigParser.parse(options: options, config: config)
300
+ refute_nil parsed[:sideload_config][:content][:excludes]
301
+
302
+ options = build_options({package: true, set_stage: true})
303
+ parsed = ConfigParser.parse(options: options, config: config)
304
+ refute_nil parsed[:sideload_config][:content][:excludes]
305
+
306
+ options = build_options({sideload: true, working: true, exclude: true})
307
+ parsed = ConfigParser.parse(options: options, config: config)
308
+ refute_nil parsed[:sideload_config][:content][:excludes]
309
+ end
347
310
 
348
- def test_deeplink_app_config
349
- args = {
350
- config: {},
351
- configs: {project_config: {directory: "dir"}, init_params: {}, out: {}},
352
- options: {deeplink: "a:b", app_id: "xxxxxx"},
353
- }
354
- RokuBuilder::ConfigParser.send(:setup_simple_configs, **args)
355
- end
311
+ def test_deeplink_app_config
312
+ config = good_config
313
+ options = build_options({deeplink: "a:b", app_id: "xxxxxx"})
314
+ parsed = ConfigParser.parse(options: options, config: config)
356
315
 
357
- def test_monitor_config
358
- args = {
359
- config: {},
360
- configs: {project_config: {directory: "dir"}, init_params: {}, out: {}},
361
- options: {monitor: "main", regexp: "^A$"},
362
- }
363
- RokuBuilder::ConfigParser.send(:setup_active_configs, **args)
364
- refute_nil args[:configs][:monitor_config][:regexp]
365
- assert args[:configs][:monitor_config][:regexp].match("A")
366
- end
316
+ assert_equal parsed[:deeplink_config][:options], options[:deeplink]
317
+ assert_equal parsed[:deeplink_config][:app_id], options[:app_id]
318
+ end
367
319
 
368
- def test_outfile_config
369
- configs = {}
370
- args = {
371
- options: {out: nil},
372
- configs: configs
373
- }
374
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
375
- refute_nil configs[:out]
376
- refute_nil configs[:out][:folder]
377
- assert_nil configs[:out][:file]
378
- assert_equal "/tmp", configs[:out][:folder]
379
-
380
- configs = {}
381
- args = {
382
- options: {out: "/home/user"},
383
- configs: configs
384
- }
385
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
386
- refute_nil configs[:out]
387
- refute_nil configs[:out][:folder]
388
- assert_nil configs[:out][:file]
389
- assert_equal "/home/user", configs[:out][:folder]
390
-
391
- configs = {}
392
- args = {
393
- options: {out: "/home/user/file.pkg"},
394
- configs: configs
395
- }
396
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
397
- refute_nil configs[:out]
398
- refute_nil configs[:out][:folder]
399
- refute_nil configs[:out][:file]
400
- assert_equal "/home/user", configs[:out][:folder]
401
- assert_equal "file.pkg", configs[:out][:file]
402
-
403
- configs = {}
404
- args = {
405
- options: {out: "/home/user/file.zip"},
406
- configs: configs
407
- }
408
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
409
- refute_nil configs[:out]
410
- refute_nil configs[:out][:folder]
411
- refute_nil configs[:out][:file]
412
- assert_equal "/home/user", configs[:out][:folder]
413
- assert_equal "file.zip", configs[:out][:file]
414
-
415
- configs = {}
416
- args = {
417
- options: {out: "/home/user/file.jpg"},
418
- configs: configs
419
- }
420
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
421
- refute_nil configs[:out]
422
- refute_nil configs[:out][:folder]
423
- refute_nil configs[:out][:file]
424
- assert_equal "/home/user", configs[:out][:folder]
425
- assert_equal "file.jpg", configs[:out][:file]
426
-
427
- configs = {}
428
- args = {
429
- options: {out: "file.jpg"},
430
- configs: configs
431
- }
432
- RokuBuilder::ConfigParser.send(:setup_outfile, **args)
433
- refute_nil configs[:out]
434
- refute_nil configs[:out][:folder]
435
- refute_nil configs[:out][:file]
436
- assert_equal "/tmp", configs[:out][:folder]
437
- assert_equal "file.jpg", configs[:out][:file]
320
+ def test_monitor_config
321
+ config = good_config
322
+ options = build_options({monitor: "main", regexp: "^A$"})
323
+ parsed = ConfigParser.parse(options: options, config: config)
324
+ refute_nil parsed[:monitor_config][:regexp]
325
+ assert parsed[:monitor_config][:regexp].match("A")
326
+ end
327
+ def test_outfile_config_default
328
+ config = good_config
329
+ options = build_options({build: true, working: true, out: nil})
330
+ parsed = ConfigParser.parse(options: options, config: config)
331
+
332
+ refute_nil parsed[:out]
333
+ refute_nil parsed[:out][:folder]
334
+ assert_nil parsed[:out][:file]
335
+ assert_equal "/tmp", parsed[:out][:folder]
336
+ end
337
+ def test_outfile_config_folder
338
+ config = good_config
339
+
340
+ options = build_options({build: true, working: true, out: "/home/user"})
341
+ parsed = ConfigParser.parse(options: options, config: config)
342
+ refute_nil parsed[:out]
343
+ refute_nil parsed[:out][:folder]
344
+ assert_nil parsed[:out][:file]
345
+ assert_equal "/home/user", parsed[:out][:folder]
346
+ end
347
+ def test_outfile_config_pkg
348
+ config = good_config
349
+
350
+ options = build_options({build: true, working: true, out: "/home/user/file.pkg"})
351
+ parsed = ConfigParser.parse(options: options, config: config)
352
+ refute_nil parsed[:out]
353
+ refute_nil parsed[:out][:folder]
354
+ refute_nil parsed[:out][:file]
355
+ assert_equal "/home/user", parsed[:out][:folder]
356
+ assert_equal "file.pkg", parsed[:out][:file]
357
+ end
358
+ def test_outfile_config_zip
359
+ config = good_config
360
+
361
+ options = build_options({build: true, working: true, out: "/home/user/file.zip"})
362
+ parsed = ConfigParser.parse(options: options, config: config)
363
+ refute_nil parsed[:out]
364
+ refute_nil parsed[:out][:folder]
365
+ refute_nil parsed[:out][:file]
366
+ assert_equal "/home/user", parsed[:out][:folder]
367
+ assert_equal "file.zip", parsed[:out][:file]
368
+ end
369
+ def test_outfile_config_jpg
370
+ config = good_config
371
+
372
+ options = build_options({build: true, working: true, out: "/home/user/file.jpg"})
373
+ parsed = ConfigParser.parse(options: options, config: config)
374
+ refute_nil parsed[:out]
375
+ refute_nil parsed[:out][:folder]
376
+ refute_nil parsed[:out][:file]
377
+ assert_equal "/home/user", parsed[:out][:folder]
378
+ assert_equal "file.jpg", parsed[:out][:file]
379
+ end
380
+ def test_outfile_config_default_jpg
381
+ config = good_config
382
+
383
+ options = build_options({build: true, working: true, out: "file.jpg"})
384
+ parsed = ConfigParser.parse(options: options, config: config)
385
+ refute_nil parsed[:out]
386
+ refute_nil parsed[:out][:folder]
387
+ refute_nil parsed[:out][:file]
388
+ assert_equal "/tmp", parsed[:out][:folder]
389
+ assert_equal "file.jpg", parsed[:out][:file]
390
+ end
438
391
  end
439
392
  end