logstash-output-monasca_log_api 0.4 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59bde00a1b625fee42b79d0244c9f5bbb8852ca7
4
- data.tar.gz: 906cf828c864a7b3f7d913d96cf26e47677afa10
3
+ metadata.gz: 574bed4eaf7960e5e102494e439fe7433582f50e
4
+ data.tar.gz: 3be5356921f6b101be710c2a7eaa057dad41a219
5
5
  SHA512:
6
- metadata.gz: 53bbbb42df6fcd83d4e7c31fbb93382607d497bcb69cd9585ae06578bf65542422ac661632061aedc71e86d9deeefa009811ea0048e11e944acf83a7e28ea751
7
- data.tar.gz: 1154db9689c90dc9fadbe66076efe87c26f54ad04babcda105f6a18467b1056d10d05e16d59ae9f22acaa0092aa44a8e2a4d47bf9de273f07b34af1583bb803b
6
+ metadata.gz: 847120ddd6fc6a12c87ef8e8828fdfeb54e32e34d458735df35aad317d85b16fe9bf4b5c45f44fa632b8b04dc15047d4497301d5d8741a9405221954f9afb217
7
+ data.tar.gz: e369ab34daa398a122bddc9e099ee2e1c782e2321f85441849ca5829c37aaf0af598de7007985bd990715e8c63206f4131759c680d972d9d4d5d8226fdbbefde
data/README.md CHANGED
@@ -121,13 +121,15 @@ Save the configfile wherever you like. For example ~/logstash.conf
121
121
 
122
122
  | name | description | type | required | default | example |
123
123
  | --- | --- | --- | --- | --- | --- |
124
- | monasca_log_api | monasca log api url | string | true | | http://192.168.10.4:8080 |
125
- | monasca_log_api_version | monasca log api version | string | false | v3.0 | |
126
- | keystone_api | keystone api url | string | true | | http://192.168.10.5:35357/v3 |
124
+ | monasca_log_api_url | monasca log api url | string | true | | https://192.168.10.4:5607/v3.0 |
125
+ | monasca_log_api_insecure | set to true if monasca-log-api is using an insecure ssl certificate | boolean | false | false | |
126
+ | keystone_api_url | keystone api url | string | true | | http://192.168.10.5:35357/v3 |
127
+ | keystone_api_insecure | set to true if keystone is using an insecure ssl certificate | boolean | false | false | |
127
128
  | project_name | Keystone user credentials: project name | string | true | | monasca |
128
129
  | username | Keystone user credentials: username | string | true | | admin-agent |
129
130
  | password | Keystone user credentials: password | string | true | | password |
130
- | domain_id | Keystone user credentials: domain-id | string | true | | default |
131
+ | user_domain_name | Keystone user credentials: user domain name | string | true | | default |
132
+ | project_domain_name | Keystone user credentials: project domain name | string | true | | default |
131
133
  | dimensions | global array dimensions in form of key-value pairs to describe the monitored node | array | false | | ['app_type:kafka', 'priority:high'] |
132
134
  | num_of_logs | maximum number of logs that are send by one request to monasca-log-api | number | false | 125 | |
133
135
  | elapsed_time_sec | send logs if the maximum elapsed time in seconds is reached | number | false | 30 | |
@@ -140,12 +142,13 @@ Save the configfile wherever you like. For example ~/logstash.conf
140
142
  ```bash
141
143
  output {
142
144
  monasca_log_api {
143
- monasca_log_api => "http://192.168.10.4:8074"
144
- keystone_api => "http://192.168.10.5:35357/v3"
145
+ monasca_log_api_url => "http://192.168.10.4:5607/v3.0"
146
+ keystone_api_url => "http://192.168.10.5:35357/v3"
145
147
  project_name => "cmm"
148
+ project_domain_name => "Default"
146
149
  username => "cmm-operator"
150
+ user_domain_name => "Default"
147
151
  password => "admin"
148
- domain_id => "default"
149
152
  }
150
153
  }
151
154
  ```
