all repos — mdget @ master

Unnamed repository; edit this file 'description' to name the repository.

test/test_errors.go (view raw)

  1package main
  2
  3import (
  4	"fmt"
  5	"net/http"
  6	"net/http/httptest"
  7	"os"
  8	"time"
  9)
 10
 11func main() {
 12	fmt.Println("Testing error conditions...")
 13	
 14	allPassed := true
 15	
 16	// Test 1: Invalid URL
 17	fmt.Print("Test 1: Invalid URL... ")
 18	output, err := runMdget("://invalid-url")
 19	if !assertError("Invalid URL", err, true) {
 20		allPassed = false
 21	} else if !assertContains("Invalid URL error", output, "Error fetching URL") {
 22		allPassed = false
 23	} else {
 24		fmt.Println("✅")
 25	}
 26	
 27	// Test 2: Timeout
 28	fmt.Print("Test 2: Timeout with slow server... ")
 29	
 30	// Create a server that delays response beyond timeout
 31	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 32		time.Sleep(2 * time.Second)
 33		w.Header().Set("Content-Type", "text/html")
 34		fmt.Fprint(w, "<html><body>Delayed</body></html>")
 35	}))
 36	defer server.Close()
 37	
 38	output, err = runMdget("--timeout", "1", server.URL)
 39	if !assertError("Timeout", err, true) {
 40		allPassed = false
 41	} else if !assertContains("Timeout error", output, "Error fetching URL") {
 42		allPassed = false
 43	} else {
 44		fmt.Println("✅")
 45	}
 46	
 47	// Test 3: HTTP 404 error
 48	fmt.Print("Test 3: HTTP 404 error... ")
 49	
 50	server2 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 51		w.WriteHeader(http.StatusNotFound)
 52		fmt.Fprint(w, "Not Found")
 53	}))
 54	defer server2.Close()
 55	
 56	output, err = runMdget(server2.URL)
 57	if !assertError("HTTP 404", err, true) {
 58		allPassed = false
 59	} else if !assertContains("HTTP 404 error", output, "HTTP error: 404") {
 60		allPassed = false
 61	} else {
 62		fmt.Println("✅")
 63	}
 64	
 65	// Test 4: HTTP 500 error
 66	fmt.Print("Test 4: HTTP 500 error... ")
 67	
 68	server3 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 69		w.WriteHeader(http.StatusInternalServerError)
 70		fmt.Fprint(w, "Internal Server Error")
 71	}))
 72	defer server3.Close()
 73	
 74	output, err = runMdget(server3.URL)
 75	if !assertError("HTTP 500", err, true) {
 76		allPassed = false
 77	} else if !assertContains("HTTP 500 error", output, "HTTP error: 500") {
 78		allPassed = false
 79	} else {
 80		fmt.Println("✅")
 81	}
 82	
 83	// Test 5: Non-existent host
 84	fmt.Print("Test 5: Non-existent host... ")
 85	output, err = runMdget("http://localhost:99999/nonexistent")
 86	if !assertError("Non-existent host", err, true) {
 87		allPassed = false
 88	} else if !assertContains("Non-existent host error", output, "Error fetching URL") {
 89		allPassed = false
 90	} else {
 91		fmt.Println("✅")
 92	}
 93	
 94	// Test 6: Invalid port number
 95	fmt.Print("Test 6: Invalid port number... ")
 96	output, err = runMdget("http://example.com:999999")
 97	if !assertError("Invalid port", err, true) {
 98		allPassed = false
 99	} else if !assertContains("Invalid port error", output, "Error") {
100		allPassed = false
101	} else {
102		fmt.Println("✅")
103	}
104	
105	// Test 7: Empty URL (already covered in test_args, but good to check)
106	fmt.Print("Test 7: Empty URL argument... ")
107	output, err = runMdget("")
108	if !assertError("Empty URL", err, true) {
109		allPassed = false
110	} else if !assertContains("Empty URL error", output, "Error: URL is required") {
111		allPassed = false
112	} else {
113		fmt.Println("✅")
114	}
115	
116	// Test 8: Malformed HTML (should still convert what it can)
117	fmt.Print("Test 8: Malformed HTML (should still convert)... ")
118	
119	server4 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
120		w.Header().Set("Content-Type", "text/html")
121		fmt.Fprint(w, "<html><body><h1>Valid part</h1><p>Broken <tag></body>")
122	}))
123	defer server4.Close()
124	
125	output, err = runMdget(server4.URL)
126	if !assertError("Malformed HTML", err, false) {
127		allPassed = false
128	} else if !assertContains("Malformed HTML still converts valid parts", output, "# Valid part") {
129		allPassed = false
130	} else {
131		fmt.Println("✅")
132	}
133	
134	if allPassed {
135		fmt.Println("\n✅ All error condition tests passed!")
136		os.Exit(0)
137	} else {
138		fmt.Println("\n❌ Some error condition tests failed!")
139		os.Exit(1)
140	}
141}