GODT-35: New pmapi client and manager using resty

This commit is contained in:
James Houlahan
2021-02-22 18:23:51 +01:00
committed by Jakub
parent 1d538e8540
commit 2284e9ede1
163 changed files with 3333 additions and 8124 deletions

View File

@ -18,7 +18,6 @@
package updater
import (
"bytes"
"encoding/json"
"errors"
"io"
@ -29,7 +28,6 @@ import (
"github.com/Masterminds/semver/v3"
"github.com/ProtonMail/proton-bridge/internal/config/settings"
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
"github.com/ProtonMail/proton-bridge/pkg/pmapi/mocks"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
@ -40,9 +38,9 @@ func TestCheck(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.1.0", false)
updater := newTestUpdater(cm, "1.1.0", false)
versionMap := VersionMap{
"stable": VersionInfo{
@ -53,13 +51,11 @@ func TestCheck(t *testing.T) {
},
}
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
updater.getVersionFileURL(),
updater.getVersionFileURL()+".sig",
gomock.Any(),
).Return(bytes.NewReader(mustMarshal(t, versionMap)), nil)
client.EXPECT().Logout()
).Return(mustMarshal(t, versionMap), nil)
version, err := updater.Check()
@ -71,9 +67,9 @@ func TestCheckEarlyAccess(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.1.0", true)
updater := newTestUpdater(cm, "1.1.0", true)
versionMap := VersionMap{
"stable": VersionInfo{
@ -90,13 +86,11 @@ func TestCheckEarlyAccess(t *testing.T) {
},
}
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
updater.getVersionFileURL(),
updater.getVersionFileURL()+".sig",
gomock.Any(),
).Return(bytes.NewReader(mustMarshal(t, versionMap)), nil)
client.EXPECT().Logout()
).Return(mustMarshal(t, versionMap), nil)
version, err := updater.Check()
@ -108,18 +102,16 @@ func TestCheckBadSignature(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.2.0", false)
updater := newTestUpdater(cm, "1.2.0", false)
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
updater.getVersionFileURL(),
updater.getVersionFileURL()+".sig",
gomock.Any(),
).Return(nil, errors.New("bad signature"))
client.EXPECT().Logout()
_, err := updater.Check()
assert.Error(t, err)
@ -129,9 +121,9 @@ func TestIsUpdateApplicable(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.4.0", false)
updater := newTestUpdater(cm, "1.4.0", false)
versionOld := VersionInfo{
Version: semver.MustParse("1.3.0"),
@ -165,9 +157,9 @@ func TestCanInstall(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.4.0", false)
updater := newTestUpdater(cm, "1.4.0", false)
versionManual := VersionInfo{
Version: semver.MustParse("1.5.0"),
@ -192,9 +184,9 @@ func TestInstallUpdate(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.4.0", false)
updater := newTestUpdater(cm, "1.4.0", false)
latestVersion := VersionInfo{
Version: semver.MustParse("1.5.0"),
@ -203,13 +195,11 @@ func TestInstallUpdate(t *testing.T) {
RolloutProportion: 1.0,
}
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
latestVersion.Package,
latestVersion.Package+".sig",
gomock.Any(),
).Return(bytes.NewReader([]byte("tgz_data_here")), nil)
client.EXPECT().Logout()
).Return([]byte("tgz_data_here"), nil)
err := updater.InstallUpdate(latestVersion)
@ -220,9 +210,9 @@ func TestInstallUpdateBadSignature(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.4.0", false)
updater := newTestUpdater(cm, "1.4.0", false)
latestVersion := VersionInfo{
Version: semver.MustParse("1.5.0"),
@ -231,14 +221,12 @@ func TestInstallUpdateBadSignature(t *testing.T) {
RolloutProportion: 1.0,
}
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
latestVersion.Package,
latestVersion.Package+".sig",
gomock.Any(),
).Return(nil, errors.New("bad signature"))
client.EXPECT().Logout()
err := updater.InstallUpdate(latestVersion)
assert.Error(t, err)
@ -248,9 +236,9 @@ func TestInstallUpdateAlreadyOngoing(t *testing.T) {
c := gomock.NewController(t)
defer c.Finish()
client := mocks.NewMockClient(c)
cm := mocks.NewMockManager(c)
updater := newTestUpdater(client, "1.4.0", false)
updater := newTestUpdater(cm, "1.4.0", false)
updater.installer = &fakeInstaller{delay: 2 * time.Second}
@ -261,13 +249,11 @@ func TestInstallUpdateAlreadyOngoing(t *testing.T) {
RolloutProportion: 1.0,
}
client.EXPECT().DownloadAndVerify(
cm.EXPECT().DownloadAndVerify(
gomock.Any(),
latestVersion.Package,
latestVersion.Package+".sig",
gomock.Any(),
).Return(bytes.NewReader([]byte("tgz_data_here")), nil)
client.EXPECT().Logout()
).Return([]byte("tgz_data_here"), nil)
wg := &sync.WaitGroup{}
@ -288,9 +274,9 @@ func TestInstallUpdateAlreadyOngoing(t *testing.T) {
wg.Wait()
}
func newTestUpdater(client *mocks.MockClient, curVer string, earlyAccess bool) *Updater {
func newTestUpdater(manager *mocks.MockManager, curVer string, earlyAccess bool) *Updater {
return New(
&fakeClientProvider{client: client},
manager,
&fakeInstaller{},
newFakeSettings(0.5, earlyAccess),
nil,
@ -299,14 +285,6 @@ func newTestUpdater(client *mocks.MockClient, curVer string, earlyAccess bool) *
)
}
type fakeClientProvider struct {
client *mocks.MockClient
}
func (p *fakeClientProvider) GetAnonymousClient() pmapi.Client {
return p.client
}
type fakeInstaller struct {
bad bool
delay time.Duration