Path: blob/main/components/supervisor/pkg/serverapi/publicapi_test.go
2500 views
// Copyright (c) 2024 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 serverapi56import (7"encoding/json"8"fmt"9"strings"10"testing"1112v1 "github.com/gitpod-io/gitpod/components/public-api/go/experimental/v1"13"github.com/google/go-cmp/cmp"14"github.com/google/go-cmp/cmp/cmpopts"15)1617func generateArray(prefix string, number int, length int, withDot bool) []string {18var arr []string19for i := 0; i < number; i++ {20lengthyPart := strings.Repeat("a", length)21arr = append(arr, fmt.Sprintf("%s_%d_%s", prefix, i, lengthyPart))22}23if withDot {24arr = append(arr, "...")25}26return arr27}2829func TestCapGitStatusLength(t *testing.T) {3031tests := []struct {32name string33input *v1.GitStatus34expected *v1.GitStatus35}{36{37name: "Short GitStatus",38input: &v1.GitStatus{39Branch: "main",40LatestCommit: "abc123",41TotalUncommitedFiles: 2,42TotalUnpushedCommits: 3,43TotalUntrackedFiles: 4,44UncommitedFiles: []string{"file1.txt", "file2.txt"},45UnpushedCommits: []string{"commit1", "commit2", "commit3"},46UntrackedFiles: []string{"file3.txt", "file4.txt", "file5.txt", "file6.txt"},47},48expected: &v1.GitStatus{49Branch: "main",50LatestCommit: "abc123",51TotalUncommitedFiles: 2,52TotalUnpushedCommits: 3,53TotalUntrackedFiles: 4,54UncommitedFiles: []string{"file1.txt", "file2.txt"},55UnpushedCommits: []string{"commit1", "commit2", "commit3"},56UntrackedFiles: []string{"file3.txt", "file4.txt", "file5.txt", "file6.txt"},57},58},59{60name: "Long GitStatus",61input: &v1.GitStatus{62Branch: "main",63LatestCommit: "abc123",64TotalUncommitedFiles: 2,65TotalUnpushedCommits: 3,66TotalUntrackedFiles: 4,67UncommitedFiles: []string{"file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt", "file6.txt"},68UnpushedCommits: []string{"commit1", "commit2", "commit3", "commit4", "commit5", "commit6", "commit7"},69UntrackedFiles: generateArray("file", 800, 10, false),70},71expected: &v1.GitStatus{72Branch: "main",73LatestCommit: "abc123",74TotalUncommitedFiles: 2,75TotalUnpushedCommits: 3,76TotalUntrackedFiles: 4,77UncommitedFiles: []string{"file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt", "file6.txt"},78UnpushedCommits: []string{"commit1", "commit2", "commit3", "commit4", "commit5", "commit6", "commit7"},79UntrackedFiles: generateArray("file", 166, 10, true),80},81},82{83name: "Long paths in GitStatus",84input: &v1.GitStatus{85Branch: "main",86LatestCommit: "abc123",87TotalUncommitedFiles: 2,88TotalUnpushedCommits: 3,89TotalUntrackedFiles: 4,90UncommitedFiles: []string{"file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt", "file6.txt"},91UnpushedCommits: []string{"commit1", "commit2", "commit3", "commit4", "commit5", "commit6", "commit7"},92UntrackedFiles: generateArray("file", 50, 200, false),93},94expected: &v1.GitStatus{95Branch: "main",96LatestCommit: "abc123",97TotalUncommitedFiles: 2,98TotalUnpushedCommits: 3,99TotalUntrackedFiles: 4,100UncommitedFiles: []string{"file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt", "file6.txt"},101UnpushedCommits: []string{"commit1", "commit2", "commit3", "commit4", "commit5", "commit6", "commit7"},102UntrackedFiles: generateArray("file", 17, 200, true),103},104},105{106name: "Empty GitStatus",107input: &v1.GitStatus{108Branch: "",109LatestCommit: "",110TotalUncommitedFiles: 0,111TotalUnpushedCommits: 0,112TotalUntrackedFiles: 0,113UncommitedFiles: nil,114UnpushedCommits: nil,115UntrackedFiles: nil,116},117expected: &v1.GitStatus{118Branch: "",119LatestCommit: "",120TotalUncommitedFiles: 0,121TotalUnpushedCommits: 0,122TotalUntrackedFiles: 0,123UncommitedFiles: nil,124UnpushedCommits: nil,125UntrackedFiles: nil,126},127},128}129130for _, tt := range tests {131t.Run(tt.name, func(t *testing.T) {132got := capGitStatusLength(tt.input)133if diff := cmp.Diff(tt.expected, got, cmpopts.IgnoreUnexported(v1.GitStatus{})); diff != "" {134t.Errorf("CapGitStatusLength (-want +got):\n%s", diff)135}136137bytes, err := json.Marshal(tt.input)138if err != nil {139t.Error(err)140}141if len(bytes) > GIT_STATUS_API_LIMIT_BYTES {142t.Errorf("JSON size exceeds GIT_STATUS_API_LIMIT_BYTES: %d (%d)", len(bytes), GIT_STATUS_API_LIMIT_BYTES)143}144})145}146}147148149