THRIFT-1482: Unix domain socket support under PHP
Client: php
Patch: Balázs Dura-Kovács, Volodymyr Panivko
This closes #3109
This closes #3130
diff --git a/lib/php/lib/Transport/TSocket.php b/lib/php/lib/Transport/TSocket.php
index fb74fdb..c220a8b 100644
--- a/lib/php/lib/Transport/TSocket.php
+++ b/lib/php/lib/Transport/TSocket.php
@@ -218,7 +218,7 @@
throw new TTransportException('Cannot open null host', TTransportException::NOT_OPEN);
}
- if ($this->port_ <= 0) {
+ if ($this->port_ <= 0 && strpos($this->host_, 'unix://') !== 0) {
throw new TTransportException('Cannot open without port', TTransportException::NOT_OPEN);
}
diff --git a/lib/php/test/Unit/Lib/Transport/TSocketTest.php b/lib/php/test/Unit/Lib/Transport/TSocketTest.php
index 6bab297..a0817a8 100644
--- a/lib/php/test/Unit/Lib/Transport/TSocketTest.php
+++ b/lib/php/test/Unit/Lib/Transport/TSocketTest.php
@@ -246,6 +246,50 @@
$this->assertTrue($transport->isOpen());
}
+ public function testOpenUnixSocket()
+ {
+ $host = 'unix:///tmp/ipc.sock';
+ $port = -1;
+ $persist = false;
+ $debugHandler = null;
+ $handle = fopen('php://memory', 'r+');
+
+ $this->getFunctionMock('Thrift\Transport', 'fsockopen')
+ ->expects($this->once())
+ ->with(
+ $host,
+ $port,
+ $this->anything(), #$errno,
+ $this->anything(), #$errstr,
+ $this->anything() #$this->sendTimeoutSec_ + ($this->sendTimeoutUsec_ / 1000000),
+ )
+ ->willReturn($handle);
+
+ $this->getFunctionMock('Thrift\Transport', 'socket_import_stream')
+ ->expects($this->once())
+ ->with($handle)
+ ->willReturn(true);
+
+ $this->getFunctionMock('Thrift\Transport', 'socket_set_option')
+ ->expects($this->once())
+ ->with(
+ $this->anything(), #$socket,
+ SOL_TCP, #$level
+ TCP_NODELAY, #$option
+ 1 #$value
+ )
+ ->willReturn(true);
+
+ $transport = new TSocket(
+ $host,
+ $port,
+ $persist,
+ $debugHandler
+ );
+
+ $transport->open();
+ }
+
/**
* @dataProvider open_THRIFT_5132_DataProvider
*/