elastomer-client 0.7.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.overcommit.yml +5 -0
- data/.rubocop.yml +83 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +2 -2
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/elastomer-client.gemspec +4 -2
- data/lib/elastomer/client.rb +42 -37
- data/lib/elastomer/client/bulk.rb +2 -2
- data/lib/elastomer/client/cluster.rb +19 -19
- data/lib/elastomer/client/delete_by_query.rb +7 -7
- data/lib/elastomer/client/docs.rb +81 -24
- data/lib/elastomer/client/errors.rb +2 -2
- data/lib/elastomer/client/index.rb +65 -29
- data/lib/elastomer/client/multi_percolate.rb +127 -0
- data/lib/elastomer/client/multi_search.rb +2 -2
- data/lib/elastomer/client/nodes.rb +4 -4
- data/lib/elastomer/client/percolator.rb +77 -0
- data/lib/elastomer/client/repository.rb +7 -7
- data/lib/elastomer/client/scroller.rb +14 -14
- data/lib/elastomer/client/snapshot.rb +9 -9
- data/lib/elastomer/client/template.rb +3 -3
- data/lib/elastomer/client/warmer.rb +5 -16
- data/lib/elastomer/core_ext/time.rb +1 -1
- data/lib/elastomer/middleware/encode_json.rb +5 -5
- data/lib/elastomer/middleware/opaque_id.rb +3 -3
- data/lib/elastomer/middleware/parse_json.rb +5 -5
- data/lib/elastomer/notifications.rb +4 -4
- data/lib/elastomer/version.rb +1 -1
- data/script/bootstrap +2 -0
- data/script/console +5 -5
- data/test/assertions.rb +26 -24
- data/test/client/bulk_test.rb +111 -111
- data/test/client/cluster_test.rb +58 -58
- data/test/client/delete_by_query_test.rb +53 -53
- data/test/client/docs_test.rb +279 -203
- data/test/client/errors_test.rb +1 -1
- data/test/client/index_test.rb +143 -109
- data/test/client/multi_percolate_test.rb +130 -0
- data/test/client/multi_search_test.rb +30 -28
- data/test/client/nodes_test.rb +30 -29
- data/test/client/percolator_test.rb +52 -0
- data/test/client/repository_test.rb +23 -23
- data/test/client/scroller_test.rb +40 -40
- data/test/client/snapshot_test.rb +15 -15
- data/test/client/stubbed_client_test.rb +15 -15
- data/test/client/template_test.rb +10 -10
- data/test/client/warmer_test.rb +18 -18
- data/test/client_test.rb +53 -53
- data/test/core_ext/time_test.rb +12 -12
- data/test/middleware/encode_json_test.rb +20 -20
- data/test/middleware/opaque_id_test.rb +10 -10
- data/test/middleware/parse_json_test.rb +14 -14
- data/test/notifications_test.rb +32 -32
- data/test/test_helper.rb +24 -24
- metadata +38 -2
@@ -1,29 +1,29 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Elastomer::Client::Scroller do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@name =
|
6
|
+
@name = "elastomer-scroller-test"
|
7
7
|
@index = $client.index(@name)
|
8
8
|
|
9
9
|
unless @index.exists?
|
10
10
|
@index.create \
|
11
|
-
:settings => {
|
11
|
+
:settings => { "index.number_of_shards" => 1, "index.number_of_replicas" => 0 },
|
12
12
|
:mappings => {
|
13
13
|
:tweet => {
|
14
14
|
:_source => { :enabled => true }, :_all => { :enabled => false },
|
15
15
|
:properties => {
|
16
|
-
:message => { :type =>
|
17
|
-
:author => { :type =>
|
18
|
-
:sorter => { :type =>
|
16
|
+
:message => { :type => "string", :analyzer => "standard" },
|
17
|
+
:author => { :type => "string", :index => "not_analyzed" },
|
18
|
+
:sorter => { :type => "integer" }
|
19
19
|
}
|
20
20
|
},
|
21
21
|
:book => {
|
22
22
|
:_source => { :enabled => true }, :_all => { :enabled => false },
|
23
23
|
:properties => {
|
24
|
-
:title => { :type =>
|
25
|
-
:author => { :type =>
|
26
|
-
:sorter => { :type =>
|
24
|
+
:title => { :type => "string", :analyzer => "standard" },
|
25
|
+
:author => { :type => "string", :index => "not_analyzed" },
|
26
|
+
:sorter => { :type => "integer" }
|
27
27
|
}
|
28
28
|
}
|
29
29
|
}
|
@@ -37,76 +37,76 @@ describe Elastomer::Client::Scroller do
|
|
37
37
|
@index.delete if @index.exists?
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
40
|
+
it "scans over all documents in an index" do
|
41
41
|
scan = @index.scan '{"query":{"match_all":{}}}', :size => 10
|
42
42
|
|
43
|
-
counts = {
|
44
|
-
scan.each_document { |h| counts[h[
|
43
|
+
counts = {"tweet" => 0, "book" => 0}
|
44
|
+
scan.each_document { |h| counts[h["_type"]] += 1 }
|
45
45
|
|
46
|
-
assert_equal 50, counts[
|
47
|
-
assert_equal 25, counts[
|
46
|
+
assert_equal 50, counts["tweet"]
|
47
|
+
assert_equal 25, counts["book"]
|
48
48
|
end
|
49
49
|
|
50
|
-
it
|
51
|
-
scan = @index.scan '{"query":{"match_all":{}}}', :type =>
|
50
|
+
it "restricts the scan to a single document type" do
|
51
|
+
scan = @index.scan '{"query":{"match_all":{}}}', :type => "book"
|
52
52
|
|
53
|
-
counts = {
|
54
|
-
scan.each_document { |h| counts[h[
|
53
|
+
counts = {"tweet" => 0, "book" => 0}
|
54
|
+
scan.each_document { |h| counts[h["_type"]] += 1 }
|
55
55
|
|
56
|
-
assert_equal 0, counts[
|
57
|
-
assert_equal 25, counts[
|
56
|
+
assert_equal 0, counts["tweet"]
|
57
|
+
assert_equal 25, counts["book"]
|
58
58
|
end
|
59
59
|
|
60
|
-
it
|
60
|
+
it "limits results by query" do
|
61
61
|
scan = @index.scan :query => { :bool => { :should => [
|
62
|
-
{:match => {:author =>
|
63
|
-
{:match => {:title =>
|
62
|
+
{:match => {:author => "pea53"}},
|
63
|
+
{:match => {:title => "17"}}
|
64
64
|
]}}
|
65
65
|
|
66
|
-
counts = {
|
67
|
-
scan.each_document { |h| counts[h[
|
66
|
+
counts = {"tweet" => 0, "book" => 0}
|
67
|
+
scan.each_document { |h| counts[h["_type"]] += 1 }
|
68
68
|
|
69
|
-
assert_equal 50, counts[
|
70
|
-
assert_equal 1, counts[
|
69
|
+
assert_equal 50, counts["tweet"]
|
70
|
+
assert_equal 1, counts["book"]
|
71
71
|
end
|
72
72
|
|
73
|
-
it
|
73
|
+
it "scrolls and sorts over all documents" do
|
74
74
|
scroll = @index.scroll({
|
75
75
|
:query => {:match_all => {}},
|
76
76
|
:sort => {:sorter => {:order => :asc}}
|
77
|
-
}, :type =>
|
77
|
+
}, :type => "tweet")
|
78
78
|
|
79
79
|
tweets = []
|
80
|
-
scroll.each_document { |h| tweets << h[
|
80
|
+
scroll.each_document { |h| tweets << h["_id"].to_i }
|
81
81
|
|
82
82
|
expected = (0...50).to_a.reverse
|
83
83
|
assert_equal expected, tweets
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
87
|
-
scan = @index.scan(nil, { :q =>
|
86
|
+
it "propagates URL query strings" do
|
87
|
+
scan = @index.scan(nil, { :q => "author:pea53 || title:17" })
|
88
88
|
|
89
|
-
counts = {
|
90
|
-
scan.each_document { |h| counts[h[
|
89
|
+
counts = {"tweet" => 0, "book" => 0}
|
90
|
+
scan.each_document { |h| counts[h["_type"]] += 1 }
|
91
91
|
|
92
|
-
assert_equal 50, counts[
|
93
|
-
assert_equal 1, counts[
|
92
|
+
assert_equal 50, counts["tweet"]
|
93
|
+
assert_equal 1, counts["book"]
|
94
94
|
end
|
95
95
|
|
96
96
|
def populate!
|
97
97
|
h = @index.bulk do |b|
|
98
98
|
50.times { |num|
|
99
|
-
b.index %Q({"author":"pea53","message":"this is tweet number #{num}","sorter":#{50-num}}), :_id => num, :_type =>
|
99
|
+
b.index %Q({"author":"pea53","message":"this is tweet number #{num}","sorter":#{50-num}}), :_id => num, :_type => "tweet"
|
100
100
|
}
|
101
101
|
end
|
102
|
-
h[
|
102
|
+
h["items"].each {|item| assert_bulk_index(item) }
|
103
103
|
|
104
104
|
h = @index.bulk do |b|
|
105
105
|
25.times { |num|
|
106
|
-
b.index %Q({"author":"Pratchett","title":"DiscWorld Book #{num}","sorter":#{25-num}}), :_id => num, :_type =>
|
106
|
+
b.index %Q({"author":"Pratchett","title":"DiscWorld Book #{num}","sorter":#{25-num}}), :_id => num, :_type => "book"
|
107
107
|
}
|
108
108
|
end
|
109
|
-
h[
|
109
|
+
h["items"].each {|item| assert_bulk_index(item) }
|
110
110
|
|
111
111
|
@index.refresh
|
112
112
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
require File.expand_path(
|
2
|
+
require File.expand_path("../../test_helper", __FILE__)
|
3
3
|
|
4
4
|
describe Elastomer::Client::Snapshot do
|
5
5
|
if es_version_1_x?
|
@@ -8,16 +8,16 @@ describe Elastomer::Client::Snapshot do
|
|
8
8
|
skip "To enable snapshot tests, add a path.repo setting to your elasticsearch.yml file."
|
9
9
|
end
|
10
10
|
|
11
|
-
@index_name =
|
11
|
+
@index_name = "elastomer-snapshot-test-index"
|
12
12
|
@index = $client.index(@index_name)
|
13
|
-
@name =
|
13
|
+
@name = "elastomer-test"
|
14
14
|
end
|
15
15
|
|
16
16
|
after do
|
17
17
|
@index.delete if @index && @index.exists?
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it "determines if a snapshot exists" do
|
21
21
|
with_tmp_repo do |repo|
|
22
22
|
snapshot = repo.snapshot(@name)
|
23
23
|
assert_equal false, snapshot.exists?
|
@@ -27,14 +27,14 @@ describe Elastomer::Client::Snapshot do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
30
|
+
it "creates snapshots" do
|
31
31
|
with_tmp_repo do |repo|
|
32
32
|
response = repo.snapshot(@name).create({}, :wait_for_completion => true)
|
33
33
|
assert_equal @name, response["snapshot"]["snapshot"]
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
37
|
+
it "creates snapshots with options" do
|
38
38
|
@index.create(:number_of_shards => 1, :number_of_replicas => 0)
|
39
39
|
with_tmp_repo do |repo|
|
40
40
|
response = repo.snapshot(@name).create({:indices => [@index_name]}, :wait_for_completion => true)
|
@@ -43,7 +43,7 @@ describe Elastomer::Client::Snapshot do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
46
|
+
it "gets snapshot info for one and all" do
|
47
47
|
with_tmp_snapshot do |snapshot, repo|
|
48
48
|
response = snapshot.get
|
49
49
|
assert_equal snapshot.name, response["snapshots"][0]["snapshot"]
|
@@ -52,7 +52,7 @@ describe Elastomer::Client::Snapshot do
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
it
|
55
|
+
it "gets snapshot status for one and all" do
|
56
56
|
@index.create(:number_of_shards => 1, :number_of_replicas => 0)
|
57
57
|
with_tmp_repo do |repo|
|
58
58
|
repo.snapshot(@name).create({:indices => [@index_name]}, :wait_for_completion => true)
|
@@ -61,7 +61,7 @@ describe Elastomer::Client::Snapshot do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
64
|
+
it "gets status of snapshots in progress" do
|
65
65
|
# we can't reliably get status of an in-progress snapshot in tests, so
|
66
66
|
# check for an empty result instead
|
67
67
|
with_tmp_repo do |repo|
|
@@ -72,19 +72,19 @@ describe Elastomer::Client::Snapshot do
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
it
|
76
|
-
assert_raises(ArgumentError) { $client.repository.snapshot(
|
77
|
-
assert_raises(ArgumentError) { $client.snapshot(nil,
|
75
|
+
it "disallows nil repo name with non-nil snapshot name" do
|
76
|
+
assert_raises(ArgumentError) { $client.repository.snapshot("snapshot") }
|
77
|
+
assert_raises(ArgumentError) { $client.snapshot(nil, "snapshot") }
|
78
78
|
end
|
79
79
|
|
80
|
-
it
|
80
|
+
it "deletes snapshots" do
|
81
81
|
with_tmp_snapshot do |snapshot|
|
82
82
|
response = snapshot.delete
|
83
83
|
assert_equal true, response["acknowledged"]
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
it
|
87
|
+
it "restores snapshots" do
|
88
88
|
@index.create(:number_of_shards => 1, :number_of_replicas => 0)
|
89
89
|
wait_for_index(@index_name)
|
90
90
|
with_tmp_repo do |repo|
|
@@ -106,7 +106,7 @@ describe Elastomer::Client::Snapshot do
|
|
106
106
|
@restored_index.delete if @restored_index && @restored_index.exists?
|
107
107
|
end
|
108
108
|
|
109
|
-
it
|
109
|
+
it "restores snapshots with options" do
|
110
110
|
@index.create(:number_of_shards => 1, :number_of_replicas => 0)
|
111
111
|
wait_for_index(@index_name)
|
112
112
|
with_tmp_repo do |repo|
|
@@ -1,40 +1,40 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe "stubbed client tests" do
|
4
4
|
before do
|
5
5
|
@stubs = Faraday::Adapter.lookup_middleware(:test)::Stubs.new
|
6
6
|
@client = Elastomer::Client.new :adapter => [:test, @stubs]
|
7
7
|
end
|
8
8
|
|
9
9
|
describe Elastomer::Client::Cluster do
|
10
|
-
it
|
11
|
-
@stubs.post
|
10
|
+
it "reroutes shards" do
|
11
|
+
@stubs.post "/_cluster/reroute?dry_run=true" do |env|
|
12
12
|
assert_match %r/^\{"commands":\[\{"move":\{[^\{\}]+\}\}\]\}$/, env[:body]
|
13
|
-
[200, {
|
13
|
+
[200, {"Content-Type" => "application/json"}, '{"acknowledged" : true}']
|
14
14
|
end
|
15
15
|
|
16
|
-
commands = { :move => { :index =>
|
16
|
+
commands = { :move => { :index => "test", :shard => 0, :from_node => "node1", :to_node => "node2" }}
|
17
17
|
h = @client.cluster.reroute commands, :dry_run => true
|
18
18
|
assert_acknowledged h
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
22
|
-
@stubs.post(
|
21
|
+
it "performs a shutdown of the cluster" do
|
22
|
+
@stubs.post("/_shutdown") { [200, {"Content-Type" => "application/json"}, '{"cluster_name":"elasticsearch"}'] }
|
23
23
|
h = @client.cluster.shutdown
|
24
|
-
assert_equal "elasticsearch", h[
|
24
|
+
assert_equal "elasticsearch", h["cluster_name"]
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
describe Elastomer::Client::Nodes do
|
29
|
-
it
|
30
|
-
@stubs.post(
|
31
|
-
@stubs.post(
|
29
|
+
it "performs a shutdown of the node(s)" do
|
30
|
+
@stubs.post("/_cluster/nodes/_all/_shutdown") { [200, {"Content-Type" => "application/json"}, '{"nodes":{"1":{"name":"Node1"}}}'] }
|
31
|
+
@stubs.post("/_cluster/nodes/node2/_shutdown") { [200, {"Content-Type" => "application/json"}, '{"nodes":{"2":{"name":"Node2"}}}'] }
|
32
32
|
|
33
33
|
h = @client.nodes("_all").shutdown
|
34
|
-
assert_equal "Node1", h[
|
34
|
+
assert_equal "Node1", h["nodes"]["1"]["name"]
|
35
35
|
|
36
|
-
h = @client.nodes(
|
37
|
-
assert_equal
|
36
|
+
h = @client.nodes("node2").shutdown
|
37
|
+
assert_equal "Node2", h["nodes"]["2"]["name"]
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Elastomer::Client::Cluster do
|
4
4
|
|
5
5
|
before do
|
6
|
-
@name =
|
6
|
+
@name = "elastomer-template-test"
|
7
7
|
@template = $client.template @name
|
8
8
|
end
|
9
9
|
|
@@ -11,29 +11,29 @@ describe Elastomer::Client::Cluster do
|
|
11
11
|
@template.delete if @template.exists?
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
15
|
-
@template.create({:template =>
|
14
|
+
it "lists templates in the cluster" do
|
15
|
+
@template.create({:template => "test-elastomer*"})
|
16
16
|
templates = $client.cluster.templates
|
17
17
|
assert !templates.empty?, "expected to see a template"
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
assert !@template.exists?,
|
20
|
+
it "creates a template" do
|
21
|
+
assert !@template.exists?, "the template should not exist"
|
22
22
|
|
23
23
|
@template.create({
|
24
|
-
:template =>
|
24
|
+
:template => "test-elastomer*",
|
25
25
|
:settings => { :number_of_shards => 3 },
|
26
26
|
:mappings => {
|
27
27
|
:doco => { :_source => { :enabled => false }}
|
28
28
|
}
|
29
29
|
})
|
30
30
|
|
31
|
-
assert @template.exists?,
|
31
|
+
assert @template.exists?, " we now have a cluster-test template"
|
32
32
|
|
33
33
|
template = @template.get
|
34
34
|
assert_equal [@name], template.keys
|
35
|
-
assert_equal
|
36
|
-
assert_equal
|
35
|
+
assert_equal "test-elastomer*", template[@name]["template"]
|
36
|
+
assert_equal "3", template[@name]["settings"]["index.number_of_shards"]
|
37
37
|
end
|
38
38
|
|
39
39
|
end
|
data/test/client/warmer_test.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Elastomer::Client::Warmer do
|
4
4
|
before do
|
5
|
-
@name =
|
5
|
+
@name = "elastomer-warmer-test"
|
6
6
|
@index = $client.index(@name)
|
7
7
|
|
8
8
|
unless @index.exists?
|
9
9
|
@index.create(
|
10
|
-
:settings => {
|
10
|
+
:settings => { "index.number_of_shards" => 1, "index.number_of_replicas" => 0 },
|
11
11
|
:mappings => {
|
12
12
|
:tweet => {
|
13
13
|
:_source => { :enabled => true }, :_all => { :enabled => false },
|
14
14
|
:properties => {
|
15
|
-
:message => { :type =>
|
16
|
-
:author => { :type =>
|
15
|
+
:message => { :type => "string", :analyzer => "standard" },
|
16
|
+
:author => { :type => "string", :index => "not_analyzed" }
|
17
17
|
}
|
18
18
|
}
|
19
19
|
}
|
@@ -26,31 +26,31 @@ describe Elastomer::Client::Warmer do
|
|
26
26
|
@index.delete if @index.exists?
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
30
|
-
h = @index.warmer(
|
29
|
+
it "creates warmers" do
|
30
|
+
h = @index.warmer("test1").create(:query => { :match_all => {}})
|
31
31
|
assert_acknowledged h
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
35
|
-
@index.warmer(
|
34
|
+
it "deletes warmers" do
|
35
|
+
@index.warmer("test1").create(:query => { :match_all => {}})
|
36
36
|
|
37
|
-
h = @index.warmer(
|
37
|
+
h = @index.warmer("test1").delete
|
38
38
|
assert_acknowledged h
|
39
39
|
end
|
40
40
|
|
41
|
-
it
|
41
|
+
it "gets warmers" do
|
42
42
|
body = { "query" => {"match_all" => {}}}
|
43
|
-
@index.warmer(
|
43
|
+
@index.warmer("test1").create(body)
|
44
44
|
|
45
|
-
h = @index.warmer(
|
45
|
+
h = @index.warmer("test1").get
|
46
46
|
assert_equal body, h[@name]["warmers"]["test1"]["source"]
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
50
|
-
assert_equal false, @index.warmer(
|
51
|
-
assert_equal false, @index.warmer(
|
49
|
+
it "knows when warmers exist" do
|
50
|
+
assert_equal false, @index.warmer("test1").exists?
|
51
|
+
assert_equal false, @index.warmer("test1").exist?
|
52
52
|
|
53
|
-
h = @index.warmer(
|
54
|
-
assert_equal true, @index.warmer(
|
53
|
+
h = @index.warmer("test1").create(:query => { :match_all => {}})
|
54
|
+
assert_equal true, @index.warmer("test1").exists?
|
55
55
|
end
|
56
56
|
end
|
data/test/client_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path("../test_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Elastomer::Client do
|
4
4
|
|
5
|
-
it
|
5
|
+
it "uses the adapter specified at creation" do
|
6
6
|
c = Elastomer::Client.new(:adapter => :test)
|
7
7
|
assert_includes c.connection.builder.handlers, Faraday::Adapter::Test
|
8
8
|
end
|
@@ -13,50 +13,50 @@ describe Elastomer::Client do
|
|
13
13
|
assert_includes c.connection.builder.handlers, adapter
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
16
|
+
it "uses the same connection for all requests" do
|
17
17
|
c = $client.connection
|
18
18
|
assert_same c, $client.connection
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
22
|
-
assert_raises(ArgumentError) { $client.request :foo,
|
21
|
+
it "raises an error for unknown HTTP request methods" do
|
22
|
+
assert_raises(ArgumentError) { $client.request :foo, "/", {} }
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
25
|
+
it "raises an error on 4XX responses with an `error` field" do
|
26
26
|
begin
|
27
|
-
$client.get
|
28
|
-
assert false,
|
27
|
+
$client.get "/non-existent-index/_search?q=*:*"
|
28
|
+
assert false, "exception was not raised when it should have been"
|
29
29
|
rescue Elastomer::Client::Error => err
|
30
30
|
assert_equal 404, err.status
|
31
|
-
assert_equal
|
31
|
+
assert_equal "IndexMissingException[[non-existent-index] missing]", err.message
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
it
|
36
|
-
uri = $client.expand_path
|
37
|
-
assert_equal
|
35
|
+
it "handles path expansions" do
|
36
|
+
uri = $client.expand_path "/{foo}/{bar}", :foo => "_cluster", :bar => "health"
|
37
|
+
assert_equal "/_cluster/health", uri
|
38
38
|
|
39
|
-
uri = $client.expand_path
|
40
|
-
assert_equal
|
39
|
+
uri = $client.expand_path "{/foo}{/baz}{/bar}", :foo => "_cluster", :bar => "state"
|
40
|
+
assert_equal "/_cluster/state", uri
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
44
|
-
uri = $client.expand_path
|
45
|
-
assert_equal
|
43
|
+
it "handles query parameters" do
|
44
|
+
uri = $client.expand_path "/_cluster/health", :level => "shards"
|
45
|
+
assert_equal "/_cluster/health?level=shards", uri
|
46
46
|
end
|
47
47
|
|
48
|
-
it
|
48
|
+
it "validates path expansions" do
|
49
49
|
assert_raises(ArgumentError) {
|
50
|
-
$client.expand_path
|
50
|
+
$client.expand_path "/{foo}/{bar}", :foo => "_cluster", :bar => nil
|
51
51
|
}
|
52
52
|
|
53
53
|
assert_raises(ArgumentError) {
|
54
|
-
$client.expand_path
|
54
|
+
$client.expand_path "/{foo}/{bar}", :foo => "_cluster", :bar => ""
|
55
55
|
}
|
56
56
|
end
|
57
57
|
|
58
|
-
describe
|
59
|
-
it
|
58
|
+
describe "when extracting and converting :body params" do
|
59
|
+
it "deletes the :body from the params (or it gets the hose)" do
|
60
60
|
params = { :body => nil, :q => "what what?" }
|
61
61
|
body = $client.extract_body params
|
62
62
|
|
@@ -64,27 +64,27 @@ describe Elastomer::Client do
|
|
64
64
|
assert_equal({:q => "what what?"}, params)
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
67
|
+
it "leaves String values unchanged" do
|
68
68
|
body = $client.extract_body :body => '{"query":{"match_all":{}}}'
|
69
69
|
assert_equal '{"query":{"match_all":{}}}', body
|
70
70
|
|
71
|
-
body = $client.extract_body :body =>
|
72
|
-
assert_equal
|
71
|
+
body = $client.extract_body :body => "not a JSON string, but who cares!"
|
72
|
+
assert_equal "not a JSON string, but who cares!", body
|
73
73
|
end
|
74
74
|
|
75
|
-
it
|
75
|
+
it "joins Array values" do
|
76
76
|
body = $client.extract_body :body => %w[foo bar baz]
|
77
77
|
assert_equal "foo\nbar\nbaz\n", body
|
78
78
|
|
79
79
|
body = $client.extract_body :body => [
|
80
|
-
|
81
|
-
|
80
|
+
"the first entry",
|
81
|
+
"the second entry",
|
82
82
|
nil
|
83
83
|
]
|
84
84
|
assert_equal "the first entry\nthe second entry\n", body
|
85
85
|
end
|
86
86
|
|
87
|
-
it
|
87
|
+
it "converts values to JSON" do
|
88
88
|
body = $client.extract_body :body => true
|
89
89
|
assert_equal "true", body
|
90
90
|
|
@@ -93,61 +93,61 @@ describe Elastomer::Client do
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
describe
|
97
|
-
it
|
96
|
+
describe "when validating parameters" do
|
97
|
+
it "rejects nil values" do
|
98
98
|
assert_raises(ArgumentError) { $client.assert_param_presence nil }
|
99
99
|
end
|
100
100
|
|
101
|
-
it
|
101
|
+
it "rejects empty strings" do
|
102
102
|
assert_raises(ArgumentError) { $client.assert_param_presence "" }
|
103
103
|
assert_raises(ArgumentError) { $client.assert_param_presence " " }
|
104
104
|
assert_raises(ArgumentError) { $client.assert_param_presence " \t \r \n " }
|
105
105
|
end
|
106
106
|
|
107
|
-
it
|
108
|
-
assert_raises(ArgumentError) { $client.assert_param_presence [
|
109
|
-
assert_raises(ArgumentError) { $client.assert_param_presence [
|
107
|
+
it "rejects empty strings and nil values found in arrays" do
|
108
|
+
assert_raises(ArgumentError) { $client.assert_param_presence ["foo", nil, "bar"] }
|
109
|
+
assert_raises(ArgumentError) { $client.assert_param_presence ["baz", " \t \r \n "] }
|
110
110
|
end
|
111
111
|
|
112
|
-
it
|
113
|
-
assert_equal
|
112
|
+
it "strips whitespace from strings" do
|
113
|
+
assert_equal "foo", $client.assert_param_presence(" foo \t")
|
114
114
|
end
|
115
115
|
|
116
|
-
it
|
117
|
-
assert_equal
|
116
|
+
it "joins array values into a string" do
|
117
|
+
assert_equal "foo,bar", $client.assert_param_presence(%w[foo bar])
|
118
118
|
end
|
119
119
|
|
120
|
-
it
|
121
|
-
assert_equal
|
120
|
+
it "flattens arrays" do
|
121
|
+
assert_equal "foo,bar,baz,buz", $client.assert_param_presence([" foo \t", %w[bar baz buz]])
|
122
122
|
end
|
123
123
|
|
124
|
-
it
|
125
|
-
assert_equal
|
124
|
+
it "allows strings" do
|
125
|
+
assert_equal "foo", $client.assert_param_presence("foo")
|
126
126
|
end
|
127
127
|
|
128
|
-
it
|
129
|
-
assert_equal
|
130
|
-
assert_equal
|
128
|
+
it "converts numbers and symbols to strings" do
|
129
|
+
assert_equal "foo", $client.assert_param_presence(:foo)
|
130
|
+
assert_equal "9", $client.assert_param_presence(9)
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
describe
|
135
|
-
it
|
134
|
+
describe "top level actions" do
|
135
|
+
it "pings the cluster" do
|
136
136
|
assert_equal true, $client.ping
|
137
137
|
assert_equal true, $client.available?
|
138
138
|
end
|
139
139
|
|
140
|
-
it
|
140
|
+
it "gets cluster info" do
|
141
141
|
h = $client.info
|
142
|
-
assert h.key?(
|
143
|
-
assert h.key?(
|
142
|
+
assert h.key?("name"), "expected cluster name to be returned"
|
143
|
+
assert h.key?("status"), "expected cluster info status to be returned"
|
144
144
|
end
|
145
145
|
|
146
|
-
it
|
146
|
+
it "gets cluster version" do
|
147
147
|
assert_match /[\d\.]+/, $client.version
|
148
148
|
end
|
149
149
|
|
150
|
-
it
|
150
|
+
it "gets semantic version" do
|
151
151
|
version_string = $client.version
|
152
152
|
assert_equal Semantic::Version.new(version_string), $client.semantic_version
|
153
153
|
end
|