test/test_http.go (view raw)
1package main
2
3import (
4 "fmt"
5 "net/http"
6 "net/http/httptest"
7 "os"
8)
9
10func main() {
11 fmt.Println("Testing HTTP connectivity...")
12
13 allPassed := true
14
15 // Test 1: Basic HTML fetching and conversion
16 fmt.Print("Test 1: Basic HTML fetching and conversion... ")
17
18 // Create a test server with simple HTML response
19 server1 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
20 w.Header().Set("Content-Type", "text/html")
21 fmt.Fprintf(w, `<!DOCTYPE html>
22<html>
23<head><title>Test Page</title></head>
24<body>
25 <h1>Hello World</h1>
26 <p>This is a test page.</p>
27 <ul>
28 <li>Item 1</li>
29 <li>Item 2</li>
30 </ul>
31 <a href="/about">About</a>
32 <img src="/image.png" alt="Test Image">
33</body>
34</html>`)
35 }))
36 defer server1.Close()
37
38 output, err := runMdget(server1.URL)
39 if !assertError("Basic fetch", err, false) {
40 allPassed = false
41 } else {
42 expectedMarkers := []string{"# Hello World", "This is a test page", "Item 1", "Item 2"}
43 allMarkersFound := true
44 for _, marker := range expectedMarkers {
45 if !assertContains("Basic fetch output", output, marker) {
46 allMarkersFound = false
47 allPassed = false
48 }
49 }
50 if allMarkersFound {
51 fmt.Println("✅")
52 }
53 }
54
55 // Test 2: Custom User-Agent header
56 fmt.Print("Test 2: Custom User-Agent header... ")
57
58 var capturedUserAgent string
59 server2 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
60 capturedUserAgent = r.Header.Get("User-Agent")
61 w.Header().Set("Content-Type", "text/html")
62 fmt.Fprint(w, "<html><body>Test</body></html>")
63 }))
64 defer server2.Close()
65
66 output, err = runMdget("--user-agent", "TestAgent/1.0", server2.URL)
67 if !assertError("Custom User-Agent", err, false) {
68 allPassed = false
69 } else if capturedUserAgent != "TestAgent/1.0" {
70 fmt.Printf("❌\n Expected User-Agent 'TestAgent/1.0', got %q\n", capturedUserAgent)
71 allPassed = false
72 } else {
73 fmt.Println("✅")
74 }
75
76 // Test 3: Default User-Agent
77 fmt.Print("Test 3: Default User-Agent... ")
78
79 capturedUserAgent = ""
80 server3 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
81 capturedUserAgent = r.Header.Get("User-Agent")
82 w.Header().Set("Content-Type", "text/html")
83 fmt.Fprint(w, "<html><body>Test</body></html>")
84 }))
85 defer server3.Close()
86
87 output, err = runMdget(server3.URL)
88 if !assertError("Default User-Agent", err, false) {
89 allPassed = false
90 } else if capturedUserAgent != "mdget/0.1.0" {
91 fmt.Printf("❌\n Expected default User-Agent 'mdget/0.1.0', got %q\n", capturedUserAgent)
92 allPassed = false
93 } else {
94 fmt.Println("✅")
95 }
96
97 // Test 4: HTTP timeout (fast server should work)
98 fmt.Print("Test 4: HTTP timeout with fast server... ")
99
100 server4 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
101 w.Header().Set("Content-Type", "text/html")
102 fmt.Fprint(w, "<html><body>Fast response</body></html>")
103 }))
104 defer server4.Close()
105
106 output, err = runMdget("--timeout", "5", server4.URL)
107 if !assertError("Fast server with timeout", err, false) {
108 allPassed = false
109 } else if !assertContains("Fast server output", output, "Fast response") {
110 allPassed = false
111 } else {
112 fmt.Println("✅")
113 }
114
115 // Test 5: Different HTTP methods (should use GET)
116 fmt.Print("Test 5: Server receives GET request... ")
117
118 var capturedMethod string
119 server5 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
120 capturedMethod = r.Method
121 w.Header().Set("Content-Type", "text/html")
122 fmt.Fprint(w, "<html><body>OK</body></html>")
123 }))
124 defer server5.Close()
125
126 output, err = runMdget(server5.URL)
127 if !assertError("HTTP method", err, false) {
128 allPassed = false
129 } else if capturedMethod != "GET" {
130 fmt.Printf("❌\n Expected GET method, got %q\n", capturedMethod)
131 allPassed = false
132 } else {
133 fmt.Println("✅")
134 }
135
136 if allPassed {
137 fmt.Println("\n✅ All HTTP connectivity tests passed!")
138 os.Exit(0)
139 } else {
140 fmt.Println("\n❌ Some HTTP connectivity tests failed!")
141 os.Exit(1)
142 }
143}