/** * @covers WindowsAzure\Blob\BlobRestProxy::createBlobSnapshot * @covers WindowsAzure\Blob\Models\createBlobSnapshotResult::create */ public function testCreateBlobSnapshot() { // Setup $containerName = 'createblobsnapshot' . $this->createSuffix(); $blobName = 'testBlob'; $blobValue = 'TestBlobValue'; $this->createContainer($containerName); $this->restProxy->createBlockBlob($containerName, $blobName, $blobValue); // Test $snapshotResult = $this->restProxy->createBlobSnapshot($containerName, $blobName); // Assert $listOptions = new ListBlobsOptions(); $listOptions->setIncludeSnapshots(true); $blobsResult = $this->restProxy->listBlobs($containerName, $listOptions); $blobs = $blobsResult->getBlobs(); $actualBlob = $blobs[0]; $this->assertNotNull($snapshotResult->getETag()); $this->assertNotNull($snapshotResult->getLastModified()); $this->assertNotNull($snapshotResult->getSnapshot()); $this->assertEquals($snapshotResult->getSnapshot(), $actualBlob->getSnapshot()); }
/** * @covers WindowsAzure\Blob\Models\ListBlobsOptions::getIncludeSnapshots */ public function testGetIncludeSnapshots() { // Setup $options = new ListBlobsOptions(); $expected = true; $options->setIncludeSnapshots($expected); // Test $actual = $options->getIncludeSnapshots(); // Assert $this->assertEquals($expected, $actual); }
/** * @covers WindowsAzure\Blob\BlobRestProxy::createPageBlob * @covers WindowsAzure\Blob\BlobRestProxy::deleteBlob * @covers WindowsAzure\Blob\BlobRestProxy::listBlobs */ public function testListBlobsWithOptionsWorks() { // Arrange $blobNames = array('myblob1', 'myblob2', 'otherblob1', 'otherblob2'); foreach ($blobNames as $blob) { $this->restProxy->createPageBlob(self::$_test_container_for_listing, $blob, 512); } // Act $opts = new ListBlobsOptions(); $opts->setIncludeMetadata(true); $opts->setIncludeSnapshots(true); $results = $this->restProxy->listBlobs(self::$_test_container_for_listing, $opts); foreach ($blobNames as $blob) { $this->restProxy->deleteBlob(self::$_test_container_for_listing, $blob); } // Assert $this->assertNotNull($results, '$results'); $this->assertEquals(4, count($results->getBlobs()), 'count($results->getBlobs())'); }
/** * @covers WindowsAzure\Blob\BlobRestProxy::createBlobSnapshot * @covers WindowsAzure\Blob\BlobRestProxy::createPageBlob * @covers WindowsAzure\Blob\BlobRestProxy::deleteBlob * @covers WindowsAzure\Blob\BlobRestProxy::getBlob * @covers WindowsAzure\Blob\BlobRestProxy::listBlobs */ private function createBlobSnapshotWorker($options, $container) { $blob = BlobServiceFunctionalTestData::getInterestingBlobName(); // Make sure there is something to test $dataSize = 512; $this->restProxy->createPageBlob($container, $blob, $dataSize); $snapshot1 = $this->restProxy->createBlobSnapshot($container, $blob); if (!is_null($options)) { BlobServiceFunctionalTestData::fixEtagAccessCondition($options->getAccessCondition(), $snapshot1->getEtag()); } try { $res = is_null($options) ? $this->restProxy->createBlobSnapshot($container, $blob) : $this->restProxy->createBlobSnapshot($container, $blob, $options); if (is_null($options)) { $options = new CreateBlobSnapshotOptions(); } if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) { $this->assertTrue(false, 'Expect negative timeouts in $options to throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertTrue(false, 'Expect failing temporal access condition should throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertTrue(false, 'Expect failing etag access condition to throw'); } $listOptions = new ListBlobsOptions(); $listOptions->setIncludeSnapshots(true); $listOptions->setPrefix($blob); $listBlobsResult = $this->restProxy->listBlobs($container == '' ? '$root' : $container, $listOptions); $blobs = $listBlobsResult->getBlobs(); $getBlobOptions = new GetBlobOptions(); $getBlobOptions->setSnapshot($res->getSnapshot()); $getBlobResult = $this->restProxy->getBlob($container, $blob, $getBlobOptions); $this->verifyCreateBlobSnapshotWorker($res, $options, $blobs, $getBlobResult); } catch (ServiceException $e) { if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) { $this->assertEquals(500, $e->getCode(), 'bad timeout: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad temporal access condition IF_UNMODIFIED_SINCE: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passEtagAccessCondition($options->getAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad etag access condition: deleteHttpStatusCode'); } else { } } } } // Clean up. $this->restProxy->deleteBlob($container, $blob); }
/** * @covers WindowsAzure\Blob\BlobRestProxy::copyBlob * @covers WindowsAzure\Blob\BlobRestProxy::createBlobSnapshot * @covers WindowsAzure\Blob\BlobRestProxy::createPageBlob * @covers WindowsAzure\Blob\BlobRestProxy::deleteBlob * @covers WindowsAzure\Blob\BlobRestProxy::getBlob * @covers WindowsAzure\Blob\BlobRestProxy::listBlobs * @covers WindowsAzure\Blob\BlobRestProxy::setBlobMetadata */ private function copyBlobWorker($options, $sourceContainer, $destContainer) { $sourceBlob = BlobServiceFunctionalTestData::getInterestingBlobName($sourceContainer); $destBlob = BlobServiceFunctionalTestData::getInterestingBlobName($destContainer); // Make sure there is something to test $sourceDataSize = 512; $this->restProxy->createPageBlob($sourceContainer, $sourceBlob, $sourceDataSize); $destDataSize = 2048; $destBlobInfo = $this->restProxy->createPageBlob($destContainer, $destBlob, $destDataSize); $this->restProxy->createBlobSnapshot($destContainer, $destBlob); $metadata = BlobServiceFunctionalTestData::getNiceMetadata(); $this->restProxy->setBlobMetadata($sourceContainer, $sourceBlob, $metadata); $snapshot = $this->restProxy->createBlobSnapshot($sourceContainer, $sourceBlob); if (!is_null($options)) { BlobServiceFunctionalTestData::fixETagAccessCondition($options->getSourceAccessCondition(), $snapshot->getETag()); BlobServiceFunctionalTestData::fixETagAccessCondition($options->getAccessCondition(), $destBlobInfo->getETag()); $options->setSourceSnapshot(is_null($options->getSourceSnapshot()) ? null : $snapshot->getSnapshot()); } try { if (is_null($options)) { $this->restProxy->copyBlob($destContainer, $destBlob, $sourceContainer, $sourceBlob); } else { $this->restProxy->copyBlob($destContainer, $destBlob, $sourceContainer, $sourceBlob, $options); } if (is_null($options)) { $options = new CopyBlobOptions(); } if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) { $this->assertTrue(false, 'Expect negative timeouts in $options to throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getSourceAccessCondition())) { $this->assertTrue(false, 'Expect failing source temporal access condition should throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getSourceAccessCondition())) { $this->assertTrue(false, 'Expect failing source etag access condition to throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertTrue(false, 'Expect failing dest temporal access condition should throw'); } if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertTrue(false, 'Expect failing dest etag access condition to throw'); } $listOptions = new ListBlobsOptions(); $listOptions->setIncludeSnapshots(true); $listOptions->setPrefix($destBlob); $listBlobsResult = $this->restProxy->listBlobs($destContainer == '' ? '$root' : $destContainer, $listOptions); $blobs = $listBlobsResult->getBlobs(); $getBlobResult = $this->restProxy->getBlob($destContainer, $destBlob); $this->verifyCopyBlobWorker($options, $blobs, $getBlobResult, $sourceDataSize, $metadata); } catch (ServiceException $e) { if (is_null($options)) { $options = new CopyBlobOptions(); } if (!is_null($options->getTimeout()) && $options->getTimeout() < 1) { $this->assertEquals(500, $e->getCode(), 'bad timeout: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getSourceAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad source temporal access condition IF_UNMODIFIED_SINCE: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passETagAccessCondition($options->getSourceAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad source etag access condition: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passTemporalAccessCondition($options->getAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad dest temporal access condition IF_UNMODIFIED_SINCE: deleteHttpStatusCode'); } else { if (!BlobServiceFunctionalTestData::passETagAccessCondition($options->getAccessCondition())) { $this->assertEquals(412, $e->getCode(), 'bad dest etag access condition: deleteHttpStatusCode'); } else { throw $e; } } } } } } // Clean up. $this->restProxy->deleteBlob($sourceContainer, $sourceBlob); $this->restProxy->deleteBlob($destContainer, $destBlob); }