zabbix-client 0.0.9 → 0.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 58e29e20ecf90e9441dd7c1d121de6a7a95e1ba1
4
- data.tar.gz: f40d263ae3eca5d00bfade182dbc248673340dce
3
+ metadata.gz: 5ad7955298428f796e35412241a4d1338ae9fa16
4
+ data.tar.gz: 180b9d92f9d42baa3f864a5a8113838bc90ec9d3
5
5
  SHA512:
6
- metadata.gz: e7bea380ed3cbee8f9c89344e3f47684ec7e9d610fa4cf97eaa9232521c6a131d9341c77c5b671811fd68ef7cd97d9da5ee5cf30774be01fcbdc42041ae2bb1c
7
- data.tar.gz: c834b14e225e2f9a8db252b0282917bce8667e40b209977e9795e8b6348f7b88750eaa9dc9b1047c70d52173184a66e801fd655298391512eb8d6d1598e880b5
6
+ metadata.gz: 0810ae905c0b2864fde7081749ad5d54d29f6f6ff9f1ec46c9f863a94fd3b5ae6606f29c19c77620dbc6aec4a4fb7dfb31439c820f99c58899495fb7125cc4af
7
+ data.tar.gz: ee5eb325cc555b14566d61ae8d170be17751121bba79a4a5816da939e0bbaef31813e482c8be7576d822775e16a7f3606d62a13b1059186ffa60bd22d19b87a8
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --require spec_helper
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ script:
5
+ - bundle install
6
+ - bundle exec rake
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  This is a simple client of Zabbix API.
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/zabbix-client.svg)](http://badge.fury.io/rb/zabbix-client)
6
+ [![Build Status](https://travis-ci.org/winebarrel/zabbix-client.svg?branch=master)](https://travis-ci.org/winebarrel/zabbix-client)
6
7
 
7
8
  ## Installation
8
9
 
data/Rakefile CHANGED
@@ -1,2 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
2
3
 
4
+ RSpec::Core::RakeTask.new('spec')
5
+ task :default => :spec
@@ -81,7 +81,9 @@ class Zabbix::Client
81
81
 
82
82
  http.start do |h|
83
83
  headers = DEFAULT_HEADERS.merge(options[:headers] || {})
84
- request = Net::HTTP::Post.new(@client.url.path, headers)
84
+ path = @client.url.path
85
+ path = '/' if path.empty?
86
+ request = Net::HTTP::Post.new(path, headers)
85
87
  request.body = body
86
88
 
87
89
  basic_auth_user = options[:basic_auth_user]
@@ -98,7 +100,7 @@ class Zabbix::Client
98
100
  rescue JSON::ParserError
99
101
  response.value
100
102
  # Throw the following exception if no exception is thrown
101
- raise response.code + ' ' + response.message.dump
103
+ raise [response.code, response.message.dump, response.body].join(' ')
102
104
  end
103
105
  end
104
106
  end
@@ -1,5 +1,5 @@
1
1
  module Zabbix
2
2
  class Client
3
- VERSION = '0.0.9'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
@@ -0,0 +1,87 @@
1
+ $: << File.expand_path('..', __FILE__)
2
+ require 'zabbix/client'
3
+ require 'json'
4
+ require 'webrick'
5
+ require 'webrick/httpproxy'
6
+ require 'webrick/https'
7
+
8
+ trap(:INT) do
9
+ $zabbix_server.shutdown if $zabbix_server
10
+ end
11
+
12
+ RSpec.configure do |config|
13
+ config.after(:each) do
14
+ if $zabbix_server
15
+ shutdown_server($zabbix_server)
16
+ end
17
+ end
18
+ end
19
+
20
+ def start_server(server)
21
+ Thread.start do
22
+ server.start
23
+ end
24
+
25
+ sleep 0.1 until server.status == :Running
26
+ end
27
+
28
+ def shutdown_server(server)
29
+ server.shutdown
30
+ sleep 0.1 until server.status == :Stop
31
+ end
32
+
33
+ def default_handler
34
+ proc do |req, res|
35
+ res.body = JSON.dump(:result => {
36
+ :body => req.body,
37
+ :header => req.header,
38
+ })
39
+ end
40
+ end
41
+
42
+ def run_client(options = {})
43
+ options = {:handler => default_handler}.merge(options)
44
+
45
+ server_opts = {
46
+ :Port => 20080,
47
+ :Logger => WEBrick::Log.new('/dev/null'),
48
+ :AccessLog => []
49
+ }
50
+
51
+ if user_pass = options.delete(:basic_auth)
52
+ server_opts[:RequestCallback] = proc do |req, res|
53
+ WEBrick::HTTPAuth.basic_auth(req, res, "my realm") do |username, password|
54
+ [username, password] == user_pass
55
+ end
56
+ end
57
+ end
58
+
59
+ if ssl = options.delete(:ssl)
60
+ server_opts[:SSLEnable] = true
61
+ server_opts[:SSLCertName] = [['CN', WEBrick::Utils::getservername]]
62
+ end
63
+
64
+ $zabbix_server = WEBrick::HTTPServer.new(server_opts)
65
+
66
+ $zabbix_server.mount_proc('/', &options.delete(:handler))
67
+ start_server($zabbix_server)
68
+
69
+ url = (ssl ? 'https' : 'http') + '://localhost:20080'
70
+ client = Zabbix::Client.new(url, options)
71
+ yield(client)
72
+ end
73
+
74
+ def proxy
75
+ begin
76
+ server = WEBrick::HTTPProxyServer.new(
77
+ :Port => 30080,
78
+ :Logger => WEBrick::Log.new('/dev/null'),
79
+ :AccessLog => [])
80
+
81
+ start_server(server)
82
+
83
+ yield('localhost', 30080)
84
+ ensure
85
+ shutdown_server(server) if server
86
+ end
87
+ end
@@ -0,0 +1,116 @@
1
+ describe Zabbix::Client do
2
+ context "when call procedure" do
3
+ it do
4
+ run_client do |client|
5
+ result = client.apiinfo.version
6
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"apiinfo.version\",\"params\":[],\"id\":1}"
7
+ end
8
+ end
9
+
10
+ it do
11
+ run_client do |client|
12
+ result = client.item.get(:itemids => [1, 2, 3])
13
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1}"
14
+ end
15
+ end
16
+
17
+ it do
18
+ run_client do |client|
19
+ result = client.item.delete([1, 2, 3])
20
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.delete\",\"params\":[1,2,3],\"id\":1}"
21
+ end
22
+ end
23
+ end
24
+
25
+ context "login/logout" do
26
+ it do
27
+ run_client do |client|
28
+ client.user.login(:user => "scott", :password => "tiger")
29
+
30
+ result = client.apiinfo.version
31
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"apiinfo.version\",\"params\":[],\"id\":1}"
32
+
33
+ result = client.item.get(:itemids => [1, 2, 3])
34
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1,\"auth\":{\"body\":\"{\\\"jsonrpc\\\":\\\"2.0\\\",\\\"method\\\":\\\"user.login\\\",\\\"params\\\":{\\\"user\\\":\\\"scott\\\",\\\"password\\\":\\\"tiger\\\"},\\\"id\\\":1}\",\"header\":{\"content-type\":[\"application/json-rpc\"],\"accept-encoding\":[\"gzip;q=1.0,deflate;q=0.6,identity;q=0.3\"],\"accept\":[\"*/*\"],\"user-agent\":[\"Ruby\"],\"host\":[\"localhost:20080\"],\"content-length\":[\"91\"]}}}"
35
+
36
+ client.user.logout
37
+
38
+ result = client.item.get(:itemids => [1, 2, 3])
39
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1}"
40
+ end
41
+ end
42
+ end
43
+
44
+ context "when error happen" do
45
+ it do
46
+ handler = proc do |req, res|
47
+ res.status = 404
48
+ res.body = 'Not Found'
49
+ end
50
+
51
+ run_client(:handler => handler) do |client|
52
+ expect {
53
+ client.item.get(:itemids => [1, 2, 3])
54
+ }.to raise_error(Net::HTTPServerException, '404 "Not Found "')
55
+ end
56
+ end
57
+
58
+ it do
59
+ handler = proc do |req, res|
60
+ res.status = 200
61
+ res.body = 'non-JSON data'
62
+ end
63
+
64
+ run_client(:handler => handler) do |client|
65
+ expect {
66
+ client.item.get(:itemids => [1, 2, 3])
67
+ }.to raise_error(RuntimeError, '200 "OK " non-JSON data')
68
+ end
69
+ end
70
+ end
71
+
72
+ context "when add header" do
73
+ it do
74
+ run_client do |client|
75
+ result = client.item.get({:itemids => [1, 2, 3]}, :headers => {"User-Agent" => "Any User Agent"})
76
+ expect(result["header"]["user-agent"]).to eq ["Any User Agent"]
77
+ end
78
+ end
79
+
80
+ it do
81
+ run_client(:headers => {"User-Agent" => "Any User Agent"}) do |client|
82
+ result = client.apiinfo.version
83
+ expect(result["header"]["user-agent"]).to eq ["Any User Agent"]
84
+ end
85
+ end
86
+ end
87
+
88
+ context "when use proxy" do
89
+ it do
90
+ proxy do |proxy_host, proxy_port|
91
+ run_client(:proxy_host => proxy_host, :proxy_port => proxy_port) do |client|
92
+ result = client.item.get(:itemids => [1, 2, 3])
93
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1}"
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ context "when basic auth" do
100
+ it do
101
+ run_client(:basic_auth => ["scott", "tiger"], :basic_auth_user => "scott", :basic_auth_password => "tiger") do |client|
102
+ result = client.item.get(:itemids => [1, 2, 3])
103
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1}"
104
+ end
105
+ end
106
+ end
107
+
108
+ context "when https" do
109
+ it do
110
+ run_client(:ssl => true) do |client|
111
+ result = client.item.get(:itemids => [1, 2, 3])
112
+ expect(result["body"]).to eq "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"itemids\":[1,2,3]},\"id\":1}"
113
+ end
114
+ end
115
+ end
116
+ end
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'bundler', '~> 1.7'
21
+ spec.add_development_dependency 'bundler'
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
23
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabbix-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
@@ -14,16 +14,16 @@ dependencies:
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
41
55
  description: This is a simple client of Zabbix API.
42
56
  email:
43
57
  - sgwr_dts@yahoo.co.jp
@@ -46,6 +60,8 @@ extensions: []
46
60
  extra_rdoc_files: []
47
61
  files:
48
62
  - .gitignore
63
+ - .rspec
64
+ - .travis.yml
49
65
  - Gemfile
50
66
  - LICENSE.txt
51
67
  - README.md
@@ -54,6 +70,8 @@ files:
54
70
  - lib/zabbix/client/client.rb
55
71
  - lib/zabbix/client/error.rb
56
72
  - lib/zabbix/client/version.rb
73
+ - spec/spec_helper.rb
74
+ - spec/zabbix/client_spec.rb
57
75
  - zabbix-client.gemspec
58
76
  homepage: https://github.com/winebarrel/zabbix-client
59
77
  licenses:
@@ -75,8 +93,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
93
  version: '0'
76
94
  requirements: []
77
95
  rubyforge_project:
78
- rubygems_version: 2.0.14
96
+ rubygems_version: 2.4.1
79
97
  signing_key:
80
98
  specification_version: 4
81
99
  summary: This is a simple client of Zabbix API.
82
- test_files: []
100
+ test_files:
101
+ - spec/spec_helper.rb
102
+ - spec/zabbix/client_spec.rb