summaryrefslogtreecommitdiff
path: root/integrationtests/REFACTORING_GUIDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'integrationtests/REFACTORING_GUIDE.md')
-rw-r--r--integrationtests/REFACTORING_GUIDE.md240
1 files changed, 0 insertions, 240 deletions
diff --git a/integrationtests/REFACTORING_GUIDE.md b/integrationtests/REFACTORING_GUIDE.md
deleted file mode 100644
index 88c77d5..0000000
--- a/integrationtests/REFACTORING_GUIDE.md
+++ /dev/null
@@ -1,240 +0,0 @@
-# Integration Tests Refactoring Guide
-
-## Overview
-
-This guide outlines the refactoring opportunities for the dtail integration tests to reduce code duplication and improve maintainability.
-
-## Key Benefits of Refactoring
-
-1. **Reduced Code Duplication**: ~40-50% reduction in test code
-2. **Improved Maintainability**: Changes to common patterns only need to be made in one place
-3. **Better Test Hygiene**: Automatic cleanup using `t.Cleanup()`
-4. **Clearer Test Intent**: Helper functions make tests more readable
-5. **Reduced Copy-Paste Errors**: Less boilerplate to copy incorrectly
-
-## Common Patterns Identified
-
-### 1. Test Skip Pattern
-**Before:**
-```go
-if !config.Env("DTAIL_INTEGRATION_TEST_RUN_MODE") {
- t.Log("Skipping")
- return
-}
-```
-
-**After:**
-```go
-skipIfNotIntegrationTest(t)
-```
-
-### 2. Server Setup Pattern
-**Before:**
-```go
-port := getUniquePortNumber()
-bindAddress := "localhost"
-ctx, cancel := context.WithCancel(context.Background())
-defer cancel()
-
-_, _, _, err := startCommand(ctx, t,
- "", "../dserver",
- "--cfg", "none",
- "--logger", "stdout",
- "--logLevel", "error",
- "--bindAddress", bindAddress,
- "--port", fmt.Sprintf("%d", port),
-)
-if err != nil {
- t.Error(err)
- return
-}
-time.Sleep(500 * time.Millisecond)
-```
-
-**After:**
-```go
-server := NewTestServer(t)
-if err := server.Start("error"); err != nil {
- t.Error(err)
- return
-}
-```
-
-### 3. File Cleanup Pattern
-**Before:**
-```go
-defer os.Remove(outFile)
-defer os.Remove(csvFile)
-defer os.Remove(queryFile)
-```
-
-**After:**
-```go
-cleanupFiles(t, outFile, csvFile, queryFile)
-// or
-fileSet := &TestFileSet{...}
-fileSet.Cleanup(t)
-```
-
-### 4. Command Arguments Pattern
-**Before:**
-```go
-args := []string{
- "--plain", "--cfg", "none",
- "--servers", fmt.Sprintf("%s:%d", bindAddress, port),
- "--trustAllHosts", "--noColor",
- "--files", inFile,
-}
-```
-
-**After:**
-```go
-args := NewCommandArgs()
-args.Plain = true
-args.Servers = []string{server.Address()}
-args.TrustAllHosts = true
-args.NoColor = true
-args.Files = []string{inFile}
-// args.ToSlice() produces the string array
-```
-
-### 5. Dual Mode Testing Pattern
-**Before:**
-```go
-func TestX(t *testing.T) {
- if !config.Env("DTAIL_INTEGRATION_TEST_RUN_MODE") {
- t.Log("Skipping")
- return
- }
-
- t.Run("Serverless", func(t *testing.T) {
- testXServerless(t)
- })
-
- t.Run("ServerMode", func(t *testing.T) {
- testXWithServer(t)
- })
-}
-```
-
-**After:**
-```go
-func TestX(t *testing.T) {
- runDualModeTest(t, DualModeTest{
- Name: "TestX",
- ServerlessTest: testXServerless,
- ServerTest: testXWithServer,
- })
-}
-```
-
-## Refactoring Strategy
-
-### Phase 1: Add Helper Functions
-1. Add `testhelpers.go` with all common utilities
-2. Ensure all tests still pass
-
-### Phase 2: Refactor Test by Test
-1. Start with simpler tests (e.g., dcat_test.go)
-2. Refactor one test function at a time
-3. Run tests after each refactoring
-4. Commit after each file is complete
-
-### Phase 3: Additional Improvements
-1. Add table-driven tests where appropriate
-2. Create test fixtures for common scenarios
-3. Add more sophisticated helpers as patterns emerge
-
-## Example Refactoring Results
-
-### Before (TestDCat1WithServer):
-```go
-func testDCat1WithServer(t *testing.T, inFile string) error {
- outFile := "dcat1.out"
- port := getUniquePortNumber()
- bindAddress := "localhost"
-
- ctx, cancel := context.WithCancel(context.Background())
- defer cancel()
-
- _, _, _, err := startCommand(ctx, t,
- "", "../dserver",
- "--cfg", "none",
- "--logger", "stdout",
- "--logLevel", "error",
- "--bindAddress", bindAddress,
- "--port", fmt.Sprintf("%d", port),
- )
- if err != nil {
- return err
- }
-
- time.Sleep(500 * time.Millisecond)
-
- _, err = runCommand(ctx, t, outFile,
- "../dcat", "--plain", "--cfg", "none",
- "--servers", fmt.Sprintf("%s:%d", bindAddress, port),
- "--files", inFile,
- "--trustAllHosts",
- "--noColor")
- if err != nil {
- return err
- }
-
- cancel()
-
- if err := compareFiles(t, outFile, inFile); err != nil {
- return err
- }
-
- os.Remove(outFile)
- return nil
-}
-```
-
-### After:
-```go
-func testDCat1WithServer_Refactored(t *testing.T, inFile string) {
- fileSet := &TestFileSet{
- InputFile: inFile,
- OutputFile: "dcat1.out",
- ExpectedFile: inFile,
- }
- fileSet.Cleanup(t)
-
- server := NewTestServer(t)
- if err := server.Start("error"); err != nil {
- t.Error(err)
- return
- }
-
- args := NewCommandArgs()
- args.Plain = true
- args.Servers = []string{server.Address()}
- args.Files = []string{inFile}
- args.TrustAllHosts = true
- args.NoColor = true
-
- err := runCommandAndVerify(t, server.ctx, fileSet.OutputFile, fileSet.ExpectedFile,
- "../dcat", args.ToSlice()...)
- if err != nil {
- t.Error(err)
- }
-}
-```
-
-## Metrics
-
-Based on the examples:
-- **Lines of code reduction**: ~45%
-- **Boilerplate elimination**: ~70%
-- **Improved readability**: Subjective but significant
-- **Error-prone patterns eliminated**: Port management, cleanup, context handling
-
-## Next Steps
-
-1. Review and approve the helper functions
-2. Create a PR with `testhelpers.go`
-3. Incrementally refactor tests in separate PRs
-4. Document any new patterns that emerge
-5. Consider creating a test generator for common scenarios \ No newline at end of file