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}