mirror of
https://github.com/TwiN/gatus.git
synced 2024-11-22 16:03:44 +01:00
205 lines
7.0 KiB
Go
205 lines
7.0 KiB
Go
package core
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestCondition_evaluateWithIp(t *testing.T) {
|
|
condition := Condition("[IP] == 127.0.0.1")
|
|
result := &Result{Ip: "127.0.0.1"}
|
|
condition.evaluate(result)
|
|
if !result.ConditionResults[0].Success {
|
|
t.Errorf("Condition '%s' should have been a success", condition)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithStatus(t *testing.T) {
|
|
condition := Condition("[STATUS] == 201")
|
|
result := &Result{HttpStatus: 201}
|
|
condition.evaluate(result)
|
|
if !result.ConditionResults[0].Success {
|
|
t.Errorf("Condition '%s' should have been a success", condition)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithStatusFailure(t *testing.T) {
|
|
condition := Condition("[STATUS] == 200")
|
|
result := &Result{HttpStatus: 500}
|
|
condition.evaluate(result)
|
|
if result.ConditionResults[0].Success {
|
|
t.Errorf("Condition '%s' should have been a failure", condition)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithStatusUsingLessThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithStatusFailureUsingLessThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithResponseTimeUsingLessThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithResponseTimeUsingGreaterThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithResponseTimeUsingGreaterThanOrEqualTo(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithResponseTimeUsingLessThanOrEqualTo(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBody(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPath(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPathComplex(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPathLongInt(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
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) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPathComplexIntFailureUsingGreaterThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPathComplexIntUsingLessThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
func TestCondition_evaluateWithBodyJsonPathComplexIntFailureUsingLessThan(t *testing.T) {
|
|
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)
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|