Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions elasticsearch_benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ package elasticsearch_test

import (
"context"
"github.com/elastic/go-elasticsearch/v9/typedapi/esdsl"
"github.com/elastic/go-elasticsearch/v9/typedapi/types"
"io/ioutil"
"net/http"
"strconv"
Expand All @@ -32,6 +30,8 @@ import (

"github.com/elastic/go-elasticsearch/v9"
"github.com/elastic/go-elasticsearch/v9/esapi"
"github.com/elastic/go-elasticsearch/v9/typedapi/esdsl"
"github.com/elastic/go-elasticsearch/v9/typedapi/types"
)

var defaultResponse = http.Response{
Expand Down Expand Up @@ -252,7 +252,7 @@ func (m mockTransp) RoundTrip(request *http.Request) (*http.Response, error) {

func BenchmarkAllocsSearch(t *testing.B) {
t.Run("struct search", func(b *testing.B) {
c, _ := elasticsearch.NewTypedClient(elasticsearch.Config{
c, err := elasticsearch.NewTypedClient(elasticsearch.Config{
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
return &http.Response{
Expand All @@ -265,6 +265,10 @@ func BenchmarkAllocsSearch(t *testing.B) {
},
})

if err != nil {
b.Fatalf("Unexpected error when creating a client: %s", err)
}

for i := 0; i < b.N; i++ {
s := c.Search()
s.Index("foo")
Expand All @@ -276,7 +280,7 @@ func BenchmarkAllocsSearch(t *testing.B) {
})

t.Run("esdsl search", func(b *testing.B) {
c, _ := elasticsearch.NewTypedClient(elasticsearch.Config{
c, err := elasticsearch.NewTypedClient(elasticsearch.Config{
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
return &http.Response{
Expand All @@ -289,6 +293,10 @@ func BenchmarkAllocsSearch(t *testing.B) {
},
})

if err != nil {
b.Fatalf("Unexpected error when creating a client: %s", err)
}

for i := 0; i < b.N; i++ {
s := c.Search()
s.Index("foo")
Expand Down
132 changes: 104 additions & 28 deletions elasticsearch_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ import (
"crypto/x509"
"encoding/base64"
"errors"
"github.com/elastic/go-elasticsearch/v9/esapi"
"github.com/elastic/go-elasticsearch/v9/typedapi/types"
"io"
"io/ioutil"
"net/http"
Expand All @@ -42,6 +40,8 @@ import (
"testing"

"github.com/elastic/elastic-transport-go/v8/elastictransport"
"github.com/elastic/go-elasticsearch/v9/esapi"
"github.com/elastic/go-elasticsearch/v9/typedapi/types"
)

var metaHeaderReValidation = regexp.MustCompile(`^[a-z]{1,}=[a-z0-9\.\-]{1,}(?:,[a-z]{1,}=[a-z0-9\.\-]+)*$`)
Expand Down Expand Up @@ -160,7 +160,10 @@ func TestClientConfiguration(t *testing.T) {
if err == nil {
t.Fatalf("Expected error, got: %v", err)
}
match, _ := regexp.MatchString("both .* are set", err.Error())
match, err := regexp.MatchString("both .* are set", err.Error())
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if !match {
t.Errorf("Expected error when addresses from environment and configuration are used together, got: %v", err)
}
Expand Down Expand Up @@ -290,7 +293,10 @@ func TestAddrsToURLs(t *testing.T) {
if err == nil {
t.Errorf("Expected error, got: %v", err)
}
match, _ := regexp.MatchString(tc.err.Error(), err.Error())
match, err := regexp.MatchString(tc.err.Error(), err.Error())
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if !match {
t.Errorf("Expected err [%s] to match: %s", err.Error(), tc.err.Error())
}
Expand Down Expand Up @@ -357,7 +363,10 @@ func TestCloudID(t *testing.T) {
if err == nil {
t.Errorf("Expected error for input %q, got %v", input, err)
}
match, _ := regexp.MatchString("unexpected format", err.Error())
match, err := regexp.MatchString("unexpected format", err.Error())
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if !match {
t.Errorf("Unexpected error string: %s", err)
}
Expand All @@ -369,7 +378,10 @@ func TestCloudID(t *testing.T) {
if err == nil {
t.Errorf("Expected error for input %q, got %v", input, err)
}
match, _ := regexp.MatchString("illegal base64 data", err.Error())
match, err := regexp.MatchString("illegal base64 data", err.Error())
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if !match {
t.Errorf("Unexpected error string: %s", err)
}
Expand All @@ -383,7 +395,10 @@ func TestVersion(t *testing.T) {
}

func TestClientMetrics(t *testing.T) {
c, _ := NewClient(Config{EnableMetrics: true})
c, err := NewClient(Config{EnableMetrics: true})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

m, err := c.Metrics()
if err != nil {
Expand Down Expand Up @@ -480,12 +495,15 @@ func TestResponseCheckOnly(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c, _ := NewClient(Config{
c, err := NewClient(Config{
Transport: &mockTransp{RoundTripFunc: func(request *http.Request) (*http.Response, error) {
return tt.response, tt.requestErr
}},
})
_, err := c.Cat.Indices()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
_, err = c.Cat.Indices()
if (err != nil) != tt.wantErr {
t.Errorf("Unexpected error, got %v, wantErr %v", err, tt.wantErr)
}
Expand All @@ -509,7 +527,10 @@ func TestProductCheckError(t *testing.T) {
}))
defer server.Close()

c, _ := NewClient(Config{Addresses: []string{server.URL}, DisableRetry: true})
c, err := NewClient(Config{Addresses: []string{server.URL}, DisableRetry: true})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if _, err := c.Cat.Indices(); err != nil {
t.Fatalf("unexpected error: %s", err)
}
Expand Down Expand Up @@ -617,7 +638,10 @@ oftUHvkHS0Vv/LicMEOufFGslb4T9aPJ7oyhoSlz9CfAutDWk/q/
}
defer res.Body.Close()

data, _ := ioutil.ReadAll(res.Body)
data, err := ioutil.ReadAll(res.Body)
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
if !bytes.Equal(data, body) {
t.Fatalf("unexpected payload returned: expected: %s, got: %s", body, data)
}
Expand Down Expand Up @@ -678,7 +702,7 @@ func TestCompatibilityHeader(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
t.Setenv(esCompatHeader, strconv.FormatBool(test.compatibilityHeader))

c, _ := NewClient(Config{
c, err := NewClient(Config{
EnableCompatibilityMode: test.configVar,
Addresses: []string{},
Transport: &mockTransp{
Expand Down Expand Up @@ -708,6 +732,10 @@ func TestCompatibilityHeader(t *testing.T) {
},
})

if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

req := &http.Request{URL: &url.URL{}, Header: make(http.Header)}
if test.bodyPresent {
req.Body = ioutil.NopCloser(strings.NewReader("{}"))
Expand Down Expand Up @@ -779,7 +807,7 @@ func TestBuildStrippedVersion(t *testing.T) {

func TestMetaHeader(t *testing.T) {
t.Run("MetaHeader with elastictransport", func(t *testing.T) {
tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -797,15 +825,24 @@ func TestMetaHeader(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewDefaultClient()
c, err := NewDefaultClient()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

_, _ = c.Info()
_, err = c.Info()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
})

t.Run("Metaheader with typedclient", func(t *testing.T) {
tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -826,16 +863,22 @@ func TestMetaHeader(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewTypedClient(Config{})
c, err := NewTypedClient(Config{})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

_, _ = c.Info().Do(nil)
})
}

func TestNewTypedClient(t *testing.T) {
tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -859,8 +902,14 @@ func TestNewTypedClient(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewTypedClient(Config{})
c, err := NewTypedClient(Config{})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

res, err := c.Info().Do(context.Background())
Expand All @@ -882,7 +931,7 @@ func TestContentTypeOverride(t *testing.T) {
t.Run("default JSON Content-Type", func(t *testing.T) {
contentType := "application/json"

tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -900,16 +949,25 @@ func TestContentTypeOverride(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewDefaultClient()
c, err := NewDefaultClient()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

_, _ = c.Search(c.Search.WithBody(strings.NewReader("")))
_, err = c.Search(c.Search.WithBody(strings.NewReader("")))
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
})
t.Run("overriden CBOR Content-Type functional options style", func(t *testing.T) {
contentType := "application/cbor"

tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -927,8 +985,14 @@ func TestContentTypeOverride(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewDefaultClient()
c, err := NewDefaultClient()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

_, _ = c.Search(
Expand All @@ -941,7 +1005,7 @@ func TestContentTypeOverride(t *testing.T) {
t.Run("overriden CBOR Content-Type direct call style", func(t *testing.T) {
contentType := "application/cbor"

tp, _ := elastictransport.New(elastictransport.Config{
tp, err := elastictransport.New(elastictransport.Config{
URLs: []*url.URL{{Scheme: "http", Host: "foo"}},
Transport: &mockTransp{
RoundTripFunc: func(request *http.Request) (*http.Response, error) {
Expand All @@ -959,8 +1023,14 @@ func TestContentTypeOverride(t *testing.T) {
},
},
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}

c, _ := NewDefaultClient()
c, err := NewDefaultClient()
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
c.Transport = tp

search := esapi.SearchRequest{}
Expand Down Expand Up @@ -1195,10 +1265,13 @@ func TestInstrumentation(t *testing.T) {
instrument.BeforeRequestFunc = test.want.BeforeRequestFunc
instrument.AfterRequestFunc = test.want.AfterRequestFunc

es, _ := NewTypedClient(Config{
es, err := NewTypedClient(Config{
Transport: &mockTransp{RoundTripFunc: test.args.roundTripFunc},
Instrumentation: instrument,
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
es.Search().
Index("foo").
Query(&types.Query{
Expand Down Expand Up @@ -1232,10 +1305,13 @@ func TestInstrumentation(t *testing.T) {
instrument.BeforeRequestFunc = test.want.BeforeRequestFunc
instrument.AfterRequestFunc = test.want.AfterRequestFunc

es, _ := NewClient(Config{
es, err := NewClient(Config{
Transport: &mockTransp{RoundTripFunc: test.args.roundTripFunc},
Instrumentation: instrument,
})
if err != nil {
t.Fatalf("Unexpected error: %s", err)
}
es.Search(
es.Search.WithIndex("foo"),
es.Search.WithBody(strings.NewReader("{\"query\":{\"match_all\":{}}}")),
Expand Down
Loading