Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
alessio-perugini committed Nov 28, 2024
1 parent 43dd782 commit 2278bbc
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions internal/cli/configuration/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"net/http"
"net/http/httptest"
"testing"
"time"

"github.com/arduino/arduino-cli/internal/cli/configuration"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -68,3 +69,41 @@ func TestProxy(t *testing.T) {
require.NoError(t, err)
require.Equal(t, http.StatusNoContent, response.StatusCode)
}

func TestConnectionTimeout(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
time.Sleep(5 * time.Second)
w.WriteHeader(http.StatusNoContent)
}))
defer ts.Close()

doRequest := func(timeout int) (*http.Response, time.Duration, error) {
settings := configuration.NewSettings()
settings.Set("network.proxy", ts.URL)
if timeout != 0 {
settings.Set("network.connection_timeout", 2)
}
client, err := settings.NewHttpClient()
require.NoError(t, err)

request, err := http.NewRequest("GET", "http://arduino.cc", nil)
require.NoError(t, err)

start := time.Now()
resp, err := client.Do(request)
duration := time.Since(start)

return resp, duration, err
}

// Using default timeout (0), will wait indefinitely (in our case up to 5s)
response, elapsed, err := doRequest(0)
require.NoError(t, err)
require.Equal(t, http.StatusNoContent, response.StatusCode)
require.True(t, elapsed.Seconds() >= 4 && elapsed.Seconds() <= 6) // Adding some tolerance just in case...

// Setting a timeout of 1 seconds, will drop the connection after 1s
_, elapsed, err = doRequest(1)
require.Error(t, err)
require.True(t, elapsed.Seconds() >= 0.5 && elapsed.Seconds() <= 3) // Adding some tolerance just in case...
}

0 comments on commit 2278bbc

Please sign in to comment.