roku_builder 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +101 -0
  5. data/Guardfile +21 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +282 -0
  8. data/bin/roku +152 -0
  9. data/config.json.example +28 -0
  10. data/lib/roku_builder.rb +32 -0
  11. data/lib/roku_builder/config_manager.rb +157 -0
  12. data/lib/roku_builder/controller.rb +582 -0
  13. data/lib/roku_builder/inspector.rb +90 -0
  14. data/lib/roku_builder/keyer.rb +52 -0
  15. data/lib/roku_builder/linker.rb +46 -0
  16. data/lib/roku_builder/loader.rb +197 -0
  17. data/lib/roku_builder/manifest_manager.rb +63 -0
  18. data/lib/roku_builder/monitor.rb +62 -0
  19. data/lib/roku_builder/navigator.rb +107 -0
  20. data/lib/roku_builder/packager.rb +47 -0
  21. data/lib/roku_builder/tester.rb +32 -0
  22. data/lib/roku_builder/util.rb +31 -0
  23. data/lib/roku_builder/version.rb +4 -0
  24. data/rakefile +8 -0
  25. data/roku_builder.gemspec +36 -0
  26. data/tests/roku_builder/config_manager_test.rb +400 -0
  27. data/tests/roku_builder/controller_test.rb +250 -0
  28. data/tests/roku_builder/inspector_test.rb +153 -0
  29. data/tests/roku_builder/keyer_test.rb +88 -0
  30. data/tests/roku_builder/linker_test.rb +37 -0
  31. data/tests/roku_builder/loader_test.rb +153 -0
  32. data/tests/roku_builder/manifest_manager_test.rb +25 -0
  33. data/tests/roku_builder/monitor_test.rb +34 -0
  34. data/tests/roku_builder/navigator_test.rb +72 -0
  35. data/tests/roku_builder/packager_test.rb +125 -0
  36. data/tests/roku_builder/test_files/controller_test/load_config_test.json +28 -0
  37. data/tests/roku_builder/test_files/controller_test/valid_config.json +28 -0
  38. data/tests/roku_builder/test_files/loader_test/c +0 -0
  39. data/tests/roku_builder/test_files/loader_test/manifest +0 -0
  40. data/tests/roku_builder/test_files/loader_test/source/a +0 -0
  41. data/tests/roku_builder/test_files/loader_test/source/b +0 -0
  42. data/tests/roku_builder/test_files/manifest_manager_test/manifest_template +2 -0
  43. data/tests/roku_builder/test_helper.rb +6 -0
  44. data/tests/roku_builder/tester_test.rb +33 -0
  45. data/tests/roku_builder/util_test.rb +23 -0
  46. metadata +286 -0
