ClientTraitTest.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. namespace AlibabaCloud\Client\Tests\Unit\Request\Traits;
  3. use AlibabaCloud\Client\AlibabaCloud;
  4. use AlibabaCloud\Client\Clients\EcsRamRoleClient;
  5. use AlibabaCloud\Client\Credentials\Providers\CredentialsProvider;
  6. use AlibabaCloud\Client\Credentials\RamRoleArnCredential;
  7. use AlibabaCloud\Client\Credentials\Requests\AssumeRole;
  8. use AlibabaCloud\Client\Credentials\Requests\GenerateSessionAccessKey;
  9. use AlibabaCloud\Client\Credentials\RsaKeyPairCredential;
  10. use AlibabaCloud\Client\Exception\ClientException;
  11. use AlibabaCloud\Client\Exception\ServerException;
  12. use AlibabaCloud\Client\Request\Request;
  13. use AlibabaCloud\Client\Tests\Mock\Services\Cdn\DescribeCdnServiceRequest;
  14. use AlibabaCloud\Client\Tests\Unit\Credentials\Ini\VirtualRsaKeyPairCredential;
  15. use PHPUnit\Framework\TestCase;
  16. use AlibabaCloud\Client\Support\Stringy;
  17. /**
  18. * Class ClientTraitTest
  19. *
  20. * @package AlibabaCloud\Client\Tests\Unit\Request
  21. *
  22. * @coversDefaultClass \AlibabaCloud\Client\Request\Request
  23. */
  24. class ClientTraitTest extends TestCase
  25. {
  26. /**
  27. * @throws ClientException
  28. * @throws ServerException
  29. */
  30. public function testCredential()
  31. {
  32. // Setup
  33. $clientName = __METHOD__;
  34. // Test
  35. AlibabaCloud::accessKeyClient('key', 'secret')
  36. ->asDefaultClient()
  37. ->regionId('cn-hangzhou')
  38. ->name($clientName);
  39. $request = (new DescribeCdnServiceRequest())->client($clientName);
  40. // Assert
  41. self::assertEquals('key', $request->credential()->getAccessKeyId());
  42. self::assertEquals('secret', $request->credential()->getAccessKeySecret());
  43. }
  44. /**
  45. * @throws ClientException
  46. */
  47. public function testAccessKeyId()
  48. {
  49. $this->expectException(ClientException::class);
  50. $this->expectExceptionMessage("AccessKey ID format is invalid");
  51. AlibabaCloud::accessKeyClient(' ', 'secret');
  52. }
  53. /**
  54. * @throws ClientException
  55. */
  56. public function testAccessKeySecret()
  57. {
  58. $this->expectException(ClientException::class);
  59. $this->expectExceptionMessage("AccessKey Secret format is invalid");
  60. AlibabaCloud::accessKeyClient('key', ' ');
  61. }
  62. /**
  63. * @throws ClientException
  64. */
  65. public function testHttpClientWithCustomChain()
  66. {
  67. $name = 'testHttpClientWithCustomChain';
  68. AlibabaCloud::flush();
  69. CredentialsProvider::chain(
  70. static function () use ($name) {
  71. AlibabaCloud::ecsRamRoleClient('role')->name($name);
  72. }
  73. );
  74. $request = AlibabaCloud::rpc()->client($name);
  75. self::assertInstanceOf(EcsRamRoleClient::class, $request->httpClient());
  76. }
  77. /**
  78. * @throws ClientException
  79. */
  80. public function testHttpClientWithDefaultProvider()
  81. {
  82. $this->expectException(ClientException::class);
  83. $this->expectExceptionMessage("Client 'defaultprovider' not found");
  84. CredentialsProvider::flush();
  85. $request = AlibabaCloud::rpc()->client('DefaultProvider');
  86. $request->httpClient();
  87. }
  88. /**
  89. * @throws ClientException
  90. */
  91. public function testHttpClient()
  92. {
  93. $this->expectException(ClientException::class);
  94. $this->expectExceptionMessage("Client 'no' not found");
  95. $request = AlibabaCloud::rpc()->client('no');
  96. $request->httpClient();
  97. }
  98. /**
  99. * @throws ClientException
  100. */
  101. public function testMergeOptionsIntoClient()
  102. {
  103. // Setup
  104. $clientName = __METHOD__;
  105. $expected = 'i \'m request';
  106. // Test
  107. AlibabaCloud::accessKeyClient('key', 'secret')
  108. ->asDefaultClient()
  109. ->regionId('cn-hangzhou')
  110. ->options(
  111. [
  112. 'headers' => [
  113. 'client' => 'client',
  114. ],
  115. ]
  116. )
  117. ->name($clientName);
  118. $request = (new DescribeCdnServiceRequest())->client($clientName)
  119. ->options(['request1' => 'request'])
  120. ->options(['request2' => 'request2'])
  121. ->options(
  122. [
  123. 'headers' => [
  124. 'client' => $expected,
  125. ],
  126. ]
  127. );
  128. $request->mergeOptionsIntoClient();
  129. // Assert
  130. $this->assertEquals($expected, $request->options['headers']['client']);
  131. }
  132. /**
  133. * @throws ClientException
  134. * @throws ServerException
  135. */
  136. public function testCredentialOnAssumeRole()
  137. {
  138. // Setup
  139. $clientName = __METHOD__;
  140. // Test
  141. AlibabaCloud::accessKeyClient('key', 'secret')
  142. ->asDefaultClient()
  143. ->regionId('cn-hangzhou')
  144. ->name($clientName);
  145. $request = (new AssumeRole(
  146. new RamRoleArnCredential(
  147. 'key',
  148. 'secret',
  149. 'arn',
  150. 'name'
  151. )
  152. ))->client($clientName);
  153. // Assert
  154. self::assertEquals('key', $request->credential()->getAccessKeyId());
  155. self::assertEquals('secret', $request->credential()->getAccessKeySecret());
  156. }
  157. /**
  158. * @throws ClientException
  159. * @throws ServerException
  160. */
  161. public function testCredentialOnGenerateSessionAccessKey()
  162. {
  163. // Setup
  164. $clientName = __METHOD__;
  165. // Test
  166. AlibabaCloud::accessKeyClient('key', 'secret')
  167. ->asDefaultClient()
  168. ->regionId('cn-hangzhou')
  169. ->name($clientName);
  170. $request = (new GenerateSessionAccessKey(
  171. new RsaKeyPairCredential(
  172. 'key',
  173. VirtualRsaKeyPairCredential::ok()
  174. )
  175. ))->client($clientName);
  176. // Assert
  177. self::assertEquals('key', $request->credential()->getAccessKeyId());
  178. self::assertEquals('secret', $request->credential()->getAccessKeySecret());
  179. }
  180. /**
  181. * Only versions greater than 5.6 will take effect.
  182. *
  183. * @throws ClientException
  184. * @throws ServerException
  185. */
  186. public function testConfig()
  187. {
  188. Request::config([
  189. 'curl' => [CURLOPT_RESOLVE => ['cdn.aliyuncs.com:80:127.0.0.1']],
  190. ]);
  191. AlibabaCloud::accessKeyClient(
  192. \getenv('ACCESS_KEY_ID'),
  193. \getenv('ACCESS_KEY_SECRET')
  194. )->asDefaultClient()->regionId('cn-hangzhou');
  195. try {
  196. AlibabaCloud::rpc()
  197. ->method('POST')
  198. ->product('Cdn')
  199. ->version('2014-11-11')
  200. ->action('DescribeCdnService')
  201. ->connectTimeout(25)
  202. ->timeout(30)
  203. ->request();
  204. } catch (ClientException $exception) {
  205. self::assertTrue(
  206. Stringy::contains($exception->getMessage(), 'Failed to connect to cdn.aliyuncs.com')
  207. );
  208. }
  209. }
  210. }