* This file is licensed under the Licensed under the MIT license: * http://opensource.org/licenses/MIT */ namespace Icewind\SMB\Test; use Icewind\SMB\ACL; use Icewind\SMB\BasicAuth; use Icewind\SMB\Exception\InvalidArgumentException; use Icewind\SMB\IOptions; use Icewind\SMB\Native\NativeServer; use Icewind\SMB\Options; use Icewind\SMB\System; use Icewind\SMB\TimeZoneProvider; class NativeShareTest extends AbstractShareTest { public function setUp(): void { $this->requireBackendEnv('libsmbclient'); if (!function_exists('smbclient_state_new')) { $this->markTestSkipped('libsmbclient php extension not installed'); } $this->config = json_decode(file_get_contents(__DIR__ . '/config.json')); $options = new Options(); $options->setMinProtocol(IOptions::PROTOCOL_SMB2); $options->setMaxProtocol(IOptions::PROTOCOL_SMB3); $this->server = new NativeServer( $this->config->host, new BasicAuth( $this->config->user, 'test', $this->config->password ), new System(), new TimeZoneProvider(new System()), $options ); $this->share = $this->server->getShare($this->config->share); if ($this->config->root) { $this->root = '/' . $this->config->root . '/' . uniqid(); } else { $this->root = '/' . uniqid(); } $this->share->mkdir($this->root); } public function testProtocolMatch() { $options = new Options(); $options->setMinProtocol(IOptions::PROTOCOL_SMB2); $options->setMaxProtocol(IOptions::PROTOCOL_SMB3); $server = new NativeServer( $this->config->host, new BasicAuth( $this->config->user, 'test', $this->config->password ), new System(), new TimeZoneProvider(new System()), $options ); $server->listShares(); $this->assertTrue(true); } public function testToLowMaxProtocol() { $this->expectException(InvalidArgumentException::class); $options = new Options(); $options->setMaxProtocol(IOptions::PROTOCOL_NT1); $server = new NativeServer( $this->config->host, new BasicAuth( $this->config->user, 'test', $this->config->password ), new System(), new TimeZoneProvider(new System()), $options ); $server->listShares(); } public function testACL() { $this->share->mkdir($this->root . "/test"); $listing = $this->share->dir($this->root); $this->assertCount(1, $listing); $acls = $listing[0]->getAcls(); $acl = $acls['Everyone']; $this->assertEquals($acl->getType(), ACL::TYPE_ALLOW); $this->assertEquals(ACL::MASK_READ, $acl->getMask() & ACL::MASK_READ); } }