roku_builder 4.16.1 → 4.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6a3e4bd8c77f11f513140b9429bf590bd7d61a1
4
- data.tar.gz: 0b816aab48e6ffe5303ba740b068b1cf55416682
3
+ metadata.gz: 0f330332e0ec4f1832974dee629495887c1f3be1
4
+ data.tar.gz: 3b3f9230bfaaffc212e746465754489efcf39bf3
5
5
  SHA512:
6
- metadata.gz: 5eede887d08c2505cdde41e30839795a61b07b7f98a50ffcdf7521169f76e367fa58364dc94503a2f59a55606854d07a6e4cd2871cf994111135167272ee411a
7
- data.tar.gz: b62a5ded206dd32074409f89f4f52126b2b9d6b091a808f7723f702fe61e01a9bf64ee3076ba6d1a5d4ba5d15089411206932a48f14150fec781c28d0227c778
6
+ metadata.gz: 840ef1b935ba37594e9134b11736513b856add2e99741d5161f8b5fdd8c78e7b705ef25763eeedc838c1280777d9b639fbf2c983a60575ecf608910e0a3e5a1c
7
+ data.tar.gz: 18e06f83b9720f426c4ed6d2b4980b95692a0205f3747cd5405d2d28e2a34be66953e888d63aa32e447169be918d383dceae43e6b60ec3dbcb8c0902783a991f
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = 4.17.0 =
2
+
3
+ - Add ability to convert a package to squashfs
4
+
1
5
  = 4.16.1 =
2
6
 
3
7
  - Fixes for indentation checker
@@ -1,9 +1,14 @@
1
1
  # ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
2
2
 
3
3
  class ::Hash
4
- def deep_merge(second)
4
+ def deep_merger
5
5
  merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
6
- self.merge(second, &merger)
6
+ end
7
+ def deep_merge(second)
8
+ self.merge(second, &deep_merger)
9
+ end
10
+ def deep_merge!(second)
11
+ self.merge!(second, &deep_merger)
7
12
  end
8
13
  def deep_dup
9
14
  Marshal.load(Marshal.dump(self))
@@ -10,7 +10,8 @@ module RokuBuilder
10
10
  {
11
11
  sideload: {source: true, device: true, stage: true},
12
12
  build: {source: true, stage: true, exclude: true},
13
- delete: {device: true}
13
+ delete: {device: true},
14
+ squash: {device: true}
14
15
  }
15
16
  end
16
17
 
@@ -25,6 +26,9 @@ module RokuBuilder
25
26
  parser.on("-b", "--build", "Build a zip to be sideloaded") do
26
27
  options[:build] = true
27
28
  end
29
+ parser.on("--squash", "Convert currently sideloaded application to squashfs") do
30
+ options[:squash] = true
31
+ end
28
32
  parser.separator "Options:"
29
33
  parser.on("-x", "--exclude", "Apply exclude config to sideload") do
30
34
  options[:exclude] = true
@@ -70,6 +74,15 @@ module RokuBuilder
70
74
  end
71
75
  end
72
76
 
77
+ # Convert sideloaded app to squashfs
78
+ def squash(options:, ignoreFailure: false)
79
+ payload = {mysubmit: "Convert to squashfs", archive: ""}
80
+ response = multipart_connection.post "/plugin_install", payload
81
+ unless response.status == 200 and response.body =~ /Conversion succeeded/ or ignoreFailure
82
+ raise ExecutionError, "Failed Converting to Squashfs"
83
+ end
84
+ end
85
+
73
86
  def copy(options:, path:)
74
87
  @options = options
75
88
  @target = path
@@ -37,7 +37,9 @@ module RokuBuilder
37
37
  def package(options:)
38
38
  check_options(options)
39
39
  #sideload
40
- Loader.new(config: @config).sideload(options: options)
40
+ loader = Loader.new(config: @config)
41
+ loader.sideload(options: options)
42
+ loader.squash(options: options) if @config.stage[:squash]
41
43
  #rekey
42
44
  key(options: options)
43
45
  #package
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "4.16.1"
5
+ VERSION = "4.17.0"
6
6
  end
@@ -34,9 +34,10 @@ module RokuBuilder
34
34
  parser = OptionParser.new
