diff --git a/azure-cli.pyproj b/azure-cli.pyproj
index f01790c96..f37c8c63d 100644
--- a/azure-cli.pyproj
+++ b/azure-cli.pyproj
@@ -42,6 +42,7 @@
+
@@ -79,7 +80,6 @@
-
@@ -94,12 +94,6 @@
X86
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/azure/cli/commands/storage.py b/src/azure/cli/commands/storage.py
index c968abe99..4388debe0 100644
--- a/src/azure/cli/commands/storage.py
+++ b/src/azure/cli/commands/storage.py
@@ -130,7 +130,7 @@ def create_account(args, unexpected): #pylint: disable=unused-argument
account_type,
_resolve_tags(args))
- return smc.storage_accounts.create(resource_group, account_name, params)
+ return smc.storage_accounts.create(resource_group, account_name, params)
@command('storage account set')
@description(L('Update storage account property (only one at a time).'))
@@ -605,15 +605,10 @@ def _get_file_service_client(args):
def _resolve_tags(args):
tag_string = args.get('tags')
- if tag_string:
- tags = dict()
- for tag in tag_string.split(';'):
- comps = tag.split('=', 1)
- key = comps[0]
- value = comps[1] if len(comps) > 1 else ''
- tags[key] = value
- else:
- tags = None
+ kv_tags = [x for x in tag_string.split(';') if '=' in x] # key-value tags
+ s_tags = [x for x in tag_string.split(';') if '=' not in x] # single value tags
+ tags = dict(x.split('=') for x in kv_tags)
+ tags.update(dict((x, '') for x in s_tags))
return tags
# TODO: Remove once these parameters are supported first-class by @option (task #116054675)
diff --git a/src/azure/cli/tests/command_specs/__init__.py b/src/azure/cli/tests/command_specs/__init__.py
index 8b7714386..db78a54a1 100644
--- a/src/azure/cli/tests/command_specs/__init__.py
+++ b/src/azure/cli/tests/command_specs/__init__.py
@@ -2,6 +2,7 @@ __all__ = [
'test_spec_network',
'test_spec_resource',
'test_spec_vm',
+ 'test_spec_account'
]
# Each test spec in this package can append to this variable to add test specs
diff --git a/src/azure/cli/tests/command_specs/test_spec_storage_account.py b/src/azure/cli/tests/command_specs/test_spec_storage_account.py
new file mode 100644
index 000000000..78fffaf76
--- /dev/null
+++ b/src/azure/cli/tests/command_specs/test_spec_storage_account.py
@@ -0,0 +1,407 @@
+spec = [
+ {
+ 'test_name': 'test_storage_account_list',
+ 'command': 'storage account list',
+ 'expected_result': """Account Type : Standard_LRS
+Creation Time : 2016-03-03T23:07:20.837674+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/default-applicationinsights-centralus/providers/Microsoft.Storage/storageAccounts/appinsightsstorage2016
+Last Geo Failover Time : None
+Location : centralus
+Name : appinsightsstorage2016
+Primary Location : centralus
+Provisioning State : Succeeded
+Resource Group : default-applicationinsights-centralus
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://appinsightsstorage2016.blob.core.windows.net/
+ File : https://appinsightsstorage2016.file.core.windows.net/
+ Queue : https://appinsightsstorage2016.queue.core.windows.net/
+ Table : https://appinsightsstorage2016.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-03-07T04:09:26.379536+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/ygvmgroup/providers/Microsoft.Storage/storageAccounts/cli0816b4e1a25171aa14573
+Last Geo Failover Time : None
+Location : westus
+Name : cli0816b4e1a25171aa14573
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : ygvmgroup
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://cli0816b4e1a25171aa14573.blob.core.windows.net/
+ File : https://cli0816b4e1a25171aa14573.file.core.windows.net/
+ Queue : https://cli0816b4e1a25171aa14573.queue.core.windows.net/
+ Table : https://cli0816b4e1a25171aa14573.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-03-07T04:18:40.989042+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/ygvmgroup/providers/Microsoft.Storage/storageAccounts/cli65f4f2b090a22ac614573
+Last Geo Failover Time : None
+Location : westus
+Name : cli65f4f2b090a22ac614573
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : ygvmgroup
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://cli65f4f2b090a22ac614573.blob.core.windows.net/
+ File : https://cli65f4f2b090a22ac614573.file.core.windows.net/
+ Queue : https://cli65f4f2b090a22ac614573.queue.core.windows.net/
+ Table : https://cli65f4f2b090a22ac614573.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-03-07T04:45:44.904553+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/ygvmgroup/providers/Microsoft.Storage/storageAccounts/clie22217d8c158bd9e14573
+Last Geo Failover Time : None
+Location : westus
+Name : clie22217d8c158bd9e14573
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : ygvmgroup
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clie22217d8c158bd9e14573.blob.core.windows.net/
+ File : https://clie22217d8c158bd9e14573.file.core.windows.net/
+ Queue : https://clie22217d8c158bd9e14573.queue.core.windows.net/
+ Table : https://clie22217d8c158bd9e14573.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_GRS
+Creation Time : 2016-01-20T23:24:46.225618+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/clutst40026/providers/Microsoft.Storage/storageAccounts/clutst20236sto
+Last Geo Failover Time : None
+Location : westus
+Name : clutst20236sto
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : clutst40026
+Secondary Endpoints : None
+Secondary Location : eastus
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clutst20236sto.blob.core.windows.net/
+ File : https://clutst20236sto.file.core.windows.net/
+ Queue : https://clutst20236sto.queue.core.windows.net/
+ Table : https://clutst20236sto.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_GRS
+Creation Time : 2016-01-21T02:32:09.401535+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/clutst41390/providers/Microsoft.Storage/storageAccounts/clutst24982sto
+Last Geo Failover Time : None
+Location : westus
+Name : clutst24982sto
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : clutst41390
+Secondary Endpoints : None
+Secondary Location : eastus
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clutst24982sto.blob.core.windows.net/
+ File : https://clutst24982sto.file.core.windows.net/
+ Queue : https://clutst24982sto.queue.core.windows.net/
+ Table : https://clutst24982sto.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_GRS
+Creation Time : 2016-01-20T23:11:54.956920+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/clutst74333/providers/Microsoft.Storage/storageAccounts/clutst68029sto
+Last Geo Failover Time : None
+Location : westus
+Name : clutst68029sto
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : clutst74333
+Secondary Endpoints : None
+Secondary Location : eastus
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clutst68029sto.blob.core.windows.net/
+ File : https://clutst68029sto.file.core.windows.net/
+ Queue : https://clutst68029sto.queue.core.windows.net/
+ Table : https://clutst68029sto.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_GRS
+Creation Time : 2016-01-24T04:30:40.942489+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/clutst86517/providers/Microsoft.Storage/storageAccounts/clutst74246sto
+Last Geo Failover Time : None
+Location : westus
+Name : clutst74246sto
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : clutst86517
+Secondary Endpoints : None
+Secondary Location : eastus
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clutst74246sto.blob.core.windows.net/
+ File : https://clutst74246sto.file.core.windows.net/
+ Queue : https://clutst74246sto.queue.core.windows.net/
+ Table : https://clutst74246sto.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_GRS
+Creation Time : 2016-01-20T23:06:56.384289+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/clutst29333/providers/Microsoft.Storage/storageAccounts/clutst79708sto
+Last Geo Failover Time : None
+Location : westus
+Name : clutst79708sto
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : clutst29333
+Secondary Endpoints : None
+Secondary Location : eastus
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://clutst79708sto.blob.core.windows.net/
+ File : https://clutst79708sto.file.core.windows.net/
+ Queue : https://clutst79708sto.queue.core.windows.net/
+ Table : https://clutst79708sto.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-01-27T19:19:44.825146+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/destanko-test1/providers/Microsoft.Storage/storageAccounts/destanko123
+Last Geo Failover Time : None
+Location : westus
+Name : destanko123
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : destanko-test1
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://destanko123.blob.core.windows.net/
+ File : https://destanko123.file.core.windows.net/
+ Queue : https://destanko123.queue.core.windows.net/
+ Table : https://destanko123.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_RAGRS
+Creation Time : 2016-03-05T00:25:04.704573+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/r1/providers/Microsoft.Storage/storageAccounts/stoga2016
+Last Geo Failover Time : None
+Location : centralus
+Name : stoga2016
+Primary Location : centralus
+Provisioning State : Succeeded
+Resource Group : r1
+Secondary Location : eastus2
+Status Of Primary : Available
+Status Of Secondary : Available
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://stoga2016.blob.core.windows.net/
+ File : https://stoga2016.file.core.windows.net/
+ Queue : https://stoga2016.queue.core.windows.net/
+ Table : https://stoga2016.table.core.windows.net/
+Secondary Endpoints :
+ Blob : https://stoga2016-secondary.blob.core.windows.net/
+ File : None
+ Queue : https://stoga2016-secondary.queue.core.windows.net/
+ Table : https://stoga2016-secondary.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-03-15T23:03:02.798406+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/travistestresourcegroup/providers/Microsoft.Storage/storageAccounts/travistestresourcegr3014
+Last Geo Failover Time : None
+Location : westus
+Name : travistestresourcegr3014
+Primary Location : westus
+Provisioning State : Succeeded
+Resource Group : travistestresourcegroup
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://travistestresourcegr3014.blob.core.windows.net/
+ File : https://travistestresourcegr3014.file.core.windows.net/
+ Queue : https://travistestresourcegr3014.queue.core.windows.net/
+ Table : https://travistestresourcegr3014.table.core.windows.net/
+Tags :
+ Magic : cat
+ Woot : doot
+
+Account Type : Standard_LRS
+Creation Time : 2016-02-29T12:20:49.272057+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/xplattestgvmdocker6705/providers/Microsoft.Storage/storageAccounts/xplatstdocker7379
+Last Geo Failover Time : None
+Location : eastus
+Name : xplatstdocker7379
+Primary Location : eastus
+Provisioning State : Succeeded
+Resource Group : xplattestgvmdocker6705
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://xplatstdocker7379.blob.core.windows.net/
+ File : https://xplatstdocker7379.file.core.windows.net/
+ Queue : https://xplatstdocker7379.queue.core.windows.net/
+ Table : https://xplatstdocker7379.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-02-18T16:05:59.465716+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/xplattestgvmdocker2951/providers/Microsoft.Storage/storageAccounts/xplatstdocker8501
+Last Geo Failover Time : None
+Location : eastus
+Name : xplatstdocker8501
+Primary Location : eastus
+Provisioning State : Succeeded
+Resource Group : xplattestgvmdocker2951
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://xplatstdocker8501.blob.core.windows.net/
+ File : https://xplatstdocker8501.file.core.windows.net/
+ Queue : https://xplatstdocker8501.queue.core.windows.net/
+ Table : https://xplatstdocker8501.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-02-29T08:05:22.187272+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/xplattestgextension5940/providers/Microsoft.Storage/storageAccounts/xplatstoragext2929
+Last Geo Failover Time : None
+Location : eastus
+Name : xplatstoragext2929
+Primary Location : eastus
+Provisioning State : Succeeded
+Resource Group : xplattestgextension5940
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://xplatstoragext2929.blob.core.windows.net/
+ File : https://xplatstoragext2929.file.core.windows.net/
+ Queue : https://xplatstoragext2929.queue.core.windows.net/
+ Table : https://xplatstoragext2929.table.core.windows.net/
+Tags :
+ None
+
+Account Type : Standard_LRS
+Creation Time : 2016-01-21T23:39:02.480290+00:00
+Custom Domain : None
+Id : /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/xplattestgextension9085/providers/Microsoft.Storage/storageAccounts/xplatstoragext4633
+Last Geo Failover Time : None
+Location : southeastasia
+Name : xplatstoragext4633
+Primary Location : southeastasia
+Provisioning State : Succeeded
+Resource Group : xplattestgextension9085
+Secondary Endpoints : None
+Secondary Location : None
+Status Of Primary : Available
+Status Of Secondary : None
+Type : Microsoft.Storage/storageAccounts
+Primary Endpoints :
+ Blob : https://xplatstoragext4633.blob.core.windows.net/
+ File : https://xplatstoragext4633.file.core.windows.net/
+ Queue : https://xplatstoragext4633.queue.core.windows.net/
+ Table : https://xplatstoragext4633.table.core.windows.net/
+Tags :
+ None
+
+
+"""
+ },
+ {
+ 'test_name': 'test_storage_account_usage',
+ 'command': 'storage account usage',
+ 'expected_result': """Current Value : 16
+Limit : 100
+Unit : Count
+Name :
+ Localized Value : Storage Accounts
+ Value : StorageAccounts
+
+
+"""
+ },
+ {
+ 'test_name': 'test_storage_account_check',
+ 'command': 'storage account check-name-availability --name travisteststorageaccount',
+ 'expected_result': """Message : None
+Name Available : True
+Reason : None
+
+
+"""
+ }
+]
+
+from . import TEST_SPECS
+TEST_SPECS.append((locals()['__name__'], spec))
diff --git a/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_check.yaml b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_check.yaml
new file mode 100644
index 000000000..c94dc9f3f
--- /dev/null
+++ b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_check.yaml
@@ -0,0 +1,64 @@
+interactions:
+- request:
+ body: !!binary |
+ eyJuYW1lIjogInRyYXZpc3Rlc3RzdG9yYWdlYWNjb3VudCIsICJ0eXBlIjogIk1pY3Jvc29mdC5T
+ dG9yYWdlL3N0b3JhZ2VBY2NvdW50cyJ9
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Length: ['81']
+ Content-Type: [application/json; charset=utf-8]
+ User-Agent: [python/3.5.1 requests/2.9.1 msrest/0.1.3 msrest_azure/0.1.2 storagemanagementclient/2015-06-15
+ Azure-SDK-For-Python AZURECLI_0.0.1]
+ accept-language: [en-US]
+ method: POST
+ uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2015-06-15
+ response:
+ body: {string: '{"error":{"code":"BadGatewayConnection","message":"The network
+ connectivity issue encountered for ''Microsoft.Storage''; cannot fulfill the
+ request."}}'}
+ headers:
+ Cache-Control: [no-cache]
+ Connection: [close]
+ Content-Length: ['149']
+ Content-Type: [application/json; charset=utf-8]
+ Date: ['Thu, 24 Mar 2016 21:57:10 GMT']
+ Expires: ['-1']
+ Pragma: [no-cache]
+ Strict-Transport-Security: [max-age=31536000; includeSubDomains]
+ x-ms-failure-cause: [service]
+ status: {code: 502, message: Bad Gateway}
+- request:
+ body: !!binary |
+ eyJuYW1lIjogInRyYXZpc3Rlc3RzdG9yYWdlYWNjb3VudCIsICJ0eXBlIjogIk1pY3Jvc29mdC5T
+ dG9yYWdlL3N0b3JhZ2VBY2NvdW50cyJ9
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Length: ['81']
+ Content-Type: [application/json; charset=utf-8]
+ User-Agent: [python/3.5.1 requests/2.9.1 msrest/0.1.3 msrest_azure/0.1.2 storagemanagementclient/2015-06-15
+ Azure-SDK-For-Python AZURECLI_0.0.1]
+ accept-language: [en-US]
+ method: POST
+ uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/checkNameAvailability?api-version=2015-06-15
+ response:
+ body:
+ string: !!binary |
+ H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl
+ VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8ts
+ kR9fZkWZTcr8o0dtvc5/SfL/AAeYVbAXAAAA
+ headers:
+ Cache-Control: [no-cache]
+ Content-Encoding: [gzip]
+ Content-Type: [application/json]
+ Date: ['Thu, 24 Mar 2016 21:57:10 GMT']
+ Expires: ['-1']
+ Pragma: [no-cache]
+ Server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0]
+ Strict-Transport-Security: [max-age=31536000; includeSubDomains]
+ Vary: [Accept-Encoding]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_list.yaml b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_list.yaml
new file mode 100644
index 000000000..ed5ca736a
--- /dev/null
+++ b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_list.yaml
@@ -0,0 +1,64 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Type: [application/json; charset=utf-8]
+ User-Agent: [python/3.5.1 requests/2.9.1 msrest/0.1.3 msrest_azure/0.1.2 storagemanagementclient/2015-06-15
+ Azure-SDK-For-Python AZURECLI_0.0.1]
+ accept-language: [en-US]
+ method: GET
+ uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/storageAccounts?api-version=2015-06-15
+ response:
+ body:
+ string: !!binary |
+ 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
+ /D/tStZTzS0AAA==
+ headers:
+ Cache-Control: [no-cache]
+ Content-Encoding: [gzip]
+ Content-Type: [application/json]
+ Date: ['Thu, 24 Mar 2016 21:57:15 GMT']
+ Expires: ['-1']
+ Pragma: [no-cache]
+ Server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0]
+ Strict-Transport-Security: [max-age=31536000; includeSubDomains]
+ Vary: [Accept-Encoding]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_usage.yaml b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_usage.yaml
new file mode 100644
index 000000000..ccbac7b4e
--- /dev/null
+++ b/src/azure/cli/tests/recordings/command_specs.test_spec_storage_account.test_test_storage_account_usage.yaml
@@ -0,0 +1,33 @@
+interactions:
+- request:
+ body: null
+ headers:
+ Accept: ['*/*']
+ Accept-Encoding: ['gzip, deflate']
+ Connection: [keep-alive]
+ Content-Type: [application/json; charset=utf-8]
+ User-Agent: [python/3.5.1 requests/2.9.1 msrest/0.1.3 msrest_azure/0.1.2 storagemanagementclient/2015-06-15
+ Azure-SDK-For-Python AZURECLI_0.0.1]
+ accept-language: [en-US]
+ method: GET
+ uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Storage/usages?api-version=2015-06-15
+ response:
+ body:
+ string: !!binary |
+ H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl
+ VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xb5yk
+ 6UeXWbnOP3qUfg9/pSl/iOej9bJo6fOPTqr1sv1oZD+frus6X7Y/qe/tfuq+KosFv7O7s+M+XGYL
+ tLOA6SPT50ev26rOLvLj6RSdNK4XalRW06wsfpDPTE+mdWqbm9a/RH7hH9//jZNf8v8A3pREK9oA
+ AAA=
+ headers:
+ Cache-Control: [no-cache]
+ Content-Encoding: [gzip]
+ Content-Type: [application/json]
+ Date: ['Thu, 24 Mar 2016 21:57:20 GMT']
+ Expires: ['-1']
+ Pragma: [no-cache]
+ Server: [Microsoft-Azure-Storage-Resource-Provider/1.0, Microsoft-HTTPAPI/2.0]
+ Strict-Transport-Security: [max-age=31536000; includeSubDomains]
+ Vary: [Accept-Encoding]
+ status: {code: 200, message: OK}
+version: 1
diff --git a/testall.bat b/testall.bat
new file mode 100644
index 000000000..b37c4e0a0
--- /dev/null
+++ b/testall.bat
@@ -0,0 +1,4 @@
+@echo off
+cd src
+python -m unittest discover -s azure\cli\tests
+cd..