2019-09-07 02:34:10 +02:00
package core
import (
"testing"
2020-04-10 22:34:20 +02:00
"time"
2019-09-07 02:34:10 +02:00
)
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithIp ( t * testing . T ) {
2019-12-04 23:27:27 +01:00
condition := Condition ( "[IP] == 127.0.0.1" )
2019-09-07 02:34:10 +02:00
result := & Result { Ip : "127.0.0.1" }
2020-04-07 00:58:13 +02:00
condition . evaluate ( result )
2019-09-12 22:15:42 +02:00
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
2019-09-07 02:34:10 +02:00
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithStatus ( t * testing . T ) {
2019-12-04 23:27:27 +01:00
condition := Condition ( "[STATUS] == 201" )
2019-09-07 02:34:10 +02:00
result := & Result { HttpStatus : 201 }
2020-04-07 00:58:13 +02:00
condition . evaluate ( result )
2019-09-12 22:15:42 +02:00
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithStatusFailure ( t * testing . T ) {
2019-12-04 23:27:27 +01:00
condition := Condition ( "[STATUS] == 200" )
2019-09-12 22:15:42 +02:00
result := & Result { HttpStatus : 500 }
2020-04-07 00:58:13 +02:00
condition . evaluate ( result )
2019-09-12 22:15:42 +02:00
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithStatusUsingLessThan ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[STATUS] < 300" )
result := & Result { HttpStatus : 201 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithStatusFailureUsingLessThan ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[STATUS] < 300" )
result := & Result { HttpStatus : 404 }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithResponseTimeUsingLessThan ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[RESPONSE_TIME] < 500" )
result := & Result { Duration : time . Millisecond * 50 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithResponseTimeUsingGreaterThan ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[RESPONSE_TIME] > 500" )
result := & Result { Duration : time . Millisecond * 750 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithResponseTimeUsingGreaterThanOrEqualTo ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[RESPONSE_TIME] >= 500" )
result := & Result { Duration : time . Millisecond * 500 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithResponseTimeUsingLessThanOrEqualTo ( t * testing . T ) {
2020-04-10 22:34:20 +02:00
condition := Condition ( "[RESPONSE_TIME] <= 500" )
result := & Result { Duration : time . Millisecond * 500 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBody ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY] == test" )
result := & Result { Body : [ ] byte ( "test" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPath ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].status == UP" )
result := & Result { Body : [ ] byte ( "{\"status\":\"UP\"}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathComplex ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.name == john" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 1, \"name\": \"john\"}}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-10-16 04:44:34 +02:00
func TestCondition_evaluateWithInvalidBodyJsonPathComplex ( t * testing . T ) {
expectedResolvedCondition := "[BODY].data.name (INVALID) == john"
condition := Condition ( "[BODY].data.name == john" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 1}}" ) }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure, because the path was invalid" , condition )
}
if result . ConditionResults [ 0 ] . Condition != expectedResolvedCondition {
t . Errorf ( "Condition '%s' should have resolved to '%s', but resolved to '%s' instead" , condition , expectedResolvedCondition , result . ConditionResults [ 0 ] . Condition )
}
}
2020-09-30 01:32:59 +02:00
func TestCondition_evaluateWithBodyJsonPathDoublePlaceholders ( t * testing . T ) {
condition := Condition ( "[BODY].user.firstName != [BODY].user.lastName" )
result := & Result { Body : [ ] byte ( "{\"user\": {\"firstName\": \"john\", \"lastName\": \"doe\"}}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithBodyJsonPathDoublePlaceholdersFailure ( t * testing . T ) {
condition := Condition ( "[BODY].user.firstName == [BODY].user.lastName" )
result := & Result { Body : [ ] byte ( "{\"user\": {\"firstName\": \"john\", \"lastName\": \"doe\"}}" ) }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathLongInt ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.id == 1" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 1}}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathComplexInt ( t * testing . T ) {
condition := Condition ( "[BODY].data[1].id == 2" )
result := & Result { Body : [ ] byte ( "{\"data\": [{\"id\": 1}, {\"id\": 2}, {\"id\": 3}]}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithBodyJsonPathComplexIntUsingGreaterThan ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.id > 0" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 1}}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathComplexIntFailureUsingGreaterThan ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.id > 5" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 1}}" ) }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathComplexIntUsingLessThan ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.id < 5" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 2}}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-04-15 01:20:00 +02:00
func TestCondition_evaluateWithBodyJsonPathComplexIntFailureUsingLessThan ( t * testing . T ) {
2020-04-11 04:56:38 +02:00
condition := Condition ( "[BODY].data.id < 5" )
result := & Result { Body : [ ] byte ( "{\"data\": {\"id\": 10}}" ) }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-08-13 03:42:13 +02:00
func TestCondition_evaluateWithBodySliceLength ( t * testing . T ) {
condition := Condition ( "len([BODY].data) == 3" )
result := & Result { Body : [ ] byte ( "{\"data\": [{\"id\": 1}, {\"id\": 2}, {\"id\": 3}]}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithBodyStringLength ( t * testing . T ) {
condition := Condition ( "len([BODY].name) == 8" )
result := & Result { Body : [ ] byte ( "{\"name\": \"john.doe\"}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
2020-10-02 01:57:11 +02:00
func TestCondition_evaluateWithBodyStringPattern ( t * testing . T ) {
condition := Condition ( "[BODY].name == pat(*ohn*)" )
result := & Result { Body : [ ] byte ( "{\"name\": \"john.doe\"}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithBodyStringPatternFailure ( t * testing . T ) {
condition := Condition ( "[BODY].name == pat(bob*)" )
result := & Result { Body : [ ] byte ( "{\"name\": \"john.doe\"}" ) }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
func TestCondition_evaluateWithBodyPatternFailure ( t * testing . T ) {
condition := Condition ( "[BODY] == pat(*john*)" )
result := & Result { Body : [ ] byte ( "{\"name\": \"john.doe\"}" ) }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithIPPattern ( t * testing . T ) {
condition := Condition ( "[IP] == pat(10.*)" )
result := & Result { Ip : "10.0.0.0" }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithIPPatternFailure ( t * testing . T ) {
condition := Condition ( "[IP] == pat(10.*)" )
result := & Result { Ip : "255.255.255.255" }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
func TestCondition_evaluateWithStatusPattern ( t * testing . T ) {
condition := Condition ( "[STATUS] == pat(4*)" )
result := & Result { HttpStatus : 404 }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithStatusPatternFailure ( t * testing . T ) {
condition := Condition ( "[STATUS] != pat(4*)" )
result := & Result { HttpStatus : 404 }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}
2020-10-05 01:49:02 +02:00
func TestCondition_evaluateWithConnected ( t * testing . T ) {
condition := Condition ( "[CONNECTED] == true" )
result := & Result { Connected : true }
condition . evaluate ( result )
if ! result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a success" , condition )
}
}
func TestCondition_evaluateWithConnectedFailure ( t * testing . T ) {
condition := Condition ( "[CONNECTED] == true" )
result := & Result { Connected : false }
condition . evaluate ( result )
if result . ConditionResults [ 0 ] . Success {
t . Errorf ( "Condition '%s' should have been a failure" , condition )
}
}