35
35
  options = {}
36
36
  Loader.parse_options(parser: parser, options: options)
37
- argv = ["roku", "-s", "-d", "-b", "-x"]
37
+ argv = ["roku", "-l", "--squash", "-d", "-b", "-x"]
38
38
  parser.parse! argv
39
39
  assert options[:sideload]
40
+ assert options[:squash]
40
41
  assert options[:delete]
41
42
  assert options[:build]
42
43
  assert options[:exclude]
@@ -112,6 +113,22 @@ module RokuBuilder
112
113
  loader.delete(options: @options)
113
114
  end
114
115
  end
116
+ def test_loader_squash
117
+ @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
118
+ to_return(status: 200, body: "Conversion succeeded", headers: {}))
119
+
120
+ loader = Loader.new(config: @config)
121
+ loader.squash(options: @options)
122
+ end
123
+ def test_loader_squash_fail
124
+ @request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
125
+ to_return(status: 200, body: "Conversion failed", headers: {}))
126
+
127
+ loader = Loader.new(config: @config)
128
+ assert_raises ExecutionError do
129
+ loader.squash(options: @options)
130
+ end
131
+ end
115
132
  def test_copy_files
116
133
  loader = Loader.new(config: @config)
117
134
  Dir.mktmpdir do |dir|
@@ -72,7 +72,6 @@ module RokuBuilder
72
72
  packager.package(options: options)
73
73
  end
74
74
  end
75
-
76
75
  def test_packager_package
77
76
  loader = Minitest::Mock.new
78
77
  inspector = Minitest::Mock.new
@@ -118,6 +117,54 @@ module RokuBuilder
118
117
  inspector.verify
119
118
  logger.verify
120
119
  end
120
+ def test_packager_package_squash
121
+ loader = Minitest::Mock.new
122
+ inspector = Minitest::Mock.new
123
+ io = Minitest::Mock.new
124
+ logger = Minitest::Mock.new
125
+ config = good_config(PackagerTest)
126
+ config[:projects][:project1][:stages][:production][:squash] = true
127
+ config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production", inspect_package: true, verbose: true}, false, config)
128
+
129
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
130
+ to_return(status: 200, body: "", headers: {}).times(2))
131
+ body = "<a href=\"pkgs\">pkg_url</a>"
132
+ @requests.push(stub_request(:post, "http://192.168.0.100/plugin_package").
133
+ to_return(status: 200, body: body, headers: {}).times(2))
134
+ body = "package_body"
135
+ @requests.push(stub_request(:get, "http://192.168.0.100/pkgs/pkg_url").
136
+ to_return(status: 200, body: body, headers: {}))
137
+
138
+ loader.expect(:sideload, nil, [Hash])
139
+ loader.expect(:squash, nil, [Hash])
140
+ io.expect(:write, nil, ["package_body"])
141
+ inspector.expect(:inspect, nil, [Hash])
142
+
143
+ logger.expect(:debug, nil, [String])
144
+ io.expect(:each_line, nil)
145
+ logger.expect(:info, nil) do |message|
146
+ assert_match(/\/tmp\//, message)
147
+ end
148
+
149
+ Logger.class_variable_set(:@@instance, logger)
150
+ packager = Packager.new(config: config)
151
+ dev_id = Proc.new {"#{Random.rand(999999999999)}"}
152
+ Loader.stub(:new, loader) do
153
+ Time.stub(:now, Time.at(0)) do
154
+ File.stub(:open, nil, io) do
155
+ Inspector.stub(:new, inspector) do
156
+ packager.stub(:dev_id, dev_id) do
157
+ packager.package(options: options)
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ io.verify
164
+ loader.verify
165
+ inspector.verify
166
+ logger.verify
167
+ end
121
168
  def test_packager_dev_id
122
169
  body = "v class=\"roku-font-5\"><label>Your Dev ID: &nbsp;</label> dev_id<hr></div>"
123
170
  @requests.push(stub_request(:get, "http://192.168.0.100/plugin_package").
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.16.1
4
+ version: 4.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - greeneca
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-12 00:00:00.000000000 Z
11
+ date: 2019-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip