From 29ca5aab86aef9e0d20ec8072d8e67e28dc0b665 Mon Sep 17 00:00:00 2001 From: Aleksei Khudiakov Date: Mon, 12 Feb 2024 11:37:37 +1000 Subject: [PATCH] Add test for gpg key import covering sign capability on subkey Signed-off-by: Aleksei Khudiakov --- test/asset/dummy-gpg-no-sign.asc | 64 +++++++++++++++++ test/asset/dummy-gpg-sign-subkey.asc | 71 +++++++++++++++++++ ...rtGpgKeyFromStringViaTemporaryFileTest.php | 9 +++ 3 files changed, 144 insertions(+) create mode 100644 test/asset/dummy-gpg-sign-subkey.asc diff --git a/test/asset/dummy-gpg-no-sign.asc b/test/asset/dummy-gpg-no-sign.asc index 9683aa6..c3f99bf 100644 --- a/test/asset/dummy-gpg-no-sign.asc +++ b/test/asset/dummy-gpg-no-sign.asc @@ -61,3 +61,67 @@ U/qoPG45bH/YX1uS1PkFFZ4UGEiRDi92BhI81nPencv5HNNe+J9kJUk1D2Mw8sbD nPI8HFy7DcMcT9Ee4KFbbkwXdbJ2nxCRzAqXE4q1i6ie =cI7Z -----END PGP PRIVATE KEY BLOCK----- +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +58Lxug== +=0BOE +-----END PGP PRIVATE KEY BLOCK----- diff --git a/test/asset/dummy-gpg-sign-subkey.asc b/test/asset/dummy-gpg-sign-subkey.asc new file mode 100644 index 0000000..57f4571 --- /dev/null +++ b/test/asset/dummy-gpg-sign-subkey.asc @@ -0,0 +1,71 @@ +-----BEGIN PGP PRIVATE KEY BLOCK----- + +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 +upAFpjFNVg== +=pSLg +-----END PGP PRIVATE KEY BLOCK----- diff --git a/test/unit/Gpg/ImportGpgKeyFromStringViaTemporaryFileTest.php b/test/unit/Gpg/ImportGpgKeyFromStringViaTemporaryFileTest.php index 37a88ad..7d6d12c 100644 --- a/test/unit/Gpg/ImportGpgKeyFromStringViaTemporaryFileTest.php +++ b/test/unit/Gpg/ImportGpgKeyFromStringViaTemporaryFileTest.php @@ -41,6 +41,15 @@ public function testWillFailOnNoSecretKey(): void ->__invoke(read(__DIR__ . '/../../asset/dummy-gpg-key-no-secret.asc')); } + public function testWillImportGpgKeyWithSignCapabilityOnSubkey(): void + { + self::assertEquals( + SecretKeyId::fromBase16String('0C251880C3862779'), + (new ImportGpgKeyFromStringViaTemporaryFile()) + ->__invoke(read(__DIR__ . '/../../asset/dummy-gpg-sign-subkey.asc')), + ); + } + public function testWillFailOnMissingSignCapabilities(): void { $this->expectException(InvariantViolationException::class);