Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,14 @@ function Test-File
Assert-AreEqual $Share.Count 1
Assert-AreEqual $Share[0].Name $shareName

Set-AzStorageFileContent -source $localSrcFile -ShareName $shareName -Path $objectName1 -Force -Context $storageContext
$t = Set-AzStorageFileContent -source $localSrcFile -ShareName $shareName -Path $objectName1 -Force -Context $storageContext -asjob
$t | wait-job
Assert-AreEqual $t.State "Completed"
Assert-AreEqual $t.Error $null
$file = Get-AzStorageFile -ShareName $shareName -Context $storageContext
Assert-AreEqual $file.Count 1
Assert-AreEqual $file[0].Name $objectName1
Set-AzStorageFileContent -source $localSrcFile -ShareName $shareName -Path $objectName1 -Force -Context $storageContext
$file = Get-AzStorageFile -ShareName $shareName -Context $storageContext
Assert-AreEqual $file.Count 1
Assert-AreEqual $file[0].Name $objectName1
Expand All @@ -61,7 +68,12 @@ function Test-File
Assert-AreEqual $file[0].Name $objectName1
Assert-AreEqual $file[1].Name $objectName2

Get-AzStorageFileContent -ShareName $shareName -Path $objectName1 -Destination $localDestFile -Force -Context $storageContext
$t = Get-AzStorageFileContent -ShareName $shareName -Path $objectName1 -Destination $localDestFile -Force -Context $storageContext -asjob
$t | wait-job
Assert-AreEqual $t.State "Completed"
Assert-AreEqual $t.Error $null
Assert-AreEqual (Get-FileHash -Path $localDestFile -Algorithm MD5).Hash (Get-FileHash -Path $localSrcFile -Algorithm MD5).Hash
Get-AzStorageFileContent -ShareName $shareName -Path $objectName1 -Destination $localDestFile -Force -Context $storageContext
Assert-AreEqual (Get-FileHash -Path $localDestFile -Algorithm MD5).Hash (Get-FileHash -Path $localSrcFile -Algorithm MD5).Hash

Remove-AzStorageFile -ShareName $shareName -Path $objectName1 -Context $storageContext
Expand Down Expand Up @@ -118,6 +130,7 @@ function Test-Blob
$localSrcFile = "localsrcblobtestfile.psd1" #The file need exist before test, and should be 512 bytes aligned
New-Item $localSrcFile -ItemType File -Force
$localDestFile = "localdestblobtestfile.txt"
$localDestFile2 = "localdestblobtestfile2.txt"

$containerName = "blobtestcontainer"
$objectName1 = "blobtest1.txt"
Expand All @@ -129,12 +142,19 @@ function Test-Blob
New-AzStorageContainer $containerName -Context $storageContext

# Upload local file to Azure Storage Blob.
Set-AzStorageBlobContent -File $localSrcFile -Container $containerName -Blob $objectName1 -Force -Properties @{"ContentType" = $ContentType; "ContentMD5" = $ContentMD5} -Context $storageContext
$t = Set-AzStorageBlobContent -File $localSrcFile -Container $containerName -Blob $objectName1 -Force -Properties @{"ContentType" = $ContentType; "ContentMD5" = $ContentMD5} -Context $storageContext -asjob
$t | wait-job
Assert-AreEqual $t.State "Completed"
Assert-AreEqual $t.Error $null
$blob = Get-AzStorageContainer -Name $containerName -Context $storageContext | Get-AzStorageBlob
Assert-AreEqual $blob.Count 1
Assert-AreEqual $blob.Name $objectName1
Assert-AreEqual $blob.ICloudBlob.Properties.ContentType $ContentType
Assert-AreEqual $blob.ICloudBlob.Properties.ContentMD5 $ContentMD5
Set-AzStorageBlobContent -File $localSrcFile -Container $containerName -Blob $objectName2 -Force -Properties @{"ContentType" = $ContentType; "ContentMD5" = $ContentMD5} -Context $storageContext
$blob = Get-AzStorageContainer -Name $containerName -Context $storageContext | Get-AzStorageBlob
Assert-AreEqual $blob.Count 2
Get-AzStorageBlob -Container $containerName -Blob $objectName2 -Context $storageContext | Remove-AzStorageBlob -Force

