github.com/mweagle/Sparta@v1.15.0/archetype/archetype_test.go (about) 1 package archetype 2 3 import ( 4 "context" 5 "encoding/json" 6 "testing" 7 8 awsLambdaEvents "github.com/aws/aws-lambda-go/events" 9 sparta "github.com/mweagle/Sparta" 10 spartaTesting "github.com/mweagle/Sparta/testing" 11 gocf "github.com/mweagle/go-cloudformation" 12 ) 13 14 func TestReactorName(t *testing.T) { 15 reactor := func() { 16 17 } 18 testName := reactorName(reactor) 19 if testName == "" { 20 t.Fatalf("Failed to create reactor name") 21 } 22 t.Logf("Created reactor name: %s", testName) 23 testName = reactorName(nil) 24 if testName == "" { 25 t.Fatalf("Failed toc reate reactor name for nil arg") 26 } 27 t.Logf("Created reactor name: %s", testName) 28 } 29 30 type archetypeTest struct { 31 } 32 33 func (at *archetypeTest) OnS3Event(ctx context.Context, 34 event awsLambdaEvents.S3Event) (interface{}, error) { 35 return nil, nil 36 } 37 38 func (at *archetypeTest) OnSNSEvent(ctx context.Context, 39 snsEvent awsLambdaEvents.SNSEvent) (interface{}, error) { 40 return nil, nil 41 } 42 func (at *archetypeTest) OnCloudWatchMessage(ctx context.Context, 43 cwEvent awsLambdaEvents.CloudwatchLogsEvent) (interface{}, error) { 44 return nil, nil 45 } 46 47 func (at *archetypeTest) OnDynamoEvent(ctx context.Context, 48 dynamoEvent awsLambdaEvents.DynamoDBEvent) (interface{}, error) { 49 return nil, nil 50 } 51 52 func (at *archetypeTest) OnKinesisMessage(ctx context.Context, 53 kinesisEvent awsLambdaEvents.KinesisEvent) (interface{}, error) { 54 return nil, nil 55 } 56 57 func (at *archetypeTest) OnEventBridgeBroadcast(ctx context.Context, 58 msg json.RawMessage) (interface{}, error) { 59 return nil, nil 60 } 61 62 //////////////////////////////////////////////////////////////////////////////// 63 /* 64 ___ ____ 65 / __|__ / 66 \__ \|_ \ 67 |___/___/ 68 */ 69 //////////////////////////////////////////////////////////////////////////////// 70 func TestS3Archetype(t *testing.T) { 71 testStruct := &archetypeTest{} 72 73 lambdaFn, lambdaFnErr := NewS3Reactor(testStruct, 74 gocf.String("s3Bucket"), 75 nil) 76 if lambdaFnErr != nil { 77 t.Fatalf("Failed to instantiate S3Reactor: %s", lambdaFnErr.Error()) 78 } 79 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 80 81 lambdaFn, lambdaFnErr = NewS3Reactor(S3ReactorFunc(testStruct.OnS3Event), 82 gocf.String("s3Bucket"), 83 nil) 84 if lambdaFnErr != nil { 85 t.Fatalf("Failed to instantiate S3Reactor: %s", lambdaFnErr.Error()) 86 } 87 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 88 } 89 90 func TestS3ScopedArchetype(t *testing.T) { 91 testStruct := &archetypeTest{} 92 93 lambdaFn, lambdaFnErr := NewS3ScopedReactor(testStruct, 94 gocf.String("s3Bucket"), 95 "/input", 96 nil) 97 if lambdaFnErr != nil { 98 t.Fatalf("Failed to instantiate S3Reactor: %s", lambdaFnErr.Error()) 99 } 100 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 101 102 lambdaFn, lambdaFnErr = NewS3ScopedReactor(S3ReactorFunc(testStruct.OnS3Event), 103 gocf.String("s3Bucket"), 104 "/input", 105 nil) 106 if lambdaFnErr != nil { 107 t.Fatalf("Failed to instantiate S3Reactor: %s", lambdaFnErr.Error()) 108 } 109 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 110 } 111 112 //////////////////////////////////////////////////////////////////////////////// 113 /* 114 ___ _ _ ___ 115 / __| \| / __| 116 \__ \ .` \__ \ 117 |___/_|\_|___/ 118 */ 119 //////////////////////////////////////////////////////////////////////////////// 120 121 func TestSNSArchetype(t *testing.T) { 122 testStruct := &archetypeTest{} 123 124 lambdaFn, lambdaFnErr := NewSNSReactor(testStruct, 125 gocf.String("snsTopic"), 126 nil) 127 if lambdaFnErr != nil { 128 t.Fatalf("Failed to instantiate SNSReactor: %s", lambdaFnErr.Error()) 129 } 130 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 131 132 lambdaFn, lambdaFnErr = NewSNSReactor(SNSReactorFunc(testStruct.OnSNSEvent), 133 gocf.String("s3Bucket"), 134 nil) 135 if lambdaFnErr != nil { 136 t.Fatalf("Failed to instantiate SNSReactor: %s", lambdaFnErr.Error()) 137 } 138 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 139 140 } 141 142 //////////////////////////////////////////////////////////////////////////////// 143 /* 144 ___ ___ ___ 145 | \ _ _ _ _ __ _ _ __ ___| \| _ ) 146 | |) | || | ' \/ _` | ' \/ _ \ |) | _ \ 147 |___/ \_, |_||_\__,_|_|_|_\___/___/|___/ 148 |__/ 149 */ 150 //////////////////////////////////////////////////////////////////////////////// 151 152 func TestDynamoDBArchetype(t *testing.T) { 153 testStruct := &archetypeTest{} 154 155 lambdaFn, lambdaFnErr := NewDynamoDBReactor(testStruct, 156 gocf.String("arn:dynamo"), 157 "TRIM_HORIZON", 158 10, 159 nil) 160 if lambdaFnErr != nil { 161 t.Fatalf("Failed to instantiate DynamoDBReactor: %s", lambdaFnErr.Error()) 162 } 163 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 164 165 lambdaFn, lambdaFnErr = NewDynamoDBReactor(DynamoDBReactorFunc(testStruct.OnDynamoEvent), 166 gocf.String("arn:dynamo"), 167 "TRIM_HORIZON", 168 10, 169 nil) 170 if lambdaFnErr != nil { 171 t.Fatalf("Failed to instantiate DynamoDBReactor: %s", lambdaFnErr.Error()) 172 } 173 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 174 } 175 176 //////////////////////////////////////////////////////////////////////////////// 177 /* 178 _ ___ _ 179 | |/ (_)_ _ ___ __(_)___ 180 | ' <| | ' \/ -_|_-< (_-< 181 |_|\_\_|_||_\___/__/_/__/ 182 */ 183 //////////////////////////////////////////////////////////////////////////////// 184 func TestKinesisArchetype(t *testing.T) { 185 testStruct := &archetypeTest{} 186 187 lambdaFn, lambdaFnErr := NewKinesisReactor(testStruct, 188 gocf.String("arn:kinesis"), 189 "TRIM_HORIZON", 190 10, 191 nil) 192 if lambdaFnErr != nil { 193 t.Fatalf("Failed to instantiate KinesisReactor: %s", lambdaFnErr.Error()) 194 } 195 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 196 197 lambdaFn, lambdaFnErr = NewKinesisReactor(KinesisReactorFunc(testStruct.OnKinesisMessage), 198 gocf.String("arn:kinesis"), 199 "TRIM_HORIZON", 200 10, 201 nil) 202 if lambdaFnErr != nil { 203 t.Fatalf("Failed to instantiate KinesisReactor: %s", lambdaFnErr.Error()) 204 } 205 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 206 } 207 208 //////////////////////////////////////////////////////////////////////////////// 209 /* 210 ___ _ ___ __ _ _ 211 / __| |___ _ _ __| \ \ / /_ _| |_ __| |_ 212 | (__| / _ \ || / _` |\ \/\/ / _` | _/ _| ' \ 213 \___|_\___/\_,_\__,_| \_/\_/\__,_|\__\__|_||_| 214 */ 215 //////////////////////////////////////////////////////////////////////////////// 216 func TestCloudWatchEvented(t *testing.T) { 217 testStruct := &archetypeTest{} 218 219 lambdaFn, lambdaFnErr := NewCloudWatchEventedReactor(testStruct, 220 map[string]map[string]interface{}{ 221 "events": { 222 "source": []string{"aws.ec2"}, 223 "detail-type": []string{"EC2 Instance state change"}, 224 }}, 225 nil) 226 if lambdaFnErr != nil { 227 t.Fatalf("Failed to instantiate NewCloudWatchEventedReactor: %s", lambdaFnErr.Error()) 228 } 229 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 230 231 lambdaFn, lambdaFnErr = NewCloudWatchEventedReactor(CloudWatchReactorFunc(testStruct.OnCloudWatchMessage), 232 map[string]map[string]interface{}{ 233 "events": { 234 "source": []string{"aws.ec2"}, 235 "detail-type": []string{"EC2 Instance state change"}, 236 }}, 237 nil) 238 if lambdaFnErr != nil { 239 t.Fatalf("Failed to instantiate NewCloudWatchEventedReactor: %s", lambdaFnErr.Error()) 240 } 241 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 242 } 243 244 func TestCloudWatchScheduled(t *testing.T) { 245 testStruct := &archetypeTest{} 246 247 lambdaFn, lambdaFnErr := NewCloudWatchScheduledReactor(testStruct, 248 map[string]string{ 249 "every5Mins": "rate(5 minutes)", 250 }, 251 nil) 252 if lambdaFnErr != nil { 253 t.Fatalf("Failed to instantiate NewCloudWatchScheduledReactor: %s", lambdaFnErr.Error()) 254 } 255 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 256 257 lambdaFn, lambdaFnErr = NewCloudWatchScheduledReactor(CloudWatchReactorFunc(testStruct.OnCloudWatchMessage), 258 map[string]string{ 259 "every5Mins": "rate(5 minutes)", 260 }, 261 nil) 262 if lambdaFnErr != nil { 263 t.Fatalf("Failed to instantiate NewCloudWatchScheduledReactor: %s", lambdaFnErr.Error()) 264 } 265 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 266 } 267 268 //////////////////////////////////////////////////////////////////////////////// 269 /* 270 ___ _ ___ _ _ 271 | __|_ _____ _ _| |_| _ )_ _(_)__| |__ _ ___ 272 | _|\ V / -_) ' \ _| _ \ '_| / _` / _` / -_) 273 |___|\_/\___|_||_\__|___/_| |_\__,_\__, \___| 274 |___/ 275 */ 276 //////////////////////////////////////////////////////////////////////////////// 277 func TestEventBridgeScheduled(t *testing.T) { 278 testStruct := &archetypeTest{} 279 280 lambdaFn, lambdaFnErr := NewEventBridgeScheduledReactor(testStruct, 281 "rate(5 minutes)", 282 nil) 283 if lambdaFnErr != nil { 284 t.Fatalf("Failed to instantiate NewEventBridgeScheduledReactor: %s", lambdaFnErr.Error()) 285 } 286 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 287 288 lambdaFn, lambdaFnErr = NewEventBridgeScheduledReactor(EventBridgeReactorFunc(testStruct.OnEventBridgeBroadcast), 289 "rate(5 minutes)", 290 nil) 291 if lambdaFnErr != nil { 292 t.Fatalf("Failed to instantiate NewEventBridgeScheduledReactor: %s", lambdaFnErr.Error()) 293 } 294 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 295 } 296 297 func TestEventBridgeEvented(t *testing.T) { 298 testStruct := &archetypeTest{} 299 300 lambdaFn, lambdaFnErr := NewEventBridgeEventReactor(testStruct, 301 map[string]interface{}{ 302 "source": []string{"aws.ec2"}, 303 }, 304 nil) 305 if lambdaFnErr != nil { 306 t.Fatalf("Failed to instantiate NewEventBridgeEventReactor: %s", lambdaFnErr.Error()) 307 } 308 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 309 310 lambdaFn, lambdaFnErr = NewEventBridgeEventReactor(EventBridgeReactorFunc(testStruct.OnEventBridgeBroadcast), 311 map[string]interface{}{ 312 "source": []string{"aws.ec2"}, 313 }, 314 nil) 315 if lambdaFnErr != nil { 316 t.Fatalf("Failed to instantiate NewEventBridgeEventReactor: %s", lambdaFnErr.Error()) 317 } 318 spartaTesting.Provision(t, []*sparta.LambdaAWSInfo{lambdaFn}, nil) 319 }