modinfo_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package version
  5. import (
  6. "flag"
  7. "os/exec"
  8. "path/filepath"
  9. "runtime"
  10. "strings"
  11. "testing"
  12. )
  13. func TestFindModuleInfo(t *testing.T) {
  14. dir := t.TempDir()
  15. name := filepath.Join(dir, "tailscaled-version-test")
  16. goTool := filepath.Join(runtime.GOROOT(), "bin", "go"+exe())
  17. out, err := exec.Command(goTool, "build", "-o", name, "tailscale.com/cmd/tailscaled").CombinedOutput()
  18. if err != nil {
  19. t.Fatalf("failed to build tailscaled: %v\n%s", err, out)
  20. }
  21. modinfo, err := findModuleInfo(name)
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. prefix := "path\ttailscale.com/cmd/tailscaled\nmod\ttailscale.com"
  26. if !strings.HasPrefix(modinfo, prefix) {
  27. t.Errorf("unexpected modinfo contents %q", modinfo)
  28. }
  29. }
  30. func exe() string {
  31. if runtime.GOOS == "windows" {
  32. return ".exe"
  33. }
  34. return ""
  35. }
  36. var findModuleInfoName = flag.String("module-info-file", "", "if non-empty, test findModuleInfo against this filename")
  37. func TestFindModuleInfoManual(t *testing.T) {
  38. exe := *findModuleInfoName
  39. if exe == "" {
  40. t.Skip("skipping without --module-info-file filename")
  41. }
  42. cmd := cmdName(exe)
  43. mod, err := findModuleInfo(exe)
  44. if err != nil {
  45. t.Fatal(err)
  46. }
  47. t.Logf("Got %q from: %s", cmd, mod)
  48. }