Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 58 additions & 35 deletions dev/gqltest/external_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"

"github.com/google/go-cmp/cmp"
"github.com/stretchr/testify/assert"

"github.com/sourcegraph/sourcegraph/internal/extsvc"
"github.com/sourcegraph/sourcegraph/internal/gqltestutil"
Expand Down Expand Up @@ -161,39 +162,49 @@ func TestExternalService_BitbucketServer(t *testing.T) {
}

func TestExternalService_Perforce(t *testing.T) {
const repoName = "perforce/test-perms"

run := func(t *testing.T, useFusion bool) {
checkPerforceEnvironment(t)
// Make sure the repo wasn't already cloned by another test
if err := client.DeleteRepoFromDiskByName(repoName); err != nil {
t.Fatal(err)
}
createPerforceExternalService(t, useFusion)

err := client.WaitForReposToBeCloned(repoName)
if err != nil {
t.Fatal(err)
}

blob, err := client.GitBlob(repoName, "master", "README.md")
if err != nil {
t.Fatal(err)
}

wantBlob := `This depot is used to test user and group permissions.
`
if diff := cmp.Diff(wantBlob, blob); diff != "" {
t.Fatalf("Blob mismatch (-want +got):\n%s", diff)
}
for _, tc := range []struct {
name string
depot string
useFusion bool
blobPath string
wantBlob string
}{
{
name: "git p4",
depot: "test-perms",
useFusion: false,
blobPath: "README.md",
wantBlob: `This depot is used to test user and group permissions.
`,
},
{
name: "p4 fusion",
depot: "integration-test-depot",
useFusion: true,
blobPath: "path.txt",
wantBlob: `./
`,
},
} {
t.Run(tc.name, func(t *testing.T) {
repoName := "perforce/" + tc.depot
checkPerforceEnvironment(t)
cleanup := createPerforceExternalService(t, tc.depot, tc.useFusion)
t.Cleanup(cleanup)

err := client.WaitForReposToBeCloned(repoName)
if err != nil {
t.Fatal(err)
}

blob, err := client.GitBlob(repoName, "master", tc.blobPath)
if err != nil {
t.Fatal(err)
}

assert.Equal(t, tc.wantBlob, blob)
})
}

t.Run("git-p4", func(t *testing.T) {
run(t, false)
})
t.Run("p4-fusion", func(t *testing.T) {
run(t, true)
})
}

func checkPerforceEnvironment(t *testing.T) {
Expand All @@ -202,7 +213,10 @@ func checkPerforceEnvironment(t *testing.T) {
}
}

func createPerforceExternalService(t *testing.T, useP4Fusion bool) {
// createPerforceExternalService creates an Perforce external service that
// includes the supplied depot. It returns a function to cleanup after the test
// which will delete the depot from disk and remove the external service.
func createPerforceExternalService(t *testing.T, depot string, useP4Fusion bool) func() {
t.Helper()

type Authorization = struct {
Expand All @@ -229,7 +243,7 @@ func createPerforceExternalService(t *testing.T, useP4Fusion bool) {
P4Port: *perforcePort,
P4User: *perforceUser,
P4Password: *perforcePassword,
Depots: []string{"//test-perms/"},
Depots: []string{"//" + depot + "/"},
RepositoryPathPattern: "perforce/{depot}",
FusionClient: FusionClient{
Enabled: useP4Fusion,
Expand All @@ -246,7 +260,16 @@ func createPerforceExternalService(t *testing.T, useP4Fusion bool) {
if err != nil && !strings.Contains(err.Error(), "/sync-external-service") {
t.Fatal(err)
}
removeExternalServiceAfterTest(t, esID)

return func() {
if err := client.DeleteRepoFromDiskByName("perforce/" + depot); err != nil {
t.Fatalf("removing depot from disk: %v", err)
}

if err := client.DeleteExternalService(esID, false); err != nil {
t.Fatalf("removing external service: %v", err)
}
}
}

func TestExternalService_AsyncDeletion(t *testing.T) {
Expand Down
7 changes: 5 additions & 2 deletions dev/gqltest/sub_repo_permissions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ import (

const (
perforceRepoName = "perforce/test-perms"
testPermsDepot = "test-perms"
aliceEmail = "[email protected]"
aliceUsername = "alice"
)

func TestSubRepoPermissionsPerforce(t *testing.T) {
checkPerforceEnvironment(t)
enableSubRepoPermissions(t)
createPerforceExternalService(t, false)
cleanup := createPerforceExternalService(t, testPermsDepot, false)
t.Cleanup(cleanup)
userClient, repoName := createTestUserAndWaitForRepo(t)

// Test cases
Expand Down Expand Up @@ -81,7 +83,8 @@ func TestSubRepoPermissionsPerforce(t *testing.T) {
func TestSubRepoPermissionsSearch(t *testing.T) {
checkPerforceEnvironment(t)
enableSubRepoPermissions(t)
createPerforceExternalService(t, false)
cleanup := createPerforceExternalService(t, testPermsDepot, false)
t.Cleanup(cleanup)
userClient, _ := createTestUserAndWaitForRepo(t)

err := client.WaitForReposToBeIndexed(perforceRepoName)
Expand Down