# Copy blob to the same container, but with a different name.
Start-AzStorageBlobCopy -srcContainer $containerName -SrcBlob $objectName1 -DestContainer $containerName -DestBlob $objectName2 -Context $storageContext -DestContext $storageContext
Expand All @@ -147,6 +167,11 @@ function Test-Blob
# Download storage blob to compare with the local file.
Get-AzStorageBlobContent -Container $containerName -Blob $objectName2 -Destination $localDestFile -Force -Context $storageContext
Assert-AreEqual (Get-FileHash -Path $localDestFile -Algorithm MD5).Hash (Get-FileHash -Path $localSrcFile -Algorithm MD5).Hash
$t = Get-AzStorageBlobContent -Container $containerName -Blob $objectName2 -Destination $localDestFile2 -Force -Context $storageContext -asjob
$t | wait-job
Assert-AreEqual $t.State "Completed"
Assert-AreEqual $t.Error $null
Assert-AreEqual (Get-FileHash -Path $localDestFile2 -Algorithm MD5).Hash (Get-FileHash -Path $localSrcFile -Algorithm MD5).Hash

Remove-AzStorageBlob -Container $containerName -Blob $objectName2 -Force -Context $storageContext
$blob = Get-AzStorageBlob -Container $containerName -Context $storageContext
Expand Down Expand Up @@ -209,6 +234,9 @@ function Test-Queue
$queue = Get-AzStorageQueue -Name $queueName -Context $storageContext
Assert-AreEqual $queue.Count 1
Assert-AreEqual $queue[0].Name $queueName

$queueMessage = New-Object -TypeName "Microsoft.Azure.Storage.Queue.CloudQueueMessage" -ArgumentList "This is message 1"
$queue.CloudQueue.AddMessageAsync($QueueMessage)

$queueCount1 = (Get-AzStorageQueue -Context $storageContext).Count
Remove-AzStorageQueue -Name $queueName -Force -Context $storageContext
Expand Down
5 changes: 3 additions & 2 deletions src/Storage/Storage.Management/Az.Storage.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,11 @@ RequiredAssemblies = '.\Microsoft.Azure.Management.Storage.dll',
'.\Microsoft.Azure.Storage.Queue.dll',
'.\Microsoft.Azure.Cosmos.Table.dll',
'.\Microsoft.Azure.DocumentDB.Core.dll',
'.\Microsoft.WindowsAzure.Storage.DataMovement.PowerShell.dll',
'.\Microsoft.Azure.Storage.DataMovement.dll',
'.\Microsoft.Azure.DocumentDB.Core.dll',
'.\Microsoft.OData.Core.dll', '.\Microsoft.OData.Edm.dll',
'.\Microsoft.Spatial.dll'
'.\Microsoft.Spatial.dll',
'.\Microsoft.Azure.KeyVault.Core.dll'

# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()
Expand Down
1 change: 1 addition & 0 deletions src/Storage/Storage.Management/ChangeLog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
- Additional information about change #1
-->
## Upcoming Release
* Upgrade to Storage Client Library 10.0.1 (the namespace of all objects from this SDK change from "Microsoft.WindowsAzure.Storage.*" to "Microsoft.Azure.Storage.*")
* Upgrade to Microsoft.Azure.Management.Storage 11.0.0, to support new API version 2019-04-01.
* The default Storage account Kind in Create Storage account change from 'Storage' to 'StorageV2'
- New-AzStorageAccount
Expand Down
134 changes: 134 additions & 0 deletions src/Storage/Storage.Management/Common/AzureContextAdapterExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
// ----------------------------------------------------------------------------------
//
// Copyright Microsoft Corporation
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------------------------------------------------------------

