forked from cloudfoundry/bosh-agent
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfake_audit_logger_provider.go
94 lines (81 loc) · 2.21 KB
/
fake_audit_logger_provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package fakes
import (
"bytes"
"log"
"sync"
)
type FakeAuditLoggerProvider struct {
debugBuffer *bytes.Buffer
debugBufferLock sync.RWMutex
errorBuffer *bytes.Buffer
errorBufferLock sync.RWMutex
debugLoggerError error
debugLoggerErrorLock sync.RWMutex
errorLoggerError error
errorLoggerErrorLock sync.RWMutex
}
func NewFakeAuditLoggerProvider() *FakeAuditLoggerProvider {
return &FakeAuditLoggerProvider{
debugBuffer: bytes.NewBuffer([]byte{}),
errorBuffer: bytes.NewBuffer([]byte{}),
}
}
type synchronousWriter struct {
buffer *bytes.Buffer
mutex *sync.RWMutex
}
func (w synchronousWriter) Write(bytes []byte) (int, error) {
w.mutex.Lock()
defer w.mutex.Unlock()
return w.buffer.Write(bytes)
}
func (p *FakeAuditLoggerProvider) ProvideDebugLogger() (*log.Logger, error) {
p.debugLoggerErrorLock.Lock()
if p.debugLoggerError != nil {
debugErr := p.debugLoggerError
p.debugLoggerError = nil
return nil, debugErr
}
p.debugLoggerErrorLock.Unlock()
writer := synchronousWriter{
buffer: p.debugBuffer,
mutex: &p.debugBufferLock,
}
return log.New(writer, "", log.LstdFlags), nil
}
func (p *FakeAuditLoggerProvider) SetDebugLoggerError(err error) {
p.debugLoggerErrorLock.Lock()
p.debugLoggerError = err
p.debugLoggerErrorLock.Unlock()
}
func (p *FakeAuditLoggerProvider) SetErrorLoggerError(err error) {
p.errorLoggerErrorLock.Lock()
p.errorLoggerError = err
p.errorLoggerErrorLock.Unlock()
}
func (p *FakeAuditLoggerProvider) GetDebugLogsAt(index int) string {
p.debugBufferLock.RLock()
debugString := string(p.debugBuffer.Bytes())
p.debugBufferLock.RUnlock()
return debugString
}
func (p *FakeAuditLoggerProvider) ProvideErrorLogger() (*log.Logger, error) {
p.errorLoggerErrorLock.Lock()
if p.errorLoggerError != nil {
errorErr := p.errorLoggerError
p.errorLoggerError = nil
return nil, errorErr
}
p.errorLoggerErrorLock.Unlock()
writer := synchronousWriter{
buffer: p.errorBuffer,
mutex: &p.errorBufferLock,
}
return log.New(writer, "", log.LstdFlags), nil
}
func (p *FakeAuditLoggerProvider) GetErrorLogsAt(index int) string {
p.errorBufferLock.RLock()
errorString := string(p.errorBuffer.Bytes())
p.errorBufferLock.RUnlock()
return errorString
}