Best Python code snippet using localstack_python
master.cfg
Source:master.cfg
1# -*- python -*-2# ex: set filetype=python:3import os4import boto35import subprocess6import json7from buildbot.plugins import *8from buildbot.www.hooks.github import GitHubEventHandler9from twisted.python import log10def get_default_environment(ssm_client, variable, default):11 value = os.environ.get(variable, default)12 if value.startswith("ssm://"):13 try:14 response = ssm_client.get_parameter(Name=value.replace("ssm://", ""), WithDecryption=True)15 parameter = response.get('Parameter', {})16 return parameter.get('Value', default)17 except:18 return default19 return value20class StrictHandler(GitHubEventHandler):21 def handle_pull_request(self, payload, event):22 number = payload['number']23 head_user_login = payload['pull_request']['head']['user']['login']24 author_association = payload['pull_request']['author_association']25 if (head_user_login == 'UnsafePointer' and author_association == 'OWNER'):26 log.msg("GitHub PR #{}, Processing: "27 "head commit correct user login and author association".format(number))28 return super().handle_pull_request(payload, event)29 log.msg("GitHub PR #{}, Ignoring: "30 "head commit wrong user login and author association".format(number))31 return [], 'git'32instance_identity = subprocess.check_output(['curl', '-s', 'http://169.254.169.254/latest/dynamic/instance-identity/document'])33identity_data = json.loads(instance_identity)34aws_region = identity_data['region']35ssm_client = boto3.client('ssm', region_name=aws_region)36c = BuildmasterConfig = {}37linux_worker_name = get_default_environment(ssm_client, "BUILDBOT_LINUX_WORKER_USERNAME", "example-worker-linux")38windows_worker_name = get_default_environment(ssm_client, "BUILDBOT_WINDOWS_WORKER_USERNAME", "example-worker-windows")39worker_password = get_default_environment(ssm_client, "BUILDBOT_WORKER_PASSWORD", "pass")40c['workers'] = []41c['protocols'] = {'pb': {'port': os.environ.get("BUILDBOT_WORKER_PORT", 9989)}}42c['change_source'] = []43pipelines = [44 {45 'project': 'ruby',46 'platform': 'linux',47 'workername': linux_worker_name,48 'command': './ci/linux.sh',49 'ami': get_default_environment(ssm_client, "BUILDBOT_LINUX_WORKER_AMI_ID", "not-a-sg-id"),50 'sgs': [get_default_environment(ssm_client, "BUILDBOT_ALLOW_SSH_SG", "not-a-sg-id")]51 },52 {53 'project' : 'ruby',54 'platform': 'windows',55 'workername': windows_worker_name,56 'command': 'call ./ci/windows.bat',57 'ami': get_default_environment(ssm_client, "BUILDBOT_WINDOWS_WORKER_AMI_ID", "not-a-sg-id"),58 'sgs': [get_default_environment(ssm_client, "BUILDBOT_ALLOW_SSH_SG", "not-a-sg-id"), get_default_environment(ssm_client, "BUILDBOT_ALLOW_RDP_SG", "not-a-sg-id")]59 },60 {61 'project': 'shinobu',62 'platform': 'linux',63 'workername': linux_worker_name,64 'command': './ci/linux.sh',65 'ami': get_default_environment(ssm_client, "BUILDBOT_LINUX_WORKER_AMI_ID", "not-a-sg-id"),66 'sgs': [get_default_environment(ssm_client, "BUILDBOT_ALLOW_SSH_SG", "not-a-sg-id")]67 },68 {69 'project' : 'shinobu',70 'platform': 'windows',71 'workername': windows_worker_name,72 'command': 'call ./ci/windows.bat',73 'ami': get_default_environment(ssm_client, "BUILDBOT_WINDOWS_WORKER_AMI_ID", "not-a-sg-id"),74 'sgs': [get_default_environment(ssm_client, "BUILDBOT_ALLOW_SSH_SG", "not-a-sg-id"), get_default_environment(ssm_client, "BUILDBOT_ALLOW_RDP_SG", "not-a-sg-id")]75 }76]77c['schedulers'] = []78c['builders'] = []79for pipeline in pipelines:80 workername = pipeline['workername']81 pipeline_name = "{}-{}".format(pipeline['project'], pipeline['platform'])82 c['workers'].append(worker.EC2LatentWorker(workername,83 worker_password,84 get_default_environment(ssm_client, "BUILDBOT_WORKER_INSTANCE_TYPE", "not-an-instance-type"),85 ami=pipeline['ami'],86 keypair_name=get_default_environment(ssm_client, "BUILDBOT_KEYPAIR_NAME", "not-a-keypair-name"),87 subnet_id=get_default_environment(ssm_client, "BUILDBOT_SUBNET", "not-a-subnet-id"),88 security_group_ids=pipeline['sgs'],89 build_wait_timeout=0,90 instance_profile_name=get_default_environment(ssm_client, "BUILDBOT_WORKERS_INSTANCE_PROFILE", "not-an-instance-profile-name")))91 c['schedulers'].append(schedulers.SingleBranchScheduler(name="webhook-pull-{}".format(pipeline_name),92 change_filter=util.ChangeFilter(category='pull', repository="https://github.com/UnsafePointer/{}".format(pipeline['project'])),93 treeStableTimer=None,94 fileIsImportant=None,95 builderNames=[pipeline_name]))96 c['schedulers'].append(schedulers.ForceScheduler(name="force-{}".format(pipeline_name),97 builderNames=[pipeline_name]))98 factory = util.BuildFactory()99 factory.addStep(steps.GitHub(repourl="http://github.com/UnsafePointer/{}.git".format(pipeline['project']),100 mode='full',101 submodules=True))102 factory.addStep(steps.ShellCommand(command=pipeline['command'],103 workdir="build"))104 if pipeline['platform'] == 'windows':105 factory.addStep(steps.ShellCommand(command=["call", "self-terminate.bat"],106 workdir="C:\\Users\\Administrator",107 alwaysRun=True))108 c['builders'].append(util.BuilderConfig(name=pipeline_name,109 workernames=[workername],110 factory=factory))111context = util.Interpolate("buildbot/%(prop:buildername)s")112gs = reporters.GitHubStatusPush(token=get_default_environment(ssm_client, "BUILDBOT_GITHUB_API_TOKEN", "not-a-real-token"),113 context=context,114 startDescription='Build started.',115 endDescription='Build done.')116c['services'] = []117c['services'].append(gs)118c['title'] = "UnsafePointer's emudev Buildbot"119c['titleURL'] = "https://github.com/UnsafePointer"120c['buildbotURL'] = get_default_environment(ssm_client, "BUILDBOT_WEB_URL", "http://localhost:8010/")121c['www'] = dict(port=int(get_default_environment(ssm_client, "BUILDBOT_WEB_PORT", "8010")),122 plugins=dict(waterfall_view={}, console_view={}),123 change_hook_dialects={'github': {124 'secret': get_default_environment(ssm_client, "BUILDBOT_GITHUB_HOOK_SECRET", "not-so-secret"),125 'strict': True,126 'class': StrictHandler127 }})128admin_username = get_default_environment(ssm_client, "BUILDBOT_ADMIN_USERNAME", "admin")129admin_password = get_default_environment(ssm_client, "BUILDBOT_ADMIN_PASSWORD", "admin")130c['www']['authz'] = util.Authz(131 allowRules = [132 util.AnyEndpointMatcher(role="admins")133 ],134 roleMatchers = [135 util.RolesFromUsername(roles=['admins'], usernames=[admin_username])136 ]137)138c['www']['auth'] = util.UserPasswordAuth([(admin_username, admin_password)])139c['db'] = {140 'db_url' : get_default_environment(ssm_client, "BUILDBOT_DB_URL", "sqlite://").format(**os.environ),...
test_authorizer.py
Source:test_authorizer.py
1import json2import pytest3import boto34import os5from moto import mock_ssm6@pytest.fixture(scope='function')7def aws_credentials():8 # Mocked AWS Credentials for moto, this is required 9 # as per their readme: https://github.com/spulec/moto10 os.environ['AWS_ACCESS_KEY_ID'] = 'testing'11 os.environ['AWS_SECRET_ACCESS_KEY'] = 'testing'12 os.environ['AWS_SECURITY_TOKEN'] = 'testing'13 os.environ['AWS_SESSION_TOKEN'] = 'testing'14 # Disable X-Ray for unit tests15 from aws_xray_sdk import global_sdk_config16 global_sdk_config.set_sdk_enabled(False)17@pytest.fixture(scope='function')18def ssm(aws_credentials):19 mock = mock_ssm()20 mock.start()21 # There is currently a bug on moto, this line is needed as a workaround22 # Ref: https://github.com/spulec/moto/issues/192623 # boto3.setup_default_session()24 ssm_client = boto3.client('ssm', 'us-west-2')25 token_name = "TEST_TOKEN"26 token_value = "TEST_VALUE"27 response = ssm_client.put_parameter(28 Name=token_name, Description="A test parameter", Value=token_value, Type="SecureString"29 )30 yield (ssm_client, token_name, token_value)31 mock.stop()32def test_get_auth_token_success(ssm):33 ssm_client, tname, tvalue = ssm34 # Local imports are also recommended as per moto35 # Ref: https://github.com/spulec/moto#what-about-those-pesky-imports36 from functions import authorizer37 # We have already created a test token, now attempt to retrieve it38 auth_token = authorizer.get_auth_token(ssm_client, tname)39 assert auth_token == tvalue40def test_get_auth_token_failure(ssm):41 ssm_client, tname, tvalue = ssm42 invalid_tvalue = "INVALID"43 # Local imports are also recommended as per moto44 # Ref: https://github.com/spulec/moto#what-about-those-pesky-imports45 from functions import authorizer46 # We have already created a test token, now attempt to retrieve it47 auth_token = authorizer.get_auth_token(ssm_client, invalid_tvalue)48 assert auth_token is False49def test_generate_policy():50 from functions import authorizer51 test_principalId = "test-principal"52 test_effect_allow = "Allow"53 test_effect_deny = "Deny"54 test_resource = "arn:aws:execute-api:test-region:test-account:test-resource"55 allow_response = authorizer.generate_policy(56 test_principalId,57 test_effect_allow,58 test_resource59 )60 assert type(allow_response) is dict61 assert allow_response['principalId'] == test_principalId62 assert type(allow_response['policyDocument']) is dict63 assert allow_response['policyDocument']['Version'] == '2012-10-17'64 assert type(allow_response['policyDocument']['Statement']) is list65 assert allow_response['policyDocument']['Statement'][0]['Action'] == 'execute-api:Invoke'66 assert allow_response['policyDocument']['Statement'][0]['Effect'] == 'Allow'67 assert allow_response['policyDocument']['Statement'][0]['Resource'] == test_resource68 deny_response = authorizer.generate_policy(69 test_principalId,70 test_effect_deny,71 test_resource72 )73 assert type(deny_response) is dict74 assert deny_response['principalId'] == test_principalId75 assert type(deny_response['policyDocument']) is dict76 assert deny_response['policyDocument']['Version'] == '2012-10-17'77 assert type(deny_response['policyDocument']['Statement']) is list78 assert deny_response['policyDocument']['Statement'][0]['Action'] == 'execute-api:Invoke'79 assert deny_response['policyDocument']['Statement'][0]['Effect'] == 'Deny'80 assert deny_response['policyDocument']['Statement'][0]['Resource'] == test_resource81def test_validate_token(ssm):82 ssm_client, tname, tvalue = ssm83 invalid_tvalue = "INVALID"84 85 valid_test_event = {86 'type': "TOKEN",87 'authorizationToken': tvalue,88 'methodArn': "arn:aws:execute-api:test-region:test-account:test-resource"89 }90 from functions import authorizer91 allow_response = authorizer.validate_token(valid_test_event, "", ssm_client, tname)92 93 assert type(allow_response) is dict94 assert allow_response['principalId'] == 'webhook_service'95 assert type(allow_response['policyDocument']) is dict96 assert allow_response['policyDocument']['Version'] == '2012-10-17'97 assert type(allow_response['policyDocument']['Statement']) is list98 assert allow_response['policyDocument']['Statement'][0]['Action'] == 'execute-api:Invoke'99 assert allow_response['policyDocument']['Statement'][0]['Effect'] == 'Allow'100 assert allow_response['policyDocument']['Statement'][0]['Resource'] == valid_test_event['methodArn']101 invalid_test_event = {102 'type': "TOKEN",103 'authorizationToken': invalid_tvalue,104 'methodArn': "arn:aws:execute-api:test-region:test-account:test-resource"105 }106 deny_response = authorizer.validate_token(invalid_test_event, "", ssm_client, tname)107 assert type(deny_response) is dict108 assert deny_response['principalId'] == 'webhook_service'109 assert type(deny_response['policyDocument']) is dict110 assert deny_response['policyDocument']['Version'] == '2012-10-17'111 assert type(deny_response['policyDocument']['Statement']) is list112 assert deny_response['policyDocument']['Statement'][0]['Action'] == 'execute-api:Invoke'113 assert deny_response['policyDocument']['Statement'][0]['Effect'] == 'Deny'114 assert deny_response['policyDocument']['Statement'][0]['Resource'] == invalid_test_event['methodArn']115 incomplete_test_event = {116 "type":"TOKEN",117 "methodArn":"arn:aws:execute-api:test-region:test-account:test-resource"118 }119 response_403 = authorizer.validate_token(incomplete_test_event, "", ssm_client, tname)120 assert type(response_403) is dict...
test_ssm.py
Source:test_ssm.py
1import unittest2from localstack.utils.aws import aws_stack3class SSMTest(unittest.TestCase):4 def test_describe_parameters(self):5 ssm_client = aws_stack.connect_to_service('ssm')6 response = ssm_client.describe_parameters()7 assert 'Parameters' in response8 assert isinstance(response['Parameters'], list)9 def test_put_parameters(self):10 ssm_client = aws_stack.connect_to_service('ssm')11 ssm_client.put_parameter(12 Name='test_put',13 Description='test',14 Value='1',15 Type='String',16 )17 response = ssm_client.get_parameters(18 Names=['test_put'],19 )20 assert 'Parameters' in response21 assert len(response['Parameters']) > 022 assert response['Parameters'][0]['Name'] == 'test_put'...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!