Path: blob/main/test/tests/workspace/mount_proc_test.go
2496 views
// Copyright (c) 2020 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"fmt"9"sync"10"testing"11"time"1213"sigs.k8s.io/e2e-framework/pkg/envconf"14"sigs.k8s.io/e2e-framework/pkg/features"1516agent "github.com/gitpod-io/gitpod/test/pkg/agent/workspace/api"17"github.com/gitpod-io/gitpod/test/pkg/integration"18)1920const (21numberOfMount = 50022parallel = 523)2425func loadMountProc(t *testing.T, rsa *integration.RpcClient) {26var resp agent.ExecResponse27err := rsa.Call("WorkspaceAgent.Exec", &agent.ExecRequest{28Dir: "/",29Command: "bash",30Args: []string{31"-c",32fmt.Sprintf("for i in {1..%d}; do echo $i; sudo unshare -m --propagation unchanged mount -t proc proc $(mktemp -d) || exit 1; done", numberOfMount),33},34}, &resp)35if err != nil {36t.Fatalf("proc mount run failed: %v\n%s\n%s", err, resp.Stdout, resp.Stderr)37}3839if resp.ExitCode != 0 {40t.Fatalf("proc mount run failed: %s\n%s", resp.Stdout, resp.Stderr)41}4243}4445func TestMountProc(t *testing.T) {46f := features.New("proc mount").47WithLabel("component", "workspace").48Assess("load test proc mount", func(testCtx context.Context, t *testing.T, cfg *envconf.Config) context.Context {49ctx, cancel := context.WithTimeout(testCtx, 5*time.Minute)50defer cancel()5152t.Parallel()5354api := integration.NewComponentAPI(ctx, cfg.Namespace(), kubeconfig, cfg.Client())55t.Cleanup(func() {56api.Done(t)57})5859ws, stopWs, err := integration.LaunchWorkspaceDirectly(t, ctx, api)60if err != nil {61t.Fatal(err)62}6364t.Cleanup(func() {65sctx, scancel := context.WithTimeout(context.Background(), 5*time.Minute)66defer scancel()6768sapi := integration.NewComponentAPI(sctx, cfg.Namespace(), kubeconfig, cfg.Client())69defer sapi.Done(t)7071_, err = stopWs(true, sapi)72if err != nil {73t.Errorf("cannot stop workspace: %q", err)74}75})7677rsa, closer, err := integration.Instrument(integration.ComponentWorkspace, "workspace", cfg.Namespace(), kubeconfig, cfg.Client(), integration.WithInstanceID(ws.Req.Id), integration.WithWorkspacekitLift(true))78if err != nil {79t.Fatalf("unexpected error instrumenting workspace: %v", err)80}81defer rsa.Close()82integration.DeferCloser(t, closer)8384var wg sync.WaitGroup85wg.Add(parallel)86for i := 0; i < parallel; i++ {87go func() {88defer wg.Done()89loadMountProc(t, rsa)90}()91}92wg.Wait()9394return testCtx95}).96Feature()9798testEnv.Test(t, f)99}100101102