diff --git a/internal/provider/privateinternetaccess/connection.go b/internal/provider/privateinternetaccess/connection.go index 84e147d9..03204c76 100644 --- a/internal/provider/privateinternetaccess/connection.go +++ b/internal/provider/privateinternetaccess/connection.go @@ -9,7 +9,11 @@ import ( func (p *Provider) GetConnection(selection settings.ServerSelection, ipv6Supported bool) ( connection models.Connection, err error, ) { - defaults := utils.NewConnectionDefaults(8443, 8080, 0) //nolint:mnd + defaults := getConnectionDefaults() return utils.GetConnection(p.Name(), p.storage, selection, defaults, ipv6Supported, p.randSource) } + +func getConnectionDefaults() utils.ConnectionDefaults { + return utils.NewConnectionDefaults(8443, 8080, 0) //nolint:mnd +} diff --git a/internal/provider/privateinternetaccess/connection_test.go b/internal/provider/privateinternetaccess/connection_test.go new file mode 100644 index 00000000..ba79d23a --- /dev/null +++ b/internal/provider/privateinternetaccess/connection_test.go @@ -0,0 +1,60 @@ +package privateinternetaccess + +import ( + "bytes" + "encoding/json" + "io" + "net/http" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func Test_getConnectionDefaults(t *testing.T) { + t.Parallel() + + const timeout = 5 * time.Second + client := &http.Client{ + Timeout: timeout, + } + + ctx := t.Context() + request, err := http.NewRequestWithContext(ctx, http.MethodGet, + "https://serverlist.piaservers.net/vpninfo/servers/v6", nil) + require.NoError(t, err) + + response, err := client.Do(request) + require.NoError(t, err) + defer response.Body.Close() + + require.Equal(t, http.StatusOK, response.StatusCode) + + b, err := io.ReadAll(response.Body) + require.NoError(t, err) + + // remove key/signature at the bottom + i := bytes.IndexRune(b, '\n') + b = b[:i] + + var data struct { + Groups struct { + OvpnUDP []struct { + Ports []uint16 `json:"ports"` + } `json:"ovpnudp"` + OvpnTCP []struct { + Ports []uint16 `json:"ports"` + } `json:"ovpntcp"` + } `json:"groups"` + } + err = json.Unmarshal(b, &data) + require.NoError(t, err) + + defaults := getConnectionDefaults() + + require.Len(t, data.Groups.OvpnUDP, 1) + require.Len(t, data.Groups.OvpnTCP, 1) + assert.Contains(t, data.Groups.OvpnUDP[0].Ports, defaults.OpenVPNUDPPort) + assert.Contains(t, data.Groups.OvpnTCP[0].Ports, defaults.OpenVPNTCPPort) +}