installed plugin W3 Total Cache version 2.3.2

This commit is contained in:
2023-06-05 11:23:16 +00:00
committed by Gitium
parent d9b3c97e40
commit 51ea2ff21c
2730 changed files with 334913 additions and 0 deletions

View File

@ -0,0 +1,229 @@
<?php
namespace Aws\Sns;
/**
* @covers Aws\Sns\MessageValidator
* @covers Aws\Sns\Message
*/
class FunctionalValidationsTest extends \PHPUnit_Framework_TestCase
{
private static $certificate =
'-----BEGIN CERTIFICATE-----
MIIF1zCCBL+gAwIBAgIQB9pYWG3Mi7xej22g9pobJTANBgkqhkiG9w0BAQsFADBG
MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRUwEwYDVQQLEwxTZXJ2ZXIg
Q0EgMUIxDzANBgNVBAMTBkFtYXpvbjAeFw0yMTA5MDcwMDAwMDBaFw0yMjA4MTcy
MzU5NTlaMBwxGjAYBgNVBAMTEXNucy5hbWF6b25hd3MuY29tMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAutFqueT3XgP13udzxE6UpbdjOtVO5DwoMpSM
iDNMnGzF1TYH5/R2LPUOBeTB0SkKnR4kpNcUZhicpGD4aKciz/GEZ6wu65xncfT9
H/KBOQwoXYTuClHwp6fYpGzcGFaFoEYMnijL/o4qmTSd+ukglQUgKpsDw4ofw6rU
m2CttJo+GQSNQ9NfGR1h/0J+zsApkeSYrXRx5wNlu87z8os1C/6PBrUHwt3xXeaf
Xzfwut8aRRYsS8BySOA9DAgLfNHlfdQCjKPXKrG/ussgReyWD6n/HH+j7Uha3xos
TzQqJifcxlTq6MxWdPR6fDaJNvqw6DOE7UjUNxHguXHlVfxhlQIDAQABo4IC6TCC
AuUwHwYDVR0jBBgwFoAUWaRmBlKge5WSPKOUByeWdFv5PdAwHQYDVR0OBBYEFAqz
C+vyouneE7mWWLbi9i0UsWUbMBwGA1UdEQQVMBOCEXNucy5hbWF6b25hd3MuY29t
MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
OwYDVR0fBDQwMjAwoC6gLIYqaHR0cDovL2NybC5zY2ExYi5hbWF6b250cnVzdC5j
b20vc2NhMWIuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMHUGCCsGAQUFBwEBBGkw
ZzAtBggrBgEFBQcwAYYhaHR0cDovL29jc3Auc2NhMWIuYW1hem9udHJ1c3QuY29t
MDYGCCsGAQUFBzAChipodHRwOi8vY3J0LnNjYTFiLmFtYXpvbnRydXN0LmNvbS9z
Y2ExYi5jcnQwDAYDVR0TAQH/BAIwADCCAX0GCisGAQQB1nkCBAIEggFtBIIBaQFn
AHYAKXm+8J45OSHwVnOfY6V35b5XfZxgCvj5TV0mXCVdx4QAAAF7vfDVkQAABAMA
RzBFAiEA2XfHuy36aqRFiaL8c3md2mH451go8707+fRE0pEdSRACIE/g5FXTUXUZ
PFcmOhm9TZ+uMY1i4CIQ/CKVWln6C3t+AHYAUaOw9f0BeZxWbbg3eI8MpHrMGyfL
956IQpoN/tSLBeUAAAF7vfDVjAAABAMARzBFAiBF1MhhFP0+FQt3daDFfMYoWwnr
muTInrjNpwfzlvQBugIhAPYadFzr+LaxSJoiZEbEHBvTts7bT0M3eCQONA2O7w6n
AHUAQcjKsd8iRkoQxqE6CUKHXk4xixsD6+tLx2jwkGKWBvYAAAF7vfDVdAAABAMA
RjBEAiAtPapmFAuA71ih4NoSd5hJelzAltNQpxDMcDfDyHyU8gIgWxmaa6+2KbBu
9xdv379zvnJACFR7jc+4asl08Dn4aagwDQYJKoZIhvcNAQELBQADggEBAA54QX0u
oFWXfMmv02CGZv4NWo5TapyeeixQ2kKpZHRdVZjxZrw+hoF6HD7P3kGjH8ztyJll
tDxB0qgMltbPhQdScwhA6iTgoaBYqEUC/VHKd4PmmPT6yIsM36NBZVmkGlzl5uNo
/dBgBaG0SsVJnhr5zro3c2quC7n6fVGEZhf/UgQwRnnvThnvbNKguglDMq4uEqv8
njKyleht+glkcmXO0m9qLKt6BOS0amy6U2GlAwRn0Wx02ndJtnRCSC6kPuRWK/SQ
FEjB7gCK4hdKaAOuWdZpI55vF6ifOeM8toC3g7ofO8qLTnJupAG+ZitY5J3cvHWr
HqOUdKigPDHYLRo=
-----END CERTIFICATE-----';
public function getHttpFixtures()
{
return [
[
[
'Type' => "Notification",
'MessageId' => "792cda85-518f-5dd3-9163-81d851212f3a",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:23:58.317Z",
'SignatureVersion' => "1",
'Signature' => "ghtf+deOBAzHJJZ6s6CdRLfTQAlcGzq9naoFM1wi0CJiq//uVRuZnamrkWNF0fhouMFvuLVRwcz8PZLUMSfnmd5VpdTKpTyiKmy1qJAZXma0w+yi7G+I33hD1Jyk1Nbym2n0kqp3fVu2aoooiN2ZeLAT2bH0/BtjLSfN1yAOKNoprco4qV9gGUZinXJdj9a1YdNhDR2jKi33ldlsVtEXAtiaDklGEk7DgRKX38GerBPiLg3FdtgY6KC7cdeGpU/dGK+4hjc83Ive1HoFkAwqhpgInM2sMytBosoiXfCmOKmU4xeGD0gHDNZTlJUJQDlzw8Eag0H9f/5zXF9d3uy0YQ==",
'SigningCertURL' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeURL' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362:2296bc94-7992-4be1-b15f-b97229b5c1d8",
]
],
[
[
'Type' => "Notification",
'MessageId' => "17dea24b-55c2-540b-8362-f916557af765",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:24:08.324Z",
'SignatureVersion' => "2",
'Signature' => "CXVqp9PfZAL+4JHS3Zxo1PFbQsvnOjvmYhtIf17TWpwc+iIVas8kZ8GopuzVzVMdatE7rCl/O4P91Zp05Dwz8lk8dLhfp8gSu3Njlzxlyrmzo9x3va3Jb7zFnedgS2GKnZWHGBdwTXho+TosNUE+3e10OMSlwN5XGDwX7+R3WL+rn+AXmFAqp3alg27sYa55h1dLE9cGszGPjScPdtF3BmZsUDMx9wSdNKsCk+vSvE8yBjnCmUl7laSFj3LzPVrlSwgNYCF3kYnNAkah7NplK4SFhJYLwS0HCVCQJKa8rVbQLf9cBTu60U402mrgy0bN8xWoyimzbYbrOMJjalqkUg==",
'SigningCertURL' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeURL' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e:ad7d16e3-0a7c-46aa-b23e-ffaf02250cbe",
]
],
[
[
'Type' => "Notification",
'MessageId' => "11405cc3-9ac7-56d5-b45d-079e8f7a8edf",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-6e11fed2-fcdf-4c52-9dc4-36ef43f37f84",
'Subject' => "Hello world",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T22:53:49.654Z",
'SignatureVersion' => "1",
'Signature' => "AItkS26d8yvnIKJevdirIPW7eM/yKbZy3/CF2EreCHmXWB3etWaV5Fb7SYpGABMpugpDZzNyGY1wCVWaopDoQ+7Q/kI2TpDu8bw1eExbi8U3kduvc/2m2fIrI4gDEY8/v3nzoLcr8pPodqMzrX6SzQou4klfaqbNK+rFmH0LVf2Q1VyOROODoSXmo4jg2Yu12jfxccBl96Drr/ihq4MJ4OcrWh6UzXXlVYjJHx2Ui4anNwNEb+Z4C2CAF1DjQUbhDtaoajDBPY+4d9C1OwbqwQpXsd6tyVcI9nFyEsVK8lfnAV+/3GZQcdXHbIUYBRGcBa4X5TlWJku5nDH2ERtHHw==",
'SigningCertURL' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeURL' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-6e11fed2-fcdf-4c52-9dc4-36ef43f37f84:adb318c3-2234-4c56-905d-c324cf0df874",
]
],
[
[
'Type' => "Notification",
'MessageId' => "4504e649-d933-5aa9-8199-bd14ccf05f0b",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-530b26da-0687-4fe4-9f71-780bad3181e2",
'Subject' => "Hello world",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T22:53:55.086Z",
'SignatureVersion' => "2",
'Signature' => "cETcSvmmkt+My05qCLKexyl0+RyG83mSryKPqTfS+tYcxDJWVcjPJAr+qdpElzVaBl1aTGYVWMY64i9JqZ/JES8pylNj8LGvdhuNQKO59/WCoIimZAsNhn0xEgOeeDU+W/0BU4sdpCGMNjo0S/FuIiWaRe4E0YWRVrxeQevaQ70euDdfWgd5v1eCKQz8b367b9XBmMztL/CWUFI6YaKK/MV21eyvJe3Y7CtVYiOKEYiAZnAEkynK7gUGO5TsgDjGNYhj6U3xYsWgI03bmioSl7kdFSUj+AZ7ugas5fghqxgoDsdfqsjMYKRm5KKHQWsgzI619yIzpNKUiSMHxdZXpQ==",
'SigningCertURL' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeURL' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-530b26da-0687-4fe4-9f71-780bad3181e2:db0ad2ad-03d1-48ca-a5da-51f317800a57"
]
]
];
}
public function getLambdaFixtures()
{
return [
[
[
'Type' => "Notification",
'MessageId' => "792cda85-518f-5dd3-9163-81d851212f3a",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:23:58.317Z",
'SignatureVersion' => "1",
'Signature' => "ghtf+deOBAzHJJZ6s6CdRLfTQAlcGzq9naoFM1wi0CJiq//uVRuZnamrkWNF0fhouMFvuLVRwcz8PZLUMSfnmd5VpdTKpTyiKmy1qJAZXma0w+yi7G+I33hD1Jyk1Nbym2n0kqp3fVu2aoooiN2ZeLAT2bH0/BtjLSfN1yAOKNoprco4qV9gGUZinXJdj9a1YdNhDR2jKi33ldlsVtEXAtiaDklGEk7DgRKX38GerBPiLg3FdtgY6KC7cdeGpU/dGK+4hjc83Ive1HoFkAwqhpgInM2sMytBosoiXfCmOKmU4xeGD0gHDNZTlJUJQDlzw8Eag0H9f/5zXF9d3uy0YQ==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362:2296bc94-7992-4be1-b15f-b97229b5c1d8",
]
],
[
[
'Type' => "Notification",
'MessageId' => "17dea24b-55c2-540b-8362-f916557af765",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:24:08.324Z",
'SignatureVersion' => "2",
'Signature' => "CXVqp9PfZAL+4JHS3Zxo1PFbQsvnOjvmYhtIf17TWpwc+iIVas8kZ8GopuzVzVMdatE7rCl/O4P91Zp05Dwz8lk8dLhfp8gSu3Njlzxlyrmzo9x3va3Jb7zFnedgS2GKnZWHGBdwTXho+TosNUE+3e10OMSlwN5XGDwX7+R3WL+rn+AXmFAqp3alg27sYa55h1dLE9cGszGPjScPdtF3BmZsUDMx9wSdNKsCk+vSvE8yBjnCmUl7laSFj3LzPVrlSwgNYCF3kYnNAkah7NplK4SFhJYLwS0HCVCQJKa8rVbQLf9cBTu60U402mrgy0bN8xWoyimzbYbrOMJjalqkUg==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e:ad7d16e3-0a7c-46aa-b23e-ffaf02250cbe",
]
],
[
[
'Type' => "Notification",
'MessageId' => "792cda85-518f-5dd3-9163-81d851212f3a",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362",
'Subject' => null,
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:23:58.317Z",
'SignatureVersion' => "1",
'Signature' => "ghtf+deOBAzHJJZ6s6CdRLfTQAlcGzq9naoFM1wi0CJiq//uVRuZnamrkWNF0fhouMFvuLVRwcz8PZLUMSfnmd5VpdTKpTyiKmy1qJAZXma0w+yi7G+I33hD1Jyk1Nbym2n0kqp3fVu2aoooiN2ZeLAT2bH0/BtjLSfN1yAOKNoprco4qV9gGUZinXJdj9a1YdNhDR2jKi33ldlsVtEXAtiaDklGEk7DgRKX38GerBPiLg3FdtgY6KC7cdeGpU/dGK+4hjc83Ive1HoFkAwqhpgInM2sMytBosoiXfCmOKmU4xeGD0gHDNZTlJUJQDlzw8Eag0H9f/5zXF9d3uy0YQ==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-892f85fe-4836-424d-8188-ab85bef0f362:2296bc94-7992-4be1-b15f-b97229b5c1d8",
]
],
[
[
'Type' => "Notification",
'MessageId' => "17dea24b-55c2-540b-8362-f916557af765",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e",
'Subject' => null,
'Message' => "Hello world",
'Timestamp' => "2022-07-28T21:24:08.324Z",
'SignatureVersion' => "2",
'Signature' => "CXVqp9PfZAL+4JHS3Zxo1PFbQsvnOjvmYhtIf17TWpwc+iIVas8kZ8GopuzVzVMdatE7rCl/O4P91Zp05Dwz8lk8dLhfp8gSu3Njlzxlyrmzo9x3va3Jb7zFnedgS2GKnZWHGBdwTXho+TosNUE+3e10OMSlwN5XGDwX7+R3WL+rn+AXmFAqp3alg27sYa55h1dLE9cGszGPjScPdtF3BmZsUDMx9wSdNKsCk+vSvE8yBjnCmUl7laSFj3LzPVrlSwgNYCF3kYnNAkah7NplK4SFhJYLwS0HCVCQJKa8rVbQLf9cBTu60U402mrgy0bN8xWoyimzbYbrOMJjalqkUg==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-62674b1d-4295-426b-88e7-5fb75652a04e:ad7d16e3-0a7c-46aa-b23e-ffaf02250cbe",
]
],
[
[
'Type' => "Notification",
'MessageId' => "11405cc3-9ac7-56d5-b45d-079e8f7a8edf",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-6e11fed2-fcdf-4c52-9dc4-36ef43f37f84",
'Subject' => "Hello world",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T22:53:49.654Z",
'SignatureVersion' => "1",
'Signature' => "AItkS26d8yvnIKJevdirIPW7eM/yKbZy3/CF2EreCHmXWB3etWaV5Fb7SYpGABMpugpDZzNyGY1wCVWaopDoQ+7Q/kI2TpDu8bw1eExbi8U3kduvc/2m2fIrI4gDEY8/v3nzoLcr8pPodqMzrX6SzQou4klfaqbNK+rFmH0LVf2Q1VyOROODoSXmo4jg2Yu12jfxccBl96Drr/ihq4MJ4OcrWh6UzXXlVYjJHx2Ui4anNwNEb+Z4C2CAF1DjQUbhDtaoajDBPY+4d9C1OwbqwQpXsd6tyVcI9nFyEsVK8lfnAV+/3GZQcdXHbIUYBRGcBa4X5TlWJku5nDH2ERtHHw==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-6e11fed2-fcdf-4c52-9dc4-36ef43f37f84:adb318c3-2234-4c56-905d-c324cf0df874",
]
],
[
[
'Type' => "Notification",
'MessageId' => "4504e649-d933-5aa9-8199-bd14ccf05f0b",
'TopicArn' => "arn:aws:sns:us-east-2:295079676684:publish-and-verify-530b26da-0687-4fe4-9f71-780bad3181e2",
'Subject' => "Hello world",
'Message' => "Hello world",
'Timestamp' => "2022-07-28T22:53:55.086Z",
'SignatureVersion' => "2",
'Signature' => "cETcSvmmkt+My05qCLKexyl0+RyG83mSryKPqTfS+tYcxDJWVcjPJAr+qdpElzVaBl1aTGYVWMY64i9JqZ/JES8pylNj8LGvdhuNQKO59/WCoIimZAsNhn0xEgOeeDU+W/0BU4sdpCGMNjo0S/FuIiWaRe4E0YWRVrxeQevaQ70euDdfWgd5v1eCKQz8b367b9XBmMztL/CWUFI6YaKK/MV21eyvJe3Y7CtVYiOKEYiAZnAEkynK7gUGO5TsgDjGNYhj6U3xYsWgI03bmioSl7kdFSUj+AZ7ugas5fghqxgoDsdfqsjMYKRm5KKHQWsgzI619yIzpNKUiSMHxdZXpQ==",
'SigningCertUrl' => "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2a969abfda.pem",
'UnsubscribeUrl' => "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:295079676684:publish-and-verify-530b26da-0687-4fe4-9f71-780bad3181e2:db0ad2ad-03d1-48ca-a5da-51f317800a57"
]
]
];
}
private function getMockCertServerClient()
{
return function () {
return self::$certificate;
};
}
/**
* @dataProvider getHttpFixtures
*
* @param array $messageData
*/
public function testValidatesHttpFixtures($messageData)
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = new Message($messageData);
$this->assertTrue($validator->isValid($message));
$this->assertNotEmpty($message['SigningCertURL']);
}
/**
* @dataProvider getLambdaFixtures
*
* @param array $messageData
*/
public function testValidatesLambdaFixtures($messageData)
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = new Message($messageData);
$this->assertTrue($validator->isValid($message));
$this->assertNotEmpty($message['SigningCertUrl']);
}
}

