Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
0dd8d6f
first workings of powershell script, works with preparer as is, guida…
seankane-msft Nov 11, 2020
f871dff
applied to cosmos code as well, working well!
seankane-msft Nov 11, 2020
eff2421
adding cosmos changes, and dotenv import to show a .env
seankane-msft Nov 11, 2020
aa92dd4
starter code for a powershell preparer, works on a single test in sch…
seankane-msft Nov 12, 2020
daa316b
adding python-dotenv to dev reqs, recordings for schemareg with scrub…
seankane-msft Nov 12, 2020
b17de26
test resources for tables, powershell preparer
seankane-msft Nov 12, 2020
0151b36
making the same change for avroserializer
seankane-msft Nov 12, 2020
60e78cc
scrubbed recording for avroserializer
seankane-msft Nov 12, 2020
a0754d2
updating the pipeline with help of scott b, adding a step to run the …
seankane-msft Nov 12, 2020
748e078
removing dotenv stuff from the azuretestcase class, keeping it strict…
seankane-msft Nov 13, 2020
5719370
only setting tenant/client ids/secrets when in live mode, should prev…
seankane-msft Nov 13, 2020
23b9a2a
added python-dotenv to the tables dev reqs
seankane-msft Nov 13, 2020
b553152
adding a preparer to appconfig, adding for one file at the moment
seankane-msft Nov 13, 2020
bc715ec
Merge branch 'master' of https://github.com/Azure/azure-sdk-for-pytho…
seankane-msft Nov 14, 2020
750fc35
adding all the test files to use the preparer
seankane-msft Nov 14, 2020
cc0c0dd
fixing merge conflict
seankane-msft Nov 16, 2020
8b3f811
updating gitignore to ignore encrypted output files from New-TestReso…
seankane-msft Nov 16, 2020
a10b2e5
removing async code from sync tests
seankane-msft Nov 16, 2020
d7a4a0f
adding python-dotenv to the mgmt library too
seankane-msft Nov 16, 2020
52319f8
adding an empty aditionaltestargs
seankane-msft Nov 16, 2020
b258a5f
removing armtemplateparameters entirely
seankane-msft Nov 16, 2020
cc3a83a
changed python-dotenv to a try, except. will get feedback on that dec…
seankane-msft Nov 16, 2020
689c37f
removing python-dotenv changes, will go in a separate PR. removing ch…
seankane-msft Nov 17, 2020
b3d2b70
adding a post-script to remove test resources
seankane-msft Nov 17, 2020
ede47c3
addressing bens comments and removing unnecessary args
seankane-msft Nov 17, 2020
1fabc1f
changed the secret to avoid credscan from flagging the repo
seankane-msft Nov 18, 2020
5afcaf1
changing deploy/remove-test-resources.yml to only run if AllocateReso…
seankane-msft Nov 23, 2020
2fc0ff0
AllocateResourceGroup is false in schemareg
seankane-msft Nov 23, 2020
e8cc4dc
merge conflicts
seankane-msft Nov 23, 2020
34087fb
added a decorator for tests to remove statefulness from tests, new re…
seankane-msft Nov 24, 2020
c90b3e4
changing the import of SchemaRegPSPreparer to just PowerShellPreparer…
seankane-msft Nov 24, 2020
336af2e
removing commented out code now that everything passes
seankane-msft Nov 24, 2020
0a7027a
addressing bens comments
seankane-msft Nov 24, 2020
d47c8ee
removing double call on the appconfig preparer
seankane-msft Dec 1, 2020
ad47677
fixing merge conflicts
seankane-msft Dec 1, 2020
c651bfd
moved wrapper to a separate file, enabling re-use, removed unittest.T…
seankane-msft Dec 1, 2020
f4896dd
forgot to add wrapper files
seankane-msft Dec 1, 2020
f65a574
removing async portion of sync wrapper
seankane-msft Dec 2, 2020
559a0b7
adding a second parameter for explicitly deploying arm template, upda…
seankane-msft Dec 2, 2020
9141d80
addressing wes's comments regarding pipeline steps
seankane-msft Dec 2, 2020
622bf79
changing strings(true/false) to be boolean values
seankane-msft Dec 2, 2020
20de743
addressing all of laurents comments, trimming the init params in powe…
seankane-msft Dec 3, 2020
5dbf8ea
addressing merge conflicts
seankane-msft Dec 3, 2020
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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,4 @@ sdk/cosmos/azure-cosmos/test/test_config.py
.tmp_code_path/

# env vars
.env
.env
116 changes: 68 additions & 48 deletions eng/pipelines/templates/jobs/archetype-sdk-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ parameters:
InjectedPackages: ''
BuildDocs: true
JobName: Test
AllocateResourceGroup: 'true'
AllocateResourceGroup: true
DeployArmTemplate: false
TestTimeoutInMinutes: 120
Location: ''
Matrix:
Linux_Python35:
OSVmImage: 'ubuntu-18.04'
Expand All @@ -28,61 +30,79 @@ parameters:
Linux_Python39:
OSVmImage: 'ubuntu-18.04'
PythonVersion: '3.9'
CloudConfigurations:
AzureCloud:
SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources)