@@ -154,17 +157,19 @@ output {
154
157
  ```bash
155
158
  output {
156
159
  monasca_log_api {
157
- monasca_log_api => "http://192.168.10.4:8074"
158
- monasca_log_api_version => "v3.0"
159
- keystone_api => "http://192.168.10.5:35357/v3"
160
+ monasca_log_api_url => "https://192.168.10.4:5607/v3.0"
161
+ monasca_log_api_insecure => true
162
+ keystone_api_url => "http://192.168.10.5:35357/v3"
163
+ keystone_api_insecure => false
160
164
  project_name => "cmm"
165
+ project_domain_name => "Default"
161
166
  username => "cmm-operator"
167
+ user_domain_name => "Default"
162
168
  password => "admin"
163
- domain_id => "default"
164
- dimensions => ["hostname:kamil", "ip:10.10.10.10"]
165
- num_of_logs => 100
166
- delay => 1
167
- elapsed_time_sec => 600
169
+ dimensions => ["hostname: monasca", "ip:192.168.10.4"]
170
+ num_of_logs => 125
171
+ delay => 10
172
+ elapsed_time_sec => 30
168
173
  max_data_size_kb => 5120
169
174
  }
170
175
  }
@@ -206,4 +211,3 @@ input {
206
211
  ## Open tasks
207
212
  * Language translations (Replace hardcoded String messages with a configuration/language file)
208
213
  * Exception handling (monasca-api requests)
209
- * https support
@@ -16,8 +16,9 @@
16
16
 
17
17
  require 'logstash/environment'
18
18
  require 'logger'
19
+ require 'json'
20
+ require 'net/http'
19
21
 
20
- require_relative '../helper/url_helper'
21
22
  require_relative './token'
22
23
 
23
24
  # This class connects to keystone and authenticates an user.
@@ -28,39 +29,43 @@ module LogStash::Outputs
28
29
 
29
30
  @client = nil
30
31
 
31
- def initialize(host)
32
+ def initialize(url, insecure=false)
32
33
  @logger = Cabin::Channel.get(LogStash)
33
- @client = get_client(host, '/v3/auth/tokens')
34
+ @uri = URI.parse(url)
35
+ @http = Net::HTTP.new(@uri.host, @uri.port)
36
+ if @uri.scheme == 'https'
37
+ @http.use_ssl = true
38
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if insecure
39
+ end
34
40
  end
35
41
 
36
- def authenticate(domain_id, username, password, project_name)
37
- auth_hash = generate_hash(domain_id, username, password, project_name)
38
- response = request(auth_hash)
42
+ def authenticate(username, user_domain_name, password, project_name, project_domain_name)
43
+ auth_hash = generate_hash(username, user_domain_name, password, project_name, project_domain_name)
44
+ post_header = {
45
+ 'Accept' => 'application/json',
46
+ 'Content-Type' => 'application/json',
47
+ }
48
+ response = request('/auth/tokens', post_header, auth_hash)
39
49
  handle_response(response)
40
50
  end
41
51
 
42
52
  private
43
53
 
44
- def request(auth_hash)
45
- @client.post(
46
- auth_hash,
47
- :content_type => 'application/json',
48
- :accept => 'application/json')
49
- end
50
-
51
- def get_client(host, path)
52
- RestClient::Resource.new(
53
- LogStash::Outputs::Helper::UrlHelper.generate_url(host, path).to_s)
54
+ def request(path, header, body)
55
+ @logger.debug('Sending authentication to ', :url => @uri.to_s)
56
+ post_request = Net::HTTP::Post.new(@uri.request_uri + path, header)
57
+ post_request.body = body
58
+ @http.request(post_request)
54
59
  end
55
60
 
56
- def generate_hash(domain_id, username, password, project_name)
61
+ def generate_hash(username, user_domain_name, password, project_name, project_domain_name)
57
62
  {
58
63
  "auth"=>{
59
64
  "identity"=>{
60
65
  "methods"=>["password"],
61
66
  "password"=>{
62
67
  "user"=>{
63
- "domain"=>{"id"=>domain_id},
68
+ "domain"=>{"name"=>user_domain_name},
64
69
  "name"=>username,
65
70
  "password"=>password
66
71
  }
@@ -68,7 +73,7 @@ module LogStash::Outputs
68
73
  },
69
74
  "scope"=>{
70
75
  "project"=>{
71
- "domain"=>{"id"=>domain_id},
76
+ "domain"=>{"name"=>project_domain_name},
72
77
  "name"=>project_name
73
78
  }
74
79
  }
@@ -77,16 +82,16 @@ module LogStash::Outputs
77
82
  end
78
83
 
79
84
  def handle_response(response)
80
- case response.code
81
- when 201
85
+ case response
86
+ when Net::HTTPCreated
82
87
  expires_at = DateTime.parse(
83
88
  JSON.parse(response.body)["token"]["expires_at"])
84
89
 
85
90
  @logger.debug("Authentication succeed: code=#{response.code}, "\
86
- "auth-token=#{response.headers[:x_subject_token]}, "\
91
+ "auth-token=#{response['X-Subject-Token']}, "\
87
92
  "expires_at=#{expires_at.to_time}")
88
93
 
89
- {:token => response.headers[:x_subject_token],
94
+ {:token => response['X-Subject-Token'],
90
95
  :expires_at => expires_at}
91
96
  else
92
97
  @logger.info("Authentication failed. Response=#{response}")
@@ -24,9 +24,9 @@ module LogStash::Outputs
24
24
  include Singleton
25
25
  attr_accessor :id, :expires_at, :keystone_client
26
26
 
27
- def request_new_token(domain_id, username, password, project_name)
27
+ def request_new_token(username, user_domain_name, password, project_name, project_domain_name)
28
28
  token = @keystone_client
29
- .authenticate(domain_id, username, password, project_name)
29
+ .authenticate(username, user_domain_name, password, project_name, project_domain_name)
30
30
  set_token(token[:token], token[:expires_at])
31
31
  @logger.info("New token requested")
32
32
  @logger.debug("token=#{@id}, expire_at=#{@expires_at}")
@@ -37,9 +37,9 @@ module LogStash::Outputs
37
37
  @expires_at = expires_at
38
38
  end
39
39
 
40
- def set_keystone_client keystone_api
40
+ def set_keystone_client(keystone_api, insecure)
41
41
  @keystone_client = LogStash::Outputs::Keystone::KeystoneClient
42
- .new keystone_api
42
+ .new(keystone_api, insecure)
43
43
  end
44
44
 
45
45
  def initialize
@@ -57,4 +57,4 @@ module LogStash::Outputs
57
57
 
58
58
  end
59
59
  end
60
- end
60
+ end
@@ -14,25 +14,23 @@
14
14
 
15
15
  # encoding: utf-8
16
16
 
17
- require 'rest-client'
18
17
  require 'logger'
19
- require 'singleton'
20
-
21
- # relative requirements
22
- require_relative '../helper/url_helper'
18
+ require 'json'
19
+ require 'net/http'
23
20
 
24
21
  # This class creates a connection to monasca-log-api
25
22
  module LogStash::Outputs
26
23
  module Monasca
27
24
  class MonascaLogApiClient
28
25
 
29
- SUPPORTED_API_VERSION = %w(3.0)
30
-
31
- def initialize(host, version)
26
+ def initialize(url, insecure=false)
32
27
  @logger = Cabin::Channel.get(LogStash)
33
- rest_client_url = LogStash::Outputs::Helper::UrlHelper
34
- .generate_url(host, '/' + check_version(version)).to_s
35
- @rest_client = RestClient::Resource.new(rest_client_url)
28
+ @uri = URI.parse(url)
29
+ @http = Net::HTTP.new(@uri.host, @uri.port)
30
+ if @uri.scheme == 'https'
31
+ @http.use_ssl = true
32
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE if insecure
33
+ end
36
34
  end
37
35
 
38
36
  def send_logs(logs, auth_token)
@@ -41,7 +39,8 @@ module LogStash::Outputs
41
39
  'X-Auth-Token' => auth_token,
42
40
  'Content-Type' => 'application/json',
43
41
  }
44
- request(logs.to_json, post_header)
42
+ response = request('/logs', post_header, logs.to_json)
43
+ handle_response(response)
45
44
  rescue => e
46
45
  @logger.warn('Sending event to monasca-log-api threw exception',
47
46
  :exceptionew => e)
@@ -50,20 +49,21 @@ module LogStash::Outputs
50
49
 
51
50
  private
52
51
 
53
- def request(body, header)
54
- @logger.debug('Sending data to ', :url => @rest_client.url)
55
- @rest_client['logs'].post(body, header)
52
+ def request(path, header, body)
53
+ @logger.debug('Sending data to ', :url => @uri.to_s)
54
+ post_request = Net::HTTP::Post.new(@uri.request_uri + path, header)
55
+ post_request.body = body
56
+ @http.request(post_request)
56
57
  end
57
58
 
58
- def check_version(version)
59
- tmp_version = version.sub('v','')
60
-
61
- unless SUPPORTED_API_VERSION.include? tmp_version
62
- raise "#{tmp_version} is not supported, "\
63
- "supported versions are #{SUPPORTED_API_VERSION}"
59
+ def handle_response(response)
60
+ case response
61
+ when Net::HTTPNoContent
62
+ @logger.debug("Successfully sent logs")
63
+ else
64
+ # TODO: Handle logs which could not be sent
65
+ @logger.error("Failed to send logs. Response=#{response}")
64
66
  end
65
-
66
- version
67
67
  end
68
68
 
69
69
  end
@@ -32,16 +32,19 @@ class LogStash::Outputs::MonascaLogApi < LogStash::Outputs::Base
32
32
  config_name 'monasca_log_api'
33
33
 
34
34
  # monasca-log-api configuration
35
- config :monasca_log_api, :validate => :string, :required => true
36
- config :monasca_log_api_version, :validate => :string, :required => false,
37
- :default => "v3.0"
35
+ config :monasca_log_api_url, :validate => :string, :required => true
36
+ config :monasca_log_api_insecure, :validate => :boolean, :required => false,
37
+ :default => false
38
38
 
39
39
  # keystone configuration
40
- config :keystone_api, :validate => :string, :required => true
40
+ config :keystone_api_url, :validate => :string, :required => true
41
+ config :keystone_api_insecure, :validate => :boolean, :required => false,
42
+ :default => false
41
43
  config :project_name, :validate => :string, :required => true
42
44
  config :username, :validate => :string, :required => true
43
45
  config :password, :validate => :string, :required => true
44
- config :domain_id, :validate => :string, :required => true
46
+ config :user_domain_name, :validate => :string, :required => true
47
+ config :project_domain_name, :validate => :string, :required => true
45
48
 
46
49
  # global dimensions
47
50
  config :dimensions, :validate => :array, :required => false
@@ -60,11 +63,12 @@ class LogStash::Outputs::MonascaLogApi < LogStash::Outputs::Base
60
63
 
61
64
  public
62
65
  def register
66
+ check_config
63
67
  @mutex = Mutex.new
64
68
  @logger.info('Registering keystone user',
65
69
  :username => username, :project_name => project_name)
66
70
  @monasca_log_api_client = LogStash::Outputs::Monasca::MonascaLogApiClient
67
- .new monasca_log_api, monasca_log_api_version
71
+ .new monasca_log_api_url, monasca_log_api_insecure
68
72
  @logs = Hash.new
69
73
  @start_time = nil
70
74
  init_token
@@ -87,13 +91,12 @@ class LogStash::Outputs::MonascaLogApi < LogStash::Outputs::Base
87
91
 
88
92
  def init_token
89
93
  token = LogStash::Outputs::Keystone::Token.instance
90
- token.set_keystone_client(keystone_api)
94
+ token.set_keystone_client(keystone_api_url, keystone_api_insecure)
91
95
  check_token
92
96
  end
93
97
 
94
98
  def encode(event)
95
99
  log = generate_log_from_event(event)
96
-
97
100
  log_bytesize = bytesize_of(log)
98
101
  logs_bytesize = bytesize_of(@logs)
99
102
 
@@ -163,7 +166,8 @@ class LogStash::Outputs::MonascaLogApi < LogStash::Outputs::Base
163
166
  def check_token
164
167
  token = LogStash::Outputs::Keystone::Token.instance
165
168
  token.request_new_token(
166
- domain_id, username, password, project_name) unless token.valid?
169
+ username, user_domain_name, password,
170
+ project_name, project_domain_name) unless token.valid?
167
171
  end
168
172
 
169
173
  def start_time_check
@@ -213,4 +217,15 @@ class LogStash::Outputs::MonascaLogApi < LogStash::Outputs::Base
213
217
  end
214
218
  end
215
219
 
220
+ def check_config
221
+ bad_val = []
222
+ bad_val << 'num_of_logs' if num_of_logs <= 0
223
+ bad_val << 'elapsed_time_sec' if elapsed_time_sec <= 0
224
+ bad_val << 'delay' if delay <= 0
225
+ bad_val << 'max_data_size_kb' if max_data_size_kb <= 0
226
+ unless bad_val.empty?
227
+ err = "Value of #{bad_val.join(', ')} need to be bigger than 0"
228
+ raise LogStash::ConfigurationError, err
229
+ end
230
+ end
216
231
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-monasca_log_api'
3
- s.version = '0.4'
3
+ s.version = '0.5.1'
4
4
  s.licenses = ['Apache License 2.0']
5
5
  s.summary = 'This gem is a logstash output plugin to connect via http to monasca-log-api.'
6
6
  s.description = 'This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program'
@@ -22,9 +22,9 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency 'logstash-core', '~> 2.0'
23
23
  s.add_runtime_dependency 'logstash-codec-plain', '~> 2.0'
24
24
  s.add_runtime_dependency 'logstash-codec-json', '~> 2.0'
25
- s.add_runtime_dependency 'rest-client', '~> 1.8'
26
25
  s.add_runtime_dependency 'vine', '~> 0.2'
27
26
  s.add_development_dependency 'logstash-devutils', '~> 0.0.14'
28
27
  s.add_development_dependency 'simplecov', '~> 0.10'
29
28
  s.add_development_dependency 'rubocop', '~> 0.37.2'
29
+ s.add_development_dependency 'webmock', '~> 2.0'
30
30
  end
@@ -15,17 +15,22 @@
15
15
  # encoding: utf-8
16
16
 
17
17
  require_relative '../spec_helper'
18
+ require 'webmock/rspec'
18
19
 
19
20
  describe LogStash::Outputs::Keystone::KeystoneClient do
20
21
 
22
+ let (:keystone_url) { 'http://keystone:5000/v3' }
23
+ let (:keystone_url_post) { keystone_url + '/auth/tokens' }
24
+ let (:keystone_url_https) { 'https://keystone:5000/v3' }
21
25
  let (:valid_date) { DateTime.now + Rational(1, 1440) }
22
26
  let (:token) { "f8cdafb7dce94444ad781a53ddaff693" }
23
- let (:valid_token) { {:token => token,
24
- :expires_at => valid_date } }
25
- let (:domain_id) { "default" }
27
+ let (:valid_token) { {"token" => token,
28
+ "expires_at" => valid_date } }
26
29
  let (:username) { "operator" }
30
+ let (:user_domain_name) { "Default" }
27
31
  let (:password) { "zPrHGl<IJtn=ux;{&T/nfXh=H" }
28
32
  let (:project_name) { "monasca" }
33
+ let (:project_domain_name) { "Default" }
29
34
  let (:auth_hash) {
30
35
  {
31
36
  "auth"=>{
@@ -33,7 +38,7 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
33
38
  "methods"=>["password"],
34
39
  "password"=>{
35
40
  "user"=>{
36
- "domain"=>{"id"=>domain_id},
41
+ "domain"=>{"name"=>user_domain_name},
37
42
  "name"=>username,
38
43
  "password"=>password
39
44
  }
@@ -41,7 +46,7 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
41
46
  },
42
47
  "scope"=>{
43
48
  "project"=>{
44
- "domain"=>{"id"=>domain_id},
49
+ "domain"=>{"name"=>project_domain_name},
45
50
  "name"=>project_name
46
51
  }
47
52
  }
@@ -49,8 +54,7 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
49
54
  }.to_json
50
55
  }
51
56
 
52
- let (:ok_response) { stub_response(201,
53
- {:x_subject_token => token},
57
+ let (:ok_response_body) {
54
58
  {
55
59
  "token"=>{
56
60
  "methods"=>["password"],
@@ -84,11 +88,10 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
84
88
  "audit_ids"=>["ORap7R56S2S-p6tFVeMkpg"],
85
89
  "issued_at"=>"2015-05-26T07:55:36.774146Z"
86
90
  }
87
- }.to_json)
91
+ }.to_json
88
92
  }
89
93
 
90
- let (:failed_response) { stub_response(401,
91
- {:x_subject_token => ""},
94
+ let (:failed_response_body) {
92
95
  {
93
96
  "error"=>{
94
97
  "message"=>"Could not find project: f8cdafb7dce94444ad781a53ddaff693 "\
@@ -96,13 +99,13 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
96
99
  "code"=>401,
97
100
  "title"=>"Unauthorized"
98
101
  }
99
- }.to_json)
102
+ }.to_json
100
103
  }
101
104
 
102
105
  context 'when initializing' do
103
106
  it 'then it should register without exceptions' do
104
- expect {LogStash::Outputs::Keystone::KeystoneClient.new('hostname:8080')}
105
- .to_not raise_error
107
+ expect {LogStash::Outputs::Keystone::KeystoneClient
108
+ .new(keystone_url)}.to_not raise_error
106
109
  end
107
110
 
108
111
  it "returns a failure if arguments are missing" do
@@ -113,57 +116,73 @@ describe LogStash::Outputs::Keystone::KeystoneClient do
113
116
 
114
117
  context 'when authenticates' do
115
118
  it 'then it should request to keystone' do
116
- expect_any_instance_of(RestClient::Resource).to receive(:post)
117
- .with(auth_hash, :content_type => 'application/json',
118
- :accept => 'application/json').and_return(ok_response)
119
+ expect_any_instance_of(Net::HTTP).to receive(:request)
120
+ .with(an_instance_of(Net::HTTP::Post))
119
121
 
120
122
  keystone_client = LogStash::Outputs::Keystone::KeystoneClient
121
- .new('hostname:8080')
122
- keystone_client.authenticate(domain_id, username, password, project_name)
123
+ .new(keystone_url)
124
+ keystone_client.authenticate(username, user_domain_name, password, project_name, project_domain_name)
123
125
  end
124
126
 
125
127
  it 'then it should return a token' do
126
- expect_any_instance_of(RestClient::Resource).to receive(:post)
127
- .and_return(ok_response)
128
+
129
+ stub_request(:post, keystone_url_post)
130
+ .to_return(:status => 201,
131
+ :body => ok_response_body,
132
+ :headers => { 'X-Subject-Token' => token })
133
+
128
134
  keystone_client = LogStash::Outputs::Keystone::KeystoneClient
129
- .new('hostname:8080')
135
+ .new(keystone_url)
130
136
  token = keystone_client
131
- .authenticate(domain_id, username, password, project_name)
132
- expect(token["token"]).to eq(valid_token["token"])
133
- expect(token["expires_at"].to_s).to eq(valid_token["expires_at"].to_s)
137
+ .authenticate(username, user_domain_name, password, project_name, project_domain_name)
138
+
139
+ expect(token[:token]).to eq(valid_token["token"])
140
+ expect(token[:expires_at].to_s).to eq(valid_token["expires_at"].to_s)
134
141
  end
135
142
  end
136
143
 
137
144
  context 'when authentication failed' do
138
145
  it 'then it should log an information' do
139
- expect_any_instance_of(RestClient::Resource).to receive(:post)
140
- .and_return(failed_response)
141
146
  expect_any_instance_of(Cabin::Channel).to receive(:info)
142
147
 
148
+ stub_request(:post, keystone_url_post)
149
+ .to_return(:status => 401,
150
+ :body => failed_response_body)
151
+
143
152
  keystone_client = LogStash::Outputs::Keystone::KeystoneClient
144
- .new('hostname:8080')
145
- keystone_client.authenticate(domain_id, username, password, project_name)
153
+ .new(keystone_url)
154
+ keystone_client.authenticate(username, user_domain_name, password, project_name, project_domain_name)
146
155
  end
147
156
 
148
157
  it 'then it should return nil' do
149
- expect_any_instance_of(RestClient::Resource).to receive(:post)
150
- .and_return(failed_response)
151
158
  expect_any_instance_of(Cabin::Channel).to receive(:info)
152
159
 
160
+ stub_request(:post, keystone_url_post)
161
+ .to_return(:status => 401,
162
+ :body => failed_response_body)
163
+
153
164
  keystone_client = LogStash::Outputs::Keystone::KeystoneClient
154
- .new('hostname:8080')
165
+ .new(keystone_url)
155
166
  expect(keystone_client
156
- .authenticate(domain_id, username, password, project_name)).to eq(nil)
167
+ .authenticate(username, user_domain_name, password, project_name, project_domain_name)).to eq(nil)
157
168
  end
158
169
  end
159
170
 
160
- private
171
+ context 'when using https' do
172
+ it 'should change use_ssl property' do
173
+ client = LogStash::Outputs::Keystone::KeystoneClient
174
+ .new(keystone_url_https)
175
+ http = client.instance_variable_get(:@http)
176
+ expect(http.use_ssl?).to be true
177
+ expect(http.verify_mode).to eq(nil)
178
+ end
161
179
 
162
- def stub_response(code, headers, body)
163
- response = double
164
- allow(response).to receive(:code) { code }
165
- allow(response).to receive(:headers) { headers }
166
- allow(response).to receive(:body) { body }
167
- response
180
+ it 'in case of insecure mode it should change verify_mode property' do
181
+ client = LogStash::Outputs::Keystone::KeystoneClient
182
+ .new(keystone_url_https, true)
183
+ http = client.instance_variable_get(:@http)
184
+ expect(http.use_ssl?).to be true
185
+ expect(http.verify_mode).to eq(OpenSSL::SSL::VERIFY_NONE)
186
+ end
168
187
  end
169
- end
188
+ end
@@ -15,65 +15,117 @@
15
15
  # encoding: utf-8
16
16
 
17
17
  require_relative '../spec_helper'
18
+ require 'webmock/rspec'
18
19
 
19
20
  describe LogStash::Outputs::Monasca::MonascaLogApiClient do
20
21
 
21
- let (:version) { '3.0' }
22
- let (:valid_date) { DateTime.now + Rational(1, 1440) }
23
- let (:token) { LogStash::Outputs::Keystone::Token
24
- .instance.set_token('abc', valid_date) }
25
- let (:logs) { }
22
+ let (:monasca_log_api_url) { 'http://monasca-log-api:5607/v3.0' }
23
+ let (:monasca_log_api_url_https) { 'https://monasca-log-api:5607/v3.0' }
24
+ let (:monasca_log_api_url_post) { monasca_log_api_url + "/logs" }
25
+ let (:token) { "f8cdafb7dce94444ad781a53ddaff693" }
26
+ let (:logs) {
27
+ {
28
+ "dimensions" =>
29
+ { "hostname" => "monasca",
30
+ "ip" => "192.168.10.4"
31
+ },
32
+ "logs" =>
33
+ [
34
+ {
35
+ "message" => "x-image-meta-min_disk: 0",
36
+ "dimensions" =>
37
+ {
38
+ "path" => "/var/log/monasca/log-api/info.log",
39
+ "service" => "monasca-log-api",
40
+ "language" => "python"
41
+ }
42
+ }
43
+ ]
44
+ }
45
+ }
46
+
26
47
  let (:header) { header = { 'X-Auth-Token' => token,
27
48
  'Content-Type' => 'application/json' } }
28
49
 
29
- before(:each) do
30
- stub_const(
31
- "LogStash::Outputs::Monasca::MonascaLogApiClient::SUPPORTED_API_VERSION",
32
- [version])
33
- end
34
-
35
50
  context 'when initializing' do
36
51
  it 'then it should register without exceptions' do
37
52
  expect {LogStash::Outputs::Monasca::MonascaLogApiClient
38
- .new('hostname:8080', 'v3.0')}.to_not raise_error
53
+ .new(monasca_log_api_url)}.to_not raise_error
54
+
55
+ expect {LogStash::Outputs::Monasca::MonascaLogApiClient
56
+ .new(monasca_log_api_url, false)}.to_not raise_error
57
+
58
+ expect {LogStash::Outputs::Monasca::MonascaLogApiClient
59
+ .new(monasca_log_api_url, true)}.to_not raise_error
39
60
  end
40
61
  end
41
62
 
42
63
  context 'when requesting to monasca-log-api' do
43
64
  it 'sends x-auth-token and content-type in header, logs in body' do
65
+ expect_any_instance_of(Cabin::Channel).to_not receive(:error)
66
+
67
+ stub_request(:post, monasca_log_api_url_post)
68
+ .with(:headers => {
69
+ 'Accept'=>'*/*',
70
+ 'Content-Type'=>'application/json',
71
+ 'User-Agent'=>'Ruby',
72
+ 'X-Auth-Token'=>'f8cdafb7dce94444ad781a53ddaff693'})
73
+ .to_return(:status => 204)
74
+
44
75
  client = LogStash::Outputs::Monasca::MonascaLogApiClient
45
- .new('hostname:8080', 'v3.0')
46
- expect_any_instance_of(RestClient::Resource).to receive(:post)
47
- .with(logs.to_json, header)
76
+ .new(monasca_log_api_url)
77
+
48
78
  client.send_logs(logs, token)
49
79
  end
50
80
  end
51
81
 
82
+ context 'when using https' do
83
+ it 'should change use_ssl property' do
84
+ client = LogStash::Outputs::Monasca::MonascaLogApiClient
85
+ .new(monasca_log_api_url_https)
86
+ http = client.instance_variable_get(:@http)
87
+ expect(http.use_ssl?).to be true
88
+ expect(http.verify_mode).to eq(nil)
89
+ end
90
+
91
+ it 'in case of insecure mode it should change verify_mode property' do
92
+ client = LogStash::Outputs::Monasca::MonascaLogApiClient
93
+ .new(monasca_log_api_url_https, true)
94
+ http = client.instance_variable_get(:@http)
95
+ expect(http.use_ssl?).to be true
96
+ expect(http.verify_mode).to eq(OpenSSL::SSL::VERIFY_NONE)
97
+ end
98
+ end
99
+
52
100
  context 'when request failed' do
53
- it 'rescued the exception and logs a failure' do
101
+ it 'logs a failure' do
102
+ expect_any_instance_of(Cabin::Channel).to receive(:error)
103
+
104
+ stub_request(:post, monasca_log_api_url_post)
105
+ .with(:headers => {
106
+ 'Accept'=>'*/*',
107
+ 'Content-Type'=>'application/json',
108
+ 'User-Agent'=>'Ruby',
109
+ 'X-Auth-Token'=>'f8cdafb7dce94444ad781a53ddaff693'})
110
+ .to_return(:status => 401)
111
+
54
112
  client = LogStash::Outputs::Monasca::MonascaLogApiClient
55
- .new('hostname:8080', 'v3.0')
56
- expect_any_instance_of(Cabin::Channel).to receive(:warn)
57
- expect_any_instance_of(RestClient::Resource).to receive(:post)
58
- .and_raise(Errno::ECONNREFUSED)
113
+ .new(monasca_log_api_url)
114
+
59
115
  client.send_logs(logs, token)
60
116
  end
61
117
  end
62
118
 
63
- context 'api version checking' do
64
- it 'should pass for correct version' do
65
- expect {LogStash::Outputs::Monasca::MonascaLogApiClient
66
- .new('hostname:8080', 'v3.0')}.to_not raise_error
67
- end
119
+ context 'when request throws an exception' do
120
+ it 'rescued the exception and logs a failure' do
121
+ expect_any_instance_of(Cabin::Channel).to receive(:warn)
68
122
 
69
- it 'should pass if version does not specify v' do
70
- expect {LogStash::Outputs::Monasca::MonascaLogApiClient
71
- .new('hostname:8080', '3.0')}.to_not raise_error
72
- end
123
+ stub_request(:post, monasca_log_api_url_post)
124
+ .to_raise(Errno::ECONNREFUSED)
73
125
 
74
- it 'should fail for unsupported version' do
75
- expect {LogStash::Outputs::Monasca::MonascaLogApiClient
76
- .new('hostname:8080', 'v4.0')}.to raise_exception
126
+ client = LogStash::Outputs::Monasca::MonascaLogApiClient
127
+ .new(monasca_log_api_url)
128
+ client.send_logs(logs, token)
77
129
  end
78
130
  end
79
131
 
@@ -25,7 +25,7 @@ describe 'outputs/monasca_log_api' do
25
25
  '@version' => '1',
26
26
  '@timestamp' => '2015-08-13T08:37:00.287Z',
27
27
  'path' => '/opt/logstash-2.2.0/test.log',
28
- 'host' => 'kamil-choroba',
28
+ 'host' => 'monasca',
29
29
  'type' => 'test-type',
30
30
  'tags' => ['test-service', 'high']
31
31
  })
@@ -56,7 +56,7 @@ describe 'outputs/monasca_log_api' do
56
56
  '@version' => '1',
57
57
  '@timestamp' => '2015-08-13T08:37:00.287Z',
58
58
  'path' => '/opt/logstash-2.2.0/test.log',
59
- 'host' => 'kamil-choroba',
59
+ 'host' => 'monasca',
60
60
  'type' => 'test-type',
61
61
  'dimensions' => '["[\"service\", \"nova\"]", "[\"priority\", \"high\"]"]',
62
62
  'tags' => ['test-service', 'high']
@@ -69,7 +69,7 @@ describe 'outputs/monasca_log_api' do
69
69
  '@version' => '1',
70
70
  '@timestamp' => '2015-08-13T08:37:00.287Z',
71
71
  'path' => '/opt/logstash-2.2.0/test.log',
72
- 'host' => 'kamil-choroba',
72
+ 'host' => 'monasca',
73
73
  'type' => 'test-type',
74
74
  'tags' => ['test-service', 'high']
75
75
  })
@@ -81,7 +81,7 @@ describe 'outputs/monasca_log_api' do
81
81
  '@version' => '1',
82
82
  '@timestamp' => '2015-08-13T08:37:00.287Z',
83
83
  'path' => '/opt/logstash-2.2.0/test.log',
84
- 'host' => 'kamil-choroba',
84
+ 'host' => 'monasca',
85
85
  'type' => 'test-type',
86
86
  'dimensions' => '["service", "nova"]',
87
87
  'tags' => ['test-service', 'high']
@@ -94,7 +94,7 @@ describe 'outputs/monasca_log_api' do
94
94
  '@version' => '1',
95
95
  '@timestamp' => '2015-08-13T08:37:00.287Z',
96
96
  'path' => '/opt/logstash-2.2.0/test.log',
97
- 'host' => 'kamil-choroba',
97
+ 'host' => 'monasca',
98
98
  'type' => 'test-type',
99
99
  'dimensions' => '["[\"service\", \"nova\"]", "[\"priority\", \"high\"]"]',
100
100
  'tags' => ['test-service', 'high']
@@ -102,18 +102,25 @@ describe 'outputs/monasca_log_api' do
102
102
  }
103
103
 
104
104
  let (:project_name) { 'monasca' }
105
+ let (:project_domain_name) { 'Admin' }
105
106
  let (:username) { 'operator' }
107
+ let (:user_domain_name) { 'Default' }
106
108
  let (:password) { 'qweqwe' }
107
109
 
110
+ let (:monasca_log_api_url) { 'http://192.168.10.4:5607/v3.0' }
111
+ let (:keystone_api_url) { 'http://192.168.10.5:5000/v3' }
112
+
108
113
  let (:complete_config) {
109
114
  {
110
- 'monasca_log_api' => 'http://192.168.10.4:8080',
111
- 'monasca_log_api_version' => 'v3.0',
112
- 'keystone_api' => 'http://192.168.10.5:5000',
115
+ 'monasca_log_api_url' => monasca_log_api_url,
116
+ 'monasca_log_api_insecure' => false,
117
+ 'keystone_api_url' => keystone_api_url,
118
+ 'keystone_api_insecure' => false,
113
119
  'project_name' => project_name,
120
+ 'project_domain_name' => project_domain_name,
114
121
  'username' => username,
122
+ 'user_domain_name' => user_domain_name,
115
123
  'password' => password,
116
- 'domain_id' => 'abadcf984cf7401e88579d393317b0d9',
117
124
  'dimensions' => ['service:test'],
118
125
  'num_of_logs' => 3,
119
126
  'elapsed_time_sec' => 5000,
@@ -124,13 +131,15 @@ describe 'outputs/monasca_log_api' do
124
131
 
125
132
  let (:complete_config_short_elapsed_time) {
126
133
  {
127
- 'monasca_log_api' => 'http://192.168.10.4:8080',
128
- 'monasca_log_api_version' => 'v3.0',
129
- 'keystone_api' => 'http://192.168.10.5:5000',
134
+ 'monasca_log_api_url' => monasca_log_api_url,
135
+ 'monasca_log_api_insecure' => false,
136
+ 'keystone_api_url' => keystone_api_url,
137
+ 'keystone_api_insecure' => false,
130
138
  'project_name' => project_name,
139
+ 'project_domain_name' => project_domain_name,
131
140
  'username' => username,
141
+ 'user_domain_name' => user_domain_name,
132
142
  'password' => password,
133
- 'domain_id' => 'abadcf984cf7401e88579d393317b0d9',
134
143
  'dimensions' => ['service:test'],
135
144
  'num_of_logs' => 3,
136
145
  'elapsed_time_sec' => 1,
@@ -141,12 +150,29 @@ describe 'outputs/monasca_log_api' do
141
150
 
142
151
  let (:simple_config) {
143
152
  {
144
- 'monasca_log_api' => 'http://192.168.10.4:8080',
145
- 'keystone_api' => 'http://192.168.10.5:5000',
153
+ 'monasca_log_api_url' => monasca_log_api_url,
154
+ 'keystone_api_url' => keystone_api_url,
155
+ 'project_name' => project_name,
156
+ 'project_domain_name' => project_domain_name,
157
+ 'username' => username,
158
+ 'user_domain_name' => user_domain_name,
159
+ 'password' => password,
160
+ }
161
+ }
162
+
163
+ let (:config_negative) {
164
+ {
165
+ 'monasca_log_api_url' => monasca_log_api_url,
166
+ 'keystone_api_url' => keystone_api_url,
146
167
  'project_name' => project_name,
168
+ 'project_domain_name' => project_domain_name,
147
169
  'username' => username,
170
+ 'user_domain_name' => user_domain_name,
148
171
  'password' => password,
149
- 'domain_id' => 'abadcf984cf7401e88579d393317b0d9',
172
+ 'num_of_logs' => rand(-999_999..-1),
173
+ 'elapsed_time_sec' => rand(-999_999..-1),
174
+ 'delay' => rand(-999_999..-1),
175
+ 'max_data_size_kb' => rand(-999_999..-1),
150
176
  }
151
177
  }
152
178
 
@@ -179,8 +205,7 @@ describe 'outputs/monasca_log_api' do
179
205
  monasca_log_api = LogStash::Plugin.lookup('output', 'monasca_log_api')
180
206
  .new(simple_config)
181
207
 
182
- expect(monasca_log_api.monasca_log_api_version).to be_instance_of(String)
183
- expect(monasca_log_api.monasca_log_api_version).not_to be_empty
208
+ expect(monasca_log_api.monasca_log_api_insecure).to be_falsey
184
209
  expect(monasca_log_api.dimensions).to be_nil
185
210
  expect(monasca_log_api.num_of_logs).to be_instance_of(Fixnum)
186
211
  expect(monasca_log_api.elapsed_time_sec).to be_instance_of(Fixnum)
@@ -192,8 +217,8 @@ describe 'outputs/monasca_log_api' do
192
217
  monasca_log_api = LogStash::Plugin.lookup('output', 'monasca_log_api')
193
218
  .new(complete_config)
194
219
 
195
- expect(monasca_log_api.monasca_log_api_version)
196
- .to eq(complete_config['monasca_log_api_version'])
220
+ expect(monasca_log_api.monasca_log_api_insecure)
221
+ .to eq(complete_config['monasca_log_api_insecure'])
197
222
  expect(monasca_log_api.dimensions).to eq(complete_config['dimensions'])
198
223
  expect(monasca_log_api.num_of_logs).to eq(complete_config['num_of_logs'])
199
224
  expect(monasca_log_api.elapsed_time_sec)
@@ -202,6 +227,14 @@ describe 'outputs/monasca_log_api' do
202
227
  expect(monasca_log_api.max_data_size_kb)
203
228
  .to eq(complete_config['max_data_size_kb'])
204
229
  end
230
+
231
+ it 'with negative numbers in configuration, then raise error' do
232
+ monasca_log_api = LogStash::Plugin.lookup('output', 'monasca_log_api')
233
+ .new(config_negative)
234
+
235
+ expect { monasca_log_api.register }
236
+ .to raise_error(LogStash::ConfigurationError), config_negative.to_s
237
+ end
205
238
  end
206
239
 
207
240
  context 'when registering' do
@@ -406,10 +439,11 @@ describe 'outputs/monasca_log_api' do
406
439
  expect_any_instance_of(LogStash::Outputs::Monasca::MonascaLogApiClient)
407
440
  .to receive(:send_logs)
408
441
  expect_any_instance_of(LogStash::Outputs::Keystone::KeystoneClient)
409
- .to receive(:authenticate).with(complete_config['domain_id'],
410
- complete_config['username'],
442
+ .to receive(:authenticate).with(complete_config['username'],
443
+ complete_config['user_domain_name'],
411
444
  complete_config['password'],
412
- complete_config['project_name'])
445
+ complete_config['project_name'],
446
+ complete_config['project_domain_name'])
413
447
  .and_return(expired_token, valid_token)
414
448
  monasca_log_api = LogStash::Outputs::MonascaLogApi.new(complete_config)
415
449
  allow(monasca_log_api).to receive(:start_time_check)
@@ -13,6 +13,7 @@
13
13
  # the License.
14
14
 
15
15
  # encoding: utf-8
16
+ require 'yaml'
16
17
 
17
18
  require 'simplecov'
18
19
  SimpleCov.start do
@@ -26,7 +27,3 @@ require_relative '../../lib/logstash/outputs/monasca_log_api'
26
27
  require_relative '../../lib/logstash/outputs/keystone/keystone_client'
27
28
  require_relative '../../lib/logstash/outputs/keystone/token'
28
29
  require_relative '../../lib/logstash/outputs/monasca/monasca_log_api_client'
29
- require_relative '../../lib/logstash/outputs/helper/url_helper'
30
-
31
- require 'yaml'
32
- require 'rest-client'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-monasca_log_api
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fujitsu Enabling Software Technology GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core
@@ -52,20 +52,6 @@ dependencies:
52
52
  version: '2.0'
53
53
  prerelease: false
54
54
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: rest-client
57
- version_requirements: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '1.8'
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - ~>
65
- - !ruby/object:Gem::Version
66
- version: '1.8'
67
- prerelease: false
68
- type: :runtime
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: vine
71
57
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,6 +108,20 @@ dependencies:
122
108
  version: 0.37.2
123
109
  prerelease: false
124
110
  type: :development
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '2.0'
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ~>
121
+ - !ruby/object:Gem::Version
122
+ version: '2.0'
123
+ prerelease: false
124
+ type: :development
125
125
  description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
126
126
  email: kamil.choroba@est.fujitsu.com,tomasz.trebski@ts.fujitsu.com
127
127
  executables: []
@@ -131,13 +131,11 @@ files:
131
131
  - Gemfile
132
132
  - LICENSE
133
133
  - README.md
134
- - lib/logstash/outputs/helper/url_helper.rb
135
134
  - lib/logstash/outputs/keystone/keystone_client.rb
136
135
  - lib/logstash/outputs/keystone/token.rb
137
136
  - lib/logstash/outputs/monasca/monasca_log_api_client.rb
138
137
  - lib/logstash/outputs/monasca_log_api.rb
139
138
  - logstash-output-monasca_log_api.gemspec
140
- - spec/outputs/helper/url_helper_spec.rb
141
139
  - spec/outputs/keystone/keystone_client_spec.rb
142
140
  - spec/outputs/keystone/token_spec.rb
143
141
  - spec/outputs/monasca/monasca_log_api_client_spec.rb
@@ -170,7 +168,6 @@ signing_key:
170
168
  specification_version: 4
171
169
  summary: This gem is a logstash output plugin to connect via http to monasca-log-api.
172
170
  test_files:
173
- - spec/outputs/helper/url_helper_spec.rb
174
171
  - spec/outputs/keystone/keystone_client_spec.rb
175
172
  - spec/outputs/keystone/token_spec.rb
176
173
  - spec/outputs/monasca/monasca_log_api_client_spec.rb
@@ -1,29 +0,0 @@
1
- # Copyright 2016 FUJITSU LIMITED
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
- # use this file except in compliance with the License. You may obtain a copy of
5
- # the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
- # License for the specific language governing permissions and limitations under
13
- # the License.
14
-
15
- # encoding: utf-8
16
-
17
- require 'uri'
18
-
19
- module LogStash::Outputs
20
- module Helper
21
- class UrlHelper
22
- def self.generate_url(host, path)
23
- uri = URI.parse(host)
24
- URI::HTTP.new(uri.scheme, nil, uri.host, uri.port, nil, path, nil,
25
- nil, nil)
26
- end
27
- end
28
- end
29
- end
@@ -1,43 +0,0 @@
1
- # Copyright 2016 FUJITSU LIMITED
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
- # use this file except in compliance with the License. You may obtain a copy of
5
- # the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
- # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
- # License for the specific language governing permissions and limitations under
13
- # the License.
14
-
15
- # encoding: utf-8
16
-
17
- require_relative '../spec_helper'
18
-
19
- describe LogStash::Outputs::Helper::UrlHelper do
20
-
21
- describe ".generate_url" do
22
- it "generates a URI::HTTP object" do
23
- expect(LogStash::Outputs::Helper::UrlHelper
24
- .generate_url('http://192.168.10.5:8080', '/v2.0')).to be_a URI::HTTP
25
- end
26
-
27
- it "should match a http url" do
28
- expect(LogStash::Outputs::Helper::UrlHelper
29
- .generate_url('http://192.168.10.5:8080', '/v2.0').to_s)
30
- .to eq('http://192.168.10.5:8080/v2.0')
31
- expect(LogStash::Outputs::Helper::UrlHelper
32
- .generate_url('http://est.fujitsu:40', nil).to_s)
33
- .to eq('http://est.fujitsu:40')
34
- expect(LogStash::Outputs::Helper::UrlHelper
35
- .generate_url('http://est.fujitsu:80', nil).to_s)
36
- .to eq('http://est.fujitsu')
37
- expect(LogStash::Outputs::Helper::UrlHelper
38
- .generate_url('https://192.168.10.5:8080', '/v2.0').to_s)
39
- .to eq('https://192.168.10.5:8080/v2.0')
40
- end
41
- end
42
-
43
- end