ClientTraitTest.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. <?php
  2. namespace AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Traits;
  3. use AlibabaCloud\Client\SDK;
  4. use PHPUnit\Framework\TestCase;
  5. use AlibabaCloud\Client\AlibabaCloud;
  6. use AlibabaCloud\Client\Credentials\StsCredential;
  7. use AlibabaCloud\Client\Exception\ClientException;
  8. use AlibabaCloud\Client\Signature\ShaHmac1Signature;
  9. use AlibabaCloud\Client\Credentials\AccessKeyCredential;
  10. use AlibabaCloud\Client\Credentials\EcsRamRoleCredential;
  11. use AlibabaCloud\Client\Credentials\RamRoleArnCredential;
  12. use AlibabaCloud\Client\Credentials\RsaKeyPairCredential;
  13. use AlibabaCloud\Client\Credentials\BearerTokenCredential;
  14. use AlibabaCloud\Client\Signature\ShaHmac256WithRsaSignature;
  15. use AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Credentials\Ini\VirtualAccessKeyCredential;
  16. use AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Credentials\Ini\VirtualRsaKeyPairCredential;
  17. /**
  18. * Class ClientTraitTest
  19. *
  20. * @package AlibabaCloud\Client\Tests\LowerthanVersion7_2\Unit\Client\Traits
  21. *
  22. * @coversDefaultClass \AlibabaCloud\Client\Traits\ClientTrait
  23. */
  24. class ClientTraitTest extends TestCase
  25. {
  26. /**
  27. * @var string
  28. */
  29. private static $accessKeyId;
  30. /**
  31. * @var string
  32. */
  33. private static $accessKeySecret;
  34. /**
  35. * @var string
  36. */
  37. private static $regionId;
  38. /**
  39. * @var string
  40. */
  41. private static $roleName;
  42. /**
  43. * @var string
  44. */
  45. private static $roleArn;
  46. /**
  47. * @var string
  48. */
  49. private static $roleSessionName;
  50. /**
  51. * @var string
  52. */
  53. private static $bearerToken;
  54. /**
  55. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  56. * @expectedExceptionMessage Client 'default' not found
  57. * @throws ClientException
  58. */
  59. public static function testGetDefaultClient()
  60. {
  61. AlibabaCloud::flush();
  62. AlibabaCloud::getDefaultClient();
  63. }
  64. public function setUp()
  65. {
  66. self::$regionId = 'cn-hangzhou';
  67. self::$accessKeyId = \getenv('ACCESS_KEY_ID');
  68. self::$accessKeySecret = \getenv('ACCESS_KEY_SECRET');
  69. self::$roleName = 'EcsRamRoleTest';
  70. self::$roleArn = 'acs:ram::1483445870618637:role/test';
  71. self::$roleSessionName = 'role_session_name';
  72. self::$bearerToken = 'BEARER_TOKEN';
  73. }
  74. /**
  75. * @throws ClientException
  76. */
  77. public function testClient()
  78. {
  79. AlibabaCloud::client(
  80. new AccessKeyCredential('foo', 'bar'),
  81. new ShaHmac256WithRsaSignature()
  82. )->name('client');
  83. self::assertInstanceOf(ShaHmac256WithRsaSignature::class, AlibabaCloud::get('client')->getSignature());
  84. }
  85. /**
  86. * @throws ClientException
  87. */
  88. public function testAccessKeyClient()
  89. {
  90. AlibabaCloud::accessKeyClient(self::$accessKeyId, self::$accessKeyId)->asDefaultClient();
  91. $credential = AlibabaCloud::getDefaultClient()->getCredential();
  92. self::assertInstanceOf(AccessKeyCredential::class, $credential);
  93. self::assertEquals(self::$accessKeyId, $credential->getAccessKeyId());
  94. }
  95. /**
  96. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  97. * @expectedExceptionMessage AccessKey ID cannot be empty
  98. * @throws ClientException
  99. */
  100. public function testAccessKeyClientWithAccessKeyIdEmpty()
  101. {
  102. AlibabaCloud::accessKeyClient(
  103. '',
  104. self::$accessKeySecret
  105. )->asDefaultClient();
  106. }
  107. /**
  108. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  109. * @expectedExceptionMessage AccessKey ID format is invalid
  110. * @throws ClientException
  111. */
  112. public function testAccessKeyClientWithAccessKeyIdFormat()
  113. {
  114. AlibabaCloud::accessKeyClient(
  115. null,
  116. self::$accessKeySecret
  117. )->asDefaultClient();
  118. }
  119. /**
  120. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  121. * @expectedExceptionMessage AccessKey Secret cannot be empty
  122. * @throws ClientException
  123. */
  124. public function testAccessKeyClientWithAccessKeySecretEmpty()
  125. {
  126. AlibabaCloud::accessKeyClient(
  127. self::$accessKeyId,
  128. ''
  129. )->asDefaultClient();
  130. }
  131. /**
  132. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  133. * @expectedExceptionMessage AccessKey Secret format is invalid
  134. * @throws ClientException
  135. */
  136. public function testAccessKeyClientWithAccessKeySecretFormat()
  137. {
  138. AlibabaCloud::accessKeyClient(
  139. self::$accessKeyId,
  140. null
  141. )->asDefaultClient();
  142. }
  143. /**
  144. * @throws ClientException
  145. */
  146. public function testRamRoleArnClient()
  147. {
  148. AlibabaCloud::ramRoleArnClient(
  149. self::$accessKeyId,
  150. self::$accessKeySecret,
  151. self::$roleArn,
  152. self::$roleSessionName
  153. )->asDefaultClient();
  154. $credential = AlibabaCloud::getDefaultClient()->getCredential();
  155. self::assertInstanceOf(RamRoleArnCredential::class, $credential);
  156. self::assertEquals(self::$accessKeyId, $credential->getAccessKeyId());
  157. self::assertEquals(self::$accessKeySecret, $credential->getAccessKeySecret());
  158. self::assertEquals(self::$roleArn, $credential->getRoleArn());
  159. self::assertEquals(self::$roleSessionName, $credential->getRoleSessionName());
  160. }
  161. /**
  162. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  163. * @expectedExceptionMessage AccessKey ID cannot be empty
  164. * @throws ClientException
  165. */
  166. public function testRamRoleArnClientWithAccessKeyIdEmpty()
  167. {
  168. AlibabaCloud::ramRoleArnClient(
  169. '',
  170. self::$accessKeySecret,
  171. self::$roleArn,
  172. self::$roleSessionName
  173. )->asDefaultClient();
  174. }
  175. /**
  176. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  177. * @expectedExceptionMessage AccessKey ID must be a string
  178. * @throws ClientException
  179. */
  180. public function testRamRoleArnClientWithAccessKeyIdFormat()
  181. {
  182. AlibabaCloud::ramRoleArnClient(
  183. null,
  184. self::$accessKeySecret,
  185. self::$roleArn,
  186. self::$roleSessionName
  187. )->asDefaultClient();
  188. }
  189. /**
  190. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  191. * @expectedExceptionMessage AccessKey Secret cannot be empty
  192. * @throws ClientException
  193. */
  194. public function testRamRoleArnClientWithAccessKeySecretEmpty()
  195. {
  196. AlibabaCloud::ramRoleArnClient(
  197. self::$accessKeyId,
  198. '',
  199. self::$roleArn,
  200. self::$roleSessionName
  201. )->asDefaultClient();
  202. }
  203. /**
  204. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  205. * @expectedExceptionMessage AccessKey Secret must be a string
  206. * @throws ClientException
  207. */
  208. public function testRamRoleArnClientWithAccessKeySecretFormat()
  209. {
  210. AlibabaCloud::ramRoleArnClient(
  211. self::$accessKeyId,
  212. null,
  213. self::$roleArn,
  214. self::$roleSessionName
  215. )->asDefaultClient();
  216. }
  217. /**
  218. * @throws ClientException
  219. */
  220. public function testEcsRamRoleClient()
  221. {
  222. AlibabaCloud::ecsRamRoleClient(self::$roleName)->asDefaultClient();
  223. $credential = AlibabaCloud::getDefaultClient()->getCredential();
  224. self::assertInstanceOf(EcsRamRoleCredential::class, $credential);
  225. self::assertEquals(self::$roleName, $credential->getRoleName());
  226. }
  227. /**
  228. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  229. * @expectedExceptionMessage Role Name cannot be empty
  230. * @throws ClientException
  231. */
  232. public function testEcsRamRoleClientEmpty()
  233. {
  234. AlibabaCloud::ecsRamRoleClient('')->asDefaultClient();
  235. }
  236. /**
  237. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  238. * @expectedExceptionMessage Role Name must be a string
  239. * @throws ClientException
  240. */
  241. public function testEcsRamRoleClientFormat()
  242. {
  243. AlibabaCloud::ecsRamRoleClient(null)->asDefaultClient();
  244. }
  245. /**
  246. * @throws ClientException
  247. */
  248. public function testBearerTokenClient()
  249. {
  250. AlibabaCloud::bearerTokenClient(self::$bearerToken)->asDefaultClient();
  251. $credential = AlibabaCloud::getDefaultClient()->getCredential();
  252. self::assertInstanceOf(BearerTokenCredential::class, $credential);
  253. self::assertEquals('', $credential->getAccessKeyId());
  254. self::assertEquals('', $credential->getAccessKeySecret());
  255. self::assertEquals(self::$bearerToken, $credential->getBearerToken());
  256. }
  257. /**
  258. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  259. * @expectedExceptionMessage Bearer Token cannot be empty
  260. * @throws ClientException
  261. */
  262. public function testBearerTokenClientEmpty()
  263. {
  264. AlibabaCloud::bearerTokenClient('')->asDefaultClient();
  265. }
  266. /**
  267. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  268. * @expectedExceptionMessage Bearer Token must be a string
  269. * @throws ClientException
  270. */
  271. public function testBearerTokenClientFormat()
  272. {
  273. AlibabaCloud::bearerTokenClient(null)->asDefaultClient();
  274. }
  275. /**
  276. * @throws ClientException
  277. */
  278. public function testStsClient()
  279. {
  280. AlibabaCloud::stsClient('key', 'secret', 'token')->name('sts');
  281. self::assertInstanceOf(StsCredential::class, AlibabaCloud::get('sts')->getCredential());
  282. }
  283. /**
  284. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  285. * @expectedExceptionMessage AccessKey ID cannot be empty
  286. * @throws ClientException
  287. */
  288. public function testStsClientWithPublicKeyIdEmpty()
  289. {
  290. AlibabaCloud::stsClient('', 'secret')
  291. ->name('sts');
  292. }
  293. /**
  294. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  295. * @expectedExceptionMessage AccessKey ID must be a string
  296. * @throws ClientException
  297. */
  298. public function testStsClientWithPublicKeyIdFormat()
  299. {
  300. AlibabaCloud::stsClient(null, 'secret')
  301. ->name('sts');
  302. }
  303. /**
  304. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  305. * @expectedExceptionMessage AccessKey Secret cannot be empty
  306. * @throws ClientException
  307. */
  308. public function testStsClientWithPrivateKeyFileEmpty()
  309. {
  310. AlibabaCloud::stsClient('key', '')
  311. ->name('sts');
  312. }
  313. /**
  314. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  315. * @expectedExceptionMessage AccessKey Secret must be a string
  316. * @throws ClientException
  317. */
  318. public function testStsClientWithPrivateKeyFileFormat()
  319. {
  320. AlibabaCloud::stsClient('key', null)
  321. ->name('sts');
  322. }
  323. /**
  324. * @throws ClientException
  325. */
  326. public function testRsaKeyPairClient()
  327. {
  328. AlibabaCloud::rsaKeyPairClient('key', VirtualAccessKeyCredential::ok())
  329. ->name('rsa');
  330. self::assertInstanceOf(
  331. RsaKeyPairCredential::class,
  332. AlibabaCloud::get('rsa')->getCredential()
  333. );
  334. }
  335. /**
  336. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  337. * @expectedExceptionMessage Public Key ID cannot be empty
  338. * @throws ClientException
  339. */
  340. public function testRsaKeyPairClientWithPublicKeyIdEmpty()
  341. {
  342. AlibabaCloud::rsaKeyPairClient('', 'privateKeyFile')
  343. ->name('rsa');
  344. }
  345. /**
  346. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  347. * @expectedExceptionMessage Public Key ID must be a string
  348. * @throws ClientException
  349. */
  350. public function testRsaKeyPairClientWithPublicKeyIdFormat()
  351. {
  352. AlibabaCloud::rsaKeyPairClient(null, 'privateKeyFile')
  353. ->name('rsa');
  354. }
  355. /**
  356. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  357. * @expectedExceptionMessage Private Key File cannot be empty
  358. * @throws ClientException
  359. */
  360. public function testRsaKeyPairClientWithPrivateKeyFileEmpty()
  361. {
  362. AlibabaCloud::rsaKeyPairClient('publicKeyId', '')
  363. ->name('rsa');
  364. }
  365. /**
  366. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  367. * @expectedExceptionMessage Private Key File must be a string
  368. * @throws ClientException
  369. */
  370. public function testRsaKeyPairClientWithPrivateKeyFileFormat()
  371. {
  372. AlibabaCloud::rsaKeyPairClient('publicKeyId', null)
  373. ->name('rsa');
  374. }
  375. /**
  376. * @throws ClientException
  377. */
  378. public function testGet()
  379. {
  380. // setup
  381. $accessKeyId = uniqid('', true);
  382. $accessKeySecret = uniqid('', true);
  383. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client1');
  384. static::assertEquals(
  385. $accessKeyId,
  386. AlibabaCloud::get('client1')->getCredential()->getAccessKeyId()
  387. );
  388. try {
  389. AlibabaCloud::get('None')->getCredential()->getAccessKeyId();
  390. } catch (ClientException $e) {
  391. static::assertEquals(SDK::CLIENT_NOT_FOUND, $e->getErrorCode());
  392. }
  393. }
  394. /**
  395. * @throws ClientException
  396. */
  397. public function testIsDebug()
  398. {
  399. $accessKeyId = uniqid('', true);
  400. $accessKeySecret = uniqid('', true);
  401. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client1');
  402. AlibabaCloud::get('client1')->debug(true);
  403. self::assertTrue(AlibabaCloud::get('client1')->isDebug());
  404. }
  405. /**
  406. * @throws ClientException
  407. */
  408. public function testGetSignature()
  409. {
  410. $accessKeyId = uniqid('', true);
  411. $accessKeySecret = uniqid('', true);
  412. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client1');
  413. static::assertInstanceOf(ShaHmac1Signature::class, AlibabaCloud::get('client1')->getSignature());
  414. }
  415. /**
  416. * @throws ClientException
  417. */
  418. public function testDel()
  419. {
  420. // Setup
  421. $clientName = 'test';
  422. $accessKeyId = uniqid('', true);
  423. $accessKeySecret = uniqid('', true);
  424. // Test
  425. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name($clientName);
  426. static::assertEquals(true, AlibabaCloud::has($clientName));
  427. AlibabaCloud::del($clientName);
  428. static::assertEquals(false, AlibabaCloud::has($clientName));
  429. }
  430. /**
  431. * @throws ClientException
  432. */
  433. public function testAll()
  434. {
  435. $accessKeyId = uniqid('', true);
  436. $accessKeySecret = uniqid('', true);
  437. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client1');
  438. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client2');
  439. AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)->name('client3');
  440. static::assertArrayHasKey('client3', AlibabaCloud::all());
  441. }
  442. /**
  443. * @throws ClientException
  444. */
  445. public function testLoadWithFiles()
  446. {
  447. AlibabaCloud::load(
  448. VirtualRsaKeyPairCredential::ok(),
  449. VirtualAccessKeyCredential::ok()
  450. );
  451. static::assertNotNull(AlibabaCloud::all());
  452. }
  453. /**
  454. * @throws ClientException
  455. */
  456. public function testLoad()
  457. {
  458. AlibabaCloud::load();
  459. static::assertNotNull(AlibabaCloud::all());
  460. }
  461. /**
  462. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  463. * @expectedExceptionMessage Client Name cannot be empty
  464. *
  465. * @throws ClientException
  466. */
  467. public function testDelEmpty()
  468. {
  469. AlibabaCloud::del('');
  470. }
  471. /**
  472. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  473. * @expectedExceptionMessage Client Name must be a string
  474. *
  475. * @throws ClientException
  476. */
  477. public function testDelFormat()
  478. {
  479. AlibabaCloud::del(null);
  480. }
  481. /**
  482. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  483. * @expectedExceptionMessage Client Name cannot be empty
  484. *
  485. * @throws ClientException
  486. */
  487. public function testHasEmpty()
  488. {
  489. AlibabaCloud::has('');
  490. }
  491. /**
  492. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  493. * @expectedExceptionMessage Client Name must be a string
  494. *
  495. * @throws ClientException
  496. */
  497. public function testHasFormat()
  498. {
  499. AlibabaCloud::has(null);
  500. }
  501. /**
  502. * @expectedExceptionMessage Client Name cannot be empty
  503. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  504. *
  505. * @throws ClientException
  506. */
  507. public function testSetEmpty()
  508. {
  509. AlibabaCloud::set('', AlibabaCloud::bearerTokenClient('token'));
  510. }
  511. /**
  512. * @expectedExceptionMessage Client Name must be a string
  513. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  514. *
  515. * @throws ClientException
  516. */
  517. public function testSetFormat()
  518. {
  519. AlibabaCloud::set(null, AlibabaCloud::bearerTokenClient('token'));
  520. }
  521. /**
  522. * @throws ClientException
  523. */
  524. public function testSet()
  525. {
  526. $name = uniqid('', true);
  527. AlibabaCloud::set($name, AlibabaCloud::bearerTokenClient('token'));
  528. self::assertTrue(AlibabaCloud::has($name));
  529. AlibabaCloud::del($name);
  530. }
  531. /**
  532. * @expectedExceptionMessage Client Name cannot be empty
  533. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  534. *
  535. * @throws ClientException
  536. */
  537. public function testGetEmpty()
  538. {
  539. AlibabaCloud::get('');
  540. }
  541. /**
  542. * @expectedExceptionMessage Client Name must be a string
  543. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  544. *
  545. * @throws ClientException
  546. */
  547. public function testGetFormat()
  548. {
  549. AlibabaCloud::get(null);
  550. }
  551. /**
  552. * @expectedExceptionMessage Client 'notFound' not found
  553. * @expectedException \AlibabaCloud\Client\Exception\ClientException
  554. *
  555. * @throws ClientException
  556. */
  557. public function testGetNotFound()
  558. {
  559. AlibabaCloud::get('notFound');
  560. }
  561. }