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); + } }