Skip to content

Commit a9beee7

Browse files
authored
Merge pull request #2648 from cgchinmay/prow_infra
Generate ginkgo test binaries for running tests on Prow
2 parents 0ad294b + f99ca92 commit a9beee7

File tree

3 files changed

+95
-37
lines changed

3 files changed

+95
-37
lines changed

scripts/lib/common.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/bash
2+
3+
# Helper script used for running prow tests for aws-load-balancer-controller
4+
5+
SECONDS=0
6+
7+
# Set IP Family
8+
IP_FAMILY="${IP_FAMILY:-IPv4}"
9+
10+
echo "Running AWS Load Balancer Controller e2e tests with the following variables
11+
KUBE_CONFIG_PATH: $KUBE_CONFIG_PATH
12+
CLUSTER_NAME: $CLUSTER_NAME
13+
REGION: $REGION
14+
IP_FAMILY: $IP_FAMILY
15+
OS_OVERRIDE: $OS_OVERRIDE"
16+
17+
if [[ -z "${OS_OVERRIDE}" ]]; then
18+
OS_OVERRIDE=linux
19+
fi
20+
21+
if [[ -n "${ENDPOINT}" ]]; then
22+
ENDPOINT_FLAG="--endpoint $ENDPOINT"
23+
fi
24+
25+
if [[ -z "${SKIP_MAKE_TEST_BINARIES}" ]]; then
26+
echo "making ginkgo test binaries"
27+
(cd $SCRIPT_DIR/../test && make build-test-binaries)
28+
else
29+
echo "skipping making ginkgo test binaries"
30+
fi
31+
32+
# Request timesout in China Regions with default proxy
33+
if [[ $REGION == "cn-north-1" || $REGION == "cn-northwest-1" ]]; then
34+
go env -w GOPROXY=https://goproxy.cn,direct
35+
go env -w GOSUMDB=sum.golang.google.cn
36+
fi
37+
38+
GET_CLUSTER_INFO_CMD="aws eks describe-cluster --name $CLUSTER_NAME --region $REGION"
39+
40+
if [[ -z "${ENDPOINT}" ]]; then
41+
CLUSTER_INFO=$($GET_CLUSTER_INFO_CMD)
42+
else
43+
CLUSTER_INFO=$($GET_CLUSTER_INFO_CMD --endpoint $ENDPOINT)
44+
fi
45+
46+
VPC_ID=$(echo $CLUSTER_INFO | jq -r '.cluster.resourcesVpcConfig.vpcId')
47+
ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account')
48+
49+
echo "VPC ID: $VPC_ID"

test/e2e/run-e2e-test.sh renamed to scripts/run-e2e-test.sh

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44

55
set -e
66

7-
SECONDS=0
87
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
9-
echo "Running AWS Load Balancer Controller e2e tests with the following variables
10-
KUBE_CONFIG_PATH: $KUBE_CONFIG_PATH
11-
CLUSTER_NAME: $CLUSTER_NAME
12-
REGION: $REGION
13-
IP_FAMILY: ${IP_FAMILY:-"IPv4"}
14-
OS_OVERRIDE: $OS_OVERRIDE"
8+
GINKGO_TEST_BUILD="$SCRIPT_DIR/../test/build"
9+
10+
source "$SCRIPT_DIR"/lib/common.sh
1511

