mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
a4e19f2233
rsc.io/goversion is really expensive. Running version.ReadExe on tailscaled on darwin allocates 47k objects, almost 11mb. All we want is the module info. For that, all we need to do is scan through the binary looking for the magic start/end strings and then grab the bytes in between them. We can do that easily and quickly with nothing but a 64k buffer. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
30 lines
789 B
Go
30 lines
789 B
Go
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package version
|
|
|
|
import (
|
|
"os/exec"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestFindModuleInfo(t *testing.T) {
|
|
dir := t.TempDir()
|
|
name := filepath.Join(dir, "tailscaled-version-test")
|
|
out, err := exec.Command("go", "build", "-o", name, "tailscale.com/cmd/tailscaled").CombinedOutput()
|
|
if err != nil {
|
|
t.Fatalf("failed to build tailscaled: %v\n%s", err, out)
|
|
}
|
|
modinfo, err := findModuleInfo(name)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
prefix := "path\ttailscale.com/cmd/tailscaled\nmod\ttailscale.com"
|
|
if !strings.HasPrefix(modinfo, prefix) {
|
|
t.Errorf("unexpected modinfo contents %q", modinfo)
|
|
}
|
|
}
|