github.com/argoproj/argo-events@v1.9.1/sensors/triggers/aws-lambda/aws-lambda_test.go (about) 1 /* 2 Copyright 2020 BlackRock, Inc. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 package aws_lambda 17 18 import ( 19 "context" 20 "testing" 21 22 "github.com/aws/aws-sdk-go/service/lambda" 23 cloudevents "github.com/cloudevents/sdk-go/v2" 24 "github.com/stretchr/testify/assert" 25 corev1 "k8s.io/api/core/v1" 26 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 27 28 "github.com/argoproj/argo-events/common/logging" 29 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 30 ) 31 32 var sensorObjSparse = &v1alpha1.Sensor{ 33 ObjectMeta: metav1.ObjectMeta{ 34 Name: "fake-sensor", 35 Namespace: "fake", 36 }, 37 Spec: v1alpha1.SensorSpec{ 38 Triggers: []v1alpha1.Trigger{ 39 { 40 Template: &v1alpha1.TriggerTemplate{ 41 Name: "fake-trigger-sparse", 42 AWSLambda: &v1alpha1.AWSLambdaTrigger{ 43 FunctionName: "fake-function", 44 Region: "us-east", 45 }, 46 }, 47 }, 48 }, 49 }, 50 } 51 52 var sensorObjFull = &v1alpha1.Sensor{ 53 ObjectMeta: metav1.ObjectMeta{ 54 Name: "fake-sensor", 55 Namespace: "fake", 56 }, 57 Spec: v1alpha1.SensorSpec{ 58 Triggers: []v1alpha1.Trigger{ 59 { 60 Template: &v1alpha1.TriggerTemplate{ 61 Name: "fake-trigger-full", 62 AWSLambda: &v1alpha1.AWSLambdaTrigger{ 63 FunctionName: "fake-function", 64 AccessKey: &corev1.SecretKeySelector{ 65 LocalObjectReference: corev1.LocalObjectReference{ 66 Name: "fake-secret", 67 }, 68 Key: "accesskey", 69 }, 70 SecretKey: &corev1.SecretKeySelector{ 71 LocalObjectReference: corev1.LocalObjectReference{ 72 Name: "fake-secret", 73 }, 74 Key: "secretkey", 75 }, 76 Region: "us-east", 77 RoleARN: "arn:aws:iam::123456789012:role/fake-trigger-full", 78 Payload: []v1alpha1.TriggerParameter{ 79 { 80 Src: &v1alpha1.TriggerParameterSource{ 81 DependencyName: "fake-dependency", 82 Value: new(string), 83 }, 84 Dest: "metadata.label.value", 85 }, 86 }, 87 }, 88 }, 89 }, 90 }, 91 }, 92 } 93 94 func getAWSTriggers() []AWSLambdaTrigger { 95 return []AWSLambdaTrigger{ 96 { 97 LambdaClient: nil, 98 Sensor: sensorObjSparse.DeepCopy(), 99 Trigger: &sensorObjSparse.Spec.Triggers[0], 100 Logger: logging.NewArgoEventsLogger(), 101 }, 102 { 103 LambdaClient: nil, 104 Sensor: sensorObjFull.DeepCopy(), 105 Trigger: &sensorObjFull.Spec.Triggers[0], 106 Logger: logging.NewArgoEventsLogger(), 107 }, 108 } 109 } 110 111 func TestAWSLambdaTrigger_FetchResource(t *testing.T) { 112 triggers := getAWSTriggers() 113 for _, trigger := range triggers { 114 resource, err := trigger.FetchResource(context.TODO()) 115 assert.Nil(t, err) 116 assert.NotNil(t, resource) 117 118 at, ok := resource.(*v1alpha1.AWSLambdaTrigger) 119 assert.Nil(t, err) 120 assert.Equal(t, true, ok) 121 assert.Equal(t, "fake-function", at.FunctionName) 122 } 123 } 124 125 func TestAWSLambdaTrigger_ApplyResourceParameters(t *testing.T) { 126 triggers := getAWSTriggers() 127 for _, trigger := range triggers { 128 testEvents := map[string]*v1alpha1.Event{ 129 "fake-dependency": { 130 Context: &v1alpha1.EventContext{ 131 ID: "1", 132 Type: "webhook", 133 Source: "webhook-gateway", 134 DataContentType: "application/json", 135 SpecVersion: cloudevents.VersionV1, 136 Subject: "example-1", 137 }, 138 Data: []byte(`{"function": "real-function"}`), 139 }, 140 } 141 142 defaultValue := "default" 143 defaultRegion := "region" 144 145 trigger.Trigger.Template.AWSLambda.Parameters = []v1alpha1.TriggerParameter{ 146 { 147 Src: &v1alpha1.TriggerParameterSource{ 148 DependencyName: "fake-dependency", 149 DataKey: "function", 150 Value: &defaultValue, 151 }, 152 Dest: "functionName", 153 }, 154 { 155 Src: &v1alpha1.TriggerParameterSource{ 156 DependencyName: "fake-dependency", 157 DataKey: "region", 158 Value: &defaultRegion, 159 }, 160 Dest: "region", 161 }, 162 } 163 164 response, err := trigger.ApplyResourceParameters(testEvents, trigger.Trigger.Template.AWSLambda) 165 assert.Nil(t, err) 166 assert.NotNil(t, response) 167 168 updatedObj, ok := response.(*v1alpha1.AWSLambdaTrigger) 169 assert.Equal(t, true, ok) 170 assert.Equal(t, "real-function", updatedObj.FunctionName) 171 assert.Equal(t, "region", updatedObj.Region) 172 } 173 } 174 175 func TestAWSLambdaTrigger_ApplyPolicy(t *testing.T) { 176 triggers := getAWSTriggers() 177 for _, trigger := range triggers { 178 status := int64(200) 179 response := &lambda.InvokeOutput{ 180 StatusCode: &status, 181 } 182 trigger.Trigger.Policy = &v1alpha1.TriggerPolicy{ 183 Status: &v1alpha1.StatusPolicy{Allow: []int32{200, 300}}, 184 } 185 err := trigger.ApplyPolicy(context.TODO(), response) 186 assert.Nil(t, err) 187 } 188 }