pvdisplay() would be called by pvcreate() twice: firstly to check
whether a device is already initialized for use by LVM and then to
ensure that the pvcreate executable did its job correctly. The test
replaces pvdisplay() with a mock that always returns True and thus
pvcreate() would think that a specified device is already initialized
and exit. In the other words, instead of testing physical volume
initialization the test simulates a case with all the submitted
devices already initialized.
Fix it by replacing pvdisplay with a mock that returns False on the
first call (thus pvcreate thinks that a device is not a PV yet) and True
on the second call (after the pvcreate executable is called).
Any sort of symlink could be used for inclusion into an lvm vg but lvm's
pvdisplay may show a real device name, or a mapper device name which is
a symlink.
Since we're interested in finding out if the actual device is part of
our volgroup, we test the realpath of both the device requested and the
device returned by pvdisplay to ensure they're the same device.
Fixes#26867 and #30882