using Microsoft.Azure.Commands.Common.Authentication.Abstractions;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Auth;
using Microsoft.WindowsAzure.Commands.Utilities.Common;
using Microsoft.WindowsAzure.Commands.Common.Storage;
using System.Linq;
using System;
using System.Text;

namespace Microsoft.WindowsAzure.Commands.Storage.Adapters
{
public static class AzureContextAdapterExtensions
{
/// <summary>
/// Get the current storage account.
/// </summary>
/// <param name="context">The current Azure context.</param>
/// <returns>The current storage account, or null, if no current storage account is set.</returns>
public static CloudStorageAccount GetCurrentStorageAccount(this IAzureContext context, IStorageServiceProvider provider)
{
if (context != null)
{
var storageConnectionString = context.GetCurrentStorageAccountConnectionString();
try
{
return
CloudStorageAccount.Parse(storageConnectionString);
}
catch
{
var service = provider.GetStorageService(storageConnectionString, null);
return service.GetCloudStorageAccount();
}
}

return null;
}

/// <summary>
/// Get a CloudStorageAccount client for the storage account represented by this context
/// </summary>
/// <param name="context">The storage context for the storage account</param>
/// <returns>A CloudStorageAccount client for storage data plane tasks</returns>
public static CloudStorageAccount GetCloudStorageAccount(this IStorageContext context)
{
CloudStorageAccount result = null;
CloudStorageAccount.TryParse(context.ConnectionString, out result);
return result;
}

/// <summary>
/// Get a CloudStorageAccount client for the storage account represented by this service
/// </summary>
/// <param name="service">The storage service</param>
/// <returns>A CloudStorageAccount client for storage data plane tasks</returns>
public static CloudStorageAccount GetCloudStorageAccount( this IStorageService service)
{
return new CloudStorageAccount(new StorageCredentials(service.Name, service.AuthenticationKeys.First()),
new StorageUri(service.BlobEndpoint), new StorageUri(service.QueueEndpoint),
new StorageUri(service.TableEndpoint), new StorageUri(service.FileEndpoint));
}

/// <summary>
/// Get a storage context client for the storage account represented by this service
/// </summary>
/// <param name="service">The storage service</param>
/// <returns>A CloudStorageAccount client for storage data plane tasks</returns>
public static IStorageContext GetStorageContext(this IStorageService service)
{
return new AzureStorageContext(new CloudStorageAccount(new StorageCredentials(service.Name, service.AuthenticationKeys.First()),
new StorageUri(service.BlobEndpoint), new StorageUri(service.QueueEndpoint),
new StorageUri(service.TableEndpoint), new StorageUri(service.FileEndpoint)));
}


/// <summary>
/// Get a CloudStorageAccount client for the given storage service using the given storage service provider
/// </summary>
/// <param name="provider">The storage service provider to retrieve storage service details</param>
/// <param name="accountName">The storage accoutn name</param>
/// <returns>A CloudStorageAccount client for storage data plane tasks</returns>
public static CloudStorageAccount GetCloudStorageAccount(this IStorageServiceProvider provider, string accountName, string resourceGroupName = null)
{
#if DEBUG
if (TestMockSupport.RunningMocked)
{
return new CloudStorageAccount(new StorageCredentials(accountName,
Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()))), true);
}
#endif
return provider.GetStorageService(accountName, resourceGroupName).GetCloudStorageAccount();
}



/// <summary>
/// Get a CloudStorageAccount client for the current storage service using the given storage service provider
/// </summary>
/// <param name="context">The current Azure context.</param>
/// <param name="provider">The storage service provider to retrieve storage service details</param>
/// <returns>A CloudStorageAccount client for storage data plane tasks</returns>
public static CloudStorageAccount GetCloudStorageAccount(this IAzureContext context, IStorageServiceProvider provider)
{
CloudStorageAccount account;
var storageConnectionString = context.GetCurrentStorageAccountConnectionString();
if(!CloudStorageAccount.TryParse(storageConnectionString, out account))
{
if (null == provider)
{
throw new ArgumentNullException("provider");
}

account = provider.GetCloudStorageAccount(storageConnectionString);
}

return account;
}

}
}
Loading