2025-02-20 - Integration Test examples
Jump to navigation
Jump to search
Service - Integration Test Config
Overview
- The example of propeerties in resources.json, events.json and tests.json for upload to S3 bucket
- Integration Test Config for config of each property in these files
resources.json
{
"Lambda":{
"{FunctionNameHdrSqs}":{
"localLacation":"/src/FunctionNameHdrSqs.js",
"localHandler":"main",
"functionName":"FunctionNameHdrSqs" // FunctionName is full name of function after deploy
},
"ProcessComplexFilterHdrSqs":{
"localLacation":"/src/ProcessComplexFilterHdrSqs.js",
"localHandler":"main",
"functionName":"ProcessComplexFilterHdrSqs"
},
...
},
"Dynamodb": {
"filterMain":{
"tableName":"filterMain"
},
"tableNameBB":{
"tableName":"tableNameBB"
},
...
}
}
events.json
// Layout of file events.json
{
input:{},
output:{},
dynamodb:{}
}
// An example of naming an eventTag for each event
{
"Complexfilter_ProcessComplexfilter_logical_basic": {}, // for input
"Output_Complexfilter_ProcessComplexfilter_logical_basic": {}, // for output
"Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain": {} // for dynamodb
}
- "Complexfilter_ProcessComplexfilter_logical_basic" is called inputEventTag
- for outputEventTag is Output_{inputEvenTag}
- eg. "Output_Complexfilter_ProcessComplexfilter_logical_basic"
- for dynamodb is {inputEventTag}__dynamodb_{action}_{tablename}
- eg. "Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain"
- {action} is only put or update, and in case of update must only test the last step of update
Sns/Sqs, Dsq and Invoke
// An example input and output event of Sns/Sqs, Dsq and Invoke
{
"Complexfilter_ProcessComplexfilter_logical_basic": {
"forStageMatching": true,
"properties": {
"propertyA": {
"forStageMatching": true,
"value": "valueProperty1",
},
"propertyB": {
"testValueMatches": false, // no child properties will be tested
"properties": {
"propertyB1": {
"value": "valuePropertyB1",
}
}
},
"propertyC": {
"eventValue": [
"valuePropertyC1",
"valuePropertyC2",
"valuePropertyC3",
]
}
},
// settings for Sns/Sqs
"snsSqsTrigger": true, // set when event is initial stage of Sns
"messageAttributes": { // optional
"forStageMatching": true,
"properties": {
"msgTag": { // require
"value": "msgTag"
},
"propertyD": {
"forStageMatching": true, // default: false, whether this property is used to match stage config during integration tests
"testValueMatches": false, // default: true, whether value of this property is checked when performing test
"value": "valuePropertyD"
}
}
}
// settings for Dsq
// DirectSqs set in HdrDsq if have messageAttributeValidatorSchema and required property in messageAttributes eg: messageTag
"DirectSqs": true, // set when event is initial stage of Dsq
"messageAttributes": { // optional
"messageTag": {
"DataType": "String",
"StringValue": "messageAttributes_is"
}
}
},
"Output_Complexfilter_ProcessComplexfilter_logical_basic": {
"forStageMatching": true,
"properties": {
"propertyA": {
"forStageMatching": true,
"value": "valueProperty1",
}
...
}
}
}
API
// An example input and output event of API
{
"LambdaFunctionHdrApi_input__pass_notTestAuthorizer": {
"forstageMatvhing": true,
"properties": {
"body": {
"properties": {
"propertyA": {
"testValueMatches": false,
"value": "valueProperty1",
},
"propertyB": {
"properties": {
"propertyB1": {
"value": "valuePropertyB1",
}
}
},
"propertyC": {
"eventValue": [
"valuePropertyC1",
"valuePropertyC2",
"valuePropertyC3",
]
},
...
}
}
}
},
"Output_LambdaFunctionHdrApi_input__pass_notTestAuthorizer": {
"properties": {
"body": {
"properties": {
"propertyA": {
"testValueMatches": false,
"value": "valueProperty1"
},
...
}
}
}
}
}
Dynamodb
// An example event of Dynamodb
{
{inputEventTag}__dynamodb_{action}_{tablename}: { // eg. "Complexfilter_ProcessComplexfilter_logical_basic__dynamodb_update_FilterMain"
"forStageMatching": true,
"properties": {
(property is update)...
},
"keyValues": {
{partitionKey}: "4865d2451a621cb7f71225cfabf2df4f98e20801 ",
{sortKey}: "cdb170690571df7522b3850920fce02507c077ee"
}
}
}
NoRetryError
// An example event of NoRetryError output
{
Output_{inputEvenTag}: { // eg. "Output_Complexfilter_ProcessComplexfilter_logical_basic"
"forStageMatching": true,
"properties": {
"errorMessage": {
"value": "Not found schema of {serviceTag:TestGraphHandler, objectType:notFoundObjType}"
}
}
}
}
tests.json
// An example test
[
{
"integrationTestTag": "test_S3_ByDev",
"productionSafe": false,
"errorIfStageUndefined": false,
"errorIfInvokeUndefined": false,
"stages": [
{
"initialStage": true,
"inputEventTag": "Complexfiter_ProcessComplexfiter_logical_basic",
"serviceName": "ComplexFilter",
"resourceType": "Lambda",
"resourceName": "ProcessComplexFilterHdrSqs",
"snsServiceName": "ComplexFilter", // if snsSqsTrigger = true but not set snsServiceName or snsTopic --> direct invoke
"snsTopic": "InProcessComplexFilter", // if snsSqsTrigger = true but not set snsServiceName or snsTopic --> direct invoke
"outputEventTag": "Output_Complexfiter_ProcessComplexfiter_logical_basic",
"BatchSqsMessages": true
// Settings if have test dynamodb
"dynamodbOutputEventIdentifiers": [
{
"serviceName": "ComplexFilter",
"resourceName": "FilterMain",
"eventTag": "Complexfiter_ProcessComplexfiter_logical_basic_dynamodb_update_FilterMain"
},
...
],
// Settings multiple stage for invoke
"invokes": [
{
"eventStageTag": "GraphHandler_GetNodeV2_NomalCase"
},
...
],
},
{
"eventStageTag": "GraphHandler_GetNodeV2_NomalCase" // require "eventStageTag" if have settings multiple stage for invoke
"inputEventTag": "SellOfferMgr_ProcessLogical_logical_integrationTesting_returnObject",
"serviceName": "SellOfferMgr",
"resourceType": "Lambda",
"resourceName": "ProcessLogicalHdrSqs",
"outputEventTag": "output_intTesting_ProcessLogical_logical_integrationTesting_returnObject",
},
...
]
},
...
]