Details

    • Type: Test Test
    • Status: Resolved
    • Priority: Trivial Trivial
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: clients - ruby - flare
    • Labels:
      None

      Description

      Some unit test in regards to i18n. I didn't create a separate i18n.rb cos it is nothing but testing new "characters". Please let me know if you would like to have it as a separate file.. I also added some functional test i.e. i18n_full_cycle_test.

      This is my first patch I am sure I have made mistake so please do come back with things that you would like me to change!

      Regards

      1. i18n_test.patch
        5 kB
        Antonio Eggberg
      2. i18n.patch2
        2 kB
        Antonio Eggberg

        Activity

        Hide
        Antonio Eggberg added a comment -

        Attached i18n unit and functional test patch

        Show
        Antonio Eggberg added a comment - Attached i18n unit and functional test patch
        Hide
        Erik Hatcher added a comment -

        Thanks for that patch! Since this is your first patch, I'll comment on it:

        > Index: client/ruby/solrb/test/unit/delete_test.rb

        First, you can make the diffs from the solrb directory instead of the root of solr itself.

        — client/ruby/solrb/test/unit/delete_test.rb (revision 502165)
        +++ client/ruby/solrb/test/unit/delete_test.rb (working copy)
        @@ -48,4 +48,9 @@
        assert_equal false, response.ok?
        end

        + def test_delete_by_i18n_query_request
        + request = Solr::Request::Delete.new(:query => 'ëäïöü')
        + assert_equal "<delete><query>ëäïöü</query></delete>", request.to_s
        + end
        +

        The above is a good test, ensures the XML gets generated as expected.

        + def test_i18n_xml
        + field = Solr::Field.new :i18nstring => 'Äêâîôû Öëäïöü'
        + assert_kind_of REXML::Element, field.to_xml
        + assert_equal "<field name='i18nstring'>Äêâîôû Öëäïöü</field>", field.to_xml.to_s
        + end
        +

        The above is also another good one.

        + def test_add_i18n_document_response
        + conn = Solr::Connection.new('http://localhost:9999/solr')
        + set_post_return('<result status="0"></result>')
        + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'}
        + response = conn.send(Solr::Request::AddDocument.new(doc))
        + assert_equal true, response.ok?
        + end

        This doesn't test anything really, since a mock connection is being used. This is really only testing that the <result> is being parsed successfully, but nothing to do with the add document request.

        + def test_bad_i18n_add_document_response
        + conn = Solr::Connection.new('http://localhost:9999/solr')
        + set_post_return('<result status="400"></result>')
        + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'}
        + response = conn.send(Solr::Request::AddDocument.new(doc))
        + assert_equal false, response.ok?
        + end

        Again, the above is only testing <result> status parsing.

        + def test_i18n_shorthand
        + conn = Solr::Connection.new('http://localhost:9999/solr')
        + set_post_return('<result status="0"></result>')
        + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'}
        + assert_equal true, conn.add(:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå')
        + end

        And likewise above.

        + def test_add_i18n_doc_request
        + request = Solr::Request::AddDocument.new(:title => "Åëäïöü")
        + assert_equal "<add><doc><field name='title'>Åëäïöü</field></doc></add>", request.to_s
        + assert_equal :xml, request.response_format
        + assert_equal 'update', request.handler
        +
        + assert_raise(RuntimeError) do
        + Solr::Request::AddDocument.new("invalid")
        + end
        + end
        +
        + def test_add_i18n_multidoc_request
        + request = Solr::Request::AddDocument.new([{:title => "Åëäïöüå"}, {:title => "Äëäïöüöå"}])
        + assert_equal "<add><doc><field name='title'>Åëäïöüå</field></doc><doc><field name='title'>Äëäïöüöå</field></doc></add>", request.to_s
        + assert_equal :xml, request.response_format
        + assert_equal 'update', request.handler
        + end

        The above three tests also don't erally test any functionality that wasn't already being tested.

        — client/ruby/solrb/test/functional/server_test.rb (revision 502165)
        +++ client/ruby/solrb/test/functional/server_test.rb (working copy)
        @@ -23,7 +23,7 @@
        include Solr

        def setup

        • @connection = Connection.new("http://localhost:8888/solr", :autocommit => :on)
          + @connection = Connection.new("http://localhost:8983/solr", :autocommit => :ok)
          clean
          end

        Oops... you shouldn't change the Solr port. Maybe you're running the functional tests outside of Rake? If you run "rake test" it'll fire up Solr on port 8888 and run the functional tests against it. We should, however, extract the URL out to configurable setting though.

        + def test_i18n_full_lifecycle
        + # make sure autocommit is on
        + assert @connection.autocommit
        +
        + # make sure this doc isn't there to begin with
        + @connection.delete(123456)
        +
        + # add it
        + @connection.add(:id => 123456, :text => 'Åäöêâîôû')
        +
        + # look for it
        + response = @connection.query('Åäöêâîôû')
        + assert_equal 1, response.total_hits
        + assert_equal '123456', response.hits[0]['id']
        +
        + # delete it
        + @connection.delete(123456)
        +
        + # make sure it's gone
        + response = @connection.query('Åäöêâîôû Öëäïöü')
        + assert_equal 0, response.total_hits
        + end
        +

        The above is a NICE test and shows the roundtripping of accented characters into Solr and back through the solrb API. Good one.

        def test_bad_url

        • conn = Solr::Connection.new 'http://localhost:8888/invalid'
          + conn = Solr::Connection.new 'http://localhost:8983/invalid'
          assert_raise(Net::HTTPServerException) do
          conn.send(Solr::Request::Ping.new)
          end

        Again, don't change this port, but rather run "rake test" instead of using another instance of Solr.

        Thanks for this effort. I'll commit your tests after you make these adjustments, and we'll be on our way to a solid i18n solrb.

        Show
        Erik Hatcher added a comment - Thanks for that patch! Since this is your first patch, I'll comment on it: > Index: client/ruby/solrb/test/unit/delete_test.rb First, you can make the diffs from the solrb directory instead of the root of solr itself. — client/ruby/solrb/test/unit/delete_test.rb (revision 502165) +++ client/ruby/solrb/test/unit/delete_test.rb (working copy) @@ -48,4 +48,9 @@ assert_equal false, response.ok? end + def test_delete_by_i18n_query_request + request = Solr::Request::Delete.new(:query => 'ëäïöü') + assert_equal "<delete><query>ëäïöü</query></delete>", request.to_s + end + The above is a good test, ensures the XML gets generated as expected. + def test_i18n_xml + field = Solr::Field.new :i18nstring => 'Äêâîôû Öëäïöü' + assert_kind_of REXML::Element, field.to_xml + assert_equal "<field name='i18nstring'>Äêâîôû Öëäïöü</field>", field.to_xml.to_s + end + The above is also another good one. + def test_add_i18n_document_response + conn = Solr::Connection.new('http://localhost:9999/solr') + set_post_return('<result status="0"></result>') + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'} + response = conn.send(Solr::Request::AddDocument.new(doc)) + assert_equal true, response.ok? + end This doesn't test anything really, since a mock connection is being used. This is really only testing that the <result> is being parsed successfully, but nothing to do with the add document request. + def test_bad_i18n_add_document_response + conn = Solr::Connection.new('http://localhost:9999/solr') + set_post_return('<result status="400"></result>') + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'} + response = conn.send(Solr::Request::AddDocument.new(doc)) + assert_equal false, response.ok? + end Again, the above is only testing <result> status parsing. + def test_i18n_shorthand + conn = Solr::Connection.new('http://localhost:9999/solr') + set_post_return('<result status="0"></result>') + doc = {:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå'} + assert_equal true, conn.add(:id => '123', :text => '& Clyde, <nicetag/>, ëäïöü êâîôûå') + end And likewise above. + def test_add_i18n_doc_request + request = Solr::Request::AddDocument.new(:title => "Åëäïöü") + assert_equal "<add><doc><field name='title'>Åëäïöü</field></doc></add>", request.to_s + assert_equal :xml, request.response_format + assert_equal 'update', request.handler + + assert_raise(RuntimeError) do + Solr::Request::AddDocument.new("invalid") + end + end + + def test_add_i18n_multidoc_request + request = Solr::Request::AddDocument.new( [{:title => "Åëäïöüå"}, {:title => "Äëäïöüöå"}] ) + assert_equal "<add><doc><field name='title'>Åëäïöüå</field></doc><doc><field name='title'>Äëäïöüöå</field></doc></add>", request.to_s + assert_equal :xml, request.response_format + assert_equal 'update', request.handler + end The above three tests also don't erally test any functionality that wasn't already being tested. — client/ruby/solrb/test/functional/server_test.rb (revision 502165) +++ client/ruby/solrb/test/functional/server_test.rb (working copy) @@ -23,7 +23,7 @@ include Solr def setup @connection = Connection.new("http://localhost:8888/solr", :autocommit => :on) + @connection = Connection.new("http://localhost:8983/solr", :autocommit => :ok) clean end Oops... you shouldn't change the Solr port. Maybe you're running the functional tests outside of Rake? If you run "rake test" it'll fire up Solr on port 8888 and run the functional tests against it. We should, however, extract the URL out to configurable setting though. + def test_i18n_full_lifecycle + # make sure autocommit is on + assert @connection.autocommit + + # make sure this doc isn't there to begin with + @connection.delete(123456) + + # add it + @connection.add(:id => 123456, :text => 'Åäöêâîôû') + + # look for it + response = @connection.query('Åäöêâîôû') + assert_equal 1, response.total_hits + assert_equal '123456', response.hits [0] ['id'] + + # delete it + @connection.delete(123456) + + # make sure it's gone + response = @connection.query('Åäöêâîôû Öëäïöü') + assert_equal 0, response.total_hits + end + The above is a NICE test and shows the roundtripping of accented characters into Solr and back through the solrb API. Good one. def test_bad_url conn = Solr::Connection.new 'http://localhost:8888/invalid' + conn = Solr::Connection.new 'http://localhost:8983/invalid' assert_raise(Net::HTTPServerException) do conn.send(Solr::Request::Ping.new) end Again, don't change this port, but rather run "rake test" instead of using another instance of Solr. Thanks for this effort. I'll commit your tests after you make these adjustments, and we'll be on our way to a solid i18n solrb.
        Hide
        Antonio Eggberg added a comment -

        Thanks for your comments and fixes . New patch attached.

        I didn't get 'rake test' working in the first pass. cos the delay timeout was 5 sec.. this is why all my test failed. I increased to 20 and all test passed..

        test_solr_server.rb ..

        puts "starting solr server"
        solr_server.start
        sleep params[:startup_wait] || 5
        yield

        cheers!

        Show
        Antonio Eggberg added a comment - Thanks for your comments and fixes . New patch attached. I didn't get 'rake test' working in the first pass. cos the delay timeout was 5 sec.. this is why all my test failed. I increased to 20 and all test passed.. test_solr_server.rb .. puts "starting solr server" solr_server.start sleep params [:startup_wait] || 5 yield cheers!
        Hide
        Erik Hatcher added a comment -

        Thanks Antonio.. applied!

        Just a minor JIRA thing... if you name a replacement patch filename the same as your original, it'll handle it nicely and keep the latest handy.

        Show
        Erik Hatcher added a comment - Thanks Antonio.. applied! Just a minor JIRA thing... if you name a replacement patch filename the same as your original, it'll handle it nicely and keep the latest handy.

          People

          • Assignee:
            Erik Hatcher
            Reporter:
            Antonio Eggberg
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development