1612
function toggle_windows_scheduling(){
1713
schedule=$1
@@ -22,37 +18,18 @@ function toggle_windows_scheduling(){
2218
done
2319
}
2420

25-
if [[ -z "${OS_OVERRIDE}" ]]; then
26-
OS_OVERRIDE=linux
27-
fi
28-
29-
GET_CLUSTER_INFO_CMD="aws eks describe-cluster --name $CLUSTER_NAME --region $REGION"
30-
31-
if [[ -z "${ENDPOINT}" ]]; then
32-
CLUSTER_INFO=$($GET_CLUSTER_INFO_CMD)
33-
else
34-
CLUSTER_INFO=$($GET_CLUSTER_INFO_CMD --endpoint $ENDPOINT)
35-
fi
36-
3721
echo "Cordon off windows nodes"
3822
toggle_windows_scheduling "cordon"
3923

40-
VPC_ID=$(echo $CLUSTER_INFO | jq -r '.cluster.resourcesVpcConfig.vpcId')
41-
ACCOUNT_ID=$(aws sts get-caller-identity | jq -r '.Account')
42-
43-
echo "VPC ID: $VPC_ID"
44-
4524
eksctl utils associate-iam-oidc-provider \
4625
--region $REGION \
4726
--cluster $CLUSTER_NAME \
4827
--approve
4928

5029
echo "Creating AWSLoadbalancerController IAM Policy"
51-
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.1/docs/install/iam_policy.json
52-
5330
aws iam create-policy \
5431
--policy-name AWSLoadBalancerControllerIAMPolicy \
55-
--policy-document file://iam-policy.json || true
32+
--policy-document file://"$SCRIPT_DIR"/../docs/install/iam_policy.json || true
5633

5734
echo "Creating IAM serviceaccount"
5835
eksctl create iamserviceaccount \
@@ -74,16 +51,22 @@ kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/
7451
echo "Install aws-load-balancer-controller"
7552
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=$CLUSTER_NAME --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller --set region=$REGION --set vpcId=$VPC_ID
7653

54+
function run_ginkgo_test() {
55+
local focus=$1
56+
echo "Starting the ginkgo tests from generated ginkgo test binaries with focus: $focus"
57+
if [ "$IP_FAMILY" == "IPv4" ]; then
58+
(CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo $EXTRA_GINKGO_FLAGS --focus="$focus" -v --timeout 60m --fail-on-pending $GINKGO_TEST_BUILD/ingress.test -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
59+
(CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo $EXTRA_GINKGO_FLAGS --focus="$focus" -v --timeout 60m --fail-on-pending $GINKGO_TEST_BUILD/service.test -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
60+
elif [ "$IP_FAMILY" == "IPv6" ]; then
61+
(CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo $EXTRA_GINKGO_FLAGS --focus="$focus" --skip="instance" -v --timeout 60m --fail-on-pending $GINKGO_TEST_BUILD/ingress.test -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
62+
(CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo $EXTRA_GINKGO_FLAGS --focus="$focus" --skip="instance" -v --timeout 60m --fail-on-pending $GINKGO_TEST_BUILD/service.test -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
63+
else
64+
echo "Invalid IP_FAMILY input, choose from IPv4 or IPv6 only"
65+
fi
66+
}
67+
7768
#Start the test
78-
echo "Starting the ginkgo test suite"
79-
if [ "$IP_FAMILY" == "IPv4" ]; then
80-
(cd $SCRIPT_DIR && CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo -v -r --timeout 60m --fail-on-pending -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
81-
elif [ "$IP_FAMILY" == "IPv6" ]; then
82-
(cd $SCRIPT_DIR && CGO_ENABLED=0 GOOS=$OS_OVERRIDE ginkgo --skip="instance" -v -r --timeout 60m --fail-on-pending -- --kubeconfig=$KUBE_CONFIG_PATH --cluster-name=$CLUSTER_NAME --aws-region=$REGION --aws-vpc-id=$VPC_ID --ip-family=$IP_FAMILY || true)
83-
else
84-
echo "Invalid IP_FAMILY input, choose from IPv4 or IPv6 only"
85-
exit
86-
fi
69+
run_ginkgo_test
8770

8871
# tail=-1 is added so that no logs are truncated
8972
# https://github.com/kubernetes/kubectl/issues/812
@@ -102,4 +85,8 @@ kubectl delete -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller
10285
echo "Uncordon windows nodes"
10386
toggle_windows_scheduling "uncordon"
10487

105-
echo "Successfully finished the test suite $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds"
88+
# Need to do this as last step
89+
echo "Delete IAM Policy"
90+
aws iam delete-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy || true
91+
92+
echo "Successfully finished the test suite $(($SECONDS / 60)) minutes and $(($SECONDS % 60)) seconds"

test/Makefile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License"). You
4+
# may not use this file except in compliance with the License. A copy of
5+
# the License is located at
6+
#
7+
# http://aws.amazon.com/apache2.0/
8+
#
9+
# or in the "license" file accompanying this file. This file is
10+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11+
# ANY KIND, either express or implied. See the License for the specific
12+
# language governing permissions and limitations under the License.
13+
14+
MAKEFILE_PATH = $(dir $(realpath -s $(firstword $(MAKEFILE_LIST))))
15+
16+
export GOPROXY = direct
17+
18+
build-test-binaries:
19+
rm -rf ${MAKEFILE_PATH}build
20+
mkdir -p ${MAKEFILE_PATH}build
21+
find . -name '*suite_test.go' -type f | xargs dirname | xargs ginkgo build
22+
find ${MAKEFILE_PATH} -name "*.test" -print0 | xargs -0 -I {} mv {} ${MAKEFILE_PATH}build

0 commit comments

Comments
 (0)