From 901c3e540d34ecc7d0761cc3c4667618f70582c1 Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Tue, 16 Jan 2018 14:05:53 -0600 Subject: [PATCH] Handle cases where glob() returns false Fixes #203 --- src/Provider/Node/SystemNodeProvider.php | 9 ++- .../Provider/Node/SystemNodeProviderTest.php | 61 ++++++++++++++----- 2 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/Provider/Node/SystemNodeProvider.php b/src/Provider/Node/SystemNodeProvider.php index 3780d5d..8352b66 100644 --- a/src/Provider/Node/SystemNodeProvider.php +++ b/src/Provider/Node/SystemNodeProvider.php @@ -88,10 +88,15 @@ class SystemNodeProvider implements NodeProviderInterface { $mac = false; if (strtoupper(php_uname('s')) === "LINUX") { - // get all the macadresses of all systems + $addressPaths = glob('/sys/class/net/*/address', GLOB_NOSORT); + + if (empty($addressPaths)) { + return false; + } + $macs = array_map( 'file_get_contents', - glob('/sys/class/net/*/address', GLOB_NOSORT) + $addressPaths ); $macs = array_map('trim', $macs); diff --git a/tests/Provider/Node/SystemNodeProviderTest.php b/tests/Provider/Node/SystemNodeProviderTest.php index abc3677..d624b2f 100644 --- a/tests/Provider/Node/SystemNodeProviderTest.php +++ b/tests/Provider/Node/SystemNodeProviderTest.php @@ -222,23 +222,56 @@ class SystemNodeProviderTest extends TestCase 'data://text/plain,01:02:03:04:05:06', ]); - //Using a mock to verify the provider only gets the node from ifconfig one time - $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') - ->setMethods(['getIfconfig']) - ->getMock(); + $provider = \Mockery::mock(SystemNodeProvider::class); + $provider->shouldAllowMockingProtectedMethods(); + $provider->shouldReceive('getNode')->passthru(); if ($os === 'Linux') { - $provider->expects($this->never()) - ->method('getIfconfig'); + $provider->expects()->getIfconfig()->never(); + $provider->shouldReceive('getsysfs')->passthru(); } else { - $provider->expects($this->any()) - ->method('getsysfs') - ->willReturn(false); - $provider->expects($this->once()) - ->method('getIfconfig') - ->willReturn(PHP_EOL . '01-02-03-04-05-06' . PHP_EOL); + $provider->expects()->getIfconfig()->andReturn(PHP_EOL . '01-02-03-04-05-06' . PHP_EOL); + $provider->expects()->getsysfs()->andReturnFalse(); } - $node = $provider->getNode(); - $this->assertEquals('010203040506', $node); + + $this->assertEquals('010203040506', $provider->getNode()); + } + + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function testCallGetsysfsOnLinuxWhenGlobReturnsFalse() + { + AspectMock::func('Ramsey\Uuid\Provider\Node', 'php_uname', 'Linux'); + AspectMock::func('Ramsey\Uuid\Provider\Node', 'glob', false); + + $provider = \Mockery::mock(SystemNodeProvider::class); + $provider->shouldAllowMockingProtectedMethods(); + $provider->shouldReceive('getNode')->passthru(); + $provider->shouldReceive('getsysfs')->passthru(); + + $provider->expects()->getIfconfig()->andReturn(PHP_EOL . '01-02-03-04-05-06' . PHP_EOL); + + $this->assertEquals('010203040506', $provider->getNode()); + } + + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function testCallGetsysfsOnLinuxWhenGlobReturnsEmptyArray() + { + AspectMock::func('Ramsey\Uuid\Provider\Node', 'php_uname', 'Linux'); + AspectMock::func('Ramsey\Uuid\Provider\Node', 'glob', []); + + $provider = \Mockery::mock(SystemNodeProvider::class); + $provider->shouldAllowMockingProtectedMethods(); + $provider->shouldReceive('getNode')->passthru(); + $provider->shouldReceive('getsysfs')->passthru(); + + $provider->expects()->getIfconfig()->andReturn(PHP_EOL . '01-02-03-04-05-06' . PHP_EOL); + + $this->assertEquals('010203040506', $provider->getNode()); } }