View File

@ -0,0 +1,183 @@
<?php
namespace Aws\Sns;
use GuzzleHttp\Psr7\Request;
/**
* @covers \Aws\Sns\Message
*/
class MessageTest extends \PHPUnit_Framework_TestCase
{
public $messageData = array(
'Message' => 'a',
'MessageId' => 'b',
'Timestamp' => 'c',
'TopicArn' => 'd',
'Type' => 'e',
'Subject' => 'f',
'Signature' => 'g',
'SignatureVersion' => '1',
'SigningCertURL' => 'h',
'SubscribeURL' => 'i',
'Token' => 'j',
);
public function testGetters()
{
$message = new Message($this->messageData);
$this->assertInternalType('array', $message->toArray());
foreach ($this->messageData as $key => $expectedValue) {
$this->assertTrue(isset($message[$key]));
$this->assertEquals($expectedValue, $message[$key]);
}
}
public function testIterable()
{
$message = new Message($this->messageData);
$this->assertInstanceOf('Traversable', $message);
foreach ($message as $key => $value) {
$this->assertTrue(isset($this->messageData[$key]));
$this->assertEquals($value, $this->messageData[$key]);
}
}
/**
* @dataProvider messageTypeProvider
*
* @param string $messageType
*/
public function testConstructorSucceedsWithGoodData($messageType)
{
$this->assertInstanceOf('Aws\Sns\Message', new Message(
['Type' => $messageType] + $this->messageData
));
}
public function messageTypeProvider()
{
return [
['Notification'],
['SubscriptionConfirmation'],
['UnsubscribeConfirmation'],
];
}
/**
* @expectedException \InvalidArgumentException
*/
public function testConstructorFailsWithNoType()
{
$data = $this->messageData;
unset($data['Type']);
new Message($data);
}
/**
* @expectedException \InvalidArgumentException
*/
public function testConstructorFailsWithMissingData()
{
new Message(['Type' => 'Notification']);
}
/**
* @expectedException \InvalidArgumentException
*/
public function testRequiresTokenAndSubscribeUrlForSubscribeMessage()
{
new Message(
['Type' => 'SubscriptionConfirmation'] + array_diff_key(
$this->messageData,
array_flip(['Token', 'SubscribeURL'])
)
);
}
/**
* @expectedException \InvalidArgumentException
*/
public function testRequiresTokenAndSubscribeUrlForUnsubscribeMessage()
{
new Message(
['Type' => 'UnsubscribeConfirmation'] + array_diff_key(
$this->messageData,
array_flip(['Token', 'SubscribeURL'])
)
);
}
public function testCanCreateFromRawPost()
{
$_SERVER['HTTP_X_AMZ_SNS_MESSAGE_TYPE'] = 'Notification';
// Prep php://input with mocked data
MockPhpStream::setStartingData(json_encode($this->messageData));
stream_wrapper_unregister('php');
stream_wrapper_register('php', __NAMESPACE__ . '\MockPhpStream');
$message = Message::fromRawPostData();
$this->assertInstanceOf('Aws\Sns\Message', $message);
stream_wrapper_restore("php");
unset($_SERVER['HTTP_X_AMZ_SNS_MESSAGE_TYPE']);
}
/**
* @expectedException \RuntimeException
*/
public function testCreateFromRawPostFailsWithMissingHeader()
{
Message::fromRawPostData();
}
/**
* @expectedException \RuntimeException
*/
public function testCreateFromRawPostFailsWithMissingData()
{
$_SERVER['HTTP_X_AMZ_SNS_MESSAGE_TYPE'] = 'Notification';
Message::fromRawPostData();
unset($_SERVER['HTTP_X_AMZ_SNS_MESSAGE_TYPE']);
}
public function testCanCreateFromPsr7Request()
{
$request = new Request(
'POST',
'/',
[],
json_encode($this->messageData)
);
$message = Message::fromPsrRequest($request);
$this->assertInstanceOf('Aws\Sns\Message', $message);
}
/**
* @expectedException \RuntimeException
*/
public function testCreateFromPsr7RequestFailsWithMissingData()
{
$request = new Request(
'POST',
'/',
[],
'Not valid JSON'
);
Message::fromPsrRequest($request);
}
public function testArrayAccess()
{
$message = new Message($this->messageData);
$this->assertInstanceOf('ArrayAccess', $message);
$message['foo'] = 'bar';
$this->assertTrue(isset($message['foo']));
$this->assertTrue($message['foo'] === 'bar');
unset($message['foo']);
$this->assertFalse(isset($message['foo']));
}
}

