fleet/server/service/service_test.go

54 lines
1.3 KiB
Go

package service
import (
"context"
"encoding/json"
"io/ioutil"
"os"
"os/signal"
"syscall"
"testing"
"time"
"github.com/go-kit/kit/log"
"github.com/fleetdm/fleet/server/logging"
"github.com/stretchr/testify/require"
)
// TestRotateLoggerSIGHUP verifies that the osqueryd logfile is rotated by
// sending a SIGHUP signal.
func TestRotateLoggerSIGHUP(t *testing.T) {
ctx := context.Background()
filePrefix := "kolide-log-rotate-test"
f, err := ioutil.TempFile("/tmp", filePrefix)
require.Nil(t, err)
defer os.Remove(f.Name())
logFile, err := logging.NewFilesystemLogWriter(f.Name(), log.NewNopLogger(), true, false)
require.Nil(t, err)
// write a log line
logFile.Write(ctx, []json.RawMessage{json.RawMessage("msg1")})
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGHUP)
defer signal.Reset(syscall.SIGHUP)
// send SIGHUP to the process
err = syscall.Kill(syscall.Getpid(), syscall.SIGHUP)
require.Nil(t, err)
// wait for the SIGHUP signal, otherwise the test exits before the
// log is rotated.
<-sig
time.Sleep(100 * time.Millisecond)
// write a new log line and verify that the original file includes
// the new log line but not any of the old ones.
logFile.Write(ctx, []json.RawMessage{json.RawMessage("msg2")})
logMsg, err := ioutil.ReadFile(f.Name())
require.Nil(t, err)
require.Equal(t, "msg2\n", string(logMsg))
}