@@ -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