diff --git a/src/Provider/Node/SystemNodeProvider.php b/src/Provider/Node/SystemNodeProvider.php index 2ef3f2f..216d739 100644 --- a/src/Provider/Node/SystemNodeProvider.php +++ b/src/Provider/Node/SystemNodeProvider.php @@ -25,7 +25,7 @@ class SystemNodeProvider implements NodeProviderInterface /** * Returns the system node ID * - * @return string System node ID as a hexadecimal string + * @return string|false System node ID as a hexadecimal string, or false if it is not found */ public function getNode() { @@ -40,6 +40,7 @@ class SystemNodeProvider implements NodeProviderInterface // Search the ifconfig output for all MAC addresses and return // the first one found + $node = false; if (preg_match_all($pattern, $this->getIfconfig(), $matches, PREG_PATTERN_ORDER)) { $node = $matches[1][0]; $node = str_replace([':', '-'], '', $node); diff --git a/tests/src/Provider/Node/SystemNodeProviderTest.php b/tests/src/Provider/Node/SystemNodeProviderTest.php index 13d521f..fa9e98e 100644 --- a/tests/src/Provider/Node/SystemNodeProviderTest.php +++ b/tests/src/Provider/Node/SystemNodeProviderTest.php @@ -18,15 +18,9 @@ class SystemNodeProviderTest extends TestCase ->setMethods(['getIfconfig']) ->getMock(); - // @codingStandardsIgnoreStart - $provider->method('getIfconfig') - ->willReturn(<< mtu 1500 - ether 0a:00:27:00:00:00 - inet 192.168.60.1 netmask 0xffffff00 broadcast 192.168.60.255 -TXT - ); - // @codingStandardsIgnoreEnd + $provider->expects($this->once()) + ->method('getIfconfig') + ->willReturn(PHP_EOL . 'AA-BB-CC-DD-EE-FF' . PHP_EOL); $node = $provider->getNode(); @@ -84,6 +78,42 @@ TXT $this->assertEquals('AABBCCDDEEFF', $node); } + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function testGetNodeReturnsFalseWhenNodeIsNotFound() + { + $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') + ->setMethods(['getIfconfig']) + ->getMock(); + + $provider->expects($this->once()) + ->method('getIfconfig') + ->willReturn('some string that does not match the mac address'); + + $node = $provider->getNode(); + $this->assertFalse($node); + } + + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function testGetNodeWillNotExecuteSystemCallIfFailedFirstTime() + { + $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') + ->setMethods(['getIfconfig']) + ->getMock(); + + $provider->expects($this->once()) + ->method('getIfconfig') + ->willReturn('some string that does not match the mac address'); + + $provider->getNode(); + $provider->getNode(); + } + public function osCommandDataProvider() { return [