Skip to content

Commit 1677895

Browse files
Make it work
1 parent 1d979ff commit 1677895

File tree

10 files changed

+311
-73
lines changed

10 files changed

+311
-73
lines changed

Diff for: .evergreen/atlas

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../.mod/drivers-evergreen-tools/.evergreen/atlas

Diff for: .evergreen/config.yml

+72-9
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,8 @@ task_groups:
482482
script: |
483483
${PREPARE_SHELL}
484484
485+
echo "Setting up Atlas cluster"
486+
485487
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
486488
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
487489
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
@@ -492,6 +494,8 @@ task_groups:
492494
task_id="${task_id}" \
493495
execution="${execution}" \
494496
$DRIVERS_TOOLS/.evergreen/atlas/setup-atlas-cluster.sh
497+
498+
echo "MONGODB_URI=${MONGODB_URI}"
495499
- command: expansions.update
496500
params:
497501
file: src/atlas-expansion.yml
@@ -512,6 +516,51 @@ task_groups:
512516
$DRIVERS_TOOLS/.evergreen/atlas/teardown-atlas-cluster.sh
513517
tasks:
514518
- test-full-atlas-task
519+
520+
- name: test_aws_lambda_task_group
521+
setup_group_can_fail_task: true
522+
setup_group_timeout_secs: 1800 # 30 minutes
523+
setup_group:
524+
- func: fetch source
525+
- func: create expansions
526+
- command: shell.exec
527+
params:
528+
shell: "bash"
529+
working_dir: "src"
530+
script: |
531+
${PREPARE_SHELL}
532+
533+
echo "Setting up Atlas cluster"
534+
535+
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
536+
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
537+
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
538+
DRIVERS_ATLAS_LAMBDA_USER="${DRIVERS_ATLAS_LAMBDA_USER}" \
539+
DRIVERS_ATLAS_LAMBDA_PASSWORD="${DRIVERS_ATLAS_LAMBDA_PASSWORD}" \
540+
LAMBDA_STACK_NAME="dbx-ruby-lambda" \
541+
MONGODB_VERSION="7.0" \
542+
task_id="${task_id}" \
543+
execution="${execution}" \
544+
$DRIVERS_TOOLS/.evergreen/atlas/setup-atlas-cluster.sh
545+
- command: expansions.update
546+
params:
547+
file: src/atlas-expansion.yml
548+
teardown_group:
549+
- command: shell.exec
550+
params:
551+
shell: "bash"
552+
working_dir: "src"
553+
script: |
554+
${PREPARE_SHELL}
555+
556+
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
557+
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
558+
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
559+
LAMBDA_STACK_NAME="dbx-ruby-lambda" \
560+
task_id="${task_id}" \
561+
execution="${execution}" \
562+
$DRIVERS_TOOLS/.evergreen/atlas/teardown-atlas-cluster.sh
563+
tasks:
515564
- test-aws-lambda-deployed
516565

517566
- name: testgcpkms_task_group
@@ -706,21 +755,35 @@ tasks:
706755
707756
- name: "test-aws-lambda-deployed"
708757
commands:
709-
- func: "install dependencies"
710758
- command: ec2.assume_role
711759
params:
712760
role_arn: ${LAMBDA_AWS_ROLE_ARN}
713761
duration_seconds: 3600
714-
- command: subprocess.exec
762+
- command: shell.exec
763+
type: test
715764
params:
716-
working_dir: src
717-
binary: bash
718-
add_expansions_to_env: true
719-
args:
720-
- ${DRIVERS_TOOLS}/.evergreen/aws_lambda/run-deployed-lambda-aws-tests.sh
765+
working_dir: "src"
766+
shell: "bash"
767+
script: |
768+
${PREPARE_SHELL}
769+
export MONGODB_URI=${MONGODB_URI}
770+
.evergreen/run-tests-deployed-lambda.sh
721771
env:
722772
TEST_LAMBDA_DIRECTORY: ${PROJECT_DIRECTORY}/spec/faas/ruby-sam-app
723773
AWS_REGION: us-east-1
774+
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
775+
DRIVERS_TOOLS: ${DRIVERS_TOOLS}
776+
DRIVERS_ATLAS_PUBLIC_API_KEY: ${DRIVERS_ATLAS_PUBLIC_API_KEY}
777+
DRIVERS_ATLAS_PRIVATE_API_KEY: ${DRIVERS_ATLAS_PRIVATE_API_KEY}
778+
DRIVERS_ATLAS_LAMBDA_USER: ${DRIVERS_ATLAS_LAMBDA_USER}
779+
DRIVERS_ATLAS_LAMBDA_PASSWORD: ${DRIVERS_ATLAS_LAMBDA_PASSWORD}
780+
DRIVERS_ATLAS_GROUP_ID: ${DRIVERS_ATLAS_GROUP_ID}
781+
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
782+
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
783+
AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN}
784+
LAMBDA_STACK_NAME: "dbx-ruby-lambda"
785+
RVM_RUBY: ruby-3.2
786+
MONGODB_URI: ${MONGODB_URI}
724787
axes:
725788

