Files
VSC/Go/another-http-check-master/check_test.go
T
claudio 368d6fafea Issue
Code backup
2026-05-10 16:59:01 +02:00

496 lines
9.9 KiB
Go

package main
import (
"fmt"
"strconv"
"strings"
"testing"
)
func TestHTTPCodes(t *testing.T) {
statusCodes := [4]int{200, 302, 404, 500}
for _, statusCode := range statusCodes {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: fmt.Sprintf("/status/%s", strconv.Itoa(statusCode)),
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, statusCode)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
}
func TestHTTPWrongCodes(t *testing.T) {
statusCodes := [4]int{200, 302, 404, 500}
for _, statusCode := range statusCodes {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: fmt.Sprintf("/status/%s", strconv.Itoa(statusCode)),
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, statusCode+1)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "CRITICAL") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_CRITICAL {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
}
func TestTimeout(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/delay/10",
Timeout: 5,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "CRITICAL") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_CRITICAL {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
if !strings.Contains(msg, "Timeout - No response recieved in") {
t.Errorf("Non-timeout message returned [URI: %s]", r.URI)
}
}
func TestTimeoutWarning(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/delay/10",
WarningTimeout: 5,
CriticalTimeout: 15,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "WARNING") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_WARNING {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
if !strings.Contains(msg, "Timeout - No response recieved in") {
t.Errorf("Non-timeout message returned [URI: %s]", r.URI)
}
}
func TestTimeoutCritical(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/delay/10",
WarningTimeout: 4,
CriticalTimeout: 8,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "CRITICAL") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_CRITICAL {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
if !strings.Contains(msg, "Timeout - No response recieved in") {
t.Errorf("Non-timeout message returned [URI: %s]", r.URI)
}
}
func TestBasicAuthSuccess(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/basic-auth/user/password",
Timeout: 30,
Verbose: false,
Authentication: Authentication{
Type: AUTH_BASIC,
User: "user",
Password: "password",
},
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestBasicAuthFail(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/basic-auth/user/password",
Timeout: 30,
Verbose: false,
Authentication: Authentication{
Type: AUTH_BASIC,
User: "user",
Password: "password_",
},
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "CRITICAL") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_CRITICAL {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestContainsTextOK(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/anything?foobar=baz",
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
BodyText: "foobar",
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestContainsTextFail(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/anything?foobar=baz",
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
BodyText: "loremipsum",
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "CRITICAL") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_CRITICAL {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestSSLOK(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/anything",
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
SSLCheck: SSLCheck{
Run: true,
DaysWarning: 20,
DaysCritical: 5,
},
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestSSLWarning(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/anything",
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
SSLCheck: SSLCheck{
Run: true,
DaysWarning: 10000,
DaysCritical: 5,
},
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "WARNING") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_WARNING {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestBasicAuthDetect(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/basic-auth/user/password",
Timeout: 30,
Verbose: false,
Authentication: Authentication{
Type: AUTH_BASIC,
User: "user",
Password: "password",
},
}
authCode := DetectAuthType(r)
if authCode != AUTH_BASIC {
t.Errorf("Basic auth - wrong auth type detected")
}
}
func TestNoneAuthDetect(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/status/200",
Timeout: 30,
Verbose: false,
}
authCode := DetectAuthType(r)
if authCode != AUTH_NONE {
t.Errorf("None auth - wrong auth type detected")
}
}
func TestUserAgent(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/headers",
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
BodyText: fmt.Sprintf("icinga-http-check/%s Go-http-client/%s", appVersion, goVersion),
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}
func TestFollowRedirects(t *testing.T) {
r := &Request{
Scheme: "https",
Host: "httpbin.org",
Port: 443,
URI: "/absolute-redirect/5",
FollowRedirects: true,
Timeout: 30,
Verbose: false,
}
var currrentStatusCodes []int
currrentStatusCodes = append(currrentStatusCodes, 200)
e := &Expected{
StatusCodes: currrentStatusCodes,
BodyText: fmt.Sprintf("icinga-http-check/%s Go-http-client/%s", appVersion, goVersion),
}
msg, code, err := Check(r, e)
if !strings.HasPrefix(msg, "OK") {
t.Errorf("Wrong message [URI: %s]", r.URI)
}
if code != EXIT_OK {
t.Errorf("Wrong exit code [URI: %s]", r.URI)
}
if err != nil {
t.Errorf("Returned error is not nil [URI: %s]", r.URI)
}
}