public void LeaseWithoutEnoughPermission() { string containerName = Utility.GenNameString("container"); string blobName = Utility.GenNameString("blob"); CloudBlobContainer container = blobUtil.CreateContainer(containerName); try { CloudBlob blob = blobUtil.CreateRandomBlob(container, blobName); string containerSasToken = string.Empty; // Create a container SAS Test.Assert(CommandAgent.NewAzureStorageContainerSAS(containerName, string.Empty, "rl", DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromMinutes(5)), Utility.GenComparisonData("container sas create", true)); if (lang == Language.NodeJS) { containerSasToken = (CommandAgent as NodeJSAgent).Output[0]["sas"] as string; } // Create an account SAS SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy() { Permissions = SharedAccessAccountPermissions.Read, ResourceTypes = SharedAccessAccountResourceTypes.Container, Services = SharedAccessAccountServices.Blob, SharedAccessStartTime = DateTimeOffset.UtcNow, SharedAccessExpiryTime = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(5) }; string accountSasToken = Utility.GenerateAccountSAS(policy); CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, accountSasToken); Test.Assert(!CommandAgent.AcquireLease(containerName, null), Utility.GenComparisonData("Acquire Lease", false)); CommandAgent.ValidateErrorMessage(MethodBase.GetCurrentMethod().Name); Test.Assert(!CommandAgent.AcquireLease(containerName, blobName), Utility.GenComparisonData("Acquire Lease", false)); CommandAgent.ValidateErrorMessage(MethodBase.GetCurrentMethod().Name); CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, containerSasToken); Test.Assert(!CommandAgent.AcquireLease(containerName, null), Utility.GenComparisonData("Acquire Lease", false)); CommandAgent.ValidateErrorMessage(MethodBase.GetCurrentMethod().Name); Test.Assert(!CommandAgent.AcquireLease(containerName, blobName), Utility.GenComparisonData("Acquire Lease", false)); CommandAgent.ValidateErrorMessage(MethodBase.GetCurrentMethod().Name); } finally { blobUtil.RemoveContainer(containerName); } }
public void NewContainerSasWithInvalidLifeTime() { blobUtil.SetupTestContainerAndBlob(); try { DateTime start = DateTime.UtcNow; DateTime end = start.AddHours(1.0); Test.Assert(!CommandAgent.NewAzureStorageContainerSAS(blobUtil.Container.Name, string.Empty, "l", end, start), "Generate container sas token with invalid should fail"); ExpectedContainErrorMessage("The expiry time of the specified access policy should be greater than start time"); } finally { blobUtil.CleanupTestContainerAndBlob(); } }
public void NewContainerSasWithNotExistPolicy() { blobUtil.SetupTestContainerAndBlob(); try { string policyName = Utility.GenNameString("notexistpolicy"); Test.Assert(!CommandAgent.NewAzureStorageContainerSAS(blobUtil.Container.Name, policyName, string.Empty), "Generate container sas token with not exist policy should fail"); ExpectedContainErrorMessage(string.Format("Invalid access policy '{0}'.", policyName)); } finally { blobUtil.CleanupTestContainerAndBlob(); } }
public void ChangeLeaseBySAS() { string containerName = Utility.GenNameString("container"); string blobName = Utility.GenNameString("blob"); CloudBlobContainer container = blobUtil.CreateContainer(containerName); string containerLease = string.Empty; string porposedId = Guid.NewGuid().ToString(); Random random = new Random(); int duration = random.Next(15, 60); try { string containerSasToken = string.Empty; string accountSasToken = string.Empty; // Create a container SAS Test.Assert(CommandAgent.NewAzureStorageContainerSAS(containerName, string.Empty, "w", DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromMinutes(5)), Utility.GenComparisonData("container sas create", true)); if (lang == Language.NodeJS) { containerSasToken = (CommandAgent as NodeJSAgent).Output[0]["sas"] as string; } // Use an account SAS SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy() { Permissions = SharedAccessAccountPermissions.Write, ResourceTypes = SharedAccessAccountResourceTypes.Container | SharedAccessAccountResourceTypes.Object, Services = SharedAccessAccountServices.Blob, SharedAccessStartTime = DateTimeOffset.UtcNow, SharedAccessExpiryTime = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(5) }; accountSasToken = Utility.GenerateAccountSAS(policy); CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, accountSasToken); Test.Assert(CommandAgent.AcquireLease(containerName, null, duration: duration), Utility.GenComparisonData("Acquire Lease", true)); if (lang == Language.NodeJS) { try { containerLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; Test.Assert(CommandAgent.ChangeLease(containerName, null, containerLease, porposedId), Utility.GenComparisonData("Change Lease", true)); AccessCondition condition = new AccessCondition() { LeaseId = porposedId }; container.SetMetadata(condition); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } string blobLease = string.Empty; CloudBlob blob = blobUtil.CreateRandomBlob(container, blobName); blob.Metadata["test1"] = "m1"; blob.Metadata["test2"] = "m2"; // Acquire with account SAS Test.Assert(CommandAgent.AcquireLease(containerName, blobName, duration: duration), Utility.GenComparisonData("Acquire Lease", true)); if (lang == Language.NodeJS) { try { blobLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; // Change with container SAS CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, containerSasToken); Test.Assert(CommandAgent.ChangeLease(containerName, blobName, blobLease, porposedId), Utility.GenComparisonData("Change Lease", true)); AccessCondition condition = new AccessCondition() { LeaseId = porposedId }; blob.SetMetadata(condition); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } } finally { blobUtil.RemoveContainer(containerName, porposedId); } }
public void BreakLeaseBySAS() { string containerName = Utility.GenNameString("container"); string blobName = Utility.GenNameString("blob"); CloudBlobContainer container = blobUtil.CreateContainer(containerName); string containerLease = string.Empty; Random random = new Random(); int duration = random.Next(15, 60); int remainingTime = duration; try { string containerSasToken = string.Empty; string accountSasToken = string.Empty; // Create a container SAS Test.Assert(CommandAgent.NewAzureStorageContainerSAS(containerName, string.Empty, "w", DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromMinutes(5)), Utility.GenComparisonData("container sas create", true)); if (lang == Language.NodeJS) { containerSasToken = (CommandAgent as NodeJSAgent).Output[0]["sas"] as string; } // Use an account SAS SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy() { Permissions = SharedAccessAccountPermissions.Write, ResourceTypes = SharedAccessAccountResourceTypes.Container | SharedAccessAccountResourceTypes.Object, Services = SharedAccessAccountServices.Blob, SharedAccessStartTime = DateTimeOffset.UtcNow, SharedAccessExpiryTime = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(5) }; accountSasToken = Utility.GenerateAccountSAS(policy); CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, accountSasToken); Test.Assert(CommandAgent.AcquireLease(containerName, null, duration: duration), Utility.GenComparisonData("Acquire Container Lease", true)); if (lang == Language.NodeJS) { try { containerLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; Test.Assert(CommandAgent.BreakLease(containerName, null), Utility.GenComparisonData("Break Container Lease", true)); remainingTime = int.Parse((CommandAgent as NodeJSAgent).Output[0]["time"].ToString()); Test.Assert(remainingTime <= duration, Utility.GenComparisonData("Validate remaining time", true)); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } string blobLease = string.Empty; CloudBlob blob = blobUtil.CreateRandomBlob(container, blobName); // Acquire with account SAS Test.Assert(CommandAgent.AcquireLease(containerName, blobName, duration: duration), Utility.GenComparisonData("Acquire Blob Lease With Account SAS", true)); if (lang == Language.NodeJS) { try { blobLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; // Break with container SAS CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, containerSasToken); Test.Assert(CommandAgent.BreakLease(containerName, blobName), Utility.GenComparisonData("Break Blob Lease With Container SAS", true)); remainingTime = int.Parse((CommandAgent as NodeJSAgent).Output[0]["time"].ToString()); Test.Assert(remainingTime <= duration, Utility.GenComparisonData("Validate remaining time", true)); Thread.Sleep((remainingTime + 1) * 1000); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } } finally { blobUtil.RemoveContainer(containerName); } }
public void LeaseWithInfiniteDurationBySAS() { string containerName = Utility.GenNameString("container"); string blobName = Utility.GenNameString("blob"); CloudBlobContainer container = blobUtil.CreateContainer(containerName); string containerLease = string.Empty; try { string accountSasToken = string.Empty; string containerSasToken = string.Empty; // Create a container SAS Test.Assert(CommandAgent.NewAzureStorageContainerSAS(containerName, string.Empty, "w", DateTime.UtcNow, DateTime.UtcNow + TimeSpan.FromMinutes(5)), Utility.GenComparisonData("container sas create", true)); if (lang == Language.NodeJS) { containerSasToken = (CommandAgent as NodeJSAgent).Output[0]["sas"] as string; } // Use an account SAS SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy() { Permissions = SharedAccessAccountPermissions.Write, ResourceTypes = SharedAccessAccountResourceTypes.Container, Services = SharedAccessAccountServices.Blob, SharedAccessStartTime = DateTimeOffset.UtcNow, SharedAccessExpiryTime = DateTimeOffset.UtcNow + TimeSpan.FromMinutes(5) }; accountSasToken = Utility.GenerateAccountSAS(policy); CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, accountSasToken); bool throwException = false; Test.Assert(CommandAgent.AcquireLease(containerName, null), Utility.GenComparisonData("Acquire Lease", true)); if (lang == Language.NodeJS) { try { try { container.Delete(); } catch (StorageException se) { throwException = true; Test.Info(string.Format("Expected: {0} error: {1}", MethodBase.GetCurrentMethod().Name, se.Message)); } Test.Assert(throwException, "Should ever throw exception"); throwException = false; containerLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; AccessCondition condition = new AccessCondition() { LeaseId = containerLease }; container.SetMetadata(condition); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } throwException = false; string blobLease = string.Empty; CloudBlob blob = blobUtil.CreateRandomBlob(container, blobName); blob.Metadata["test1"] = "m1"; blob.Metadata["test2"] = "m2"; // Use a container SAS CommandAgent.SetStorageContextWithSASToken(StorageAccount.Credentials.AccountName, containerSasToken); Test.Assert(CommandAgent.AcquireLease(containerName, blobName), Utility.GenComparisonData("Acquire Lease", true)); if (lang == Language.NodeJS) { try { try { blob.SetMetadata(); } catch (StorageException se) { throwException = true; Test.Info(string.Format("Expected: {0} error: {1}", MethodBase.GetCurrentMethod().Name, se.Message)); } Test.Assert(throwException, "Should ever throw exception"); throwException = false; blobLease = (CommandAgent as NodeJSAgent).Output[0]["id"] as string; AccessCondition condition = new AccessCondition() { LeaseId = blobLease }; blob.SetMetadata(condition); } catch (Exception e) { Test.Error(string.Format("{0} error: {1}", MethodBase.GetCurrentMethod().Name, e.Message)); } } } finally { blobUtil.RemoveContainer(containerName, containerLease); } }