summaryrefslogtreecommitdiff
path: root/chef/spec/unit/solr_query_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'chef/spec/unit/solr_query_spec.rb')
-rw-r--r--chef/spec/unit/solr_query_spec.rb203
1 files changed, 0 insertions, 203 deletions
diff --git a/chef/spec/unit/solr_query_spec.rb b/chef/spec/unit/solr_query_spec.rb
deleted file mode 100644
index 8b48011713..0000000000
--- a/chef/spec/unit/solr_query_spec.rb
+++ /dev/null
@@ -1,203 +0,0 @@
-# Author:: Daniel DeLeo (<dan@opscode.com>)
-# Copyright:: Copyright (c) 2010, 2011 Opscode, inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'spec_helper'
-
-require 'chef/solr_query'
-require 'net/http'
-
-#require 'rspec/mocks'
-
-describe Chef::SolrQuery do
- before do
- Chef::SolrQuery::SolrHTTPRequest.solr_url = "http://example.com:8983"
-
- @http_response = mock(
- "Net::HTTP::Response",
- :kind_of? => Net::HTTPSuccess,
- :body => "{ :some => :hash }"
- )
- @http_request = mock(
- "Net::HTTP::Request",
- :body= => true
- )
- @http = mock("Net::HTTP", :request => @http_response)
- Chef::SolrQuery::SolrHTTPRequest.stub!(:http_client).and_return(@http)
- Net::HTTP::Post.stub!(:new).and_return(@http_request)
- Net::HTTP::Get.stub!(:new).and_return(@http_request)
- @doc = { "foo" => "bar" }
- end
-
- before(:each) do
- @solr = Chef::SolrQuery.new
- end
-
- it "sets filter query params" do
- @solr.filter_by(:database => 'chef')
- @solr.filter_query.should == "+X_CHEF_database_CHEF_X:chef"
- end
-
- it "filters by type when querying for a builtin type" do
- @solr.filter_by_type("node")
- @solr.filter_query.should == "+X_CHEF_type_CHEF_X:node"
- end
-
- it "filters by type for data bag items" do
- @solr.filter_by_type("users")
- @solr.filter_query.split(" ").sort.should == ['+X_CHEF_type_CHEF_X:data_bag_item', '+data_bag:users']
- end
-
- it "stores the main query" do
- @solr.query = "role:prod AND tags:chef-server"
- @solr.query.should == "role:prod AND tags:chef-server"
- end
-
- describe "when generating query params for select" do
- before(:each) do
- @solr = Chef::SolrQuery.from_params(:type => 'node', :q => "hostname:latte")
- @params = @solr.to_hash
- end
-
- it "includes the query as q" do
- @params[:q].should == "content:hostname__=__latte"
- end
-
- it "sets the response format to json" do
- @params[:wt].should == "json"
- end
-
- it "uses indent=off to get a compact response" do
- @params[:indent].should == "off"
- end
-
- it "includes the filter query to restrict the result set" do
- @params[:fq].should == @solr.filter_query
- end
-
- it "defaults to returning 1000 rows" do
- @params[:rows].should == 1000
- end
-
- it "returns the number of rows requested" do
- @solr.params[:rows] = 500
- @solr.to_hash[:rows].should == 500
- end
-
- it "offsets the row selection if requested" do
- @solr.params[:start] = 500
- @solr.to_hash[:start].should == 500
- end
-
- end
-
- describe "when querying solr" do
- before do
- @couchdb = mock("CouchDB Test Double", :couchdb_database => "chunky_bacon")
- @couchdb.stub!(:kind_of?).with(Chef::CouchDB).and_return(true) #ugh.
- @solr = Chef::SolrQuery.from_params({:type => 'node', :q => "hostname:latte", :start => 10, :rows => 5}, @couchdb)
- @docs = [1,2,3,4,5].map { |doc_id| {'X_CHEF_id_CHEF_X' => doc_id} }
- @solr_response = {"response" => {"docs" => @docs, "start" => 10, "results" => 123}}
- Chef::SolrQuery::SolrHTTPRequest.should_receive(:select).with(@solr.to_hash).and_return(@solr_response)
- end
-
- it "it collects the document ids from the response" do
- @solr.object_ids.should == [1,2,3,4,5]
- end
-
- it "does a bulk get of the objects from CouchDB" do
- @couchdb.should_receive(:bulk_get).with([1,2,3,4,5]).and_return(%w{obj1 obj2 obj3 obj4 obj5})
- @solr.objects.should == %w{obj1 obj2 obj3 obj4 obj5}
- end
-
- end
-
- describe "when forcing a Solr commit" do
- it "sends valid commit xml to solr" do
- Chef::SolrQuery::SolrHTTPRequest.should_receive(:update).with("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<commit/>\n")
- @solr.commit
- end
- end
-
- describe "when deleting a database from Solr" do
- it "sends a valid delete query to solr and forces a commit" do
- Chef::SolrQuery::SolrHTTPRequest.should_receive(:update).with("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<delete><query>X_CHEF_database_CHEF_X:chef</query></delete>\n")
- @solr.should_receive(:commit)
- @solr.delete_database("chef")
- end
- end
-
- describe "rebuilding the index" do
- before do
- Chef::Config[:couchdb_database] = "chunky_bacon"
- end
-
- it "deletes the index and commits" do
- @solr.should_receive(:delete_database).with("chunky_bacon")
- @solr.stub!(:reindex_all)
- Chef::DataBag.stub!(:cdb_list).and_return([])
- @solr.rebuild_index
- end
-
- it "reindexes Chef::ApiClient, Chef::Node, and Chef::Role objects, reporting the results as a hash" do
- @solr.should_receive(:delete_database).with("chunky_bacon")
- @solr.should_receive(:reindex_all).with(Chef::ApiClient).and_return(true)
- @solr.should_receive(:reindex_all).with(Chef::Environment).and_return(true)
- @solr.should_receive(:reindex_all).with(Chef::Node).and_return(true)
- @solr.should_receive(:reindex_all).with(Chef::Role).and_return(true)
- Chef::DataBag.stub!(:cdb_list).and_return([])
-
- result = @solr.rebuild_index
- result["Chef::ApiClient"].should == "success"
- result["Chef::Node"].should == "success"
- result["Chef::Role"].should == "success"
- end
-
- it "does not reindex Chef::OpenIDRegistration or Chef::WebUIUser objects" do
- # hi there. the reason we're specifying this behavior is because these objects
- # are not properly indexed in the first place and trying to reindex them
- # tickles a bug in our CamelCase to snake_case code. See CHEF-1009.
- @solr.should_receive(:delete_database).with("chunky_bacon")
- @solr.stub!(:reindex_all).with(Chef::ApiClient)
- @solr.stub!(:reindex_all).with(Chef::Node)
- @solr.stub!(:reindex_all).with(Chef::Role)
- @solr.should_not_receive(:reindex_all).with(Chef::OpenIDRegistration)
- @solr.should_not_receive(:reindex_all).with(Chef::WebUIUser)
- Chef::DataBag.stub!(:cdb_list).and_return([])
-
- @solr.rebuild_index
- end
-
- it "reindexes databags" do
- one_data_item = Chef::DataBagItem.new
- one_data_item.raw_data = {"maybe"=>"snakes actually are evil", "id" => "just_sayin"}
- two_data_item = Chef::DataBagItem.new
- two_data_item.raw_data = {"tone_depth"=>"rumble_fish", "id" => "eff_yes"}
- data_bag = Chef::DataBag.new
- data_bag.stub!(:list).and_return([one_data_item, two_data_item])
-
- @solr.should_receive(:delete_database).with("chunky_bacon")
- @solr.stub!(:reindex_all)
- Chef::DataBag.stub!(:cdb_list).and_return([data_bag])
-
- data_bag.should_receive(:add_to_index)
- one_data_item.should_receive(:add_to_index)
- two_data_item.should_receive(:add_to_index)
-
- @solr.rebuild_index["Chef::DataBag"].should == "success"
- end
- end
-end