blob: 10259e788c380b4ca57dfe27ac1d64c9a4ecb40b [file] [log] [blame] [edit]
// Copyright 2020 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
package debugtracer
import (
"fmt"
"io"
"path/filepath"
"testing"
"time"
"github.com/google/syzkaller/pkg/osutil"
)
type DebugTracer interface {
Log(msg string, args ...interface{})
SaveFile(filename string, data []byte)
}
type GenericTracer struct {
WithTime bool
TraceWriter io.Writer
OutDir string
}
type TestTracer struct {
T *testing.T
}
type NullTracer struct {
}
func (gt *GenericTracer) Log(msg string, args ...interface{}) {
if gt.WithTime {
timeStr := time.Now().Format("02-Jan-2006 15:04:05")
newArgs := append([]interface{}{timeStr}, args...)
fmt.Fprintf(gt.TraceWriter, "%s: "+msg+"\n", newArgs...)
} else {
fmt.Fprintf(gt.TraceWriter, msg+"\n", args...)
}
}
func (gt *GenericTracer) SaveFile(filename string, data []byte) {
if gt.OutDir == "" {
return
}
osutil.MkdirAll(gt.OutDir)
osutil.WriteFile(filepath.Join(gt.OutDir, filename), data)
}
func (tt *TestTracer) Log(msg string, args ...interface{}) {
tt.T.Log(msg, args)
}
func (tt *TestTracer) SaveFile(filename string, data []byte) {
// Not implemented.
}
func (nt *NullTracer) Log(msg string, args ...interface{}) {
// Not implemented.
}
func (nt *NullTracer) SaveFile(filename string, data []byte) {
// Not implemented.
}