blob: 591cabc7e80f954628ac52211428943e8c120d4a [file] [log] [blame]
package repo_manager
import (
"fmt"
"net/url"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/autoroll/go/config"
"go.skia.org/infra/autoroll/go/repo_manager/child"
"go.skia.org/infra/autoroll/go/repo_manager/parent"
gerrit_mocks "go.skia.org/infra/go/gerrit/mocks"
"go.skia.org/infra/go/git"
gitiles_mocks "go.skia.org/infra/go/gitiles/mocks"
"go.skia.org/infra/go/mockhttpclient"
)
const (
fuchsiaSDKRevPrev = "000633ae6e904f7eaced443d6aa65fb3d24afe8c"
fuchsiaSDKRevBase = "32a56ad54471732034ba802cbfc3c9ff277b9d1c"
fuchsiaSDKRevNext = "37417b795289818723990da66dd7a7b38e50fc04"
fuchsiaSDKTimePrev = "2009-11-10T23:00:01Z"
fuchsiaSDKTimeBase = "2009-11-10T23:00:02Z"
fuchsiaSDKTimeNext = "2009-11-10T23:00:03Z"
fuchsiaSDKArchiveUrlTmpl = "https://storage.googleapis.com/fuchsia/development/%s"
fuchsiaSDKVersionFilePathLinux = "build/fuchsia/linux.sdk.sha1"
fuchsiaSDKVersionFilePathMac = "build/fuchsia/mac.sdk.sha1"
)
var (
fuchsiaSDKLatestArchiveUrlLinux = fmt.Sprintf(fuchsiaSDKArchiveUrlTmpl, "LATEST_LINUX")
fuchsiaSDKLatestArchiveUrlMac = fmt.Sprintf(fuchsiaSDKArchiveUrlTmpl, "LATEST_MAC")
)
func fuchsiaCfg() *config.ParentChildRepoManagerConfig {
child := &config.ParentChildRepoManagerConfig_FuchsiaSdkChild{
FuchsiaSdkChild: &config.FuchsiaSDKChildConfig{
GcsBucket: "fake-fuchsia-sdk",
LatestLinuxPath: "linux/LATEST",
LatestMacPath: "mac/LATEST",
TarballLinuxPathTmpl: "%s.sdk",
},
}
return &config.ParentChildRepoManagerConfig{
Parent: &config.ParentChildRepoManagerConfig_GitilesParent{
GitilesParent: &config.GitilesParentConfig{
Gitiles: &config.GitilesConfig{
Branch: git.MainBranch,
RepoUrl: "todo.git",
},
Dep: &config.DependencyConfig{
Primary: &config.VersionFileConfig{
Id: "FuchsiaSDK",
File: []*config.VersionFileConfig_File{
{Path: fuchsiaSDKVersionFilePathLinux},
},
},
Transitive: []*config.TransitiveDepConfig{
{
Child: &config.VersionFileConfig{
Id: child.FuchsiaSdkChild.LatestMacPath,
File: []*config.VersionFileConfig_File{
{Path: fuchsiaSDKVersionFilePathMac},
},
},
Parent: &config.VersionFileConfig{
Id: child.FuchsiaSdkChild.LatestLinuxPath,
File: []*config.VersionFileConfig_File{
{Path: fuchsiaSDKVersionFilePathMac},
},
},
},
},
},
Gerrit: &config.GerritConfig{
Url: "https://fake-skia-review.googlesource.com",
Project: "fake-gerrit-project",
Config: config.GerritConfig_CHROMIUM,
},
},
},
Child: child,
}
}
func setupFuchsiaSDK(t *testing.T) (*parentChildRepoManager, *gitiles_mocks.GitilesRepo, *gerrit_mocks.GerritInterface, *mockhttpclient.URLMock) {
reg := setupRegistry(t)
cfg := fuchsiaCfg()
parentCfg := cfg.GetGitilesParent()
p, parentGitiles, parentGerrit := parent.NewGitilesFileForTesting(t, parentCfg, reg)
urlmock := mockhttpclient.NewURLMock()
c, err := child.NewFuchsiaSDK(t.Context(), cfg.GetFuchsiaSdkChild(), urlmock.Client())
require.NoError(t, err)
// Create the RepoManager.
rm := &parentChildRepoManager{
Parent: p,
Child: c,
}
// Mock requests for Update().
fileContents := map[string]string{
fuchsiaSDKVersionFilePathLinux: fuchsiaSDKRevBase + "\n",
fuchsiaSDKVersionFilePathMac: "mac-base\n",
}
parent.MockGitilesFileForUpdate(parentGitiles, cfg.GetGitilesParent(), noCheckoutParentHead, fileContents)
mockGetLatestSDK(urlmock, fuchsiaSDKRevBase, "mac-base")
// Update.
_, _, _ = updateAndAssert(t, rm, parentGitiles, parentGerrit, urlmock)
return rm, parentGitiles, parentGerrit, urlmock
}
func mockGetLatestSDK(urlmock *mockhttpclient.URLMock, revLinux, revMac string) {
c := fuchsiaCfg().GetFuchsiaSdkChild()
urlmock.MockOnce("https://storage.googleapis.com/"+c.GcsBucket+"/"+url.QueryEscape(c.LatestLinuxPath), mockhttpclient.MockGetDialogue([]byte(revLinux)))
if c.LatestMacPath != "" {
urlmock.MockOnce("https://storage.googleapis.com/"+c.GcsBucket+"/"+url.QueryEscape(c.LatestMacPath), mockhttpclient.MockGetDialogue([]byte(revMac)))
}
}
func TestFuchsiaSDKRepoManager(t *testing.T) {
rm, parentGitiles, parentGerrit, urlmock := setupFuchsiaSDK(t)
// Mock requests for Update().
cfg := fuchsiaCfg()
oldContent := map[string]string{
fuchsiaSDKVersionFilePathLinux: fuchsiaSDKRevBase + "\n",
fuchsiaSDKVersionFilePathMac: "mac-base\n",
}
parent.MockGitilesFileForUpdate(parentGitiles, cfg.GetGitilesParent(), noCheckoutParentHead, oldContent)
mockGetLatestSDK(urlmock, fuchsiaSDKRevBase, "mac-base")
// Update.
lastRollRev, tipRev, notRolledRevs := updateAndAssert(t, rm, parentGitiles, parentGerrit, urlmock)
require.Equal(t, fuchsiaSDKRevBase, lastRollRev.Id)
require.Equal(t, fuchsiaSDKRevBase, tipRev.Id)
prev, err := rm.GetRevision(t.Context(), fuchsiaSDKRevPrev)
require.NoError(t, err)
require.Equal(t, fuchsiaSDKRevPrev, prev.Id)
base, err := rm.GetRevision(t.Context(), fuchsiaSDKRevBase)
require.NoError(t, err)
require.Equal(t, fuchsiaSDKRevBase, base.Id)
next, err := rm.GetRevision(t.Context(), fuchsiaSDKRevNext)
require.NoError(t, err)
require.Equal(t, fuchsiaSDKRevNext, next.Id)
require.Equal(t, 0, len(notRolledRevs))
// // There's a new version.
parent.MockGitilesFileForUpdate(parentGitiles, cfg.GetGitilesParent(), noCheckoutParentHead, oldContent)
mockGetLatestSDK(urlmock, fuchsiaSDKRevNext, "mac-next")
lastRollRev, tipRev, notRolledRevs = updateAndAssert(t, rm, parentGitiles, parentGerrit, urlmock)
require.Equal(t, fuchsiaSDKRevBase, lastRollRev.Id)
require.Equal(t, fuchsiaSDKRevNext, tipRev.Id)
require.Equal(t, 1, len(notRolledRevs))
require.Equal(t, fuchsiaSDKRevNext, notRolledRevs[0].Id)
// Upload a CL.
newContent := map[string]string{
fuchsiaSDKVersionFilePathLinux: fuchsiaSDKRevNext + "\n",
fuchsiaSDKVersionFilePathMac: "mac-next\n",
}
parent.MockGitilesFileForCreateNewRoll(parentGitiles, parentGerrit, cfg.GetGitilesParent(), noCheckoutParentHead, fakeCommitMsgMock, oldContent, newContent, fakeReviewers)
_, err = rm.CreateNewRoll(t.Context(), lastRollRev, tipRev, notRolledRevs, fakeReviewers, false, false, fakeCommitMsg)
require.NoError(t, err)
}