diff --git a/push_notifications_test.go b/push_notifications_test.go index 57de1ce5..87ef8265 100644 --- a/push_notifications_test.go +++ b/push_notifications_test.go @@ -174,9 +174,10 @@ func TestClientPushNotificationIntegration(t *testing.T) { } func TestClientWithoutPushNotifications(t *testing.T) { - // Test client without push notifications enabled + // Test client without push notifications enabled (using RESP2) client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", + Protocol: 2, // RESP2 doesn't support push notifications PushNotifications: false, // Disabled }) defer client.Close() @@ -651,9 +652,10 @@ func TestPushNotificationProcessorConvenienceMethods(t *testing.T) { } func TestClientPushNotificationEdgeCases(t *testing.T) { - // Test client methods when processor is nil + // Test client methods when using void processor (RESP2) client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", + Protocol: 2, // RESP2 doesn't support push notifications PushNotifications: false, // Disabled }) defer client.Close() @@ -673,10 +675,14 @@ func TestClientPushNotificationEdgeCases(t *testing.T) { t.Errorf("Expected nil error when processor is nil, got: %v", err) } - // GetPushNotificationProcessor should return nil + // GetPushNotificationProcessor should return VoidPushNotificationProcessor processor := client.GetPushNotificationProcessor() - if processor != nil { - t.Error("Processor should be nil when push notifications are disabled") + if processor == nil { + t.Error("Processor should never be nil") + } + // VoidPushNotificationProcessor should have nil registry + if processor.GetRegistry() != nil { + t.Error("VoidPushNotificationProcessor should have nil registry when disabled") } } diff --git a/redis.go b/redis.go index 6aafc914..5946e1ae 100644 --- a/redis.go +++ b/redis.go @@ -970,8 +970,13 @@ func newConn(opt *Options, connPool pool.Pooler, parentHooks *hooksMixin) *Conn c.hooksMixin = parentHooks.clone() } - // Set push notification processor from options (always available now) - c.pushProcessor = opt.PushNotificationProcessor + // Set push notification processor from options, ensure it's never nil + if opt.PushNotificationProcessor != nil { + c.pushProcessor = opt.PushNotificationProcessor + } else { + // Create a void processor if none provided to ensure we never have nil + c.pushProcessor = NewVoidPushNotificationProcessor() + } c.cmdable = c.Process c.statefulCmdable = c.Process