github.com/etecs-ru/gnomock@v0.13.2/preset/elastic/preset_test.go (about)

     1  package elastic_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/elastic/go-elasticsearch/v7"
     9  	"github.com/etecs-ru/gnomock"
    10  	"github.com/etecs-ru/gnomock/internal/israce"
    11  	"github.com/etecs-ru/gnomock/preset/elastic"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  // these tests have trouble running in parallel, probably due to limited
    16  // resources
    17  
    18  func TestPreset(t *testing.T) {
    19  	if israce.Enabled {
    20  		t.Skip("elastic tests can't run with race detector due to https://github.com/elastic/go-elasticsearch/issues/147")
    21  	}
    22  
    23  	for _, version := range []string{"7.9.3", "6.8.13", "5.6"} {
    24  		t.Run(version, testPreset(version))
    25  	}
    26  }
    27  
    28  func testPreset(version string) func(t *testing.T) {
    29  	return func(t *testing.T) {
    30  		p := elastic.Preset(
    31  			elastic.WithVersion("7.9.2"),
    32  			elastic.WithInputFile("./testdata/titles"),
    33  			elastic.WithInputFile("./testdata/names"),
    34  		)
    35  
    36  		c, err := gnomock.Start(p)
    37  		require.NoError(t, err)
    38  
    39  		defer func() { require.NoError(t, gnomock.Stop(c)) }()
    40  
    41  		cfg := elasticsearch.Config{
    42  			Addresses:    []string{fmt.Sprintf("http://%s", c.DefaultAddress())},
    43  			DisableRetry: true,
    44  		}
    45  
    46  		client, err := elasticsearch.NewClient(cfg)
    47  		require.NoError(t, err)
    48  
    49  		res, err := client.Search(
    50  			client.Search.WithIndex("titles"),
    51  			client.Search.WithQuery("gnomock"),
    52  		)
    53  		require.NoError(t, err)
    54  		require.False(t, res.IsError(), res.String())
    55  
    56  		var out struct {
    57  			Hits struct {
    58  				Total struct {
    59  					Value int `json:"value"`
    60  				} `json:"total"`
    61  			} `json:"hits"`
    62  		}
    63  
    64  		require.NoError(t, json.NewDecoder(res.Body).Decode(&out))
    65  		require.NoError(t, res.Body.Close())
    66  		require.Equal(t, 1, out.Hits.Total.Value)
    67  
    68  		res, err = client.Search(
    69  			client.Search.WithIndex("titles"),
    70  			client.Search.WithQuery("unknown"),
    71  		)
    72  		require.NoError(t, err)
    73  		require.False(t, res.IsError(), res.String())
    74  
    75  		require.NoError(t, json.NewDecoder(res.Body).Decode(&out))
    76  		require.NoError(t, res.Body.Close())
    77  		require.Equal(t, 0, out.Hits.Total.Value)
    78  	}
    79  }
    80  
    81  func TestPreset_withDefaults(t *testing.T) {
    82  	if israce.Enabled {
    83  		t.Skip("elastic tests can't run with race detector due to https://github.com/elastic/go-elasticsearch/issues/147")
    84  	}
    85  
    86  	p := elastic.Preset()
    87  	c, err := gnomock.Start(p)
    88  	require.NoError(t, err)
    89  
    90  	defer func() { require.NoError(t, gnomock.Stop(c)) }()
    91  
    92  	cfg := elasticsearch.Config{
    93  		Addresses:    []string{fmt.Sprintf("http://%s", c.DefaultAddress())},
    94  		DisableRetry: true,
    95  	}
    96  
    97  	_, err = elasticsearch.NewClient(cfg)
    98  	require.NoError(t, err)
    99  }