From 5c38d41ccbe751c9a891067f298f2cac6c373db0 Mon Sep 17 00:00:00 2001 From: Ben Ramsey Date: Fri, 22 Sep 2017 13:03:41 -0500 Subject: [PATCH] Use sprintf() to prefix zeros on the returned node hex string --- src/Provider/Node/RandomNodeProvider.php | 2 +- .../Provider/Node/RandomNodeProviderTest.php | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/Provider/Node/RandomNodeProvider.php b/src/Provider/Node/RandomNodeProvider.php index 69383ec..7f17c5a 100644 --- a/src/Provider/Node/RandomNodeProvider.php +++ b/src/Provider/Node/RandomNodeProvider.php @@ -36,6 +36,6 @@ class RandomNodeProvider implements NodeProviderInterface // Set the multicast bit; see RFC 4122, section 4.5. $node = $node | 0x010000000000; - return dechex($node); + return sprintf('%012x', $node); } } diff --git a/tests/Provider/Node/RandomNodeProviderTest.php b/tests/Provider/Node/RandomNodeProviderTest.php index 99bc5e6..5816322 100644 --- a/tests/Provider/Node/RandomNodeProviderTest.php +++ b/tests/Provider/Node/RandomNodeProviderTest.php @@ -73,4 +73,23 @@ class RandomNodeProviderTest extends TestCase $this->assertSame($expectedNode, $provider->getNode()); $hexDec->verifyInvoked($expectedBytesHex); } + + /** + * @runInSeparateProcess + * @preserveGlobalState disabled + */ + public function testGetNodeSetsMulticastBitForLowNodeValue() + { + $bytes = pack('H*', base_convert(decbin(1), 2, 16)); + $expectedBytesHex = '10'; + $decimal = 16; + $expectedNode = '010000000010'; + + AspectMock::func('Ramsey\Uuid\Provider\Node', 'random_bytes', $bytes); + $hexDec = AspectMock::func('Ramsey\Uuid\Provider\Node', 'hexdec', $decimal); + $provider = new RandomNodeProvider(); + + $this->assertSame($expectedNode, $provider->getNode()); + $hexDec->verifyInvoked($expectedBytesHex); + } }