smart_proxy_omaha 0.0.1

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 (52) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +14 -0
  3. data/LICENSE +675 -0
  4. data/README.md +99 -0
  5. data/Rakefile +14 -0
  6. data/bin/smart-proxy-omaha-sync +35 -0
  7. data/bundler.d/omaha.rb +1 -0
  8. data/extra/foreman-proxy-omaha-sync.cron +2 -0
  9. data/lib/smart_proxy_omaha.rb +3 -0
  10. data/lib/smart_proxy_omaha/configuration_loader.rb +17 -0
  11. data/lib/smart_proxy_omaha/dependency_injection.rb +8 -0
  12. data/lib/smart_proxy_omaha/foreman_client.rb +11 -0
  13. data/lib/smart_proxy_omaha/http_download.rb +65 -0
  14. data/lib/smart_proxy_omaha/http_request.rb +20 -0
  15. data/lib/smart_proxy_omaha/http_shared.rb +30 -0
  16. data/lib/smart_proxy_omaha/metadata.rb +34 -0
  17. data/lib/smart_proxy_omaha/metadata_provider.rb +23 -0
  18. data/lib/smart_proxy_omaha/omaha_api.rb +33 -0
  19. data/lib/smart_proxy_omaha/omaha_http_config.ru +9 -0
  20. data/lib/smart_proxy_omaha/omaha_plugin.rb +18 -0
  21. data/lib/smart_proxy_omaha/omaha_protocol.rb +65 -0
  22. data/lib/smart_proxy_omaha/omaha_protocol/eventacknowledgeresponse.rb +9 -0
  23. data/lib/smart_proxy_omaha/omaha_protocol/handler.rb +84 -0
  24. data/lib/smart_proxy_omaha/omaha_protocol/noupdateresponse.rb +9 -0
  25. data/lib/smart_proxy_omaha/omaha_protocol/request.rb +101 -0
  26. data/lib/smart_proxy_omaha/omaha_protocol/response.rb +33 -0
  27. data/lib/smart_proxy_omaha/omaha_protocol/updateresponse.rb +35 -0
  28. data/lib/smart_proxy_omaha/release.rb +121 -0
  29. data/lib/smart_proxy_omaha/release_provider.rb +37 -0
  30. data/lib/smart_proxy_omaha/release_repository.rb +11 -0
  31. data/lib/smart_proxy_omaha/syncer.rb +48 -0
  32. data/lib/smart_proxy_omaha/version.rb +5 -0
  33. data/settings.d/omaha.yml.example +5 -0
  34. data/smart_proxy_omaha.gemspec +23 -0
  35. data/test/fixtures/request_update_complete_error.xml +7 -0
  36. data/test/fixtures/request_update_complete_noupdate.xml +9 -0
  37. data/test/fixtures/request_update_complete_update.xml +9 -0
  38. data/test/fixtures/request_update_download_started.xml +7 -0
  39. data/test/fixtures/response_update_complete_error.xml +5 -0
  40. data/test/fixtures/response_update_complete_noupdate.xml +7 -0
  41. data/test/fixtures/response_update_complete_update.xml +19 -0
  42. data/test/fixtures/stable.html +97 -0
  43. data/test/omaha/http_download_test.rb +34 -0
  44. data/test/omaha/http_request_test.rb +12 -0
  45. data/test/omaha/metadata_provider_test.rb +33 -0
  46. data/test/omaha/omaha_api_test.rb +75 -0
  47. data/test/omaha/omaha_protocol/request_test.rb +77 -0
  48. data/test/omaha/release_provider_test.rb +59 -0
  49. data/test/omaha/release_test.rb +110 -0
  50. data/test/omaha/syncer_test.rb +41 -0
  51. data/test/test_helper.rb +18 -0
  52. metadata +167 -0
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+ require 'smart_proxy_omaha/omaha_protocol/request'
3
+
4
+ class RequestTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ Resolv.any_instance.stubs(:getname).returns('omaha.example.com')
8
+ @request = Proxy::Omaha::OmahaProtocol::Request.new(
9
+ xml_fixture('request_update_complete_update'),
10
+ :ip => '1.1.1.1',
11
+ :base_url => 'http://www.example.org/',
12
+ )
13
+ end
14
+
15
+ def test_parses_request
16
+ assert_equal 'e96281a6-d1af-4bde-9a0a-97b76e56dc57', @request.appid
17
+ assert_equal '1068', @request.osmajor
18
+ assert_equal '9.0', @request.osminor
19
+ assert_equal 'stable', @request.track
20
+ assert_equal 'amd64-usr', @request.board
21
+ assert_equal '1010.5.0', @request.alephversion
22
+ assert_equal '', @request.oemversion
23
+ assert_equal '', @request.oem
24
+ assert_equal 'CoreOS', @request.platform
25
+ assert_equal 3, @request.eventtype
26
+ assert_equal 2, @request.eventresult
27
+ assert @request.updatecheck
28
+ end
29
+
30
+ def test_from_coreos
31
+ assert @request.from_coreos?
32
+ end
33
+
34
+ def test_facts_data
35
+ expected = {
36
+ :facts => {
37
+ :_timestamp => 'now',
38
+ :_type => :foreman_omaha,
39
+ :alephversion => '1010.5.0',
40
+ :appid => 'e96281a6-d1af-4bde-9a0a-97b76e56dc57',
41
+ :board => 'amd64-usr',
42
+ :hostname => 'omaha.example.com',
43
+ :ipaddress => '1.1.1.1',
44
+ :ipaddress6 => nil,
45
+ :oem => '',
46
+ :oemversion => '',
47
+ :osmajor => '1068',
48
+ :osminor => '9.0',
49
+ :platform => 'CoreOS',
50
+ :track => 'stable',
51
+ :version =>'1068.9.0'
52
+ },
53
+ :name => 'omaha.example.com'
54
+ }
55
+ received = @request.facts_data
56
+ received[:facts][:_timestamp] = 'now'
57
+ assert_equal expected, received
58
+ end
59
+
60
+ def test_to_status
61
+ assert_equal :complete, @request.to_status
62
+ end
63
+
64
+ def test_parse_ipaddress
65
+ assert_equal '1.1.1.1', @request.ipaddress
66
+ assert_nil @request.ipaddress6
67
+
68
+ request6 = Proxy::Omaha::OmahaProtocol::Request.new(
69
+ xml_fixture('request_update_complete_update'),
70
+ :ip => '2001:db8::1',
71
+ :base_url => 'http://www.example.org/',
72
+ )
73
+
74
+ assert_nil request6.ipaddress
75
+ assert_equal '2001:db8::1', request6.ipaddress6
76
+ end
77
+ end
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+ require 'smart_proxy_omaha/release'
3
+ require 'smart_proxy_omaha/release_provider'
4
+
5
+ class ReleaseProviderTest < Test::Unit::TestCase
6
+ def setup
7
+ @provider = Proxy::Omaha::ReleaseProvider.new(:track => :stable)
8
+ end
9
+
10
+ def test_releases
11
+ stub_request(:get, 'https://stable.release.core-os.net/amd64-usr/').
12
+ to_return(:status => [200, 'OK'], :body => fixture('stable.html'))
13
+
14
+ expected = ['367.1.0',
15
+ '410.0.0',
16
+ '410.1.0',
17
+ '410.2.0',
18
+ '444.4.0',
19
+ '444.5.0',
20
+ '494.3.0',
21
+ '494.4.0',
22
+ '494.5.0',
23
+ '522.4.0',
24
+ '522.5.0',
25
+ '522.6.0',
26
+ '557.2.0',
27
+ '607.0.0',
28
+ '633.1.0',
29
+ '647.0.0',
30
+ '647.2.0',
31
+ '681.0.0',
32
+ '681.1.0',
33
+ '681.2.0',
34
+ '717.1.0',
35
+ '717.3.0',
36
+ '723.3.0',
37
+ '766.3.0',
38
+ '766.4.0',
39
+ '766.5.0',
40
+ '835.8.0',
41
+ '835.9.0',
42
+ '835.10.0',
43
+ '835.11.0',
44
+ '835.12.0',
45
+ '835.13.0',
46
+ '899.13.0',
47
+ '899.15.0',
48
+ '899.17.0',
49
+ '1010.5.0',
50
+ '1010.6.0',
51
+ '1068.6.0',
52
+ '1068.8.0',
53
+ '1068.9.0',
54
+ '1068.10.0',
55
+ '1122.2.0']
56
+
57
+ assert_equal expected.map {|v| Proxy::Omaha::Release.new(:track => @provider.track, :version => v) }, @provider.releases
58
+ end
59
+ end
@@ -0,0 +1,110 @@
1
+ require 'test_helper'
2
+ require 'fileutils'
3
+ require 'tmpdir'
4
+ require 'smart_proxy_omaha/release'
5
+
6
+ class ReleaseTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @contentpath = Dir.mktmpdir
10
+ Proxy::Omaha::Plugin.load_test_settings(
11
+ {
12
+ :contentpath => @contentpath
13
+ }
14
+ )
15
+ @release = Proxy::Omaha::Release.new(
16
+ :track => :stable,
17
+ :version => '1068.9.0',
18
+ )
19
+ end
20
+
21
+ def teardown
22
+ FileUtils.rm_rf(@contentpath)
23
+ end
24
+
25
+ def test_path
26
+ assert_equal "#{@contentpath}/stable/1068.9.0", @release.path
27
+ end
28
+
29
+ def test_exists?
30
+ assert_equal false, @release.exists?
31
+ FileUtils.mkdir_p(@release.path)
32
+ assert_equal true, @release.exists?
33
+ end
34
+
35
+ def test_create
36
+ @release.expects(:create_path).once.returns(true)
37
+ @release.expects(:download).once.returns(true)
38
+ @release.expects(:create_metadata).once.returns(true)
39
+ assert @release.create
40
+ end
41
+
42
+ def test_create_with_failure
43
+ @release.expects(:create_path).once.returns(false)
44
+ @release.expects(:download).never
45
+ @release.expects(:create_metadata).never
46
+ refute @release.create
47
+ end
48
+
49
+ def test_create_path
50
+ assert @release.create_path
51
+ assert File.directory?(@release.path)
52
+ end
53
+
54
+ def test_compare
55
+ older = Proxy::Omaha::Release.new(
56
+ :track => :stable,
57
+ :version => '100.0.0',
58
+ )
59
+ newer = Proxy::Omaha::Release.new(
60
+ :track => :stable,
61
+ :version => '2000.0.0',
62
+ )
63
+ assert_equal 0, @release.<=>(@release)
64
+ assert_equal -1, @release.<=>(newer)
65
+ assert_equal 1, @release.<=>(older)
66
+ end
67
+
68
+ def test_equality
69
+ other = Proxy::Omaha::Release.new(
70
+ :track => :stable,
71
+ :version => '100.0.0',
72
+ )
73
+ assert_equal @release, @release
74
+ refute_equal other, @release
75
+ refute_equal true, @release
76
+ end
77
+
78
+ def test_to_s
79
+ assert_equal '1068.9.0', @release.to_s
80
+ end
81
+
82
+ def test_download
83
+ stub_request(:get, /.*release\.core-os.*/).to_return(:status => [200, 'OK'], :body => "body")
84
+ expected = ['coreos_production_pxe.vmlinuz', 'coreos_production_pxe_image.cpio.gz', 'update.gz']
85
+
86
+ assert_equal true, @release.create_path
87
+ assert_equal true, @release.download
88
+
89
+ expected.each do |f|
90
+ assert File.exist?(File.join(@release.path, f))
91
+ end
92
+ end
93
+
94
+ def test_create_metadata
95
+ file = File.join(@release.path, 'metadata.json')
96
+
97
+ digest = mock()
98
+ digest.expects(:base64digest).twice.returns('foo')
99
+ File.expects(:size).once.returns(0)
100
+ Digest::SHA1.expects(:file).once.returns(digest)
101
+ Digest::SHA256.expects(:file).once.returns(digest)
102
+
103
+ expected = '{"release":"1068.9.0","sha1_b64":"foo","sha256_b64":"foo","size":0,"track":"stable"}'
104
+
105
+ assert_equal true, @release.create_path
106
+ assert_equal true, @release.create_metadata
107
+ assert File.exist?(file)
108
+ assert_equal expected, File.read(file)
109
+ end
110
+ end
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+ require 'smart_proxy_omaha/syncer'
3
+
4
+ class SyncerTest < Test::Unit::TestCase
5
+
6
+ class FakeRelease
7
+ def exists?
8
+ false
9
+ end
10
+
11
+ def valid?
12
+ true
13
+ end
14
+
15
+ def create; end
16
+ end
17
+
18
+ class FakeReleaseProvider
19
+ def releases
20
+ 3.times.map { FakeRelease.new }
21
+ end
22
+ end
23
+
24
+ def setup
25
+ Proxy::Omaha::Plugin.load_test_settings({:sync_releases => 1})
26
+ @provider = FakeReleaseProvider.new
27
+ @syncer = Proxy::Omaha::Syncer.new
28
+ @syncer.stubs(:release_provider).returns(@provider)
29
+ end
30
+
31
+ def test_sync
32
+ FakeRelease.any_instance.expects(:create).times(3)
33
+ @syncer.run
34
+ end
35
+
36
+ def test_sync_existing
37
+ FakeRelease.any_instance.stubs(:exists?).returns(true)
38
+ FakeRelease.any_instance.expects(:create).never
39
+ @syncer.run
40
+ end
41
+ end
@@ -0,0 +1,18 @@
1
+ require 'test/unit'
2
+ require 'mocha/setup'
3
+ require 'webmock/test_unit'
4
+ require 'mocha/test_unit'
5
+ require 'rack/test'
6
+
7
+ require 'smart_proxy_for_testing'
8
+
9
+ # create log directory in our (not smart-proxy) directory
10
+ FileUtils.mkdir_p File.dirname(Proxy::SETTINGS.log_file)
11
+
12
+ def fixture(name)
13
+ File.read(File.expand_path("../fixtures/#{name}", __FILE__))
14
+ end
15
+
16
+ def xml_fixture(name)
17
+ fixture("#{name}.xml")
18
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smart_proxy_omaha
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Timo Goebel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mocha
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: This plug-in adds support for the Omaha Procotol to Foreman's Smart Proxy.
84
+ email: mail@timogoebel.name
85
+ executables:
86
+ - smart-proxy-omaha-sync
87
+ extensions: []
88
+ extra_rdoc_files:
89
+ - README.md
90
+ - LICENSE
91
+ files:
92
+ - Gemfile
93
+ - LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - bin/smart-proxy-omaha-sync
97
+ - bundler.d/omaha.rb
98
+ - extra/foreman-proxy-omaha-sync.cron
99
+ - lib/smart_proxy_omaha.rb
100
+ - lib/smart_proxy_omaha/configuration_loader.rb
101
+ - lib/smart_proxy_omaha/dependency_injection.rb
102
+ - lib/smart_proxy_omaha/foreman_client.rb
103
+ - lib/smart_proxy_omaha/http_download.rb
104
+ - lib/smart_proxy_omaha/http_request.rb
105
+ - lib/smart_proxy_omaha/http_shared.rb
106
+ - lib/smart_proxy_omaha/metadata.rb
107
+ - lib/smart_proxy_omaha/metadata_provider.rb
108
+ - lib/smart_proxy_omaha/omaha_api.rb
109
+ - lib/smart_proxy_omaha/omaha_http_config.ru
110
+ - lib/smart_proxy_omaha/omaha_plugin.rb
111
+ - lib/smart_proxy_omaha/omaha_protocol.rb
112
+ - lib/smart_proxy_omaha/omaha_protocol/eventacknowledgeresponse.rb
113
+ - lib/smart_proxy_omaha/omaha_protocol/handler.rb
114
+ - lib/smart_proxy_omaha/omaha_protocol/noupdateresponse.rb
115
+ - lib/smart_proxy_omaha/omaha_protocol/request.rb
116
+ - lib/smart_proxy_omaha/omaha_protocol/response.rb
117
+ - lib/smart_proxy_omaha/omaha_protocol/updateresponse.rb
118
+ - lib/smart_proxy_omaha/release.rb
119
+ - lib/smart_proxy_omaha/release_provider.rb
120
+ - lib/smart_proxy_omaha/release_repository.rb
121
+ - lib/smart_proxy_omaha/syncer.rb
122
+ - lib/smart_proxy_omaha/version.rb
123
+ - settings.d/omaha.yml.example
124
+ - smart_proxy_omaha.gemspec
125
+ - test/fixtures/request_update_complete_error.xml
126
+ - test/fixtures/request_update_complete_noupdate.xml
127
+ - test/fixtures/request_update_complete_update.xml
128
+ - test/fixtures/request_update_download_started.xml
129
+ - test/fixtures/response_update_complete_error.xml
130
+ - test/fixtures/response_update_complete_noupdate.xml
131
+ - test/fixtures/response_update_complete_update.xml
132
+ - test/fixtures/stable.html
133
+ - test/omaha/http_download_test.rb
134
+ - test/omaha/http_request_test.rb
135
+ - test/omaha/metadata_provider_test.rb
136
+ - test/omaha/omaha_api_test.rb
137
+ - test/omaha/omaha_protocol/request_test.rb
138
+ - test/omaha/release_provider_test.rb
139
+ - test/omaha/release_test.rb
140
+ - test/omaha/syncer_test.rb
141
+ - test/test_helper.rb
142
+ homepage: http://github.com/theforeman/smart_proxy_omaha
143
+ licenses:
144
+ - GPLv3
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 2.4.5
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Omaha protocol support for smart-proxy
166
+ test_files: []
167
+ has_rdoc: