From 5dbd993b4b8929feccd682fcb80c8ad8effd91f3 Mon Sep 17 00:00:00 2001 From: Marcos Date: Thu, 23 Jun 2016 20:57:21 +0200 Subject: [PATCH 1/4] Execute system call only once even if the node is not found --- src/Provider/Node/SystemNodeProvider.php | 3 ++- tests/src/Provider/Node/SystemNodeProviderTest.php | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Provider/Node/SystemNodeProvider.php b/src/Provider/Node/SystemNodeProvider.php index d3a27b3..cbcd089 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 c28ceb7..edc49c3 100644 --- a/tests/src/Provider/Node/SystemNodeProviderTest.php +++ b/tests/src/Provider/Node/SystemNodeProviderTest.php @@ -71,6 +71,20 @@ class SystemNodeProviderTest extends TestCase $this->assertEquals('AABBCCDDEEFF', $node); } + 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 [ From 6cb7128cbef5f309b5e80a73e33a9d9aec5f44cd Mon Sep 17 00:00:00 2001 From: Marcos Date: Thu, 23 Jun 2016 21:02:39 +0200 Subject: [PATCH 2/4] Cover that SystemNodeProvider::getNode returns false when it doesn't find node --- tests/src/Provider/Node/SystemNodeProviderTest.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/src/Provider/Node/SystemNodeProviderTest.php b/tests/src/Provider/Node/SystemNodeProviderTest.php index edc49c3..c137b9a 100644 --- a/tests/src/Provider/Node/SystemNodeProviderTest.php +++ b/tests/src/Provider/Node/SystemNodeProviderTest.php @@ -71,6 +71,20 @@ class SystemNodeProviderTest extends TestCase $this->assertEquals('AABBCCDDEEFF', $node); } + 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); + } + public function testGetNodeWillNotExecuteSystemCallIfFailedFirstTime() { $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') From 42d24d5b444a4b01e3c9563d65083d6f4a8cd368 Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Sat, 25 Jun 2016 00:20:21 +0200 Subject: [PATCH 3/4] Fix failing test due to collisions caused by not being run in isolation --- tests/src/Provider/Node/SystemNodeProviderTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/src/Provider/Node/SystemNodeProviderTest.php b/tests/src/Provider/Node/SystemNodeProviderTest.php index 75f9aaf..b21995a 100644 --- a/tests/src/Provider/Node/SystemNodeProviderTest.php +++ b/tests/src/Provider/Node/SystemNodeProviderTest.php @@ -84,6 +84,10 @@ TXT $this->assertEquals('AABBCCDDEEFF', $node); } + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ public function testGetNodeReturnsFalseWhenNodeIsNotFound() { $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') @@ -98,6 +102,10 @@ TXT $this->assertFalse($node); } + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ public function testGetNodeWillNotExecuteSystemCallIfFailedFirstTime() { $provider = $this->getMockBuilder('Ramsey\Uuid\Provider\Node\SystemNodeProvider') From f03d3216fec19b1be20b91decd67c72ed2a1726a Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Sat, 25 Jun 2016 00:23:57 +0200 Subject: [PATCH 4/4] Follow similar pattern to that shown in other tests for system node --- tests/src/Provider/Node/SystemNodeProviderTest.php | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tests/src/Provider/Node/SystemNodeProviderTest.php b/tests/src/Provider/Node/SystemNodeProviderTest.php index b21995a..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();