@@ -159,7 +159,7 @@ func benchmarkFactoryWithLogLevel(b *testing.B, level zapcore.Level) {
159159}
160160
161161// multiReceiverConfig creates a Config for testing multiple receivers.
162- // Each receiver gets a unique home path.
162+ // Each receiver gets a unique home path and a JavaScript processor that loads from its own path.config directory .
163163func multiReceiverConfig (helper multiReceiverHelper ) * Config {
164164 return & Config {
165165 Beatconfig : map [string ]any {
@@ -170,6 +170,17 @@ func multiReceiverConfig(helper multiReceiverHelper) *Config {
170170 "enabled" : true ,
171171 "message" : "test" ,
172172 "count" : 1 ,
173+ // Each receiver gets a JavaScript processor that loads from its own
174+ // path.config directory, adding a unique marker field to verify isolation.
175+ "processors" : []map [string ]any {
176+ {
177+ "script" : map [string ]any {
178+ "lang" : "javascript" ,
179+ "file" : "processor.js" ,
180+ "tag" : "js-" + helper .jsMarker ,
181+ },
182+ },
183+ },
173184 },
174185 {
175186 "type" : "filestream" ,
@@ -197,14 +208,29 @@ type multiReceiverHelper struct {
197208 name string
198209 home string
199210 ingest string
211+ jsMarker string
200212 monitorSocket string
201213}
202214
203215func newMultiReceiverHelper (t * testing.T , number int ) multiReceiverHelper {
216+ const (
217+ scriptFormat = `function process(event) { event.Put("js_marker", %q); return event; }`
218+ )
219+
220+ ingest := filepath .Join (t .TempDir (), fmt .Sprintf ("test%d.log" , number ))
221+
222+ home := t .TempDir ()
223+
224+ // Create JavaScript processor files in each receiver's home directory.
225+ // Each script adds a unique marker field to verify path isolation.
226+ jsMarker := fmt .Sprintf ("receiver%d" , number )
227+ writeFile (t , filepath .Join (home , "processor.js" ), fmt .Sprintf (scriptFormat , jsMarker ))
228+
204229 return multiReceiverHelper {
205230 name : fmt .Sprintf ("r%d" , number ),
206- home : t .TempDir (),
207- ingest : filepath .Join (t .TempDir (), fmt .Sprintf ("test%d.log" , number )),
231+ home : home ,
232+ ingest : ingest ,
233+ jsMarker : jsMarker ,
208234 monitorSocket : genSocketPath (t ),
209235 }
210236}
@@ -243,6 +269,10 @@ func TestMultipleReceivers(t *testing.T) {
243269
244270 assert .Equalf (c , "test" , logs [helper .name ][0 ].Flatten ()["message" ], "expected %v message field to be 'test'" , helper )
245271
272+ // Verify that each receiver used its own JavaScript processor script.
273+ // This demonstrates path isolation: each receiver loads processor.js from its own path.config.
274+ assert .Equalf (c , helper .jsMarker , logs [helper .name ][0 ].Flatten ()["js_marker" ], "expected %v to have js_marker from its own script" , helper )
275+
246276 // Make sure that each receiver has a separate logger
247277 // instance and does not interfere with others. Previously, the
248278 // logger in Beats was global, causing logger fields to be
0 commit comments