726789
- id: preload
@@ -1712,7 +1775,7 @@ buildvariants:
17121775
- matrix_name: "aws-lambda"
17131776
matrix_spec:
17141777
ruby: "ruby-3.2"
1715-
os: rhel8
1778+
os: ubuntu2204
17161779
display_name: "AWS Lambda"
17171780
tasks:
1718-
- name: test-aws-lambda-deployed
1781+
- name: test_aws_lambda_task_group

Diff for: .evergreen/config/common.yml.erb

+70-7
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,8 @@ task_groups:
479479
script: |
480480
${PREPARE_SHELL}
481481

482+
echo "Setting up Atlas cluster"
483+
482484
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
483485
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
484486
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
@@ -489,6 +491,8 @@ task_groups:
489491
task_id="${task_id}" \
490492
execution="${execution}" \
491493
$DRIVERS_TOOLS/.evergreen/atlas/setup-atlas-cluster.sh
494+
495+
echo "MONGODB_URI=${MONGODB_URI}"
492496
- command: expansions.update
493497
params:
494498
file: src/atlas-expansion.yml
@@ -509,6 +513,51 @@ task_groups:
509513
$DRIVERS_TOOLS/.evergreen/atlas/teardown-atlas-cluster.sh
510514
tasks:
511515
- test-full-atlas-task
516+
517+
- name: test_aws_lambda_task_group
518+
setup_group_can_fail_task: true
519+
setup_group_timeout_secs: 1800 # 30 minutes
520+
setup_group:
521+
- func: fetch source
522+
- func: create expansions
523+
- command: shell.exec
524+
params:
525+
shell: "bash"
526+
working_dir: "src"
527+
script: |
528+
${PREPARE_SHELL}
529+
530+
echo "Setting up Atlas cluster"
531+
532+
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
533+
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
534+
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
535+
DRIVERS_ATLAS_LAMBDA_USER="${DRIVERS_ATLAS_LAMBDA_USER}" \
536+
DRIVERS_ATLAS_LAMBDA_PASSWORD="${DRIVERS_ATLAS_LAMBDA_PASSWORD}" \
537+
LAMBDA_STACK_NAME="dbx-ruby-lambda" \
538+
MONGODB_VERSION="7.0" \
539+
task_id="${task_id}" \
540+
execution="${execution}" \
541+
$DRIVERS_TOOLS/.evergreen/atlas/setup-atlas-cluster.sh
542+
- command: expansions.update
543+
params:
544+
file: src/atlas-expansion.yml
545+
teardown_group:
546+
- command: shell.exec
547+
params:
548+
shell: "bash"
549+
working_dir: "src"
550+
script: |
551+
${PREPARE_SHELL}
552+
553+
DRIVERS_ATLAS_PUBLIC_API_KEY="${DRIVERS_ATLAS_PUBLIC_API_KEY}" \
554+
DRIVERS_ATLAS_PRIVATE_API_KEY="${DRIVERS_ATLAS_PRIVATE_API_KEY}" \
555+
DRIVERS_ATLAS_GROUP_ID="${DRIVERS_ATLAS_GROUP_ID}" \
556+
LAMBDA_STACK_NAME="dbx-ruby-lambda" \
557+
task_id="${task_id}" \
558+
execution="${execution}" \
559+
$DRIVERS_TOOLS/.evergreen/atlas/teardown-atlas-cluster.sh
560+
tasks:
512561
- test-aws-lambda-deployed
513562

514563
- name: testgcpkms_task_group
@@ -703,18 +752,32 @@ tasks:
703752