jobs:
- job: ${{ parameters.JobName }}
variables:
skipComponentGovernanceDetection: true
CoverageArg: --disablecov
- ${{ each cloudConfig in parameters.CloudConfigurations }}:
- job: ${{ parameters.JobName }}
variables:
skipComponentGovernanceDetection: true
CoverageArg: --disablecov

timeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
strategy:
maxParallel: ${{ parameters.MaxParallel }}
matrix: ${{ parameters.Matrix }}
continueOnError: false
timeoutInMinutes: ${{ parameters.TestTimeoutInMinutes }}
strategy:
maxParallel: ${{ parameters.MaxParallel }}
matrix: ${{ parameters.Matrix }}
continueOnError: false

pool:
vmImage: $(OSVmImage)
pool:
vmImage: $(OSVmImage)

steps:
- template: /eng/common/pipelines/templates/steps/bypass-local-dns.yml
steps:
- template: /eng/common/pipelines/templates/steps/bypass-local-dns.yml

- ${{ if eq(parameters['AllocateResourceGroup'], 'true') }}:
- pwsh: |
$BaseName = 't' + (New-Guid).ToString('n').Substring(0, 16)
$RgName = "rg-${{ parameters.ServiceDirectory }}-$($BaseName)"
$ResourceGroupExpiration = (Get-Date).ToUniversalTime().AddHours(24).ToString("o")
Write-Host "Creating Resource Group: $($RgName)"
Write-Host "##vso[task.setvariable variable=AZURE_RESOURCEGROUP_NAME]$RgName"
- ${{ if eq(parameters['AllocateResourceGroup'], true) }}:
- pwsh: |
$BaseName = 't' + (New-Guid).ToString('n').Substring(0, 16)
$RgName = "rg-${{ parameters.ServiceDirectory }}-$($BaseName)"
$ResourceGroupExpiration = (Get-Date).ToUniversalTime().AddHours(24).ToString("o")
Write-Host "Creating Resource Group: $($RgName)"
Write-Host "##vso[task.setvariable variable=AZURE_RESOURCEGROUP_NAME]$RgName"

az login --service-principal -u $(provisioner-aad-id) -p $(provisioner-aad-secret) --tenant $(provisioner-aad-tenant)
az account set --subscription $(provisioner-subscription)
az login --service-principal -u $(provisioner-aad-id) -p $(provisioner-aad-secret) --tenant $(provisioner-aad-tenant)
az account set --subscription $(provisioner-subscription)

az group create --location westus2 --name $RgName --tags DeleteAfter=$ResourceGroupExpiration BuildId='$(Build.BuildId)' BuildJob='$(Agent.JobName)' BuildNumber='$(Build.BuildNumber)' BuildReason='$(Build.Reason)'
az group wait --created --resource-group $RgName
displayName: Create resource group and environment variable for tests
az group create --location westus2 --name $RgName --tags DeleteAfter=$ResourceGroupExpiration BuildId='$(Build.BuildId)' BuildJob='$(Agent.JobName)' BuildNumber='$(Build.BuildNumber)' BuildReason='$(Build.Reason)'
az group wait --created --resource-group $RgName
displayName: Create resource group and environment variable for tests

- template: ../steps/build-test.yml
parameters:
BuildTargetingString: ${{ parameters.BuildTargetingString }}
ServiceDirectory: ${{ parameters.ServiceDirectory }}
CoverageArg: $(CoverageArg)
EnvVars:
AZURE_RUN_MODE: 'Live' #Record, Playback
${{ insert }}: ${{ parameters.EnvVars }}
BeforeTestSteps: ${{ parameters.BeforeTestSteps }}
AfterTestSteps: ${{ parameters.AfterTestSteps }}
PythonVersion: $(PythonVersion)
OSVmImage: $(OSVmImage)
ToxTestEnv: "whl"
AdditionalTestArgs: ${{ parameters.AdditionalTestArgs }}
TestMarkArgument: ${{ parameters.TestMarkArgument }}
InjectedPackages: ${{ parameters.InjectedPackages }}
BuildDocs: ${{parameters.BuildDocs}}
# figure out what's up with the create resource group above
- ${{ if eq(parameters['DeployArmTemplate'], true) }}:
- template: ../../../common/TestResources/deploy-test-resources.yml
parameters:
Location: ${{ coalesce(parameters.Location, cloudConfig.value.Location) }}
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
SubscriptionConfiguration: ${{ cloudConfig.value.SubscriptionConfiguration }}
ArmTemplateParameters: ${{ coalesce(cloudConfig.value.ArmTemplateParameters, '@{}') }}

