BucketTest.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. <?php
  2. namespace Qiniu\Tests;
  3. use PHPUnit\Framework\TestCase;
  4. use Qiniu\Config;
  5. use Qiniu\Storage\BucketManager;
  6. class BucketTest extends TestCase
  7. {
  8. /**
  9. * @var BucketManager
  10. */
  11. private static $bucketManager;
  12. private static $dummyBucketManager;
  13. private static $bucketName;
  14. private static $key;
  15. private static $key2;
  16. private static $customCallbackURL;
  17. private static $bucketToCreate;
  18. private static $bucketLifeRuleName;
  19. private static $bucketLifeRulePrefix;
  20. private static $bucketEventName;
  21. private static $bucketEventPrefix;
  22. private static $keysToCleanup;
  23. /**
  24. * @beforeClass
  25. */
  26. public static function prepareEnvironment()
  27. {
  28. global $bucketName;
  29. global $key;
  30. global $key2;
  31. self::$bucketName = $bucketName;
  32. self::$key = $key;
  33. self::$key2 = $key2;
  34. global $customCallbackURL;
  35. self::$customCallbackURL = $customCallbackURL;
  36. global $testAuth;
  37. $config = new Config();
  38. self::$bucketManager = new BucketManager($testAuth, $config);
  39. global $dummyAuth;
  40. self::$dummyBucketManager = new BucketManager($dummyAuth);
  41. self::$bucketToCreate = 'phpsdk-ci-test' . rand(1, 1000);
  42. self::$bucketLifeRuleName = 'bucket_life_rule' . rand(1, 1000);
  43. self::$bucketLifeRulePrefix = 'prefix-test' . rand(1, 1000);
  44. self::$bucketEventName = 'bucketevent' . rand(1, 1000);
  45. self::$bucketEventPrefix = 'event-test' . rand(1, 1000);
  46. self::$keysToCleanup = array();
  47. }
  48. /**
  49. * @afterClass
  50. */
  51. public static function cleanupTestData()
  52. {
  53. $ops = BucketManager::buildBatchDelete(self::$bucketName, self::$keysToCleanup);
  54. // ignore result for cleanup
  55. self::$bucketManager->batch($ops);
  56. }
  57. private static function getObjectKey($key)
  58. {
  59. $result = $key . rand();
  60. self::$bucketManager->copy(
  61. self::$bucketName,
  62. $key,
  63. self::$bucketName,
  64. $result
  65. );
  66. self::$keysToCleanup[] = $result;
  67. return $result;
  68. }
  69. public function testBuckets()
  70. {
  71. list($list, $error) = self::$bucketManager->buckets();
  72. $this->assertNull($error);
  73. $this->assertTrue(in_array(self::$bucketName, $list));
  74. list($list2, $error) = self::$dummyBucketManager->buckets();
  75. $this->assertEquals(401, $error->code());
  76. $this->assertNotNull($error->message());
  77. $this->assertNotNull($error->getResponse());
  78. $this->assertNull($list2);
  79. }
  80. public function testListBuckets()
  81. {
  82. list($ret, $error) = self::$bucketManager->listbuckets('z0');
  83. $this->assertNull($error);
  84. $this->assertNotNull($ret);
  85. }
  86. public function testCreateBucket()
  87. {
  88. list($ret, $error) = self::$bucketManager->createBucket(self::$bucketToCreate);
  89. $this->assertNull($error);
  90. $this->assertNotNull($ret);
  91. }
  92. public function testDeleteBucket()
  93. {
  94. list($ret, $error) = self::$bucketManager->deleteBucket(self::$bucketToCreate);
  95. $this->assertNull($error);
  96. $this->assertNotNull($ret);
  97. }
  98. public function testDomains()
  99. {
  100. list($ret, $error) = self::$bucketManager->domains(self::$bucketName);
  101. $this->assertNull($error);
  102. $this->assertNotNull($ret);
  103. }
  104. public function testBucketInfo()
  105. {
  106. list($ret, $error) = self::$bucketManager->bucketInfo(self::$bucketName);
  107. $this->assertNull($error);
  108. $this->assertNotNull($ret);
  109. }
  110. public function testBucketInfos()
  111. {
  112. list($ret, $error) = self::$bucketManager->bucketInfos('z0');
  113. $this->assertNull($error);
  114. $this->assertNotNull($ret);
  115. }
  116. public function testList()
  117. {
  118. list($ret, $error) = self::$bucketManager->listFiles(self::$bucketName, null, null, 10);
  119. $this->assertNull($error);
  120. $this->assertNotNull($ret['items'][0]);
  121. $this->assertNotNull($ret['marker']);
  122. }
  123. public function testListFilesv2()
  124. {
  125. list($ret, $error) = self::$bucketManager->listFilesv2(self::$bucketName, null, null, 10);
  126. $this->assertNull($error);
  127. $this->assertNotNull($ret);
  128. }
  129. public function testBucketLifecycleRule()
  130. {
  131. // delete
  132. self::$bucketManager->deleteBucketLifecycleRule(self::$bucketName, self::$bucketLifeRuleName);
  133. // add
  134. list($ret, $error) = self::$bucketManager->bucketLifecycleRule(
  135. self::$bucketName,
  136. self::$bucketLifeRuleName,
  137. self::$bucketLifeRulePrefix,
  138. 80,
  139. 70,
  140. 72,
  141. 74
  142. );
  143. $this->assertNull($error);
  144. $this->assertNotNull($ret);
  145. // get
  146. list($ret, $error) = self::$bucketManager->getBucketLifecycleRules(self::$bucketName);
  147. $this->assertNull($error);
  148. $this->assertNotNull($ret);
  149. $rule = null;
  150. foreach ($ret as $r) {
  151. if ($r["name"] === self::$bucketLifeRuleName) {
  152. $rule = $r;
  153. break;
  154. }
  155. }
  156. $this->assertNotNull($rule);
  157. $this->assertEquals(self::$bucketLifeRulePrefix, $rule["prefix"]);
  158. $this->assertEquals(80, $rule["delete_after_days"]);
  159. $this->assertEquals(70, $rule["to_line_after_days"]);
  160. $this->assertEquals(72, $rule["to_archive_after_days"]);
  161. $this->assertEquals(74, $rule["to_deep_archive_after_days"]);
  162. // update
  163. list($ret, $error) = self::$bucketManager->updateBucketLifecycleRule(
  164. self::$bucketName,
  165. self::$bucketLifeRuleName,
  166. 'update-' . self::$bucketLifeRulePrefix,
  167. 90,
  168. 75,
  169. 80,
  170. 85
  171. );
  172. $this->assertNull($error);
  173. $this->assertNotNull($ret);
  174. // get
  175. list($ret, $error) = self::$bucketManager->getBucketLifecycleRules(self::$bucketName);
  176. $this->assertNull($error);
  177. $this->assertNotNull($ret);
  178. $rule = null;
  179. foreach ($ret as $r) {
  180. if ($r["name"] === self::$bucketLifeRuleName) {
  181. $rule = $r;
  182. break;
  183. }
  184. }
  185. $this->assertNotNull($rule);
  186. $this->assertEquals('update-' . self::$bucketLifeRulePrefix, $rule["prefix"]);
  187. $this->assertEquals(90, $rule["delete_after_days"]);
  188. $this->assertEquals(75, $rule["to_line_after_days"]);
  189. $this->assertEquals(80, $rule["to_archive_after_days"]);
  190. $this->assertEquals(85, $rule["to_deep_archive_after_days"]);
  191. // delete
  192. list($ret, $error) = self::$bucketManager->deleteBucketLifecycleRule(
  193. self::$bucketName,
  194. self::$bucketLifeRuleName
  195. );
  196. $this->assertNull($error);
  197. $this->assertNotNull($ret);
  198. }
  199. public function testPutBucketEvent()
  200. {
  201. list($ret, $error) = self::$bucketManager->putBucketEvent(
  202. self::$bucketName,
  203. self::$bucketEventName,
  204. self::$bucketEventPrefix,
  205. 'img',
  206. array('copy'),
  207. self::$customCallbackURL
  208. );
  209. $this->assertNull($error);
  210. $this->assertNotNull($ret);
  211. }
  212. public function testUpdateBucketEvent()
  213. {
  214. list($ret, $error) = self::$bucketManager->updateBucketEvent(
  215. self::$bucketName,
  216. self::$bucketEventName,
  217. self::$bucketEventPrefix,
  218. 'video',
  219. array('copy'),
  220. self::$customCallbackURL
  221. );
  222. $this->assertNull($error);
  223. $this->assertNotNull($ret);
  224. }
  225. public function testGetBucketEvents()
  226. {
  227. list($ret, $error) = self::$bucketManager->getBucketEvents(self::$bucketName);
  228. $this->assertNull($error);
  229. $this->assertNotNull($ret);
  230. }
  231. public function testDeleteBucketEvent()
  232. {
  233. list($ret, $error) = self::$bucketManager->deleteBucketEvent(self::$bucketName, self::$bucketEventName);
  234. $this->assertNull($error);
  235. $this->assertNotNull($ret);
  236. }
  237. public function testStat()
  238. {
  239. list($stat, $error) = self::$bucketManager->stat(self::$bucketName, self::$key);
  240. $this->assertNull($error);
  241. $this->assertNotNull($stat);
  242. $this->assertNotNull($stat['hash']);
  243. list($stat, $error) = self::$bucketManager->stat(self::$bucketName, 'nofile');
  244. $this->assertEquals(612, $error->code());
  245. $this->assertNotNull($error->message());
  246. $this->assertNull($stat);
  247. list($stat, $error) = self::$bucketManager->stat('nobucket', 'nofile');
  248. $this->assertEquals(631, $error->code());
  249. $this->assertNotNull($error->message());
  250. $this->assertNull($stat);
  251. }
  252. public function testDelete()
  253. {
  254. $fileToDel = self::getObjectKey(self::$key);
  255. list(, $error) = self::$bucketManager->delete(self::$bucketName, $fileToDel);
  256. $this->assertNull($error);
  257. }
  258. public function testRename()
  259. {
  260. $fileToRename = self::getObjectKey(self::$key);
  261. $fileRenamed = $fileToRename . 'new';
  262. list(, $error) = self::$bucketManager->rename(self::$bucketName, $fileToRename, $fileRenamed);
  263. $this->assertNull($error);
  264. self::$keysToCleanup[] = $fileRenamed;
  265. }
  266. public function testCopy()
  267. {
  268. $fileToCopy = self::getObjectKey(self::$key2);
  269. $fileCopied = $fileToCopy . 'copied';
  270. //test force copy
  271. list(, $error) = self::$bucketManager->copy(
  272. self::$bucketName,
  273. $fileToCopy,
  274. self::$bucketName,
  275. $fileCopied,
  276. true
  277. );
  278. $this->assertNull($error);
  279. list($fileToCopyStat,) = self::$bucketManager->stat(self::$bucketName, $fileToCopy);
  280. list($fileCopiedStat,) = self::$bucketManager->stat(self::$bucketName, $fileCopied);
  281. $this->assertEquals($fileToCopyStat['hash'], $fileCopiedStat['hash']);
  282. self::$keysToCleanup[] = $fileCopied;
  283. }
  284. public function testChangeMime()
  285. {
  286. $fileToChange = self::getObjectKey('php-sdk.html');
  287. list(, $error) = self::$bucketManager->changeMime(
  288. self::$bucketName,
  289. $fileToChange,
  290. 'text/plain'
  291. );
  292. $this->assertNull($error);
  293. list($ret, $error) = self::$bucketManager->stat(
  294. self::$bucketName,
  295. $fileToChange
  296. );
  297. $this->assertNull($error);
  298. $this->assertEquals('text/plain', $ret['mimeType']);
  299. }
  300. public function testPrefetch()
  301. {
  302. list($ret, $error) = self::$bucketManager->prefetch(
  303. self::$bucketName,
  304. 'php-sdk.html'
  305. );
  306. $this->assertNull($error);
  307. $this->assertNotNull($ret);
  308. }
  309. public function testPrefetchFailed()
  310. {
  311. list($ret, $error) = self::$bucketManager->prefetch(
  312. 'fakebucket',
  313. 'php-sdk.html'
  314. );
  315. $this->assertNotNull($error);
  316. $this->assertNull($ret);
  317. }
  318. public function testFetch()
  319. {
  320. list($ret, $error) = self::$bucketManager->fetch(
  321. 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
  322. self::$bucketName,
  323. 'fetch.html'
  324. );
  325. $this->assertNull($error);
  326. $this->assertArrayHasKey('hash', $ret);
  327. list($ret, $error) = self::$bucketManager->fetch(
  328. 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
  329. self::$bucketName,
  330. ''
  331. );
  332. $this->assertNull($error);
  333. $this->assertArrayHasKey('key', $ret);
  334. list($ret, $error) = self::$bucketManager->fetch(
  335. 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
  336. self::$bucketName
  337. );
  338. $this->assertNull($error);
  339. $this->assertArrayHasKey('key', $ret);
  340. }
  341. public function testFetchFailed()
  342. {
  343. list($ret, $error) = self::$bucketManager->fetch(
  344. 'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
  345. 'fakebucket'
  346. );
  347. $this->assertNotNull($error);
  348. $this->assertNull($ret);
  349. }
  350. public function testAsynchFetch()
  351. {
  352. list($ret, $error) = self::$bucketManager->asynchFetch(
  353. 'http://devtools.qiniu.com/qiniu.png',
  354. self::$bucketName,
  355. null,
  356. 'qiniu.png'
  357. );
  358. $this->assertNull($error);
  359. $this->assertArrayHasKey('id', $ret);
  360. list($ret, $error) = self::$bucketManager->asynchFetch(
  361. 'http://devtools.qiniu.com/qiniu.png',
  362. self::$bucketName,
  363. null,
  364. ''
  365. );
  366. $this->assertNull($error);
  367. $this->assertArrayHasKey('id', $ret);
  368. list($ret, $error) = self::$bucketManager->asynchFetch(
  369. 'http://devtools.qiniu.com/qiniu.png',
  370. self::$bucketName
  371. );
  372. $this->assertNull($error);
  373. $this->assertArrayHasKey('id', $ret);
  374. }
  375. public function testAsynchFetchFailed()
  376. {
  377. list($ret, $error) = self::$bucketManager->asynchFetch(
  378. 'http://devtools.qiniu.com/qiniu.png',
  379. 'fakebucket'
  380. );
  381. $this->assertNotNull($error);
  382. $this->assertNull($ret);
  383. }
  384. public function testBatchCopy()
  385. {
  386. $key = 'copyto' . rand();
  387. $ops = BucketManager::buildBatchCopy(
  388. self::$bucketName,
  389. array(self::$key => $key),
  390. self::$bucketName,
  391. true
  392. );
  393. list($ret, $error) = self::$bucketManager->batch($ops);
  394. $this->assertNull($error);
  395. $this->assertEquals(200, $ret[0]['code']);
  396. self::$keysToCleanup[] = $key;
  397. }
  398. public function testBatchMove()
  399. {
  400. $fileToMove = self::getObjectKey(self::$key);
  401. $fileMoved = $fileToMove . 'to';
  402. $ops = BucketManager::buildBatchMove(
  403. self::$bucketName,
  404. array($fileToMove => $fileMoved),
  405. self::$bucketName,
  406. true
  407. );
  408. list($ret, $error) = self::$bucketManager->batch($ops);
  409. $this->assertNull($error);
  410. $this->assertEquals(200, $ret[0]['code']);
  411. self::$keysToCleanup[] = $fileMoved;
  412. }
  413. public function testBatchRename()
  414. {
  415. $fileToRename = self::getObjectKey(self::$key);
  416. $fileRenamed = $fileToRename . 'to';
  417. $ops = BucketManager::buildBatchRename(
  418. self::$bucketName,
  419. array($fileToRename => $fileRenamed),
  420. true
  421. );
  422. list($ret, $error) = self::$bucketManager->batch($ops);
  423. $this->assertNull($error);
  424. $this->assertEquals(200, $ret[0]['code']);
  425. self::$keysToCleanup[] = $fileRenamed;
  426. }
  427. public function testBatchStat()
  428. {
  429. $ops = BucketManager::buildBatchStat(self::$bucketName, array('php-sdk.html'));
  430. list($ret, $error) = self::$bucketManager->batch($ops);
  431. $this->assertNull($error);
  432. $this->assertEquals(200, $ret[0]['code']);
  433. }
  434. public function testBatchChangeTypeAndBatchRestoreAr()
  435. {
  436. $key = self::getObjectKey(self::$key);
  437. $ops = BucketManager::buildBatchChangeType(self::$bucketName, array($key => 2)); // 2 Archive
  438. list($ret, $error) = self::$bucketManager->batch($ops);
  439. $this->assertNull($error);
  440. $this->assertEquals(200, $ret[0]['code']);
  441. $ops = BucketManager::buildBatchRestoreAr(self::$bucketName, array($key => 1)); // 1 day
  442. list($ret, $error) = self::$bucketManager->batch($ops);
  443. $this->assertNull($error);
  444. $this->assertEquals(200, $ret[0]['code']);
  445. }
  446. public function testDeleteAfterDays()
  447. {
  448. $key = "noexist" . rand();
  449. list($ret, $error) = self::$bucketManager->deleteAfterDays(self::$bucketName, $key, 1);
  450. $this->assertNotNull($error);
  451. $this->assertNull($ret);
  452. $key = self::getObjectKey(self::$key);
  453. list(, $error) = self::$bucketManager->deleteAfterDays(self::$bucketName, $key, 1);
  454. $this->assertNull($error);
  455. list($ret, $error) = self::$bucketManager->stat(self::$bucketName, $key);
  456. $this->assertNull($error);
  457. $this->assertGreaterThan(23 * 3600, $ret['expiration'] - time());
  458. $this->assertLessThan(48 * 3600, $ret['expiration'] - time());
  459. }
  460. public function testSetObjectLifecycle()
  461. {
  462. $key = self::getObjectKey(self::$key);
  463. list(, $err) = self::$bucketManager->setObjectLifecycle(
  464. self::$bucketName,
  465. $key,
  466. 10,
  467. 20,
  468. 30,
  469. 40
  470. );
  471. $this->assertNull($err);
  472. list($ret, $error) = self::$bucketManager->stat(self::$bucketName, $key);
  473. $this->assertNull($error);
  474. $this->assertNotNull($ret['transitionToIA']);
  475. $this->assertNotNull($ret['transitionToARCHIVE']);
  476. $this->assertNotNull($ret['transitionToDeepArchive']);
  477. $this->assertNotNull($ret['expiration']);
  478. }
  479. public function testSetObjectLifecycleWithCond()
  480. {
  481. $key = self::getObjectKey(self::$key);
  482. list($ret, $err) = self::$bucketManager->stat(self::$bucketName, $key);
  483. $this->assertNull($err);
  484. $key_hash = $ret['hash'];
  485. $key_fsize = $ret['fsize'];
  486. list(, $err) = self::$bucketManager->setObjectLifecycleWithCond(
  487. self::$bucketName,
  488. $key,
  489. array(
  490. 'hash' => $key_hash,
  491. 'fsize' => $key_fsize
  492. ),
  493. 10,
  494. 20,
  495. 30,
  496. 40
  497. );
  498. $this->assertNull($err);
  499. list($ret, $error) = self::$bucketManager->stat(self::$bucketName, $key);
  500. $this->assertNull($error);
  501. $this->assertNotNull($ret['transitionToIA']);
  502. $this->assertNotNull($ret['transitionToARCHIVE']);
  503. $this->assertNotNull($ret['transitionToDeepArchive']);
  504. $this->assertNotNull($ret['expiration']);
  505. }
  506. public function testBatchSetObjectLifecycle()
  507. {
  508. $key = self::getObjectKey(self::$key);
  509. $ops = BucketManager::buildBatchSetObjectLifecycle(
  510. self::$bucketName,
  511. array($key),
  512. 10,
  513. 20,
  514. 30,
  515. 40
  516. );
  517. list($ret, $err) = self::$bucketManager->batch($ops);
  518. $this->assertNull($err);
  519. $this->assertEquals(200, $ret[0]['code']);
  520. }
  521. public function testGetCorsRules()
  522. {
  523. list(, $err) = self::$bucketManager->getCorsRules(self::$bucketName);
  524. $this->assertNull($err);
  525. }
  526. public function testPutBucketAccessStyleMode()
  527. {
  528. list(, $err) = self::$bucketManager->putBucketAccessStyleMode(self::$bucketName, 0);
  529. $this->assertNull($err);
  530. }
  531. public function testPutBucketAccessMode()
  532. {
  533. list(, $err) = self::$bucketManager->putBucketAccessMode(self::$bucketName, 0);
  534. $this->assertNull($err);
  535. }
  536. public function testPutReferAntiLeech()
  537. {
  538. list(, $err) = self::$bucketManager->putReferAntiLeech(self::$bucketName, 0, "1", "*");
  539. $this->assertNull($err);
  540. }
  541. public function testPutBucketMaxAge()
  542. {
  543. list(, $err) = self::$bucketManager->putBucketMaxAge(self::$bucketName, 31536000);
  544. $this->assertNull($err);
  545. }
  546. public function testPutBucketQuota()
  547. {
  548. list(, $err) = self::$bucketManager->putBucketQuota(self::$bucketName, -1, -1);
  549. $this->assertNull($err);
  550. }
  551. public function testGetBucketQuota()
  552. {
  553. list(, $err) = self::$bucketManager->getBucketQuota(self::$bucketName);
  554. $this->assertNull($err);
  555. }
  556. public function testChangeType()
  557. {
  558. $fileToChange = self::getObjectKey(self::$key);
  559. list(, $err) = self::$bucketManager->changeType(self::$bucketName, $fileToChange, 0);
  560. $this->assertNull($err);
  561. list(, $err) = self::$bucketManager->changeType(self::$bucketName, $fileToChange, 1);
  562. $this->assertNull($err);
  563. }
  564. public function testArchiveRestoreAr()
  565. {
  566. $key = self::getObjectKey(self::$key);
  567. self::$bucketManager->changeType(self::$bucketName, $key, 2);
  568. list(, $err) = self::$bucketManager->restoreAr(self::$bucketName, $key, 2);
  569. $this->assertNull($err);
  570. list($ret, $err) = self::$bucketManager->stat(self::$bucketName, $key);
  571. $this->assertNull($err);
  572. $this->assertEquals(2, $ret["type"]);
  573. // restoreStatus
  574. // null means frozen;
  575. // 1 means be unfreezing;
  576. // 2 means be unfrozen;
  577. $this->assertNotNull($ret["restoreStatus"]);
  578. $this->assertContains($ret["restoreStatus"], array(1, 2));
  579. }
  580. public function testDeepArchiveRestoreAr()
  581. {
  582. $key = self::getObjectKey(self::$key);
  583. self::$bucketManager->changeType(self::$bucketName, $key, 3);
  584. list(, $err) = self::$bucketManager->restoreAr(self::$bucketName, $key, 1);
  585. $this->assertNull($err);
  586. list($ret, $err) = self::$bucketManager->stat(self::$bucketName, $key);
  587. $this->assertNull($err);
  588. $this->assertEquals(3, $ret["type"]);
  589. // restoreStatus
  590. // null means frozen;
  591. // 1 means be unfreezing;
  592. // 2 means be unfrozen;
  593. $this->assertNotNull($ret["restoreStatus"]);
  594. $this->assertContains($ret["restoreStatus"], array(1, 2));
  595. }
  596. public function testChangeStatus()
  597. {
  598. $key = self::getObjectKey(self::$key);
  599. list(, $err) = self::$bucketManager->changeStatus(self::$bucketName, $key, 1);
  600. $this->assertNull($err);
  601. list($ret, $err) = self::$bucketManager->stat(self::$bucketName, $key);
  602. $this->assertNull($err);
  603. $this->assertEquals(1, $ret['status']);
  604. list(, $err) = self::$bucketManager->changeStatus(self::$bucketName, $key, 0);
  605. $this->assertNull($err);
  606. list($ret, $err) = self::$bucketManager->stat(self::$bucketName, $key);
  607. $this->assertNull($err);
  608. $this->assertArrayNotHasKey('status', $ret);
  609. }
  610. }