Path: blob/main/test/tests/workspace/git_hooks_test.go
2498 views
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.1// Licensed under the GNU Affero General Public License (AGPL).2// See License.AGPL.txt in the project root for license information.34package workspace56import (7"context"8"os"9"testing"10"time"1112"sigs.k8s.io/e2e-framework/pkg/envconf"13"sigs.k8s.io/e2e-framework/pkg/features"1415agent "github.com/gitpod-io/gitpod/test/pkg/agent/workspace/api"16"github.com/gitpod-io/gitpod/test/pkg/integration"17)1819const (20FILE_CREATED_HOOKS = "output.txt"21)2223type GitHooksTestCase struct {24Name string25ContextURL string26WorkspaceRoot string27}2829func TestGitHooks(t *testing.T) {30userToken, _ := os.LookupEnv("USER_TOKEN")31integration.SkipWithoutUsername(t, username)32integration.SkipWithoutUserToken(t, userToken)3334tests := []GitHooksTestCase{35{36Name: "husky",37ContextURL: "https://github.com/gitpod-io/gitpod-test-repo/tree/husky",38WorkspaceRoot: "/workspace/gitpod-test-repo",39},40}4142f := features.New("git hooks").43WithLabel("component", "server").44Assess("should run git hooks tests", func(testCtx context.Context, t *testing.T, cfg *envconf.Config) context.Context {45ffs := []struct {46Name string47FF string48}{49{Name: "classic"},50}5152for _, ff := range ffs {53func() {54ctx, cancel := context.WithTimeout(testCtx, 10*time.Minute)55defer cancel()5657api := integration.NewComponentAPI(ctx, cfg.Namespace(), kubeconfig, cfg.Client())58defer api.Done(t)5960username := username + ff.Name61userId, err := api.CreateUser(username, userToken)62if err != nil {63t.Fatal(err)64}6566if err := api.UpdateUserFeatureFlag(userId, ff.FF); err != nil {67t.Fatal(err)68}69}()70}7172for _, ff := range ffs {73for _, test := range tests {74test := test75t.Run(test.ContextURL+"_"+ff.Name, func(t *testing.T) {76t.Parallel()7778ctx, cancel := context.WithTimeout(context.Background(), time.Duration(5*len(tests)*len(ffs))*time.Minute)79defer cancel()8081username := username + ff.Name8283api := integration.NewComponentAPI(ctx, cfg.Namespace(), kubeconfig, cfg.Client())84defer api.Done(t)8586wsInfo, stopWs, err := integration.LaunchWorkspaceFromContextURL(t, ctx, test.ContextURL, username, api)87if err != nil {88t.Fatal(err)89}9091t.Cleanup(func() {92sctx, scancel := context.WithTimeout(context.Background(), 10*time.Minute)93defer scancel()9495sapi := integration.NewComponentAPI(sctx, cfg.Namespace(), kubeconfig, cfg.Client())96defer sapi.Done(t)9798if _, err := stopWs(true, sapi); err != nil {99t.Fatal(err)100}101})102rsa, closer, err := integration.Instrument(integration.ComponentWorkspace, "workspace", cfg.Namespace(), kubeconfig, cfg.Client(), integration.WithInstanceID(wsInfo.LatestInstance.ID))103if err != nil {104t.Fatal(err)105}106defer rsa.Close()107integration.DeferCloser(t, closer)108109var ls agent.ListDirResponse110err = rsa.Call("WorkspaceAgent.ListDir", &agent.ListDirRequest{111Dir: test.WorkspaceRoot,112}, &ls)113if err != nil {114t.Fatal(err)115}116for _, f := range ls.Files {117if f == FILE_CREATED_HOOKS {118t.Fatal("Checkout hooks are executed")119}120}121})122}123}124return testCtx125}).126Feature()127128testEnv.Test(t, f)129}130131132