- ${{ if eq(parameters['AllocateResourceGroup'], 'true') }}:
- pwsh: |
az group delete --resource-group $env:AZURE_RESOURCEGROUP_NAME -y --no-wait
displayName: Delete resource group
condition: ne(variables['AZURE_RESOURCEGROUP_NAME'], '')
- template: ../steps/build-test.yml
parameters:
BuildTargetingString: ${{ parameters.BuildTargetingString }}
ServiceDirectory: ${{ parameters.ServiceDirectory }}
CoverageArg: $(CoverageArg)
EnvVars:
AZURE_RUN_MODE: 'Live' #Record, Playback
${{ insert }}: ${{ parameters.EnvVars }}
BeforeTestSteps: ${{ parameters.BeforeTestSteps }}
AfterTestSteps: ${{ parameters.AfterTestSteps }}
PythonVersion: $(PythonVersion)
OSVmImage: $(OSVmImage)
ToxTestEnv: "whl"
AdditionalTestArgs: ${{ parameters.AdditionalTestArgs }}
TestMarkArgument: ${{ parameters.TestMarkArgument }}
InjectedPackages: ${{ parameters.InjectedPackages }}
BuildDocs: ${{parameters.BuildDocs}}

- ${{ if eq(parameters['AllocateResourceGroup'], true) }}:
- pwsh: |
az group delete --resource-group $env:AZURE_RESOURCEGROUP_NAME -y --no-wait
displayName: Delete resource group
condition: ne(variables['AZURE_RESOURCEGROUP_NAME'], '')

- ${{ if eq(parameters['DeployArmTemplate'], true) }}:
- template: /eng/common/TestResources/remove-test-resources.yml
parameters:
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
SubscriptionConfiguration: ${{ cloudConfig.value.SubscriptionConfiguration }}
119 changes: 119 additions & 0 deletions sdk/appconfiguration/azure-appconfiguration/tests/async_wrapper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@

# -------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
# --------------------------------------------------------------------------
from devtools_testutils import PowerShellPreparer

from azure.appconfiguration import (
ResourceReadOnlyError,
ConfigurationSetting,
)
from azure.appconfiguration.aio import AzureAppConfigurationClient
from azure.core.exceptions import (
AzureError,
)
from consts import (
KEY,
LABEL,
TEST_VALUE,
TEST_CONTENT_TYPE,
LABEL_RESERVED_CHARS,
PAGE_SIZE,
KEY_UUID,
)
from async_proxy import AzureAppConfigurationClientProxy
import functools
import inspect

AppConfigPreparer = functools.partial(
PowerShellPreparer,
'appconfiguration',
appconfiguration_connection_string="Endpoint=https://fake_app_config.azconfig-test.io;Id=0-l4-s0:h5htBaY5Z1LwFz50bIQv;Secret=lamefakesecretlamefakesecretlamefakesecrett=",
appconfiguration_endpoint_string="https://fake_app_config.azconfig-test.io")

def _add_for_test(client, kv):
exist = bool(
list(
client.list_configuration_settings(
key_filter=kv.key, label_filter=kv.label
)
)
)
if exist:
_delete_from_test(client, kv.key, kv.label)
return client.add_configuration_setting(kv)

def _delete_from_test(client, key, label):
try:
client.delete_configuration_setting(key=key, label=label)
except AzureError:
logging.debug(
"Error occurred removing configuration setting %s %s during unit test"
% (key, label)
)

def trim_kwargs_from_test_function(fn, kwargs):
# the next function is the actual test function. the kwargs need to be trimmed so
# that parameters which are not required will not be passed to it.
if not getattr(fn, '__is_preparer', False):
try:
args, _, kw, _, _, _, _ = inspect.getfullargspec(fn)
except AttributeError:
args, _, kw, _ = inspect.getargspec(fn) # pylint: disable=deprecated-method
if kw is None:
args = set(args)
for key in [k for k in kwargs if k not in args]:
del kwargs[key]


def app_config_decorator(func, **kwargs):

@AppConfigPreparer()
def wrapper(*args, **kwargs):
appconfiguration_connection_string = kwargs.pop("appconfiguration_connection_string")
client = AzureAppConfigurationClient.from_connection_string(appconfiguration_connection_string)
client = AzureAppConfigurationClientProxy(client)

kwargs['client'] = client
kwargs['appconfiguration_connection_string'] = appconfiguration_connection_string

# Do setUp on client
test_config_setting = _add_for_test(
client,
ConfigurationSetting(
key=KEY,
label=LABEL,
value=TEST_VALUE,
content_type=TEST_CONTENT_TYPE,
tags={"tag1": "tag1", "tag2": "tag2"},
)
)
test_config_setting_no_label = _add_for_test(
client,
ConfigurationSetting(
key=KEY,
label=None,
value=TEST_VALUE,
content_type=TEST_CONTENT_TYPE,
tags={"tag1": "tag1", "tag2": "tag2"},
)
)
to_delete = [test_config_setting, test_config_setting_no_label]

kwargs['test_config_setting'] = test_config_setting
kwargs['test_config_setting_no_label'] = test_config_setting_no_label

trimmed_kwargs = {k:v for k, v in kwargs.items()}
trim_kwargs_from_test_function(func, trimmed_kwargs)

func(*args, **trimmed_kwargs)

# do tearDown on client
for item in to_delete:
client.delete_configuration_setting(
key=item.key, label=item.label
)

return wrapper
Loading