@@ -0,0 +1,37 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class LinkerTest < Minitest::Test
4
+ def test_linker_link
5
+ connection = Minitest::Mock.new
6
+ faraday = Minitest::Mock.new
7
+ response = Minitest::Mock.new
8
+
9
+ device_config = {
10
+ ip: "111.222.333",
11
+ user: "user",
12
+ password: "password",
13
+ logger: Logger.new("/dev/null")
14
+ }
15
+ path = "/launch/dev?a=A&b=B:C&d=a%5Cb"
16
+ options = 'a:A, b:B:C, d:a\b'
17
+
18
+ connection.expect(:post, response, [path])
19
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
20
+ faraday.expect(:request, nil, [:multipart])
21
+ faraday.expect(:request, nil, [:url_encoded])
22
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
23
+ response.expect(:success?, true)
24
+
25
+ linker = RokuBuilder::Linker.new(**device_config)
26
+ success = nil
27
+ Faraday.stub(:new, connection, faraday) do
28
+ success = linker.link(options: options)
29
+ end
30
+
31
+ assert success
32
+
33
+ connection.verify
34
+ faraday.verify
35
+ response.verify
36
+ end
37
+ end
@@ -0,0 +1,153 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class LoaderTest < Minitest::Test
4
+ def test_loader_sideload
5
+ connection = Minitest::Mock.new
6
+ faraday = Minitest::Mock.new
7
+ io = Minitest::Mock.new
8
+ response = Minitest::Mock.new
9
+
10
+ root_dir = File.join(File.dirname(__FILE__), "test_files", "loader_test")
11
+ device_config = {
12
+ ip: "111.222.333",
13
+ user: "user",
14
+ password: "password",
15
+ logger: Logger.new("/dev/null")
16
+ }
17
+ loader_config = {
18
+ root_dir: root_dir,
19
+ folders: ["source"],
20
+ files: ["manifest"]
21
+ }
22
+ payload = {
23
+ mysubmit: "Replace",
24
+ archive: io,
25
+ }
26
+ path = "/plugin_install"
27
+
28
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
29
+ faraday.expect(:request, nil, [:multipart])
30
+ faraday.expect(:request, nil, [:url_encoded])
31
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
32
+ connection.expect(:post, response) do |arg1, arg2|
33
+ assert_equal path, arg1
34
+ assert_equal payload[:mysubmit], arg2[:mysubmit]
35
+ assert payload[:archive] === arg2[:archive]
36
+ end
37
+ response.expect(:status, 200)
38
+ response.expect(:body, "Install Success")
39
+
40
+ loader = RokuBuilder::Loader.new(**device_config)
41
+ result = nil
42
+ RokuBuilder::ManifestManager.stub(:build_version, "build_version") do
43
+ loader.stub(:build, "zip_file") do
44
+ Faraday.stub(:new, connection, faraday) do
45
+ Faraday::UploadIO.stub(:new, io) do
46
+ File.stub(:delete, nil) do
47
+ result = loader.sideload(**loader_config)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ assert_equal "build_version", result
55
+
56
+ connection.verify
57
+ faraday.verify
58
+ io.verify
59
+ response.verify
60
+ end
61
+
62
+ def test_loader_build_defining_folder_and_files
63
+ root_dir = File.join(File.dirname(__FILE__), "test_files", "loader_test")
64
+ device_config = {
65
+ ip: "111.222.333",
66
+ user: "user",
67
+ password: "password",
68
+ logger: Logger.new("/dev/null")
69
+ }
70
+ build_config = {
71
+ root_dir: root_dir,
72
+ folders: ["source"],
73
+ files: ["manifest"]
74
+ }
75
+ loader = RokuBuilder::Loader.new(**device_config)
76
+ outfile = nil
77
+ RokuBuilder::ManifestManager.stub(:build_version, "build_version") do
78
+ outfile = loader.build(**build_config)
79
+ end
80
+ Zip::File.open(outfile) do |file|
81
+ assert file.find_entry("manifest") != nil
82
+ assert file.find_entry("source/a") != nil
83
+ assert file.find_entry("source/b") != nil
84
+ assert_nil file.find_entry("c")
85
+ end
86
+ end
87
+ def test_loader_build_all_contents
88
+ root_dir = File.join(File.dirname(__FILE__), "test_files", "loader_test")
89
+ device_config = {
90
+ ip: "111.222.333",
91
+ user: "user",
92
+ password: "password",
93
+ logger: Logger.new("/dev/null")
94
+ }
95
+ build_config = {
96
+ root_dir: root_dir,
97
+ }
98
+ loader = RokuBuilder::Loader.new(**device_config)
99
+ outfile = nil
100
+ RokuBuilder::ManifestManager.stub(:build_version, "build_version") do
101
+ outfile = loader.build(**build_config)
102
+ end
103
+ Zip::File.open(outfile) do |file|
104
+ assert file.find_entry("manifest") != nil
105
+ assert file.find_entry("source/a") != nil
106
+ assert file.find_entry("source/b") != nil
107
+ assert file.find_entry("c") != nil
108
+ end
109
+ end
110
+
111
+ def test_loader_unload
112
+ connection = Minitest::Mock.new
113
+ faraday = Minitest::Mock.new
114
+ response = Minitest::Mock.new
115
+
116
+ device_config = {
117
+ ip: "111.222.333",
118
+ user: "user",
119
+ password: "password",
120
+ logger: Logger.new("/dev/null")
121
+ }
122
+ payload = {
123
+ mysubmit: "Delete",
124
+ archive: "",
125
+ }
126
+ path = "/plugin_install"
127
+
128
+ faraday.expect(:headers, {})
129
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
130
+ faraday.expect(:request, nil, [:multipart])
131
+ faraday.expect(:request, nil, [:url_encoded])
132
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
133
+ connection.expect(:post, response) do |arg1, arg2|
134
+ assert_equal path, arg1
135
+ assert_equal payload[:mysubmit], arg2[:mysubmit]
136
+ assert payload[:archive] === arg2[:archive]
137
+ end
138
+ response.expect(:status, 200)
139
+ response.expect(:body, "Install Success")
140
+
141
+ loader = RokuBuilder::Loader.new(**device_config)
142
+ result = nil
143
+ Faraday.stub(:new, connection, faraday) do
144
+ result = loader.unload
145
+ end
146
+
147
+ assert_equal true, result
148
+
149
+ connection.verify
150
+ faraday.verify
151
+ response.verify
152
+ end
153
+ end
@@ -0,0 +1,25 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class ManifestManagerTest < Minitest::Test
4
+ def test_manifest_manager_update
5
+ logger = Logger.new('/dev/null')
6
+ root_dir = File.join(File.dirname(__FILE__), "test_files", "manifest_manager_test")
7
+ FileUtils.cp(File.join(root_dir, "manifest_template"), File.join(root_dir, "manifest"))
8
+ build_version = nil
9
+ Time.stub(:now, Time.new(2001, 02, 01)) do
10
+ build_version = RokuBuilder::ManifestManager.update_build(root_dir: root_dir, logger: logger)
11
+ end
12
+ assert_equal "020101.2", build_version
13
+ FileUtils.rm(File.join(root_dir, "manifest"))
14
+ end
15
+
16
+ def test_manifest_manager_build_version
17
+ logger = Logger.new('/dev/null')
18
+ root_dir = File.join(File.dirname(__FILE__), "test_files", "manifest_manager_test")
19
+ FileUtils.cp(File.join(root_dir, "manifest_template"), File.join(root_dir, "manifest"))
20
+ build_version = nil
21
+ build_version = RokuBuilder::ManifestManager.build_version(root_dir: root_dir, logger: logger)
22
+ assert_equal "010101.1", build_version
23
+ FileUtils.rm(File.join(root_dir, "manifest"))
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class MonitorTest < Minitest::Test
4
+ def test_monitor_monit
5
+ connection = Minitest::Mock.new
6
+ device_config = {
7
+ ip: "111.222.333",
8
+ user: "user",
9
+ password: "password",
10
+ logger: Logger.new("/dev/null")
11
+ }
12
+ monitor_config = {
13
+ 'Host' => device_config[:ip],
14
+ 'Post' => 8085
15
+ }
16
+ monitor = RokuBuilder::Monitor.new(**device_config)
17
+
18
+ connection.expect(:waitfor, nil) do |config|
19
+ assert_equal /./, config['Match']
20
+ assert_equal false, config['Timeout']
21
+ end
22
+
23
+ def monitor.gets
24
+ sleep(0.1)
25
+ "q"
26
+ end
27
+
28
+ Net::Telnet.stub(:new, connection) do
29
+ monitor.monitor(type: :main)
30
+ end
31
+
32
+ connection.verify
33
+ end
34
+ end
@@ -0,0 +1,72 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class NavigatorTest < Minitest::Test
4
+ def test_navigator_nav
5
+ commands = {
6
+ up: "Up",
7
+ down: "Down",
8
+ right: "Right",
9
+ left: "Left",
10
+ select: "Select",
11
+ back: "Back",
12
+ home: "Home",
13
+ rew: "Rev",
14
+ ff: "Fwd",
15
+ play: "Play",
16
+ replay: "InstantReplay"
17
+ }
18
+ commands.each {|k,v|
19
+ path = "/keypress/#{v}"
20
+ navigator_test(path: path, input: k, type: :nav)
21
+ }
22
+ end
23
+
24
+ def test_navigator_type
25
+ path = "keypress/LIT_"
26
+ navigator_test(path: path, input: "Type", type: :text)
27
+ end
28
+
29
+ def navigator_test(path:, input:, type:)
30
+ connection = Minitest::Mock.new
31
+ faraday = Minitest::Mock.new
32
+ io = Minitest::Mock.new
33
+ response = Minitest::Mock.new
34
+
35
+ device_config = {
36
+ ip: "111.222.333",
37
+ user: "user",
38
+ password: "password",
39
+ logger: Logger.new("/dev/null")
40
+ }
41
+ if type == :nav
42
+ connection.expect(:post, response, [path])
43
+ response.expect(:success?, true)
44
+ elsif type == :text
45
+ input.split(//).each do |c|
46
+ path = "/keypress/LIT_#{CGI::escape(c)}"
47
+ connection.expect(:post, response, [path])
48
+ response.expect(:success?, true)
49
+ end
50
+ end
51
+ faraday.expect(:request, nil, [:multipart])
52
+ faraday.expect(:request, nil, [:url_encoded])
53
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
54
+
55
+ navigator = RokuBuilder::Navigator.new(**device_config)
56
+ success = nil
57
+ Faraday.stub(:new, connection, faraday) do
58
+ if type == :nav
59
+ success = navigator.nav(command: input)
60
+ elsif type == :text
61
+ success = navigator.type(text: input)
62
+ end
63
+ end
64
+
65
+ assert success
66
+
67
+ connection.verify
68
+ faraday.verify
69
+ io.verify
70
+ response.verify
71
+ end
72
+ end
@@ -0,0 +1,125 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ class PackagerTest < Minitest::Test
4
+ def test_packager_package_failed
5
+ connection = Minitest::Mock.new
6
+ faraday = Minitest::Mock.new
7
+ response = Minitest::Mock.new
8
+
9
+ device_config = {
10
+ ip: "111.222.333",
11
+ user: "user",
12
+ password: "password",
13
+ logger: Logger.new("/dev/null")
14
+ }
15
+ payload = {
16
+ mysubmit: "Package",
17
+ app_name: "app_name",
18
+ passwd: "password",
19
+ pkg_time: 0
20
+ }
21
+ package_config ={
22
+ app_name_version: "app_name",
23
+ out_file: "out_file",
24
+ password: "password"
25
+ }
26
+ path = "/plugin_package"
27
+
28
+ faraday.expect(:headers, {})
29
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
30
+ faraday.expect(:request, nil, [:multipart])
31
+ faraday.expect(:request, nil, [:url_encoded])
32
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
33
+ connection.expect(:post, response) do |arg1, arg2|
34
+ assert_equal path, arg1
35
+ assert_equal payload[:mysubmit], arg2[:mysubmit]
36
+ assert_equal payload[:app_name], arg2[:app_name]
37
+ assert_equal payload[:passwd], arg2[:passwd]
38
+ assert_equal payload[:pkg_time], arg2[:pkg_time]
39
+ end
40
+ response.expect(:body, "Failed: Error.")
41
+
42
+ packager = RokuBuilder::Packager.new(**device_config)
43
+ result = nil
44
+ Faraday.stub(:new, connection, faraday) do
45
+ Time.stub(:now, Time.at(0)) do
46
+ result = packager.package(**package_config)
47
+ end
48
+ end
49
+
50
+ assert_equal "Failed: Error.", result
51
+
52
+ connection.verify
53
+ faraday.verify
54
+ response.verify
55
+ end
56
+
57
+ def test_packager_package
58
+ connection = Minitest::Mock.new
59
+ faraday = Minitest::Mock.new
60
+ response = Minitest::Mock.new
61
+ io = Minitest::Mock.new
62
+
63
+ device_config = {
64
+ ip: "111.222.333",
65
+ user: "user",
66
+ password: "password",
67
+ logger: Logger.new("/dev/null")
68
+ }
69
+ payload = {
70
+ mysubmit: "Package",
71
+ app_name: "app_name",
72
+ passwd: "password",
73
+ pkg_time: 0
74
+ }
75
+ package_config ={
76
+ app_name_version: "app_name",
77
+ out_file: "out_file",
78
+ password: "password"
79
+ }
80
+ path = "/plugin_package"
81
+
82
+ faraday.expect(:headers, {})
83
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
84
+ faraday.expect(:request, nil, [:multipart])
85
+ faraday.expect(:request, nil, [:url_encoded])
86
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
87
+
88
+ faraday.expect(:request, nil, [:digest, device_config[:user], device_config[:password]])
89
+ faraday.expect(:adapter, nil, [Faraday.default_adapter])
90
+
91
+ connection.expect(:post, response) do |arg1, arg2|
92
+ assert_equal path, arg1
93
+ assert_equal payload[:mysubmit], arg2[:mysubmit]
94
+ assert_equal payload[:app_name], arg2[:app_name]
95
+ assert_equal payload[:passwd], arg2[:passwd]
96
+ assert_equal payload[:pkg_time], arg2[:pkg_time]
97
+ end
98
+ connection.expect(:get, response, ["/pkgs/pkg_url"])
99
+
100
+ response.expect(:body, "<a href=\"pkgs\">pkg_url</a>")
101
+ response.expect(:body, "<a href=\"pkgs\">pkg_url</a>")
102
+
103
+ response.expect(:status, 200)
104
+ response.expect(:body, "package_body")
105
+
106
+ io.expect(:write, nil, ["package_body"])
107
+
108
+ packager = RokuBuilder::Packager.new(**device_config)
109
+ result = nil
110
+ Faraday.stub(:new, connection, faraday) do
111
+ Time.stub(:now, Time.at(0)) do
112
+ File.stub(:open, nil, io) do
113
+ result = packager.package(**package_config)
114
+ end
115
+ end
116
+ end
117
+
118
+ assert_equal true, result
119
+
120
+ connection.verify
121
+ faraday.verify
122
+ response.verify
123
+ io.verify
124
+ end
125
+ end