// Copyright 2023 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package elasticsearch import ( "fmt" "net/http" "net/url" "testing" "time" "gitea.dev/modules/indexer/issues/internal/tests" "gitea.dev/modules/test" "github.com/stretchr/testify/require" ) func TestElasticsearchIndexer(t *testing.T) { // The elasticsearch instance started by pull-db-tests.yml > test-unit > services > elasticsearch rawURL := test.ExternalServiceHTTP(t, "TEST_ELASTICSEARCH_URL", "http://elastic:changeme@elasticsearch:9200") // Go's net/http does not auto-attach URL userinfo as Basic Auth, so extract // it and set the header explicitly; otherwise auth-enforced clusters answer // 401 and the probe never reports ready. parsed, err := url.Parse(rawURL) require.NoError(t, err) user := parsed.User parsed.User = nil probeURL := parsed.String() require.Eventually(t, func() bool { req, err := http.NewRequest(http.MethodGet, probeURL, nil) if err != nil { return false } if user != nil { pass, _ := user.Password() req.SetBasicAuth(user.Username(), pass) } resp, err := http.DefaultClient.Do(req) if err != nil { return false } defer resp.Body.Close() return resp.StatusCode == http.StatusOK }, time.Minute, time.Second, "Expected elasticsearch to be up") indexer := NewIndexer(rawURL, fmt.Sprintf("test_elasticsearch_indexer_%d", time.Now().Unix())) defer indexer.Close() tests.TestIndexer(t, indexer) }