github.com/safing/portbase@v0.19.5/updater/resource_test.go (about) 1 package updater 2 3 import ( 4 "fmt" 5 "testing" 6 7 semver "github.com/hashicorp/go-version" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestVersionSelection(t *testing.T) { 12 t.Parallel() 13 14 res := registry.newResource("test/a") 15 16 err := res.AddVersion("1.2.2", true, false, false) 17 if err != nil { 18 t.Fatal(err) 19 } 20 err = res.AddVersion("1.2.3", true, false, false) 21 if err != nil { 22 t.Fatal(err) 23 } 24 err = res.AddVersion("1.2.4-beta", true, false, false) 25 if err != nil { 26 t.Fatal(err) 27 } 28 err = res.AddVersion("1.2.4-staging", true, false, false) 29 if err != nil { 30 t.Fatal(err) 31 } 32 err = res.AddVersion("1.2.5", false, false, false) 33 if err != nil { 34 t.Fatal(err) 35 } 36 err = res.AddVersion("1.2.6-beta", false, false, false) 37 if err != nil { 38 t.Fatal(err) 39 } 40 err = res.AddVersion("0", true, false, false) 41 if err != nil { 42 t.Fatal(err) 43 } 44 45 registry.UsePreReleases = true 46 registry.DevMode = true 47 registry.Online = true 48 res.Index = &Index{AutoDownload: true} 49 50 res.selectVersion() 51 if res.SelectedVersion.VersionNumber != "0.0.0" { 52 t.Errorf("selected version should be 0.0.0, not %s", res.SelectedVersion.VersionNumber) 53 } 54 55 registry.DevMode = false 56 res.selectVersion() 57 if res.SelectedVersion.VersionNumber != "1.2.6-beta" { 58 t.Errorf("selected version should be 1.2.6-beta, not %s", res.SelectedVersion.VersionNumber) 59 } 60 61 registry.UsePreReleases = false 62 res.selectVersion() 63 if res.SelectedVersion.VersionNumber != "1.2.5" { 64 t.Errorf("selected version should be 1.2.5, not %s", res.SelectedVersion.VersionNumber) 65 } 66 67 registry.Online = false 68 res.selectVersion() 69 if res.SelectedVersion.VersionNumber != "1.2.3" { 70 t.Errorf("selected version should be 1.2.3, not %s", res.SelectedVersion.VersionNumber) 71 } 72 73 f123 := res.GetFile() 74 f123.markActiveWithLocking() 75 76 err = res.Blacklist("1.2.3") 77 if err != nil { 78 t.Fatal(err) 79 } 80 if res.SelectedVersion.VersionNumber != "1.2.2" { 81 t.Errorf("selected version should be 1.2.2, not %s", res.SelectedVersion.VersionNumber) 82 } 83 84 if !f123.UpgradeAvailable() { 85 t.Error("upgrade should be available (flag)") 86 } 87 select { 88 case <-f123.WaitForAvailableUpgrade(): 89 default: 90 t.Error("upgrade should be available (chan)") 91 } 92 93 t.Logf("resource: %+v", res) 94 for _, rv := range res.Versions { 95 t.Logf("version %s: %+v", rv.VersionNumber, rv) 96 } 97 } 98 99 func TestVersionParsing(t *testing.T) { 100 t.Parallel() 101 102 assert.Equal(t, "1.2.3", parseVersion("1.2.3")) 103 assert.Equal(t, "1.2.0", parseVersion("1.2.0")) 104 assert.Equal(t, "0.2.0", parseVersion("0.2.0")) 105 assert.Equal(t, "0.0.0", parseVersion("0")) 106 assert.Equal(t, "1.2.3-b", parseVersion("1.2.3-b")) 107 assert.Equal(t, "1.2.3-b", parseVersion("1.2.3b")) 108 assert.Equal(t, "1.2.3-beta", parseVersion("1.2.3-beta")) 109 assert.Equal(t, "1.2.3-beta", parseVersion("1.2.3beta")) 110 assert.Equal(t, "1.2.3", parseVersion("01.02.03")) 111 } 112 113 func parseVersion(v string) string { 114 sv, err := semver.NewVersion(v) 115 if err != nil { 116 return fmt.Sprintf("failed to parse version: %s", err) 117 } 118 return sv.String() 119 }