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  }