Skip to content

Commit 79ea9a9

Browse files
ci: add integration test
1 parent 3e2a623 commit 79ea9a9

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

testing/integration/ess/otel_test.go

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,3 +2081,138 @@ service:
20812081

20822082
cancel()
20832083
}
2084+
2085+
func TestOtelBeatsAuthExtensionInvalidCertificates(t *testing.T) {
2086+
info := define.Require(t, define.Requirements{
2087+
Group: integration.Default,
2088+
Local: true,
2089+
OS: []define.OS{
2090+
// {Type: define.Windows}, we don't support otel on Windows yet
2091+
{Type: define.Linux},
2092+
{Type: define.Darwin},
2093+
},
2094+
Stack: &define.Stack{},
2095+
})
2096+
2097+
// Create the otel configuration file
2098+
type otelConfigOptions struct {
2099+
ESEndpoint string
2100+
ESApiKey string
2101+
Index string
2102+
}
2103+
esEndpoint, err := integration.GetESHost()
2104+
require.NoError(t, err, "error getting elasticsearch endpoint")
2105+
esApiKey, err := createESApiKey(info.ESClient)
2106+
require.NoError(t, err, "error creating API key")
2107+
require.True(t, len(esApiKey.Encoded) > 1, "api key is invalid %q", esApiKey)
2108+
index := "logs-integration-" + info.Namespace
2109+
2110+
fixture, err := define.NewFixtureFromLocalBuild(t, define.Version())
2111+
require.NoError(t, err)
2112+
2113+
ctx, cancel := testcontext.WithDeadline(t, t.Context(), time.Now().Add(5*time.Minute))
2114+
defer cancel()
2115+
err = fixture.Prepare(ctx)
2116+
require.NoError(t, err)
2117+
2118+
otelConfigTemplate := `
2119+
extensions:
2120+
beatsauth:
2121+
continue_on_error: true
2122+
ssl:
2123+
enabled: true
2124+
verification_mode: none
2125+
certificate: /nonexistent.pem
2126+
key: /nonexistent.key
2127+
key_passphrase: null
2128+
key_passphrase_path: null
2129+
verification_mode: none
2130+
receivers:
2131+
metricbeatreceiver:
2132+
metricbeat:
2133+
modules:
2134+
- module: system
2135+
enabled: true
2136+
period: 1s
2137+
processes:
2138+
- '.*'
2139+
metricsets:
2140+
- cpu
2141+
output:
2142+
otelconsumer:
2143+
queue.mem.flush.timeout: 0s
2144+
exporters:
2145+
elasticsearch/log:
2146+
endpoints:
2147+
- {{.ESEndpoint}}
2148+
api_key: {{.ESApiKey}}
2149+
logs_index: {{.Index}}
2150+
batcher:
2151+
enabled: true
2152+
flush_timeout: 1s
2153+
min_size: 1
2154+
auth:
2155+
authenticator: beatsauth
2156+
mapping:
2157+
mode: bodymap
2158+
service:
2159+
extensions: [beatsauth]
2160+
pipelines:
2161+
logs:
2162+
receivers:
2163+
- metricbeatreceiver
2164+
exporters:
2165+
- elasticsearch/log
2166+
`
2167+
var otelConfigBuffer bytes.Buffer
2168+
require.NoError(t,
2169+
template.Must(template.New("otelConfig").Parse(otelConfigTemplate)).Execute(&otelConfigBuffer,
2170+
otelConfigOptions{
2171+
ESEndpoint: esEndpoint,
2172+
ESApiKey: esApiKey.Encoded,
2173+
Index: index,
2174+
}))
2175+
2176+
// configure elastic-agent.yml
2177+
err = fixture.Configure(ctx, otelConfigBuffer.Bytes())
2178+
2179+
// prepare agent command
2180+
cmd, err := fixture.PrepareAgentCommand(ctx, nil)
2181+
require.NoError(t, err, "cannot prepare Elastic-Agent command: %w", err)
2182+
2183+
output := strings.Builder{}
2184+
cmd.Stderr = &output
2185+
cmd.Stdout = &output
2186+
2187+
// start elastic-agent
2188+
err = cmd.Start()
2189+
require.NoError(t, err)
2190+
2191+
t.Cleanup(func() {
2192+
if t.Failed() {
2193+
t.Log("Elastic-Agent output:")
2194+
t.Log(output.String())
2195+
}
2196+
})
2197+
2198+
require.EventuallyWithT(t, func(collect *assert.CollectT) {
2199+
var statusErr error
2200+
status, statusErr := fixture.ExecStatus(ctx)
2201+
assert.NoError(collect, statusErr)
2202+
require.NotNil(collect, status.Collector)
2203+
require.NotNil(collect, status.Collector.ComponentStatusMap)
2204+
2205+
pipelines, exists := status.Collector.ComponentStatusMap["pipeline:logs"]
2206+
require.True(collect, exists)
2207+
2208+
receiver, exists := pipelines.ComponentStatusMap["receiver:metricbeatreceiver"]
2209+
require.True(collect, exists)
2210+
require.EqualValues(collect, receiver.Status, cproto.State_HEALTHY)
2211+
2212+
exporter, exists := pipelines.ComponentStatusMap["exporter:elasticsearch/log"]
2213+
require.True(collect, exists)
2214+
require.EqualValues(collect, exporter.Status, cproto.State_DEGRADED)
2215+
}, 2*time.Minute, 5*time.Second)
2216+
2217+
cancel()
2218+
}

0 commit comments

Comments
 (0)