diff options
Diffstat (limited to 'tests/integration/cmd_forgejo_f3_test.go')
-rw-r--r-- | tests/integration/cmd_forgejo_f3_test.go | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/tests/integration/cmd_forgejo_f3_test.go b/tests/integration/cmd_forgejo_f3_test.go new file mode 100644 index 0000000..9156405 --- /dev/null +++ b/tests/integration/cmd_forgejo_f3_test.go @@ -0,0 +1,137 @@ +// Copyright Earl Warren <contact@earl-warren.org> +// Copyright Loïc Dachary <loic@dachary.org> +// SPDX-License-Identifier: MIT + +package integration + +import ( + "context" + "fmt" + "testing" + + "code.gitea.io/gitea/cmd/forgejo" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/services/f3/driver/options" + "code.gitea.io/gitea/tests" + + _ "code.gitea.io/gitea/services/f3/driver" + _ "code.gitea.io/gitea/services/f3/driver/tests" + + f3_filesystem_options "code.forgejo.org/f3/gof3/v3/forges/filesystem/options" + f3_logger "code.forgejo.org/f3/gof3/v3/logger" + f3_options "code.forgejo.org/f3/gof3/v3/options" + f3_generic "code.forgejo.org/f3/gof3/v3/tree/generic" + f3_tests "code.forgejo.org/f3/gof3/v3/tree/tests/f3" + f3_tests_forge "code.forgejo.org/f3/gof3/v3/tree/tests/f3/forge" + "github.com/stretchr/testify/require" + "github.com/urfave/cli/v2" +) + +func runApp(ctx context.Context, args ...string) (string, error) { + l := f3_logger.NewCaptureLogger() + ctx = f3_logger.ContextSetLogger(ctx, l) + ctx = forgejo.ContextSetNoInit(ctx, true) + + app := cli.NewApp() + + app.Writer = l.GetBuffer() + app.ErrWriter = l.GetBuffer() + + defer func() { + if r := recover(); r != nil { + fmt.Println(l.String()) + panic(r) + } + }() + + app.Commands = []*cli.Command{ + forgejo.SubcmdF3Mirror(ctx), + } + err := app.Run(args) + + fmt.Println(l.String()) + + return l.String(), err +} + +func TestF3_CmdMirror_LocalForgejo(t *testing.T) { + defer tests.PrepareTestEnv(t)() + defer test.MockVariableValue(&setting.F3.Enabled, true)() + + ctx := context.Background() + + mirrorOptions := f3_tests_forge.GetFactory(options.Name)().NewOptions(t) + mirrorTree := f3_generic.GetFactory("f3")(ctx, mirrorOptions) + + fixtureOptions := f3_tests_forge.GetFactory(f3_filesystem_options.Name)().NewOptions(t) + fixtureTree := f3_generic.GetFactory("f3")(ctx, fixtureOptions) + + log := fixtureTree.GetLogger() + creator := f3_tests.NewCreator(t, "CmdMirrorLocalForgejo", log) + + log.Trace("======= build fixture") + + var fromPath string + { + fixtureUserID := "userID01" + fixtureProjectID := "projectID01" + + userFormat := creator.GenerateUser() + userFormat.SetID(fixtureUserID) + users := fixtureTree.MustFind(f3_generic.NewPathFromString("/forge/users")) + user := users.CreateChild(ctx) + user.FromFormat(userFormat) + user.Upsert(ctx) + require.EqualValues(t, user.GetID(), users.GetIDFromName(ctx, userFormat.UserName)) + + projectFormat := creator.GenerateProject() + projectFormat.SetID(fixtureProjectID) + projects := user.MustFind(f3_generic.NewPathFromString("projects")) + project := projects.CreateChild(ctx) + project.FromFormat(projectFormat) + project.Upsert(ctx) + require.EqualValues(t, project.GetID(), projects.GetIDFromName(ctx, projectFormat.Name)) + + fromPath = fmt.Sprintf("/forge/users/%s/projects/%s", userFormat.UserName, projectFormat.Name) + } + + log.Trace("======= create mirror") + + var toPath string + var projects f3_generic.NodeInterface + { + userFormat := creator.GenerateUser() + users := mirrorTree.MustFind(f3_generic.NewPathFromString("/forge/users")) + user := users.CreateChild(ctx) + user.FromFormat(userFormat) + user.Upsert(ctx) + require.EqualValues(t, user.GetID(), users.GetIDFromName(ctx, userFormat.UserName)) + + projectFormat := creator.GenerateProject() + projects = user.MustFind(f3_generic.NewPathFromString("projects")) + project := projects.CreateChild(ctx) + project.FromFormat(projectFormat) + project.Upsert(ctx) + require.EqualValues(t, project.GetID(), projects.GetIDFromName(ctx, projectFormat.Name)) + + toPath = fmt.Sprintf("/forge/users/%s/projects/%s", userFormat.UserName, projectFormat.Name) + } + + log.Trace("======= mirror %s => %s", fromPath, toPath) + output, err := runApp(ctx, + "f3", "mirror", + "--from-type", f3_filesystem_options.Name, + "--from-path", fromPath, + "--from-filesystem-directory", fixtureOptions.(f3_options.URLInterface).GetURL(), + + "--to-type", options.Name, + "--to-path", toPath, + ) + require.NoError(t, err) + log.Trace("======= assert") + require.Contains(t, output, fmt.Sprintf("mirror %s", fromPath)) + projects.List(ctx) + require.NotEmpty(t, projects.GetChildren()) + log.Trace("======= project %s", projects.GetChildren()[0]) +} |