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
         |