package main import ( "fmt" "net/http" "net/http/httptest" "os" "time" ) func main() { fmt.Println("Testing error conditions...") allPassed := true // Test 1: Invalid URL fmt.Print("Test 1: Invalid URL... ") output, err := runMdget("://invalid-url") if !assertError("Invalid URL", err, true) { allPassed = false } else if !assertContains("Invalid URL error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅") } // Test 2: Timeout fmt.Print("Test 2: Timeout with slow server... ") // Create a server that delays response beyond timeout server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { time.Sleep(2 * time.Second) w.Header().Set("Content-Type", "text/html") fmt.Fprint(w, "
Delayed") })) defer server.Close() output, err = runMdget("--timeout", "1", server.URL) if !assertError("Timeout", err, true) { allPassed = false } else if !assertContains("Timeout error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅") } // Test 3: HTTP 404 error fmt.Print("Test 3: HTTP 404 error... ") server2 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) fmt.Fprint(w, "Not Found") })) defer server2.Close() output, err = runMdget(server2.URL) if !assertError("HTTP 404", err, true) { allPassed = false } else if !assertContains("HTTP 404 error", output, "HTTP error: 404") { allPassed = false } else { fmt.Println("✅") } // Test 4: HTTP 500 error fmt.Print("Test 4: HTTP 500 error... ") server3 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusInternalServerError) fmt.Fprint(w, "Internal Server Error") })) defer server3.Close() output, err = runMdget(server3.URL) if !assertError("HTTP 500", err, true) { allPassed = false } else if !assertContains("HTTP 500 error", output, "HTTP error: 500") { allPassed = false } else { fmt.Println("✅") } // Test 5: Non-existent host fmt.Print("Test 5: Non-existent host... ") output, err = runMdget("http://localhost:99999/nonexistent") if !assertError("Non-existent host", err, true) { allPassed = false } else if !assertContains("Non-existent host error", output, "Error fetching URL") { allPassed = false } else { fmt.Println("✅") } // Test 6: Invalid port number fmt.Print("Test 6: Invalid port number... ") output, err = runMdget("http://example.com:999999") if !assertError("Invalid port", err, true) { allPassed = false } else if !assertContains("Invalid port error", output, "Error") { allPassed = false } else { fmt.Println("✅") } // Test 7: Empty URL (already covered in test_args, but good to check) fmt.Print("Test 7: Empty URL argument... ") output, err = runMdget("") if !assertError("Empty URL", err, true) { allPassed = false } else if !assertContains("Empty URL error", output, "Error: URL is required") { allPassed = false } else { fmt.Println("✅") } // Test 8: Malformed HTML (should still convert what it can) fmt.Print("Test 8: Malformed HTML (should still convert)... ") server4 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") fmt.Fprint(w, "Broken