Update and refactor core functionality
- Update common package utilities - Refactor network code for better error handling - Remove deprecated files and functionality - Enhance blacklist and filtering capabilities - Improve snapshot handling and processing
This commit is contained in:
@@ -135,7 +135,7 @@ func TestProcessData(t *testing.T) {
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
s := snapshot.Snapshot{}
|
||||
result, err := processData(s, test.inputData)
|
||||
result, err := ProcessData(s, test.inputData)
|
||||
|
||||
if test.expectedError && err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
@@ -175,192 +175,3 @@ func TestProcessData(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
//// Mock Gemini server for testing ConnectAndGetData
|
||||
//func mockGeminiServer(response string, delay time.Duration, closeConnection bool) net.Listener {
|
||||
// listener, err := net.Listen("tcp", "127.0.0.1:0") // Bind to a random available port
|
||||
// if err != nil {
|
||||
// panic(fmt.Sprintf("Failed to create mock server: %v", err))
|
||||
// }
|
||||
//
|
||||
// go func() {
|
||||
// conn, err := listener.Accept()
|
||||
// if err != nil {
|
||||
// if !closeConnection { // Don't panic if we closed the connection on purpose
|
||||
// panic(fmt.Sprintf("Failed to accept connection: %v", err))
|
||||
// }
|
||||
// return
|
||||
// }
|
||||
// defer conn.Close()
|
||||
//
|
||||
// time.Sleep(delay) // Simulate network latency
|
||||
//
|
||||
// _, err = conn.Write([]byte(response))
|
||||
// if err != nil && !closeConnection {
|
||||
// panic(fmt.Sprintf("Failed to write response: %v", err))
|
||||
// }
|
||||
// }()
|
||||
//
|
||||
// return listener
|
||||
//}
|
||||
|
||||
// func TestConnectAndGetData(t *testing.T) {
|
||||
// config.CONFIG = config.ConfigStruct{
|
||||
// ResponseTimeout: 5,
|
||||
// MaxResponseSize: 1024 * 1024,
|
||||
// }
|
||||
// tests := []struct {
|
||||
// name string
|
||||
// serverResponse string
|
||||
// serverDelay time.Duration
|
||||
// expectedData []byte
|
||||
// expectedError bool
|
||||
// closeConnection bool
|
||||
// }{
|
||||
// {
|
||||
// name: "Successful response",
|
||||
// serverResponse: "20 text/gemini\r\n# Hello",
|
||||
// expectedData: []byte("20 text/gemini\r\n# Hello"),
|
||||
// expectedError: false,
|
||||
// },
|
||||
// {
|
||||
// name: "Server error",
|
||||
// serverResponse: "50 Server error\r\n",
|
||||
// expectedData: []byte("50 Server error\r\n"),
|
||||
// expectedError: false,
|
||||
// },
|
||||
// {
|
||||
// name: "Timeout",
|
||||
// serverDelay: 6 * time.Second, // Longer than the timeout
|
||||
// expectedError: true,
|
||||
// },
|
||||
// {
|
||||
// name: "Server closes connection",
|
||||
// closeConnection: true,
|
||||
// expectedError: true,
|
||||
// },
|
||||
// }
|
||||
|
||||
// for _, test := range tests {
|
||||
// t.Run(test.name, func(t *testing.T) {
|
||||
// listener := mockGeminiServer(test.serverResponse, test.serverDelay, test.closeConnection)
|
||||
// defer func() {
|
||||
// test.closeConnection = true // Prevent panic in mock server
|
||||
// listener.Close()
|
||||
// }()
|
||||
// addr := listener.Addr().String()
|
||||
// data, err := ConnectAndGetData(fmt.Sprintf("gemini://%s/", addr))
|
||||
|
||||
// if test.expectedError && err == nil {
|
||||
// t.Errorf("Expected error, got nil")
|
||||
// }
|
||||
|
||||
// if !test.expectedError && err != nil {
|
||||
// t.Errorf("Unexpected error: %v", err)
|
||||
// }
|
||||
|
||||
// if !slices.Equal(data, test.expectedData) {
|
||||
// t.Errorf("Expected data '%s', got '%s'", test.expectedData, data)
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
// func TestVisit(t *testing.T) {
|
||||
// config.CONFIG = config.ConfigStruct{
|
||||
// ResponseTimeout: 5,
|
||||
// MaxResponseSize: 1024 * 1024,
|
||||
// }
|
||||
// tests := []struct {
|
||||
// name string
|
||||
// serverResponse string
|
||||
// expectedCode int
|
||||
// expectedMime string
|
||||
// expectedError bool
|
||||
// expectedLinks []string
|
||||
// }{
|
||||
// {
|
||||
// name: "Successful response",
|
||||
// serverResponse: "20 text/gemini\r\n# Hello\n=> /link1 Link 1\n=> /link2 Link 2",
|
||||
// expectedCode: 20,
|
||||
// expectedMime: "text/gemini",
|
||||
// expectedError: false,
|
||||
// expectedLinks: []string{"gemini://127.0.0.1:1965/link1", "gemini://127.0.0.1:1965/link2"},
|
||||
// },
|
||||
// {
|
||||
// name: "Server error",
|
||||
// serverResponse: "50 Server error\r\n",
|
||||
// expectedCode: 50,
|
||||
// expectedMime: "Server error",
|
||||
// expectedError: false,
|
||||
// expectedLinks: []string{},
|
||||
// },
|
||||
// }
|
||||
|
||||
// for _, test := range tests {
|
||||
// t.Run(test.name, func(t *testing.T) {
|
||||
// listener := mockGeminiServer(test.serverResponse, 0, false)
|
||||
// defer listener.Close()
|
||||
// addr := listener.Addr().String()
|
||||
// snapshot, err := Visit(fmt.Sprintf("gemini://%s/", addr))
|
||||
|
||||
// if test.expectedError && err == nil {
|
||||
// t.Errorf("Expected error, got nil")
|
||||
// }
|
||||
|
||||
// if !test.expectedError && err != nil {
|
||||
// t.Errorf("Unexpected error: %v", err)
|
||||
// }
|
||||
|
||||
// if snapshot.ResponseCode.ValueOrZero() != int64(test.expectedCode) {
|
||||
// t.Errorf("Expected code %d, got %d", test.expectedCode, snapshot.ResponseCode.ValueOrZero())
|
||||
// }
|
||||
|
||||
// if snapshot.MimeType.ValueOrZero() != test.expectedMime {
|
||||
// t.Errorf("Expected mimeType '%s', got '%s'", test.expectedMime, snapshot.MimeType.ValueOrZero())
|
||||
// }
|
||||
|
||||
// if test.expectedLinks != nil {
|
||||
// links, _ := snapshot.Links.Value()
|
||||
|
||||
// if len(links) != len(test.expectedLinks) {
|
||||
// t.Errorf("Expected %d links, got %d", len(test.expectedLinks), len(links))
|
||||
// }
|
||||
// for i, link := range links {
|
||||
// if link != test.expectedLinks[i] {
|
||||
// t.Errorf("Expected link '%s', got '%s'", test.expectedLinks[i], link)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
func TestVisit_InvalidURL(t *testing.T) {
|
||||
t.Parallel()
|
||||
_, err := Visit("invalid-url")
|
||||
if err == nil {
|
||||
t.Errorf("Expected error for invalid URL, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
//func TestVisit_GeminiError(t *testing.T) {
|
||||
// listener := mockGeminiServer("51 Not Found\r\n", 0, false)
|
||||
// defer listener.Close()
|
||||
// addr := listener.Addr().String()
|
||||
//
|
||||
// s, err := Visit(fmt.Sprintf("gemini://%s/", addr))
|
||||
// if err != nil {
|
||||
// t.Errorf("Unexpected error: %v", err)
|
||||
// }
|
||||
//
|
||||
// expectedError := "51 Not Found"
|
||||
// if s.Error.ValueOrZero() != expectedError {
|
||||
// t.Errorf("Expected error in snapshot: %v, got %v", expectedError, s.Error)
|
||||
// }
|
||||
//
|
||||
// expectedCode := 51
|
||||
// if s.ResponseCode.ValueOrZero() != int64(expectedCode) {
|
||||
// t.Errorf("Expected code %d, got %d", expectedCode, s.ResponseCode.ValueOrZero())
|
||||
// }
|
||||
//}
|
||||
|
||||
Reference in New Issue
Block a user