cmp_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package version_test
  4. import (
  5. "testing"
  6. "github.com/google/go-cmp/cmp"
  7. "tailscale.com/tstest"
  8. "tailscale.com/version"
  9. )
  10. func TestParse(t *testing.T) {
  11. parse := version.ExportParse
  12. type parsed = version.ExportParsed
  13. tests := []struct {
  14. version string
  15. parsed parsed
  16. want bool
  17. }{
  18. {"1", parsed{Major: 1}, true},
  19. {"1.2", parsed{Major: 1, Minor: 2}, true},
  20. {"1.2.3", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  21. {"1.2.3-4", parsed{Major: 1, Minor: 2, Patch: 3, ExtraCommits: 4}, true},
  22. {"1.2-4", parsed{Major: 1, Minor: 2, ExtraCommits: 4}, true},
  23. {"1.2.3-4-extra", parsed{Major: 1, Minor: 2, Patch: 3, ExtraCommits: 4}, true},
  24. {"1.2.3-4a-test", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  25. {"1.2-extra", parsed{Major: 1, Minor: 2}, true},
  26. {"1.2.3-extra", parsed{Major: 1, Minor: 2, Patch: 3}, true},
  27. {"date.20200612", parsed{Datestamp: 20200612}, true},
  28. {"borkbork", parsed{}, false},
  29. {"1a.2.3", parsed{}, false},
  30. {"", parsed{}, false},
  31. }
  32. for _, test := range tests {
  33. gotParsed, got := parse(test.version)
  34. if got != test.want {
  35. t.Errorf("version(%q) = %v, want %v", test.version, got, test.want)
  36. }
  37. if diff := cmp.Diff(gotParsed, test.parsed); diff != "" {
  38. t.Errorf("parse(%q) diff (-got+want):\n%s", test.version, diff)
  39. }
  40. err := tstest.MinAllocsPerRun(t, 0, func() {
  41. gotParsed, got = parse(test.version)
  42. })
  43. if err != nil {
  44. t.Errorf("parse(%q): %v", test.version, err)
  45. }
  46. }
  47. }
  48. func TestAtLeast(t *testing.T) {
  49. tests := []struct {
  50. v, m string
  51. want bool
  52. }{
  53. {"1", "1", true},
  54. {"1.2", "1", true},
  55. {"1.2.3", "1", true},
  56. {"1.2.3-4", "1", true},
  57. {"0.98-0", "0.98", true},
  58. {"0.97.1-216", "0.98", false},
  59. {"0.94", "0.98", false},
  60. {"0.98", "0.98", true},
  61. {"0.98.0-0", "0.98", true},
  62. {"1.2.3-4", "1.2.4-4", false},
  63. {"1.2.3-4", "1.2.3-4", true},
  64. {"date.20200612", "date.20200612", true},
  65. {"date.20200701", "date.20200612", true},
  66. {"date.20200501", "date.20200612", false},
  67. }
  68. for _, test := range tests {
  69. got := version.AtLeast(test.v, test.m)
  70. if got != test.want {
  71. t.Errorf("AtLeast(%q, %q) = %v, want %v", test.v, test.m, got, test.want)
  72. }
  73. }
  74. }