bicho 0.0.7 → 0.0.8
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.
- data/lib/bicho/client.rb +37 -20
- data/lib/bicho/plugins/novell.rb +14 -13
- data/lib/bicho/version.rb +1 -1
- data/test/test_novell_plugin.rb +29 -12
- metadata +2 -2
data/lib/bicho/client.rb
CHANGED
@@ -162,34 +162,51 @@ module Bicho
|
|
162
162
|
# on the server
|
163
163
|
# @returns [Array<String>] list of bugs
|
164
164
|
def expand_named_query(what)
|
165
|
+
url = @api_url.clone
|
166
|
+
url.path = '/buglist.cgi'
|
167
|
+
url.query = "cmdtype=runnamed&namedcmd=#{URI.escape(what)}&ctype=atom"
|
168
|
+
logger.info("Expanding named query: '#{what}' to #{url.request_uri}")
|
169
|
+
fetch_named_query_url(url, 5)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Fetches a named query by its full url
|
173
|
+
# @private
|
174
|
+
# @returns [Array<String>] list of bugs
|
175
|
+
def fetch_named_query_url(url, redirects_left)
|
165
176
|
if not @userid
|
166
177
|
raise "You need to be authenticated to use named queries"
|
167
178
|
end
|
168
|
-
|
169
|
-
logger.info("Expanding named query: '#{what}' with '#{cookie}'")
|
170
179
|
http = Net::HTTP.new(@api_url.host, @api_url.port)
|
171
|
-
http.use_ssl = true
|
172
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
173
180
|
http.set_debug_output(Bicho::LoggerIODevice.new)
|
174
|
-
|
181
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
182
|
+
http.use_ssl = (@api_url.scheme == 'https')
|
183
|
+
#request = Net::HTTP::Get.new(url.request_uri, {'Cookie' => self.cookie})
|
184
|
+
request = Net::HTTP::Get.new(url.request_uri)
|
185
|
+
request.basic_auth @api_url.user, @api_url.password
|
175
186
|
response = http.request(request)
|
176
187
|
case response
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
end
|
185
|
-
return bugs
|
186
|
-
rescue Nokogiri::XML::XPath::SyntaxError
|
187
|
-
raise "Named query '#{what}' not found"
|
188
|
+
when Net::HTTPSuccess
|
189
|
+
bugs = []
|
190
|
+
begin
|
191
|
+
xml = Nokogiri::XML.parse(response.body)
|
192
|
+
xml.root.xpath("//xmlns:entry/xmlns:link/@href", xml.root.namespace).each do |attr|
|
193
|
+
uri = URI.parse attr.value
|
194
|
+
bugs << uri.query.split("=")[1]
|
188
195
|
end
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
196
|
+
return bugs
|
197
|
+
rescue Nokogiri::XML::XPath::SyntaxError
|
198
|
+
raise "Named query '#{url.request_uri}' not found"
|
199
|
+
end
|
200
|
+
when Net::HTTPRedirection
|
201
|
+
location = response['location']
|
202
|
+
if (redirects_left == 0)
|
203
|
+
raise "Maximum redirects exceeded (redirected to #{location})"
|
204
|
+
end
|
205
|
+
new_location_uri = URI.parse(location)
|
206
|
+
logger.debug("Moved to #{new_location_uri}")
|
207
|
+
fetch_named_query_url(new_location_uri, redirects_left - 1)
|
208
|
+
else
|
209
|
+
raise "Error when expanding named query '#{url.request_uri}': #{response}"
|
193
210
|
end
|
194
211
|
end
|
195
212
|
|
data/lib/bicho/plugins/novell.rb
CHANGED
@@ -51,35 +51,36 @@ module Bicho
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_s
|
54
|
-
self.class.to_s
|
54
|
+
self.class.to_s
|
55
55
|
end
|
56
56
|
|
57
|
-
def self.oscrc_credentials
|
58
|
-
oscrc = IniFile.
|
57
|
+
def self.oscrc_credentials
|
58
|
+
oscrc = IniFile.load(oscrc_path)
|
59
59
|
urls = [OSCRC_CREDENTIALS]
|
60
60
|
urls << "#{OSCRC_CREDENTIALS}/" if not OSCRC_CREDENTIALS.end_with?('/')
|
61
61
|
urls.each do |section|
|
62
|
-
if oscrc.has_section?(section)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
62
|
+
next if not oscrc.has_section?(section)
|
63
|
+
user = oscrc[section]['user']
|
64
|
+
pass = oscrc[section]['pass']
|
65
|
+
if user && pass
|
66
|
+
return {:user => user, :password => pass}
|
68
67
|
end
|
69
68
|
end
|
70
|
-
raise "No valid .oscrc credentials for
|
69
|
+
raise "No valid .oscrc credentials for Novell/SUSE bugzilla (#{oscrc_path})"
|
71
70
|
end
|
72
71
|
|
73
72
|
def transform_api_url_hook(url, logger)
|
74
|
-
|
75
|
-
return url
|
73
|
+
domains = ['bugzilla.novell.com', 'bugzilla.suse.com']
|
74
|
+
return url unless domains.map {|domain| url.host.include?(domain)}.any?
|
76
75
|
|
77
76
|
auth = Novell.oscrc_credentials
|
78
|
-
|
77
|
+
|
79
78
|
url = url.clone
|
80
79
|
url.user = auth[:user]
|
81
80
|
url.password = auth[:password]
|
82
81
|
url.host = url.host.gsub(/bugzilla\.novell.com/, 'apibugzilla.novell.com')
|
82
|
+
url.host = url.host.gsub(/bugzilla\.suse.com/, 'apibugzilla.novell.com')
|
83
|
+
url.scheme = 'https'
|
83
84
|
|
84
85
|
logger.debug("#{self} : Rewrote url to '#{url.to_s.gsub(/#{url.user}:#{url.password}/, "USER:PASS")}'")
|
85
86
|
return url
|
data/lib/bicho/version.rb
CHANGED
data/test/test_novell_plugin.rb
CHANGED
@@ -1,27 +1,44 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'helper')
|
2
2
|
require 'bicho/plugins/novell'
|
3
|
+
require 'tmpdir'
|
3
4
|
|
4
5
|
class NovellPlugin_test < Test::Unit::TestCase
|
5
6
|
|
6
7
|
def test_urls_are_correct
|
7
|
-
|
8
|
+
['novell', 'suse'].each do |domain|
|
9
|
+
client = Bicho::Client.new("https://bugzilla.#{domain}.com")
|
10
|
+
assert_raises NoMethodError do
|
11
|
+
client.url
|
12
|
+
end
|
8
13
|
|
9
|
-
|
10
|
-
client.
|
14
|
+
#assert_equal "https://apibugzilla.#{domain}.com/xmlrpc.cgi", "#{client.api_url.scheme}://#{client.api_url.host}#{client.api_url.path}"
|
15
|
+
#assert_equal "https://bugzilla.#{domain}.com", "#{client.site_url.scheme}://#{client.site_url.host}#{client.site_url.path}"
|
11
16
|
end
|
17
|
+
end
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
|
19
|
+
def self.write_fake_oscrc(path)
|
20
|
+
File.open(path, 'w') do |f|
|
21
|
+
f.write(<<EOS)
|
22
|
+
[https://api.opensuse.org]
|
23
|
+
user = foo
|
24
|
+
pass = bar
|
25
|
+
# fake osc file
|
26
|
+
EOS
|
27
|
+
end
|
16
28
|
end
|
17
29
|
|
18
30
|
def test_oscrc_parsing
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
31
|
+
Dir.mktmpdir do |tmp|
|
32
|
+
fake_oscrc = File.join(tmp, 'oscrc')
|
33
|
+
NovellPlugin_test.write_fake_oscrc(fake_oscrc)
|
34
|
+
Bicho::Plugins::Novell.oscrc_path = fake_oscrc
|
35
|
+
plugin = Bicho::Plugins::Novell.new
|
36
|
+
credentials = Bicho::Plugins::Novell.oscrc_credentials
|
37
|
+
assert_not_nil(credentials)
|
38
|
+
assert(credentials.has_key?(:user))
|
39
|
+
assert(credentials.has_key?(:password))
|
40
|
+
Bicho::Plugins::Novell.oscrc_path = nil
|
41
|
+
end
|
25
42
|
end
|
26
43
|
|
27
44
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bicho
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-11-
|
12
|
+
date: 2014-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: inifile
|