ソースを参照

Test case for access log

V2Ray 10 年 前
コミット
a80093a727
2 ファイル変更40 行追加0 行削除
  1. 6 0
      common/log/access.go
  2. 34 0
      common/log/access_test.go

+ 6 - 0
common/log/access.go

@@ -33,6 +33,11 @@ type accessLog struct {
 type fileAccessLogger struct {
 	queue  chan *accessLog
 	logger *log.Logger
+	file   *os.File
+}
+
+func (logger *fileAccessLogger) close() {
+	logger.file.Close()
 }
 
 func (logger *fileAccessLogger) Log(from, to string, status AccessStatus, reason string) {
@@ -59,6 +64,7 @@ func newFileAccessLogger(path string) accessLogger {
 	return &fileAccessLogger{
 		queue:  make(chan *accessLog, 16),
 		logger: log.New(file, "", log.Ldate|log.Ltime),
+		file:   file,
 	}
 }
 

+ 34 - 0
common/log/access_test.go

@@ -0,0 +1,34 @@
+package log
+
+import (
+	"io/ioutil"
+	"os"
+	"strings"
+	"testing"
+	"time"
+
+	"github.com/v2ray/v2ray-core/testing/unit"
+)
+
+func TestAccessLog(t *testing.T) {
+	assert := unit.Assert(t)
+
+	filename := "/tmp/test_access_log.log"
+	InitAccessLogger(filename)
+	_, err := os.Stat(filename)
+	assert.Error(err).IsNil()
+
+	Access("test_from", "test_to", AccessAccepted, "test_reason")
+	<-time.After(2 * time.Second)
+
+	accessLoggerInstance.(*fileAccessLogger).close()
+	accessLoggerInstance = &noOpAccessLogger{}
+
+	content, err := ioutil.ReadFile(filename)
+	assert.Error(err).IsNil()
+
+	assert.Bool(strings.Contains(string(content), "test_from")).IsTrue()
+	assert.Bool(strings.Contains(string(content), "test_to")).IsTrue()
+	assert.Bool(strings.Contains(string(content), "test_reason")).IsTrue()
+	assert.Bool(strings.Contains(string(content), "accepted")).IsTrue()
+}