@@ -412,6 +412,97 @@ func TestNew_WithInvalidRuleGroups(t *testing.T) {
412412 assert .Contains (t , logOutput , "ERROR" )
413413}
414414
415+ func TestNew_WithValidForwarder (t * testing.T ) {
416+ // Set up a mock configuration with a valid forwarder address
417+ viper .Reset ()
418+ viper .Set ("rule_groups" , []map [string ]interface {}{
419+ {
420+ "name" : "test_group" ,
421+ "rules" : []string {
422+ "Request.Operation == 'read'" ,
423+ },
424+ "log_file" : map [string ]interface {}{
425+ "file_path" : "/tmp/test.log" ,
426+ "max_size" : 10 ,
427+ },
428+ "forwarding" : map [string ]interface {}{
429+ "enabled" : true ,
430+ "address" : "127.0.0.1:9000" ,
431+ },
432+ },
433+ })
434+
435+ server , err := New (nil )
436+
437+ assert .NoError (t , err )
438+ assert .NotNil (t , server )
439+ assert .Len (t , server .ruleGroups , 1 )
440+ assert .NotNil (t , server .ruleGroups [0 ].Forwarder )
441+ }
442+
443+ func TestNew_WithInvalidForwarder (t * testing.T ) {
444+ // Set up a mock configuration with an invalid forwarder address
445+ viper .Reset ()
446+ viper .Set ("rule_groups" , []map [string ]interface {}{
447+ {
448+ "name" : "test_group" ,
449+ "rules" : []string {
450+ "Request.Operation == 'read'" ,
451+ },
452+ "log_file" : map [string ]interface {}{
453+ "file_path" : "/tmp/test.log" ,
454+ "max_size" : 10 ,
455+ },
456+ "forwarding" : map [string ]interface {}{
457+ "enabled" : true ,
458+ "address" : "invalid:address:9000" ,
459+ },
460+ },
461+ })
462+
463+ var buf bytes.Buffer
464+ logger := slog .New (slog .NewJSONHandler (& buf , & slog.HandlerOptions {Level : slog .LevelDebug }))
465+
466+ server , err := New (logger )
467+
468+ assert .Error (t , err )
469+ assert .Nil (t , server )
470+ assert .Contains (t , err .Error (), "failed to create UDP forwarder" )
471+
472+ // Verify error was logged
473+ logOutput := buf .String ()
474+ assert .Contains (t , logOutput , "Failed to create UDP forwarder" )
475+ assert .Contains (t , logOutput , "ERROR" )
476+ }
477+
478+ func TestNew_WithDisabledForwarder (t * testing.T ) {
479+ // Set up a mock configuration with forwarding disabled
480+ viper .Reset ()
481+ viper .Set ("rule_groups" , []map [string ]interface {}{
482+ {
483+ "name" : "test_group" ,
484+ "rules" : []string {
485+ "Request.Operation == 'read'" ,
486+ },
487+ "log_file" : map [string ]interface {}{
488+ "file_path" : "/tmp/test.log" ,
489+ "max_size" : 10 ,
490+ },
491+ "forwarding" : map [string ]interface {}{
492+ "enabled" : false ,
493+ "address" : "127.0.0.1:9000" ,
494+ },
495+ },
496+ })
497+
498+ server , err := New (nil )
499+
500+ assert .NoError (t , err )
501+ assert .NotNil (t , server )
502+ assert .Len (t , server .ruleGroups , 1 )
503+ assert .Nil (t , server .ruleGroups [0 ].Forwarder )
504+ }
505+
415506func TestRuleGroup_shouldLog (t * testing.T ) {
416507 // Define a sample audit log
417508 auditLog := & AuditLog {
0 commit comments