mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
394 lines
8.0 KiB
Go
394 lines
8.0 KiB
Go
//go:build integration
|
|
// +build integration
|
|
|
|
/*
|
|
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
|
|
Copyright (C) ITsysCOM GmbH
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>
|
|
*/
|
|
|
|
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"log/syslog"
|
|
"net"
|
|
"runtime"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
testsSyslogLogger = []func(t *testing.T){
|
|
testEmergencyLogger,
|
|
testAlertLogger,
|
|
testCriticalLogger,
|
|
testErrorLogger,
|
|
testWarningLogger,
|
|
testNoticeLogger,
|
|
testInfoLogger,
|
|
testDebugLogger,
|
|
TestCloseLoggerSysLog,
|
|
}
|
|
)
|
|
|
|
type unixServer struct {
|
|
l net.Listener
|
|
buf *bytes.Buffer
|
|
path string
|
|
}
|
|
|
|
func newUnixServer(path string) (*unixServer, error) {
|
|
l, err := net.Listen("unix", path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &unixServer{
|
|
l: l,
|
|
buf: new(bytes.Buffer),
|
|
path: path,
|
|
}, nil
|
|
}
|
|
|
|
func (u *unixServer) Close() error {
|
|
return u.l.Close()
|
|
}
|
|
|
|
func (u *unixServer) serveConn(c net.Conn) error {
|
|
for {
|
|
buf := make([]byte, 512)
|
|
nr, err := c.Read(buf)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = u.buf.Write(buf[0:nr])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
func (u *unixServer) Serve() error {
|
|
for {
|
|
fd, err := u.l.Accept()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
go u.serveConn(fd)
|
|
}
|
|
}
|
|
|
|
func (u *unixServer) String() string {
|
|
return u.buf.String()
|
|
}
|
|
|
|
func TestLoggerSyslog(t *testing.T) {
|
|
for _, test := range testsSyslogLogger {
|
|
t.Run("Syslog_logger", test)
|
|
}
|
|
}
|
|
|
|
func testEmergencyLogger(t *testing.T) {
|
|
flPath := "/tmp/testEmergency2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_EMERG, "id_emergency")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
|
|
if err := newLogger.Emerg("emergency_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "emergency_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testAlertLogger(t *testing.T) {
|
|
flPath := "/tmp/testAlert2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_ALERT, "id_alert")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Alert("emergency_alert"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "emergency_alert"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testCriticalLogger(t *testing.T) {
|
|
flPath := "/tmp/testCritical2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_CRIT, "id_critical")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Crit("critical_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "critical_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testErrorLogger(t *testing.T) {
|
|
flPath := "/tmp/testError2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_ERR, "id_error")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Err("error_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "error_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testWarningLogger(t *testing.T) {
|
|
flPath := "/tmp/testWarning2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_WARNING, "id_warning")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Warning("warning_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := ""
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testNoticeLogger(t *testing.T) {
|
|
flPath := "/tmp/testNotice2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_NOTICE, "id_notice")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Notice("notice_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "notice_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testInfoLogger(t *testing.T) {
|
|
flPath := "/tmp/testInfo2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_NOTICE, "id_info")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Info("info_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "info_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func testDebugLogger(t *testing.T) {
|
|
flPath := "/tmp/testDebug2"
|
|
|
|
l, err := newUnixServer(flPath)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
go l.Serve()
|
|
|
|
writer, err := syslog.Dial("unix", flPath, syslog.LOG_NOTICE, "id_debug")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
newLogger := new(StdLogger)
|
|
newLogger.SetSyslog(writer)
|
|
newLogger.SetLogLevel(7)
|
|
|
|
if err := newLogger.Debug("debug_panic"); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if err := writer.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
runtime.Gosched()
|
|
time.Sleep(100 * time.Millisecond)
|
|
if err := l.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
expected := "debug_panic"
|
|
if rcv := l.String(); !strings.Contains(rcv, expected) {
|
|
t.Errorf("Expected %q, received %q", expected, rcv)
|
|
}
|
|
}
|
|
|
|
func TestCloseLoggerSysLog(t *testing.T) {
|
|
newLogger := &StdLogger{nodeID: EmptyString}
|
|
newWriter, err := syslog.New(0, "CGRates")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
x := newWriter
|
|
|
|
newLogger.SetSyslog(x)
|
|
if err := newLogger.Close(); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|