foreman_icinga 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/locale/gemspec.rb ADDED
@@ -0,0 +1,2 @@
1
+ # Matches foreman_icinga.gemspec
2
+ _('Set a downtime for hosts after they are deleted in Foreman.')
@@ -0,0 +1,20 @@
1
+ # This calls the main test_helper in Foreman-core
2
+ require 'test_helper'
3
+
4
+ # Add plugin to FactoryGirl's paths
5
+ FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
6
+ FactoryGirl.reload
7
+
8
+ def setup_default_settings
9
+ mock_icinga_setting :icinga_address, 'http://example.com/'
10
+ mock_icinga_setting :icinga_token, '123456'
11
+ mock_icinga_setting :icinga_enabled, true
12
+ mock_icinga_setting :icinga_ignore_failed_action, false
13
+ end
14
+
15
+ def mock_icinga_setting(name, value)
16
+ FactoryGirl.create(:setting,
17
+ :name => name.to_s,
18
+ :value => value,
19
+ :category => 'Setting::Icinga')
20
+ end
@@ -0,0 +1,63 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class IcingaHostExtensionsTest < ActiveSupport::TestCase
4
+ setup do
5
+ User.current = FactoryGirl.build(:user, :admin)
6
+ setup_default_settings
7
+ end
8
+
9
+ context 'when icinga is configured and enabled' do
10
+ setup do
11
+ Setting[:icinga_enabled] = true
12
+ Setting[:icinga_ignore_failed_action] = false
13
+ end
14
+
15
+ test 'it should be configured and enabled' do
16
+ host = Host.new
17
+ assert host.send(:icinga_configured?)
18
+ assert host.send(:icinga_enabled?)
19
+ end
20
+
21
+ test 'it should set a downtime when host is deleted' do
22
+ host = FactoryGirl.create(:host)
23
+ mock_successful_icinga_result
24
+ assert host.destroy
25
+ assert_empty host.errors
26
+ end
27
+
28
+ test 'it should not delete host and add errors when icinga_ignore_failed_action is false' do
29
+ host = FactoryGirl.create(:host)
30
+ mock_failed_icinga_result
31
+ refute host.destroy
32
+ assert_includes host.errors[:base], 'Error from Icinga server: \'A random error occured.\''
33
+ end
34
+
35
+ test 'it should delete host add no errors when icinga_ignore_failed_action is true' do
36
+ Setting[:icinga_ignore_failed_action] = true
37
+ host = FactoryGirl.create(:host)
38
+ mock_failed_icinga_result
39
+ assert host.destroy
40
+ assert_empty host.errors
41
+ end
42
+ end
43
+
44
+ def mock_successful_icinga_result
45
+ icinga_result = {
46
+ 'success' => true,
47
+ 'host' => 'localhost',
48
+ 'downtime_comment' => 'deployment',
49
+ 'downtime_duration' => 1200,
50
+ 'downtime_start' => 1427989338,
51
+ 'downtime_end' => 1427990238
52
+ }
53
+ Icinga.any_instance.expects(:call).once.returns(icinga_result)
54
+ end
55
+
56
+ def mock_failed_icinga_result
57
+ icinga_result = {
58
+ 'status' => 'error',
59
+ 'message' => 'A random error occured.',
60
+ }
61
+ Icinga.any_instance.expects(:call).once.returns(icinga_result)
62
+ end
63
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class IcingaStatusTest < ActiveSupport::TestCase
4
+ setup do
5
+ @host = FactoryGirl.create(:host)
6
+ @status = HostStatus::IcingaStatus.new(:host => @host)
7
+ end
8
+
9
+ test 'is valid' do
10
+ assert_valid @status
11
+ end
12
+
13
+ test '#relevant? is only for hosts not in build mode' do
14
+ @host.build = false
15
+ assert @status.relevant?
16
+
17
+ @host.build = true
18
+ refute @status.relevant?
19
+ end
20
+
21
+ test '#to_label returns string representation of status code' do
22
+ assert_kind_of String, @status.to_label
23
+ end
24
+
25
+ test '#to_global returns global OK when disabled by setting' do
26
+ mock_icinga_setting :icinga_affect_global_status, false
27
+ @status.status = HostStatus::IcingaStatus::WARNING
28
+ assert_equal HostStatus::Global::OK, @status.to_global
29
+ end
30
+
31
+ test '#to_global returns correct global status' do
32
+ mock_icinga_setting :icinga_affect_global_status, true
33
+ @status.status = HostStatus::IcingaStatus::OK
34
+ assert_equal HostStatus::Global::OK, @status.to_global
35
+
36
+ @status.status = HostStatus::IcingaStatus::WARNING
37
+ assert_equal HostStatus::Global::WARN, @status.to_global
38
+
39
+ @status.status = HostStatus::IcingaStatus::CRITICAL
40
+ assert_equal HostStatus::Global::ERROR, @status.to_global
41
+
42
+ @status.status = HostStatus::IcingaStatus::UNKNOWN
43
+ assert_equal HostStatus::Global::OK, @status.to_global
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class IcingaTest < ActiveSupport::TestCase
4
+ setup do
5
+ setup_default_settings
6
+ @icinga = Icinga.new
7
+ end
8
+
9
+ test '#default_params should contain token' do
10
+ default_params = @icinga.send('default_params')
11
+ assert_kind_of Hash, default_params
12
+ assert_equal '123456', default_params['token']
13
+ end
14
+
15
+ test '#icinga_url_for should return valid urls' do
16
+ assert_equal 'http://example.com/test/bla',
17
+ @icinga.send('icinga_url_for', 'test/bla')
18
+ assert_equal 'http://example.com/test/blubb?param=1',
19
+ @icinga.send('icinga_url_for', 'test/blubb', 'param' => '1')
20
+ end
21
+
22
+ def fake_response(data)
23
+ net_http_resp = Net::HTTPResponse.new(1.0, 200, 'OK')
24
+ RestClient::Response.create(data, net_http_resp, nil)
25
+ end
26
+
27
+ test 'should correctly parse response' do
28
+ @icinga.expects(:post)
29
+ .with('http://example.com/health?host=example.com&json=true&token=123456', '')
30
+ .returns(fake_response(JSON('healthy' => 'true')))
31
+ response = @icinga.call('health', '', 'host' => 'example.com')
32
+ assert_kind_of Hash, response
33
+ assert response['healthy']
34
+ end
35
+
36
+ test 'should return error message when result is empty' do
37
+ @icinga.expects(:post)
38
+ .with('http://example.com/health?host=example.com&json=true&token=123456', '')
39
+ .returns(fake_response(''))
40
+ response = @icinga.call('health', '', 'host' => 'example.com')
41
+ assert_kind_of Hash, response
42
+ assert_equal 'error', response['status']
43
+ assert_equal 'received empty result', response['message']
44
+ end
45
+ end
metadata CHANGED
@@ -1,21 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_icinga
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timo Goebel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-21 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2015-12-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
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: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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: rdoc
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'
13
55
  description: Set a downtime for hosts after they are deleted in Foreman.
