mirror of
https://github.com/znc/znc.git
synced 2026-07-21 09:03:32 +02:00
Make unix sockets work from modules
This commit is contained in:
@@ -156,6 +156,97 @@ TEST_F(ZNCTest, ModperlSocket) {
|
||||
client.ReadUntil("received 4 bytes");
|
||||
}
|
||||
|
||||
TEST_F(ZNCTest, ModpythonUnixSocket) {
|
||||
#ifndef WANT_PYTHON
|
||||
GTEST_SKIP() << "Modpython is disabled";
|
||||
#endif
|
||||
auto znc = Run();
|
||||
znc->CanLeak();
|
||||
|
||||
InstallModule("socktest.py", R"(
|
||||
import znc
|
||||
|
||||
class acc(znc.Socket):
|
||||
def OnReadData(self, data):
|
||||
self.GetModule().PutModule('received {} bytes'.format(len(data)))
|
||||
self.Close()
|
||||
|
||||
class lis(znc.Socket):
|
||||
def OnAccepted(self, host, port):
|
||||
sock = self.GetModule().CreateSocket(acc)
|
||||
sock.DisableReadLine()
|
||||
return sock
|
||||
|
||||
class socktest(znc.Module):
|
||||
def OnLoad(self, args, ret):
|
||||
listen = self.CreateSocket(lis)
|
||||
return listen.Listen(addrtype='unix', path=self.GetSavePath() + "/sock")
|
||||
|
||||
def OnModCommand(self, cmd):
|
||||
sock = self.CreateSocket()
|
||||
sock.ConnectUnix(self.GetSavePath() + "/sock")
|
||||
sock.WriteBytes(b'blah')
|
||||
)");
|
||||
|
||||
auto ircd = ConnectIRCd();
|
||||
auto client = LoginClient();
|
||||
client.Write("znc loadmod modpython");
|
||||
client.Write("znc loadmod socktest");
|
||||
client.Write("PRIVMSG *socktest :foo");
|
||||
client.ReadUntil("received 4 bytes");
|
||||
}
|
||||
|
||||
TEST_F(ZNCTest, ModperlUnixSocket) {
|
||||
#ifndef WANT_PERL
|
||||
GTEST_SKIP() << "Modperl is disabled";
|
||||
#endif
|
||||
auto znc = Run();
|
||||
znc->CanLeak();
|
||||
|
||||
InstallModule("socktest.pm", R"(
|
||||
package socktest::acc;
|
||||
use base 'ZNC::Socket';
|
||||
sub OnReadData {
|
||||
my ($self, $data, $len) = @_;
|
||||
$self->GetModule->PutModule("received $len bytes");
|
||||
$self->Close;
|
||||
}
|
||||
|
||||
package socktest::lis;
|
||||
use base 'ZNC::Socket';
|
||||
sub OnAccepted {
|
||||
my $self = shift;
|
||||
return $self->GetModule->CreateSocket('socktest::acc');
|
||||
}
|
||||
|
||||
package socktest::conn;
|
||||
use base 'ZNC::Socket';
|
||||
|
||||
package socktest;
|
||||
use base 'ZNC::Module';
|
||||
sub OnLoad {
|
||||
my $self = shift;
|
||||
my $listen = $self->CreateSocket('socktest::lis');
|
||||
$listen->Listen(addrtype=>'unix', path=>$self->GetSavePath . "/sock");
|
||||
}
|
||||
sub OnModCommand {
|
||||
my ($self, $cmd) = @_;
|
||||
my $sock = $self->CreateSocket('socktest::conn');
|
||||
$sock->ConnectUnix($self->GetSavePath . "/sock");
|
||||
$sock->Write('blah');
|
||||
}
|
||||
|
||||
1;
|
||||
)");
|
||||
|
||||
auto ircd = ConnectIRCd();
|
||||
auto client = LoginClient();
|
||||
client.Write("znc loadmod modperl");
|
||||
client.Write("znc loadmod socktest");
|
||||
client.Write("PRIVMSG *socktest :foo");
|
||||
client.ReadUntil("received 4 bytes");
|
||||
}
|
||||
|
||||
TEST_F(ZNCTest, ModpythonVCString) {
|
||||
#ifndef WANT_PYTHON
|
||||
GTEST_SKIP() << "Modpython is disabled";
|
||||
|
||||
Reference in New Issue
Block a user