704753
- name: "test-aws-lambda-deployed"
705754
commands:
706-
- func: "install dependencies"
707755
- command: ec2.assume_role
708756
params:
709757
role_arn: ${LAMBDA_AWS_ROLE_ARN}
710758
duration_seconds: 3600
711-
- command: subprocess.exec
759+
- command: shell.exec
760+
type: test
712761
params:
713-
working_dir: src
714-
binary: bash
715-
add_expansions_to_env: true
716-
args:
717-
- ${DRIVERS_TOOLS}/.evergreen/aws_lambda/run-deployed-lambda-aws-tests.sh
762+
working_dir: "src"
763+
shell: "bash"
764+
script: |
765+
${PREPARE_SHELL}
766+
export MONGODB_URI=${MONGODB_URI}
767+
.evergreen/run-tests-deployed-lambda.sh
718768
env:
719769
TEST_LAMBDA_DIRECTORY: ${PROJECT_DIRECTORY}/spec/faas/ruby-sam-app
720770
AWS_REGION: us-east-1
771+
PROJECT_DIRECTORY: ${PROJECT_DIRECTORY}
772+
DRIVERS_TOOLS: ${DRIVERS_TOOLS}
773+
DRIVERS_ATLAS_PUBLIC_API_KEY: ${DRIVERS_ATLAS_PUBLIC_API_KEY}
774+
DRIVERS_ATLAS_PRIVATE_API_KEY: ${DRIVERS_ATLAS_PRIVATE_API_KEY}
775+
DRIVERS_ATLAS_LAMBDA_USER: ${DRIVERS_ATLAS_LAMBDA_USER}
776+
DRIVERS_ATLAS_LAMBDA_PASSWORD: ${DRIVERS_ATLAS_LAMBDA_PASSWORD}
777+
DRIVERS_ATLAS_GROUP_ID: ${DRIVERS_ATLAS_GROUP_ID}
778+
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
779+
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
780+
AWS_SESSION_TOKEN: ${AWS_SESSION_TOKEN}
781+
LAMBDA_STACK_NAME: "dbx-ruby-lambda"
782+
RVM_RUBY: ruby-3.2
783+
MONGODB_URI: ${MONGODB_URI}

Diff for: .evergreen/config/standard.yml.erb

+2-2
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ buildvariants:
524524
- matrix_name: "aws-lambda"
525525
matrix_spec:
526526
ruby: <%= latest_ruby %>
527-
os: rhel8
527+
os: ubuntu2204
528528
display_name: "AWS Lambda"
529529
tasks:
530-
- name: test-aws-lambda-deployed
530+
- name: test_aws_lambda_task_group

