Skip to content

Commit

Permalink
fix(firestore): Cleanup integration test resources (#8057)
Browse files Browse the repository at this point in the history
* fix(datastore): Cleanup composite indexes

* fix(firestore): Cleanup integration test resources
  • Loading branch information
bhshkh committed Jun 12, 2023
1 parent 36f01e9 commit 210584d
Showing 1 changed file with 61 additions and 11 deletions.
72 changes: 61 additions & 11 deletions firestore/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import (
"cloud.google.com/go/internal/uid"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
"google.golang.org/genproto/googleapis/type/latlng"
"google.golang.org/grpc/codes"
Expand All @@ -61,6 +62,8 @@ var (
iAdminClient *apiv1.FirestoreAdminClient
iColl *CollectionRef
collectionIDs = uid.NewSpace("go-integration-test", nil)
wantDBPath string
indexNames []string
)

func initIntegrationTest() {
Expand All @@ -81,7 +84,7 @@ func initIntegrationTest() {
log.Fatal("The project key must be set. See CONTRIBUTING.md for details")
}
projectPath := "projects/" + testProjectID
wantDBPath := projectPath + "/databases/(default)"
wantDBPath = projectPath + "/databases/(default)"

ti := &testutil.HeadersEnforcer{
Checkers: []*testutil.HeaderChecker{
Expand Down Expand Up @@ -131,10 +134,11 @@ func createIndexes(ctx context.Context, dbPath string) {
var createIndexWg sync.WaitGroup

indexFields := [][]string{{"updatedAt", "weight", "height"}, {"weight", "height"}}
indexNames = make([]string, len(indexFields))
indexParent := fmt.Sprintf("%s/collectionGroups/%s", dbPath, iColl.ID)

createIndexWg.Add(len(indexFields))
for _, fields := range indexFields {
for i, fields := range indexFields {
var adminPbIndexFields []*adminpb.Index_IndexField
for _, field := range fields {
adminPbIndexFields = append(adminPbIndexFields, &adminpb.Index_IndexField{
Expand All @@ -151,25 +155,71 @@ func createIndexes(ctx context.Context, dbPath string) {
Fields: adminPbIndexFields,
},
}
go func(req *adminpb.CreateIndexRequest) {
op, err := iAdminClient.CreateIndex(ctx, req)
if err != nil {
log.Fatalf("CreateIndex: %v", err)
go func(req *adminpb.CreateIndexRequest, i int) {
op, createErr := iAdminClient.CreateIndex(ctx, req)
if createErr != nil {
log.Fatalf("CreateIndex: %v", createErr)
}

_, err = op.Wait(ctx)
if err != nil {
log.Fatalf("Wait: %v", err)
createdIndex, waitErr := op.Wait(ctx)
if waitErr != nil {
log.Fatalf("Wait: %v", waitErr)
}
indexNames[i] = createdIndex.Name
createIndexWg.Done()
}(req)
}(req, i)
}
createIndexWg.Wait()
}

// deleteIndexes deletes composite indexes created in createIndexes function
func deleteIndexes(ctx context.Context) {
for _, indexName := range indexNames {
err := iAdminClient.DeleteIndex(ctx, &adminpb.DeleteIndexRequest{
Name: indexName,
})
if err != nil {
log.Printf("Failed to delete index \"%s\": %+v\n", indexName, err)
}
}
}

// deleteCollection recursively deletes the documents in the specified collection
func deleteCollection(ctx context.Context, coll *CollectionRef) error {
bulkwriter := iClient.BulkWriter(ctx)

// Get documents
iter := coll.Documents(ctx)

// Iterate through the documents, adding
// a delete operation for each one to the BulkWriter.
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Printf("Failed to get next document: %+v\n", err)
return err
}

_, err = bulkwriter.Delete(doc.Ref)
if err != nil {
log.Printf("Failed to delete document: %+v, err: %+v\n", doc.Ref, err)
}
}

bulkwriter.End()
bulkwriter.Flush()

return nil
}

func cleanupIntegrationTest() {
if iClient != nil {
// TODO(jba): delete everything in integrationColl.
ctx := context.Background()
deleteIndexes(ctx)
deleteCollection(ctx, iColl)
iClient.Close()
}

Expand Down

0 comments on commit 210584d

Please sign in to comment.