feat: add IRC wire protocol listener with shared service layer
All checks were successful
check / check (push) Successful in 1m0s
All checks were successful
check / check (push) Successful in 1m0s
Adds a backward-compatible IRC wire protocol listener (RFC 1459/2812) with a shared service layer used by both IRC and HTTP transports. - TCP listener on configurable port (default :6667) - Full IRC protocol: NICK, USER, JOIN, PART, PRIVMSG, MODE, TOPIC, etc. - Shared service layer (internal/service/) for consistent code paths - Tier 2 join restrictions (ban, invite-only, key, limit) in service layer - Ban check on PRIVMSG in service layer - SetChannelFlag handles +i and +s modes - Command dispatch via map[string]cmdHandler pattern - EXPOSE 6667 in Dockerfile - Service layer unit tests closes #89
This commit is contained in:
52
internal/ircserver/export_test.go
Normal file
52
internal/ircserver/export_test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package ircserver
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"net"
|
||||
|
||||
"git.eeqj.de/sneak/neoirc/internal/broker"
|
||||
"git.eeqj.de/sneak/neoirc/internal/config"
|
||||
"git.eeqj.de/sneak/neoirc/internal/db"
|
||||
"git.eeqj.de/sneak/neoirc/internal/service"
|
||||
)
|
||||
|
||||
// NewTestServer creates a Server suitable for testing.
|
||||
// The caller must call Stop() when finished.
|
||||
func NewTestServer(
|
||||
log *slog.Logger,
|
||||
cfg *config.Config,
|
||||
database *db.Database,
|
||||
brk *broker.Broker,
|
||||
) *Server {
|
||||
svc := &service.Service{
|
||||
DB: database,
|
||||
Broker: brk,
|
||||
Config: cfg,
|
||||
Log: log,
|
||||
}
|
||||
|
||||
return &Server{ //nolint:exhaustruct
|
||||
log: log,
|
||||
cfg: cfg,
|
||||
database: database,
|
||||
brk: brk,
|
||||
svc: svc,
|
||||
conns: make(map[*Conn]struct{}),
|
||||
}
|
||||
}
|
||||
|
||||
// Start exposes the unexported start method for tests.
|
||||
func (s *Server) Start(addr string) error {
|
||||
return s.start(context.Background(), addr)
|
||||
}
|
||||
|
||||
// Stop exposes the unexported stop method for tests.
|
||||
func (s *Server) Stop() {
|
||||
s.stop()
|
||||
}
|
||||
|
||||
// Listener returns the server's net.Listener for tests.
|
||||
func (s *Server) Listener() net.Listener {
|
||||
return s.listener
|
||||
}
|
||||
Reference in New Issue
Block a user