Skip to content

Commit 37d9e3c

Browse files
committed
Adds more test coverage
1 parent b8034da commit 37d9e3c

File tree

3 files changed

+108
-19
lines changed

3 files changed

+108
-19
lines changed

parrot/.changeset/v0.1.6.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- Adds more tests

parrot/parrot.go

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,18 @@ type Server struct {
5757
host string
5858
address string
5959

60-
client *resty.Client
61-
shutDown bool
62-
shutDownChan chan struct{}
63-
shutDownOnce sync.Once
64-
saveFileName string
65-
useCustomLogger bool
66-
logFileName string
67-
logFile *os.File
68-
logLevel zerolog.Level
69-
jsonLogs bool
70-
log zerolog.Logger
60+
client *resty.Client
61+
shutDown bool
62+
shutDownChan chan struct{}
63+
shutDownOnce sync.Once
64+
saveFileName string
65+
useCustomLogger bool
66+
logFileName string
67+
logFile *os.File
68+
logLevel zerolog.Level
69+
jsonLogs bool
70+
disableConsoleLogs bool
71+
log zerolog.Logger
7172

7273
server *http.Server
7374
routes map[string]*Route // Store routes based on "Method:Path" keys
@@ -122,6 +123,14 @@ func WithJSONLogs() ServerOption {
122123
}
123124
}
124125

126+
// DisableConsoleLogs disables logging to the console
127+
func DisableConsoleLogs() ServerOption {
128+
return func(s *Server) error {
129+
s.disableConsoleLogs = true
130+
return nil
131+
}
132+
}
133+
125134
// WithSaveFile sets the file to save the routes to
126135
func WithSaveFile(saveFile string) ServerOption {
127136
return func(s *Server) error {
@@ -189,11 +198,14 @@ func Wake(options ...ServerOption) (*Server, error) {
189198
if !p.useCustomLogger { // Build default logger
190199
var writers []io.Writer
191200

192-
if p.jsonLogs {
193-
writers = append(writers, os.Stderr)
194-
} else {
195-
consoleOut := zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "2006-01-02T15:04:05.000"}
196-
writers = append(writers, consoleOut)
201+
zerolog.TimeFieldFormat = "2006-01-02T15:04:05.000"
202+
if !p.disableConsoleLogs {
203+
if p.jsonLogs {
204+
writers = append(writers, os.Stderr)
205+
} else {
206+
consoleOut := zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "2006-01-02T15:04:05.000"}
207+
writers = append(writers, consoleOut)
208+
}
197209
}
198210

199211
if p.logFile != nil {

parrot/parrot_test.go

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package parrot
22

33
import (
4+
"bytes"
45
"context"
56
"encoding/json"
67
"flag"
78
"fmt"
9+
"io"
810
"net/http"
911
"os"
1012
"testing"
@@ -492,6 +494,8 @@ func TestSaveLoad(t *testing.T) {
492494
}
493495

494496
func TestShutDown(t *testing.T) {
497+
t.Parallel()
498+
495499
fileName := t.Name() + ".json"
496500
p, err := Wake(WithSaveFile(fileName), WithLogLevel(testLogLevel))
497501
require.NoError(t, err, "error waking parrot")
@@ -524,17 +528,89 @@ func TestShutDown(t *testing.T) {
524528
require.ErrorIs(t, err, ErrServerShutdown, "expected error shutting down parrot after shutdown")
525529
}
526530

527-
func newParrot(t *testing.T) *Server {
528-
t.Helper()
531+
func TestCustomLogger(t *testing.T) {
532+
t.Parallel()
533+
534+
logBuffer := new(bytes.Buffer)
535+
testLogger := zerolog.New(logBuffer)
529536

530537
fileName := t.Name() + ".json"
531-
p, err := Wake(WithSaveFile(fileName), WithLogLevel(testLogLevel))
538+
p, err := Wake(WithSaveFile(fileName), WithLogLevel(zerolog.DebugLevel), WithLogger(testLogger))
532539
require.NoError(t, err, "error waking parrot")
533540
t.Cleanup(func() {
534541
err := p.Shutdown(context.Background())
535542
assert.NoError(t, err, "error shutting down parrot")
536543
p.WaitShutdown() // Wait for shutdown to complete
537544
os.Remove(fileName)
538545
})
546+
547+
route := &Route{
548+
Method: http.MethodGet,
549+
Path: "/hello",
550+
RawResponseBody: "Squawk",
551+
ResponseStatusCode: http.StatusOK,
552+
}
553+
554+
err = p.Register(route)
555+
require.NoError(t, err, "error registering route")
556+
557+
_, err = p.Call(route.Method, route.Path)
558+
require.NoError(t, err, "error calling parrot")
559+
560+
require.Contains(t, logBuffer.String(), "GET:/hello", "expected log buffer to contain route call")
561+
}
562+
563+
func TestJSONLogger(t *testing.T) {
564+
t.Parallel()
565+
566+
logFileName := t.Name() + ".log"
567+
fileName := t.Name() + ".json"
568+
p, err := Wake(WithSaveFile(fileName), WithLogLevel(zerolog.DebugLevel), WithLogFile(logFileName), WithJSONLogs(), DisableConsoleLogs())
569+
require.NoError(t, err, "error waking parrot")
570+
t.Cleanup(func() {
571+
os.Remove(fileName)
572+
os.Remove(logFileName)
573+
})
574+
575+
route := &Route{
576+
Method: http.MethodGet,
577+
Path: "/test",
578+
RawResponseBody: "Squawk",
579+
ResponseStatusCode: http.StatusOK,
580+
}
581+
582+
err = p.Register(route)
583+
assert.NoError(t, err, "error registering route")
584+
585+
_, err = p.Call(route.Method, route.Path)
586+
assert.NoError(t, err, "error calling parrot")
587+
588+
err = p.Shutdown(context.Background())
589+
assert.NoError(t, err, "error shutting down parrot")
590+
p.WaitShutdown()
591+
require.FileExists(t, logFileName, "expected log file to exist")
592+
logFile, err := os.Open(logFileName)
593+
require.NoError(t, err, "error opening log file")
594+
logs, err := io.ReadAll(logFile)
595+
require.NoError(t, err, "error reading log file")
596+
require.NotNil(t, logs, "expected logs to be read from file")
597+
require.NotEmpty(t, logs, "expected logs to be written to file")
598+
require.Contains(t, string(logs), `"Route ID":"GET:/test"`, "expected log file to contain route call in JSON format")
599+
}
600+
601+
func newParrot(t *testing.T) *Server {
602+
t.Helper()
603+
604+
logFileName := t.Name() + ".log"
605+
saveFileName := t.Name() + ".json"
606+
p, err := Wake(WithSaveFile(saveFileName), WithLogFile(logFileName), WithLogLevel(testLogLevel))
607+
require.NoError(t, err, "error waking parrot")
608+
t.Cleanup(func() {
609+
err := p.Shutdown(context.Background())
610+
assert.NoError(t, err, "error shutting down parrot")
611+
p.WaitShutdown() // Wait for shutdown to complete and file to be written
612+
os.Remove(saveFileName)
613+
os.Remove(logFileName)
614+
})
539615
return p
540616
}

0 commit comments

Comments
 (0)