@ -28,44 +28,46 @@ func loadGetMetricDataOutputsFromFile(filePath string) ([]*cloudwatch.GetMetricD
func TestCloudWatchResponseParser ( t * testing . T ) {
startTime := time . Now ( )
endTime := startTime . Add ( 2 * time . Hour )
t . Run ( "when aggregating response" , func ( t * testing . T ) {
getMetricDataOutputs , err := loadGetMetricDataOutputsFromFile ( "./test-data/multiple-outputs.json" )
t . Run ( "when aggregating multi-outputs response" , func ( t * testing . T ) {
getMetricDataOutputs , err := loadGetMetricDataOutputsFromFile ( "./test-data/multiple-outputs-query-a .json" )
require . NoError ( t , err )
aggregatedResponse := aggregateResponse ( getMetricDataOutputs )
t . Run ( "response for id a" , func ( t * testing . T ) {
idA := "a"
t . Run ( "should have two labels" , func ( t * testing . T ) {
assert . Len ( t , aggregatedResponse [ idA ] . Labels , 2 )
assert . Len ( t , aggregatedResponse [ idA ] . Metrics , 2 )
} )
t . Run ( "should have points for label1 taken from both getMetricDataOutputs" , func ( t * testing . T ) {
assert . Len ( t , aggregatedResponse [ idA ] . Metrics [ "label1" ] . Values , 10 )
} )
t . Run ( "should have statuscode 'Complete'" , func ( t * testing . T ) {
assert . Equal ( t , "Complete" , aggregatedResponse [ idA ] . StatusCode )
} )
t . Run ( "should have exceeded request limit" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxMetricsExceeded" ] )
} )
t . Run ( "should have exceeded query time range" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxQueryTimeRangeExceeded" ] )
} )
t . Run ( "should have exceeded max query results" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxQueryResultsExceeded" ] )
} )
t . Run ( "should have exceeded max matching results" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxMatchingResultsExceeded" ] )
} )
idA := "a"
t . Run ( "should have two labels" , func ( t * testing . T ) {
assert . Len ( t , aggregatedResponse [ idA ] . Labels , 2 )
assert . Len ( t , aggregatedResponse [ idA ] . Metrics , 2 )
} )
t . Run ( "response for id b" , func ( t * testing . T ) {
idB := "b"
t . Run ( "should have statuscode is 'Partial'" , func ( t * testing . T ) {
assert . Equal ( t , "Partial" , aggregatedResponse [ idB ] . StatusCode )
} )
t . Run ( "should have an arithmetic error and an error message" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idB ] . HasArithmeticError )
assert . Equal ( t , "One or more data-points have been dropped due to non-numeric values (NaN, -Infinite, +Infinite)" , aggregatedResponse [ idB ] . ArithmeticErrorMessage )
} )
t . Run ( "should have points for label1 taken from both getMetricDataOutputs" , func ( t * testing . T ) {
assert . Len ( t , aggregatedResponse [ idA ] . Metrics [ "label1" ] . Values , 10 )
} )
t . Run ( "should have statuscode 'Complete'" , func ( t * testing . T ) {
assert . Equal ( t , "Complete" , aggregatedResponse [ idA ] . StatusCode )
} )
t . Run ( "should have exceeded request limit" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxMetricsExceeded" ] )
} )
t . Run ( "should have exceeded query time range" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxQueryTimeRangeExceeded" ] )
} )
t . Run ( "should have exceeded max query results" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxQueryResultsExceeded" ] )
} )
t . Run ( "should have exceeded max matching results" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idA ] . ErrorCodes [ "MaxMatchingResultsExceeded" ] )
} )
} )
t . Run ( "when aggregating multi-outputs response with PartialData and ArithmeticError" , func ( t * testing . T ) {
getMetricDataOutputs , err := loadGetMetricDataOutputsFromFile ( "./test-data/multiple-outputs-query-b.json" )
require . NoError ( t , err )
aggregatedResponse := aggregateResponse ( getMetricDataOutputs )
idB := "b"
t . Run ( "should have statuscode is 'PartialData'" , func ( t * testing . T ) {
assert . Equal ( t , "PartialData" , aggregatedResponse [ idB ] . StatusCode )
} )
t . Run ( "should have an arithmetic error and an error message" , func ( t * testing . T ) {
assert . True ( t , aggregatedResponse [ idB ] . HasArithmeticError )
assert . Equal ( t , "One or more data-points have been dropped due to non-numeric values (NaN, -Infinite, +Infinite)" , aggregatedResponse [ idB ] . ArithmeticErrorMessage )
} )
} )