14
- email: timo.goebel@dm.de
56
+ email:
57
+ - timo.goebel@dm.de
15
58
  executables: []
16
59
  extensions: []
17
60
  extra_rdoc_files: []
18
61
  files:
62
+ - LICENSE
63
+ - README.md
64
+ - Rakefile
19
65
  - app/helpers/concerns/foreman_icinga/hosts_helper_ext.rb
20
66
  - app/models/concerns/foreman_icinga/host_extensions.rb
21
67
  - app/models/host_status/icinga_status.rb
@@ -23,9 +69,18 @@ files:
23
69
  - app/services/icinga.rb
24
70
  - lib/foreman_icinga.rb
25
71
  - lib/foreman_icinga/engine.rb
72
+ - lib/foreman_icinga/version.rb
73
+ - lib/tasks/foreman_icinga_tasks.rake
74
+ - locale/Makefile
75
+ - locale/en/foreman_icinga.po
76
+ - locale/foreman_icinga.pot
77
+ - locale/gemspec.rb
78
+ - test/test_plugin_helper.rb
79
+ - test/unit/concerns/host_extensions_test.rb
80
+ - test/unit/host_status/icinga_status_test.rb
81
+ - test/unit/icinga_test.rb
26
82
  homepage: http://www.github.com/FILIADATAGmbH/foreman_icinga
27
- licenses:
28
- - GPL-3.0
83
+ licenses: []
29
84
  metadata: {}
30
85
  post_install_message:
31
86
  rdoc_options: []
@@ -47,5 +102,9 @@ rubygems_version: 2.4.5
47
102
  signing_key:
48
103
  specification_version: 4
49
104
  summary: This is a foreman plugin to interact with icingaweb2 deployment module.
50
- test_files: []
105
+ test_files:
106
+ - test/test_plugin_helper.rb
107
+ - test/unit/concerns/host_extensions_test.rb
108
+ - test/unit/host_status/icinga_status_test.rb
109
+ - test/unit/icinga_test.rb
51
110
  has_rdoc: