53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net"
|
|
"strings"
|
|
"syscall"
|
|
"testing"
|
|
)
|
|
|
|
func TestEnvironmentRejectsMissingConfigurationWithoutNetworking(t *testing.T) {
|
|
t.Setenv("DISPATCHER_ID", "")
|
|
t.Setenv("AGENT_ID", "")
|
|
for _, role := range []string{"agent", "dispatcher", "unknown"} {
|
|
got := environmentCheck(role)
|
|
if got.Success || got.MQConnected || got.ErrorClass == "" {
|
|
t.Fatalf("unexpected result: %+v", got)
|
|
}
|
|
}
|
|
}
|
|
func TestTransportFailureDistinguishesCertificateAndAvailability(t *testing.T) {
|
|
for _, test := range []struct {
|
|
err error
|
|
want string
|
|
}{
|
|
{fmt.Errorf("wrapped: %w", x509.UnknownAuthorityError{}), "tls_failed"},
|
|
{&tls.CertificateVerificationError{Err: x509.HostnameError{}}, "tls_failed"},
|
|
{&net.OpError{Op: "dial", Err: syscall.ECONNREFUSED}, "unavailable"},
|
|
{&net.DNSError{IsTimeout: true}, "unavailable"},
|
|
{errors.New("unclassified transport issue"), "transport_failed"},
|
|
} {
|
|
if got := transportFailure(test.err); got != test.want {
|
|
t.Fatalf("got %s want %s", got, test.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDiagnosticNeverSerializesErrorContents(t *testing.T) {
|
|
r := report{Phase: "sip"}
|
|
rejected(&r, errors.New("synthetic-sensitive-value"))
|
|
encoded, err := json.Marshal(r)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(string(encoded), "synthetic-sensitive-value") {
|
|
t.Fatal("diagnostic leaked error content")
|
|
}
|
|
}
|