Skip to content

Commit 814ca4a

Browse files
committed
move lazy geoipdb download to test setup
1 parent 6dafb9e commit 814ca4a

File tree

5 files changed

+89
-105
lines changed

5 files changed

+89
-105
lines changed

systemtest/agentconfig_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import (
3939

4040
func TestAgentConfig(t *testing.T) {
4141
systemtest.CleanupElasticsearch(t)
42-
systemtest.GeoIpLazyDownload(t)
4342

4443
serviceName := "systemtest_service"
4544
serviceEnvironment := "testing"

systemtest/aggregation_test.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ import (
3939

4040
func TestTransactionAggregation(t *testing.T) {
4141
systemtest.CleanupElasticsearch(t)
42-
systemtest.GeoIpLazyDownload(t)
43-
4442
srv := apmservertest.NewUnstartedServerTB(t)
4543
require.NoError(t, srv.Start())
4644

@@ -120,8 +118,6 @@ func TestTransactionAggregation(t *testing.T) {
120118

121119
func TestTransactionAggregationShutdown(t *testing.T) {
122120
systemtest.CleanupElasticsearch(t)
123-
systemtest.GeoIpLazyDownload(t)
124-
125121
srv := apmservertest.NewServerTB(t)
126122

127123
// Send a transaction to the server to be aggregated.
@@ -150,8 +146,6 @@ func TestTransactionAggregationShutdown(t *testing.T) {
150146
func TestServiceDestinationAggregation(t *testing.T) {
151147
t.Setenv("ELASTIC_APM_GLOBAL_LABELS", "department_name=apm,organization=observability,company=elastic")
152148
systemtest.CleanupElasticsearch(t)
153-
systemtest.GeoIpLazyDownload(t)
154-
155149
srv := apmservertest.NewServerTB(t)
156150

157151
// Send spans to the server to be aggregated.

systemtest/geoip.go

Lines changed: 0 additions & 97 deletions
This file was deleted.

systemtest/main_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,17 @@
1818
package systemtest
1919

2020
import (
21+
"encoding/json"
22+
"fmt"
23+
"io"
2124
"log"
25+
"net/http"
2226
"os"
27+
"strings"
2328
"testing"
29+
"time"
30+
31+
"github.com/elastic/apm-server/systemtest/apmservertest"
2432
)
2533

2634
func TestMain(m *testing.M) {
@@ -30,9 +38,90 @@ func TestMain(m *testing.M) {
3038
log.Fatalf("failed to start stack containers: %v", err)
3139
}
3240
initElasticSearch()
41+
if err := GeoIpLazyDownload(); err != nil {
42+
log.Fatalf("failed to download geoip database: %v", err)
43+
}
3344
initKibana()
3445
initSettings()
3546
initOTEL()
3647
log.Println("INFO: running system tests...")
3748
os.Exit(m.Run())
3849
}
50+
51+
var stats struct {
52+
GeoIPStats `json:"stats"`
53+
}
54+
55+
type GeoIPStats struct {
56+
DatabasesCount int `json:"databases_count"`
57+
}
58+
59+
const requestBody = `{"metadata": { "service": {"name": "alice", "agent": {"version": "3.14.0", "name": "elastic-node"}}}}
60+
{"metricset": {"samples":{"a":{"value":3.2}}, "timestamp": 1496170422281000}}`
61+
62+
func GeoIpLazyDownload() error {
63+
srv := apmservertest.NewUnstartedServer()
64+
if err := srv.Start(); err != nil {
65+
return err
66+
}
67+
68+
serverURL := srv.URL + "/intake/v2/events"
69+
req, err := http.NewRequest("POST", serverURL, strings.NewReader(requestBody))
70+
if err != nil {
71+
return err
72+
}
73+
74+
req.Header.Set("Content-Type", "application/x-ndjson")
75+
req.Header.Set("X-Forwarded-For", "8.8.8.8")
76+
77+
resp, err := http.DefaultClient.Do(req)
78+
if err != nil {
79+
return err
80+
}
81+
if resp.StatusCode != http.StatusAccepted {
82+
return fmt.Errorf("query failed with status code: %d", resp.StatusCode)
83+
}
84+
85+
io.Copy(io.Discard, resp.Body)
86+
resp.Body.Close()
87+
88+
if err := waitGeoIPDownload(); err != nil {
89+
return err
90+
}
91+
92+
// Clean all datastreams containing tags.
93+
cleanupElasticsearch()
94+
95+
return nil
96+
}
97+
98+
func waitGeoIPDownload() error {
99+
timer := time.NewTimer(2 * time.Minute)
100+
ticker := time.NewTicker(500 * time.Millisecond)
101+
defer ticker.Stop()
102+
defer timer.Stop()
103+
104+
for {
105+
select {
106+
case <-ticker.C:
107+
resp, err := Elasticsearch.Ingest.GeoIPStats()
108+
if err != nil {
109+
return err
110+
}
111+
body, err := io.ReadAll(resp.Body)
112+
resp.Body.Close()
113+
if err != nil {
114+
return err
115+
}
116+
if err := json.Unmarshal(body, &stats); err != nil {
117+
return err
118+
}
119+
if stats.DatabasesCount == 3 {
120+
log.Println("GeoIP database downloaded")
121+
return nil
122+
}
123+
case <-timer.C:
124+
return fmt.Errorf("download timeout exceeded")
125+
}
126+
}
127+
}

systemtest/rum_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import (
4040

4141
func TestRUMXForwardedFor(t *testing.T) {
4242
systemtest.CleanupElasticsearch(t)
43-
systemtest.GeoIpLazyDownload(t)
4443

4544
srv := apmservertest.NewUnstartedServerTB(t)
4645
srv.Config.RUM = &apmservertest.RUMConfig{Enabled: true}

0 commit comments

Comments
 (0)