View File

@ -0,0 +1,242 @@
<?php
namespace Aws\Sns;
/**
* @covers Aws\Sns\MessageValidator
*/
class MessageValidatorTest extends \PHPUnit_Framework_TestCase
{
const VALID_CERT_URL = 'https://sns.foo.amazonaws.com/bar.pem';
private static $pKey;
private static $certificate;
public static function setUpBeforeClass()
{
self::$pKey = openssl_pkey_new();
$csr = openssl_csr_new([], self::$pKey);
$x509 = openssl_csr_sign($csr, null, self::$pKey, 1);
openssl_x509_export($x509, self::$certificate);
openssl_x509_free($x509);
}
public static function tearDownAfterClass()
{
openssl_pkey_free(self::$pKey);
}
public function testIsValidReturnsFalseOnFailedValidation()
{
$validator = new MessageValidator($this->getMockHttpClient());
$message = $this->getTestMessage([
'SignatureVersion' => '2',
]);
$this->assertFalse($validator->isValid($message));
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage The SignatureVersion "3" is not supported.
*/
public function testValidateFailsWhenSignatureVersionIsInvalid()
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = $this->getTestMessage([
'SignatureVersion' => '3',
]);
$validator->validate($message);
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage The certificate is located on an invalid domain.
*/
public function testValidateFailsWhenCertUrlInvalid()
{
$validator = new MessageValidator();
$message = $this->getTestMessage([
'SigningCertURL' => 'https://foo.amazonaws.com/bar.pem',
]);
$validator->validate($message);
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage The certificate is located on an invalid domain.
*/
public function testValidateFailsWhenCertUrlNotAPemFile()
{
$validator = new MessageValidator();
$message = $this->getTestMessage([
'SigningCertURL' => 'https://foo.amazonaws.com/bar',
]);
$validator->validate($message);
}
public function testValidatesAgainstCustomDomains()
{
$validator = new MessageValidator(
function () {
return self::$certificate;
},
'/^(foo|bar).example.com$/'
);
$message = $this->getTestMessage([
'SigningCertURL' => 'https://foo.example.com/baz.pem',
]);
$message['Signature'] = $this->getSignature($validator->getStringToSign($message));
$this->assertTrue($validator->isValid($message));
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessageRegExp /Cannot get the certificate from ".+"./
*/
public function testValidateFailsWhenCannotGetCertificate()
{
$validator = new MessageValidator($this->getMockHttpClient(false));
$message = $this->getTestMessage();
$validator->validate($message);
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage Cannot get the public key from the certificate.
*/
public function testValidateFailsWhenCannotDeterminePublicKey()
{
$validator = new MessageValidator($this->getMockHttpClient());
$message = $this->getTestMessage();
$validator->validate($message);
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage The message signature is invalid.
*/
public function testValidateFailsWhenMessageIsInvalid()
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = $this->getTestMessage([
'Signature' => $this->getSignature('foo'),
]);
$validator->validate($message);
}
/**
* @expectedException \Aws\Sns\Exception\InvalidSnsMessageException
* @expectedExceptionMessage The message signature is invalid.
*/
public function testValidateFailsWhenSha256MessageIsInvalid()
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = $this->getTestMessage([
'Signature' => $this->getSignature('foo'),
'SignatureVersion' => '2'
]);
$validator->validate($message);
}
public function testValidateSucceedsWhenMessageIsValid()
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = $this->getTestMessage();
// Get the signature for a real message
$message['Signature'] = $this->getSignature($validator->getStringToSign($message));
// The message should validate
$this->assertTrue($validator->isValid($message));
}
public function testValidateSucceedsWhenSha256MessageIsValid()
{
$validator = new MessageValidator($this->getMockCertServerClient());
$message = $this->getTestMessage([
'SignatureVersion' => '2'
]);
// Get the signature for a real message
$message['Signature'] = $this->getSignature($validator->getStringToSign($message), '2');
// The message should validate
$this->assertTrue($validator->isValid($message));
}
public function testBuildsStringToSignCorrectly()
{
$validator = new MessageValidator();
$stringToSign = <<< STRINGTOSIGN
Message
foo
MessageId
bar
Timestamp
1435697129
TopicArn
baz
Type
Notification
STRINGTOSIGN;
$this->assertEquals(
$stringToSign,
$validator->getStringToSign($this->getTestMessage())
);
}
/**
* @param array $customData
*
* @return Message
*/
private function getTestMessage(array $customData = [])
{
return new Message($customData + [
'Message' => 'foo',
'MessageId' => 'bar',
'Timestamp' => time(),
'TopicArn' => 'baz',
'Type' => 'Notification',
'SigningCertURL' => self::VALID_CERT_URL,
'Signature' => true,
'SignatureVersion' => '1',
]);
}
private function getMockHttpClient($responseBody = '')
{
return function () use ($responseBody) {
return $responseBody;
};
}
private function getMockCertServerClient()
{
return function ($url) {
if ($url !== self::VALID_CERT_URL) {
return '';
}
return self::$certificate;
};
}
private function getSignature($stringToSign, $algo = '1')
{
if ($algo === '2') {
openssl_sign($stringToSign, $signature, self::$pKey, 'SHA256');
} else {
openssl_sign($stringToSign, $signature, self::$pKey);
}
return base64_encode($signature);
}
}
function time()
{
return 1435697129;
}

View File

@ -0,0 +1,60 @@
<?php
namespace Aws\Sns;
class MockPhpStream
{
private static $startingData = '';
private $index;
private $length;
private $data;
public static function setStartingData($data)
{
self::$startingData = $data;
}
public function __construct()
{
$this->data = self::$startingData;
$this->index = 0;
$this->length = strlen(self::$startingData);
}
public function stream_open($path, $mode, $options, &$opened_path)
{
return true;
}
public function stream_close()
{
}
public function stream_stat()
{
return array();
}
public function stream_flush()
{
return true;
}
public function stream_read($count)
{
$length = min($count, $this->length - $this->index);
$data = substr($this->data, $this->index);
$this->index = $this->index + $length;
return $data;
}
public function stream_eof()
{
return ($this->index >= $this->length);
}
public function stream_write($data)
{
return 0;
}
}