golang.zx2c4.com/wireguard/windows@v0.5.4-0.20230123132234-dcc0eb72a04b/updater/winhttp/winhttp_test.go (about)

     1  /* SPDX-License-Identifier: MIT
     2   *
     3   * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved.
     4   */
     5  
     6  package winhttp
     7  
     8  import (
     9  	"fmt"
    10  	"io"
    11  	"runtime"
    12  	"testing"
    13  )
    14  
    15  type progressPrinter struct {
    16  	downloaded uint64
    17  	total      uint64
    18  }
    19  
    20  func (pp *progressPrinter) Write(p []byte) (int, error) {
    21  	bytes := len(p)
    22  	pp.downloaded += uint64(bytes)
    23  	fmt.Printf("%d/%d bytes, %f%%\n", pp.downloaded, pp.total, float64(pp.downloaded)/float64(pp.total)*100.0)
    24  	return bytes, nil
    25  }
    26  
    27  func TestResponse(t *testing.T) {
    28  	session, err := NewSession("WinHTTP Test Suite/1.0")
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  	connection, err := session.Connect("zx2c4.com", 443, true)
    33  	if err != nil {
    34  		t.Fatal(err)
    35  	}
    36  	r, err := connection.Get("/ip", true)
    37  	length, err := r.Length()
    38  	if err != nil {
    39  		t.Fatal(err)
    40  	}
    41  	fmt.Printf("The length is %d\n", length)
    42  	bytes, err := io.ReadAll(r)
    43  	if err != nil {
    44  		t.Fatal(err)
    45  	}
    46  	fmt.Println(string(bytes))
    47  	r.Close()
    48  
    49  	connection, err = session.Connect("speed.hetzner.de", 443, true)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  	r, err = connection.Get("/10GB.bin", false)
    54  	if err != nil {
    55  		t.Fatal(err)
    56  	}
    57  	length, err = r.Length()
    58  	if err != nil {
    59  		t.Fatal(err)
    60  	}
    61  	amountRead, err := io.Copy(&progressPrinter{total: length}, r)
    62  	if err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	r.Close()
    66  	if length != uint64(amountRead) {
    67  		t.Fatalf("Expected to read %d, but only read %d", length, amountRead)
    68  	}
    69  
    70  	runtime.GC() // Try to force the finalizers to be called
    71  }