mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-11-04 02:01:14 +01:00 
			
		
		
		
	This updates all source files to use a new standard header for copyright and license declaration. Notably, copyright no longer includes a date, and we now use the standard SPDX-License-Identifier header. This commit was done almost entirely mechanically with perl, and then some minimal manual fixes. Updates #6865 Signed-off-by: Will Norris <will@tailscale.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright (c) Tailscale Inc & AUTHORS
 | 
						|
// SPDX-License-Identifier: BSD-3-Clause
 | 
						|
 | 
						|
package speedtest
 | 
						|
 | 
						|
import (
 | 
						|
	"net"
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
)
 | 
						|
 | 
						|
func TestDownload(t *testing.T) {
 | 
						|
	// start a listener and find the port where the server will be listening.
 | 
						|
	l, err := net.Listen("tcp", ":0")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	t.Cleanup(func() { l.Close() })
 | 
						|
 | 
						|
	serverIP := l.Addr().String()
 | 
						|
	t.Log("server IP found:", serverIP)
 | 
						|
 | 
						|
	type state struct {
 | 
						|
		err error
 | 
						|
	}
 | 
						|
	displayResult := func(t *testing.T, r Result, start time.Time) {
 | 
						|
		t.Helper()
 | 
						|
		t.Logf("{ Megabytes: %.2f, Start: %.1f, End: %.1f, Total: %t }", r.MegaBytes(), r.IntervalStart.Sub(start).Seconds(), r.IntervalEnd.Sub(start).Seconds(), r.Total)
 | 
						|
	}
 | 
						|
	stateChan := make(chan state, 1)
 | 
						|
 | 
						|
	go func() {
 | 
						|
		err := Serve(l)
 | 
						|
		stateChan <- state{err: err}
 | 
						|
	}()
 | 
						|
 | 
						|
	// ensure that the test returns an appropriate number of Result structs
 | 
						|
	expectedLen := int(DefaultDuration.Seconds()) + 1
 | 
						|
 | 
						|
	t.Run("download test", func(t *testing.T) {
 | 
						|
		// conduct a download test
 | 
						|
		results, err := RunClient(Download, DefaultDuration, serverIP)
 | 
						|
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal("download test failed:", err)
 | 
						|
		}
 | 
						|
 | 
						|
		if len(results) < expectedLen {
 | 
						|
			t.Fatalf("download results: expected length: %d, actual length: %d", expectedLen, len(results))
 | 
						|
		}
 | 
						|
 | 
						|
		start := results[0].IntervalStart
 | 
						|
		for _, result := range results {
 | 
						|
			displayResult(t, result, start)
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	t.Run("upload test", func(t *testing.T) {
 | 
						|
		// conduct an upload test
 | 
						|
		results, err := RunClient(Upload, DefaultDuration, serverIP)
 | 
						|
 | 
						|
		if err != nil {
 | 
						|
			t.Fatal("upload test failed:", err)
 | 
						|
		}
 | 
						|
 | 
						|
		if len(results) < expectedLen {
 | 
						|
			t.Fatalf("upload results: expected length: %d, actual length: %d", expectedLen, len(results))
 | 
						|
		}
 | 
						|
 | 
						|
		start := results[0].IntervalStart
 | 
						|
		for _, result := range results {
 | 
						|
			displayResult(t, result, start)
 | 
						|
		}
 | 
						|
	})
 | 
						|
 | 
						|
	// causes the server goroutine to finish
 | 
						|
	l.Close()
 | 
						|
 | 
						|
	testState := <-stateChan
 | 
						|
	if testState.err != nil {
 | 
						|
		t.Error("server error:", err)
 | 
						|
	}
 | 
						|
}
 |