KevinStephenson
Adding in weaviate code
b110593
raw
history blame
9.55 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package batch_request_endpoints
import (
"fmt"
"testing"
"github.com/go-openapi/strfmt"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/client/batch"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/test/helper"
)
func batchDeleteJourney(t *testing.T) {
maxObjects := 20
var sources []*models.Object
equalThisName := "equal-this-name"
getBatchDelete := func(className string, path []string, valueText string, dryRun bool) *batch.BatchObjectsDeleteParams {
output := "verbose"
params := batch.NewBatchObjectsDeleteParams().WithBody(&models.BatchDelete{
Match: &models.BatchDeleteMatch{
Class: className,
Where: &models.WhereFilter{
Operator: "Equal",
Path: path,
ValueText: &valueText,
},
},
DryRun: &dryRun,
Output: &output,
})
return params
}
sourceUUIDs := make([]strfmt.UUID, maxObjects)
targetUUIDs := make([]strfmt.UUID, maxObjects)
t.Run("create some data", func(t *testing.T) {
sources = make([]*models.Object, maxObjects)
for i := range sources {
uuid := mustNewUUID()
sources[i] = &models.Object{
Class: "BulkTestSource",
ID: uuid,
Properties: map[string]interface{}{
"name": equalThisName,
},
}
sourceUUIDs[i] = uuid
}
targets := make([]*models.Object, maxObjects)
for i := range targets {
uuid := mustNewUUID()
targets[i] = &models.Object{
Class: "BulkTestTarget",
ID: uuid,
Properties: map[string]interface{}{
"intProp": i,
},
}
targetUUIDs[i] = uuid
}
})
t.Run("import all batch objects", func(t *testing.T) {
params := batch.NewBatchObjectsCreateParams().WithBody(
batch.BatchObjectsCreateBody{
Objects: sources,
},
)
res, err := helper.Client(t).Batch.BatchObjectsCreate(params, nil)
require.Nil(t, err)
for _, elem := range res.Payload {
require.Nil(t, elem.Result.Errors)
}
})
t.Run("import all batch refs", func(t *testing.T) {
batchRefs := make([]*models.BatchReference, len(sources))
for i := range batchRefs {
batchRefs[i] = &models.BatchReference{
From: strfmt.URI(fmt.Sprintf("weaviate://localhost/%s/%s/fromSource", "BulkTestTarget", targetUUIDs[i])),
To: strfmt.URI(fmt.Sprintf("weaviate://localhost/%s", sourceUUIDs[i])),
}
}
params := batch.NewBatchReferencesCreateParams().WithBody(batchRefs)
res, err := helper.Client(t).Batch.BatchReferencesCreate(params, nil)
require.Nil(t, err)
for _, elem := range res.Payload {
require.Nil(t, elem.Result.Errors)
}
})
t.Run("verify using GraphQL", func(t *testing.T) {
// verify objects
result := AssertGraphQL(t, helper.RootAuth, `
{ Get { BulkTestSource(where:{operator:Equal path:["name"] valueText:"equal-this-name"}) { name } } }
`)
items := result.Get("Get", "BulkTestSource").AsSlice()
require.Len(t, items, maxObjects)
// verify refs
result = AssertGraphQL(t, helper.RootAuth, `
{
Get {
BulkTestTarget
(
where: {
path: ["fromSource", "BulkTestSource", "name"]
operator: Equal
valueText: "equal-this-name"
}
)
{
fromSource {
... on BulkTestSource {
_additional {
id
}
}
}
}
}
}
`)
items = result.Get("Get", "BulkTestTarget").AsSlice()
for _, item := range items {
fromSource := item.(map[string]interface{})["fromSource"]
require.NotNil(t, fromSource)
}
require.Len(t, items, maxObjects)
})
t.Run("perform batch delete by refs dry run", func(t *testing.T) {
params := getBatchDelete("BulkTestTarget", []string{"fromSource", "BulkTestSource", "name"}, equalThisName, true)
res, err := helper.Client(t).Batch.BatchObjectsDelete(params, nil)
require.Nil(t, err)
response := res.Payload
require.NotNil(t, response)
require.NotNil(t, response.Match)
require.NotNil(t, response.Results)
require.Equal(t, int64(maxObjects), response.Results.Matches)
require.Equal(t, int64(0), response.Results.Successful)
require.Equal(t, int64(0), response.Results.Failed)
require.Equal(t, maxObjects, len(response.Results.Objects))
for _, elem := range response.Results.Objects {
require.Nil(t, elem.Errors)
}
})
t.Run("[deprecated string] perform batch delete by refs dry run", func(t *testing.T) {
params := getBatchDelete("BulkTestTarget", []string{"fromSource", "BulkTestSource", "name"}, equalThisName, true)
params.Body.Match.Where.ValueText = nil
params.Body.Match.Where.ValueString = &equalThisName
res, err := helper.Client(t).Batch.BatchObjectsDelete(params, nil)
require.Nil(t, err)
response := res.Payload
require.NotNil(t, response)
require.NotNil(t, response.Match)
require.NotNil(t, response.Results)
require.Equal(t, int64(maxObjects), response.Results.Matches)
require.Equal(t, int64(0), response.Results.Successful)
require.Equal(t, int64(0), response.Results.Failed)
require.Equal(t, maxObjects, len(response.Results.Objects))
for _, elem := range response.Results.Objects {
require.Nil(t, elem.Errors)
}
})
t.Run("verify that batch delete by refs dry run didn't delete data", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, `
{
Get {
BulkTestTarget
(
where: {
path: ["fromSource", "BulkTestSource", "name"]
operator: Equal
valueText: "equal-this-name"
}
)
{
fromSource {
... on BulkTestSource {
_additional {
id
}
}
}
}
}
}
`)
items := result.Get("Get", "BulkTestTarget").AsSlice()
require.Len(t, items, maxObjects)
})
t.Run("perform batch delete by prop dry run", func(t *testing.T) {
params := getBatchDelete("BulkTestSource", []string{"name"}, equalThisName, true)
res, err := helper.Client(t).Batch.BatchObjectsDelete(params, nil)
require.Nil(t, err)
response := res.Payload
require.NotNil(t, response)
require.NotNil(t, response.Match)
require.NotNil(t, response.Results)
require.Equal(t, int64(maxObjects), response.Results.Matches)
require.Equal(t, int64(0), response.Results.Successful)
require.Equal(t, int64(0), response.Results.Failed)
require.Equal(t, maxObjects, len(response.Results.Objects))
for _, elem := range response.Results.Objects {
require.Nil(t, elem.Errors)
}
})
t.Run("verify that batch delete by prop dry run didn't delete data", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, `
{ Get { BulkTestSource(where:{operator:Equal path:["name"] valueText:"equal-this-name"}) { name } } }
`)
items := result.Get("Get", "BulkTestSource").AsSlice()
require.Len(t, items, maxObjects)
})
t.Run("perform batch delete by ref", func(t *testing.T) {
params := getBatchDelete("BulkTestTarget", []string{"fromSource", "BulkTestSource", "name"}, equalThisName, false)
res, err := helper.Client(t).Batch.BatchObjectsDelete(params, nil)
require.Nil(t, err)
response := res.Payload
require.NotNil(t, response)
require.NotNil(t, response.Match)
require.NotNil(t, response.Results)
require.Equal(t, int64(maxObjects), response.Results.Matches)
require.Equal(t, int64(maxObjects), response.Results.Successful)
require.Equal(t, int64(0), response.Results.Failed)
require.Equal(t, maxObjects, len(response.Results.Objects))
for _, elem := range response.Results.Objects {
require.Nil(t, elem.Errors)
}
})
t.Run("verify that batch delete by ref deleted everything", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, `
{
Get {
BulkTestTarget
(
where: {
path: ["fromSource", "BulkTestSource", "name"]
operator: Equal
valueText: "equal-this-name"
}
)
{
fromSource {
... on BulkTestSource {
_additional {
id
}
}
}
}
}
}
`)
items := result.Get("Get", "BulkTestTarget").AsSlice()
require.Len(t, items, 0)
})
t.Run("perform batch delete by prop", func(t *testing.T) {
params := getBatchDelete("BulkTestSource", []string{"name"}, equalThisName, false)
res, err := helper.Client(t).Batch.BatchObjectsDelete(params, nil)
require.Nil(t, err)
response := res.Payload
require.NotNil(t, response)
require.NotNil(t, response.Match)
require.NotNil(t, response.Results)
require.Equal(t, int64(maxObjects), response.Results.Matches)
require.Equal(t, int64(maxObjects), response.Results.Successful)
require.Equal(t, int64(0), response.Results.Failed)
require.Equal(t, maxObjects, len(response.Results.Objects))
for _, elem := range response.Results.Objects {
require.Nil(t, elem.Errors)
}
})
t.Run("verify that batch delete by prop deleted everything", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, `
{ Get { BulkTestSource(where:{operator:Equal path:["name"] valueText:"equal-this-name"}) { name } } }
`)
items := result.Get("Get", "BulkTestSource").AsSlice()
require.Len(t, items, 0)
})
}