|
1 | 1 | package parrot |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "context" |
5 | 6 | "encoding/json" |
6 | 7 | "flag" |
7 | 8 | "fmt" |
| 9 | + "io" |
8 | 10 | "net/http" |
9 | 11 | "os" |
10 | 12 | "testing" |
@@ -492,6 +494,8 @@ func TestSaveLoad(t *testing.T) { |
492 | 494 | } |
493 | 495 |
|
494 | 496 | func TestShutDown(t *testing.T) { |
| 497 | + t.Parallel() |
| 498 | + |
495 | 499 | fileName := t.Name() + ".json" |
496 | 500 | p, err := Wake(WithSaveFile(fileName), WithLogLevel(testLogLevel)) |
497 | 501 | require.NoError(t, err, "error waking parrot") |
@@ -524,17 +528,89 @@ func TestShutDown(t *testing.T) { |
524 | 528 | require.ErrorIs(t, err, ErrServerShutdown, "expected error shutting down parrot after shutdown") |
525 | 529 | } |
526 | 530 |
|
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) |
529 | 536 |
|
530 | 537 | fileName := t.Name() + ".json" |
531 | | - p, err := Wake(WithSaveFile(fileName), WithLogLevel(testLogLevel)) |
| 538 | + p, err := Wake(WithSaveFile(fileName), WithLogLevel(zerolog.DebugLevel), WithLogger(testLogger)) |
532 | 539 | require.NoError(t, err, "error waking parrot") |
533 | 540 | t.Cleanup(func() { |
534 | 541 | err := p.Shutdown(context.Background()) |
535 | 542 | assert.NoError(t, err, "error shutting down parrot") |
536 | 543 | p.WaitShutdown() // Wait for shutdown to complete |
537 | 544 | os.Remove(fileName) |
538 | 545 | }) |
| 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 | + }) |
539 | 615 | return p |
540 | 616 | } |
0 commit comments