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  }