Diff for: .evergreen/run-deployed-lambda-aws-tests.sh

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#!/bin/bash
2+
set -o errexit # Exit the script with error if any of the commands fail
3+
4+
# Explanation of required environment variables:
5+
#
6+
# TEST_LAMBDA_DIRECTORY: The root of the project's Lambda sam project.
7+
# DRIVERS_ATLAS_PUBLIC_API_KEY: The public Atlas key for the drivers org.
8+
# DRIVERS_ATLAS_PRIVATE_API_KEY: The private Atlas key for the drivers org.
9+
# DRIVERS_ATLAS_LAMBDA_USER: The user for the lambda cluster.
10+
# DRIVERS_ATLAS_LAMBDA_PASSWORD: The password for the user.
11+
# DRIVERS_ATLAS_GROUP_ID: The id of the individual projects under the drivers org, per language.
12+
# LAMBDA_STACK_NAME: The name of the stack on lambda "dbx-<language>-lambda"
13+
# AWS_REGION: The region for the function - generally us-east-1
14+
15+
VARLIST=(
16+
TEST_LAMBDA_DIRECTORY
17+
DRIVERS_ATLAS_PUBLIC_API_KEY
18+
DRIVERS_ATLAS_PRIVATE_API_KEY
19+
DRIVERS_ATLAS_LAMBDA_USER
20+
DRIVERS_ATLAS_LAMBDA_PASSWORD
21+
DRIVERS_ATLAS_GROUP_ID
22+
LAMBDA_STACK_NAME
23+
AWS_REGION
24+
)
25+
26+
# Ensure that all variables required to run the test are set, otherwise throw
27+
# an error.
28+
for VARNAME in ${VARLIST[*]}; do
29+
[[ -z "${!VARNAME}" ]] && echo "ERROR: $VARNAME not set" && exit 1;
30+
done
31+
32+
# Set up the common variables
33+
. `dirname "$0"`/atlas/setup-variables.sh
34+
35+
# Restarts the cluster's primary node.
36+
restart_cluster_primary ()
37+
{
38+
echo "Testing Atlas primary restart..."
39+
curl \
40+
--digest -u ${DRIVERS_ATLAS_PUBLIC_API_KEY}:${DRIVERS_ATLAS_PRIVATE_API_KEY} \
41+
-X POST \
42+
"${ATLAS_BASE_URL}/groups/${DRIVERS_ATLAS_GROUP_ID}/clusters/${FUNCTION_NAME}/restartPrimaries"
43+
}
44+
45+
# Deploys a lambda function to the set stack name.
46+
deploy_lambda_function ()
47+
{
48+
echo "Deploying Lambda function..."
49+
sam deploy \
50+
--stack-name "${FUNCTION_NAME}" \
51+
--capabilities CAPABILITY_IAM \
52+
--resolve-s3 \
53+
--parameter-overrides "MongoDbUri=${MONGODB_URI}" \
54+
--region ${AWS_REGION}
55+
}
56+
57+
# Get the ARN for the Lambda function we created and export it.
58+
get_lambda_function_arn ()
59+
{
60+
echo "Getting Lambda function ARN..."
61+
LAMBDA_FUNCTION_ARN=$(sam list stack-outputs \
62+
--stack-name ${FUNCTION_NAME} \
63+
--region ${AWS_REGION} \
64+
--output json | jq '.[] | select(.OutputKey == "MongoDBFunction") | .OutputValue' | tr -d '"'
65+
)
66+
echo "Lambda function ARN: $LAMBDA_FUNCTION_ARN"
67+
export LAMBDA_FUNCTION_ARN=$LAMBDA_FUNCTION_ARN
68+
}
69+
70+
delete_lambda_function ()
71+
{
72+
echo "Deleting Lambda Function..."
73+
sam delete --stack-name ${FUNCTION_NAME} --no-prompts --region us-east-1
74+
}
75+
76+
cleanup ()
77+
{
78+
delete_lambda_function
79+
}
80+
81+
trap cleanup EXIT SIGHUP
82+
83+
cd "${TEST_LAMBDA_DIRECTORY}"
84+
85+
sam build --use-container
86+
87+
deploy_lambda_function
88+
89+
get_lambda_function_arn
90+
91+
92+
check_lambda_output () {
93+
if grep -q FunctionError output.json
94+
then
95+
echo "Exiting due to FunctionError!"
96+
exit 1
97+
fi
98+
cat output.json | jq -r '.LogResult' | base64 --decode
99+
}
100+
101+
aws lambda invoke --function-name ${LAMBDA_FUNCTION_ARN} --log-type Tail lambda-invoke-standard.json > output.json
102+
cat lambda-invoke-standard.json
103+
check_lambda_output
104+
105+
echo "Sleeping 1 minute to build up some streaming protocol heartbeats..."
106+
sleep 60
107+
aws lambda invoke --function-name ${LAMBDA_FUNCTION_ARN} --log-type Tail lambda-invoke-frozen.json > output.json
108+
cat lambda-invoke-frozen.json
109+
check_lambda_output
110+
111+
restart_cluster_primary
112+
113+
echo "Sleeping 1 minute to build up some streaming protocol heartbeats..."
114+
sleep 60
115+
aws lambda invoke --function-name ${LAMBDA_FUNCTION_ARN} --log-type Tail lambda-invoke-outage.json > output.json
116+
cat lambda-invoke-outage.json
117+
check_lambda_output

Diff for: .evergreen/run-tests-deployed-lambda.sh

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/bash
2+
3+
set -ex
4+
5+
. `dirname "$0"`/../spec/shared/shlib/distro.sh
6+
. `dirname "$0"`/../spec/shared/shlib/set_env.sh
7+
. `dirname "$0"`/functions.sh
8+
9+
set_env_vars
10+
set_env_python
11+
set_env_ruby
12+
13+
echo MONGODB_URI: ${MONGODB_URI}
14+
15+
export MONGODB_URI=${MONGODB_URI}
16+
17+
. `dirname "$0"`/run-deployed-lambda-aws-tests.sh

Diff for: spec/faas/ruby-sam-app/mongodb/Gemfile

-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,3 @@ source "https://rubygems.org"
22

33
gem "httparty"
44
gem "mongo"
5-
6-
ruby '~> 3.2.0'

0 commit comments

Comments
 (0)