KevinStephenson
Adding in weaviate code
b110593
raw
history blame
5.39 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/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/client/batch"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/schema"
"github.com/weaviate/weaviate/test/helper"
)
func batchJourney(t *testing.T) {
sourcesSize := 10
targetsSize := 3
var sources []*models.Object
var targets []*models.Object
t.Run("create some data", func(t *testing.T) {
sources = make([]*models.Object, sourcesSize)
for i := range sources {
sources[i] = &models.Object{
Class: "BulkTestSource",
ID: mustNewUUID(),
Properties: map[string]interface{}{
"name": fmt.Sprintf("source%d", i),
},
}
}
targets = make([]*models.Object, targetsSize)
for i := range targets {
targets[i] = &models.Object{
Class: "BulkTest",
ID: mustNewUUID(),
Properties: map[string]interface{}{
"name": fmt.Sprintf("target%d", i),
},
}
}
})
t.Run("import all data in batch", func(t *testing.T) {
params := batch.NewBatchObjectsCreateParams().WithBody(
batch.BatchObjectsCreateBody{
Objects: append(sources, targets...),
},
)
res, err := helper.Client(t).Batch.BatchObjectsCreate(params, nil)
require.Nil(t, err)
for _, elem := range res.Payload {
assert.Nil(t, elem.Result.Errors)
}
})
t.Run("set one cref each from each source to all targets", func(t *testing.T) {
body := make([]*models.BatchReference, sourcesSize*targetsSize)
for i := range sources {
for j := range targets {
index := i*targetsSize + j
body[index] = &models.BatchReference{
From: strfmt.URI(
fmt.Sprintf("weaviate://localhost/BulkTestSource/%s/ref", sources[i].ID)),
To: strfmt.URI(fmt.Sprintf("weaviate://localhost/%s", targets[j].ID)),
}
}
}
params := batch.NewBatchReferencesCreateParams().WithBody(body)
res, err := helper.Client(t).Batch.BatchReferencesCreate(params, nil)
require.Nil(t, err)
for _, elem := range res.Payload {
assert.Nil(t, elem.Result.Errors)
}
})
t.Run("verify using GraphQL", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, `
{ Get { BulkTestSource { ref { ... on BulkTest { name } } } } }
`)
items := result.Get("Get", "BulkTestSource").AsSlice()
assert.Len(t, items, sourcesSize)
for _, obj := range items {
refs := obj.(map[string]interface{})["ref"].([]interface{})
assert.Len(t, refs, targetsSize)
}
})
}
func mustNewUUID() strfmt.UUID {
return strfmt.UUID(uuid.New().String())
}
func Test_BugFlakyResultCountWithVectorSearch(t *testing.T) {
className := "FlakyBugTestClass"
// since this bug occurs only in around 1 in 25 cases, we run the test
// multiple times to increase the chance we're running into it
amount := 50
for i := 0; i < amount; i++ {
t.Run("create schema", func(t *testing.T) {
createObjectClass(t, &models.Class{
Class: className,
Properties: []*models.Property{
{
Name: "title",
DataType: schema.DataTypeText.PropString(),
Tokenization: models.PropertyTokenizationWhitespace,
},
{
Name: "url",
DataType: schema.DataTypeText.PropString(),
Tokenization: models.PropertyTokenizationWhitespace,
},
{
Name: "wordCount",
DataType: []string{"int"},
},
},
})
})
t.Run("create and import some data", func(t *testing.T) {
objects := []*models.Object{
{
Class: className,
Properties: map[string]interface{}{
"title": "article 1",
"url": "http://articles.local/my-article-1",
"wordCount": 60,
},
},
{
Class: className,
Properties: map[string]interface{}{
"title": "article 2",
"url": "http://articles.local/my-article-2",
"wordCount": 40,
},
},
{
Class: className,
Properties: map[string]interface{}{
"title": "article 3",
"url": "http://articles.local/my-article-3",
"wordCount": 600,
},
},
}
params := batch.NewBatchObjectsCreateParams().WithBody(
batch.BatchObjectsCreateBody{
Objects: objects,
},
)
res, err := helper.Client(t).Batch.BatchObjectsCreate(params, nil)
require.Nil(t, err)
for _, elem := range res.Payload {
assert.Nil(t, elem.Result.Errors)
}
})
t.Run("verify using GraphQL", func(t *testing.T) {
result := AssertGraphQL(t, helper.RootAuth, fmt.Sprintf(`
{ Get { %s(nearText: {concepts: ["news"]}) {
wordCount title url
} } }
`, className))
items := result.Get("Get", className).AsSlice()
assert.Len(t, items, 3)
})
t.Run("cleanup", func(t *testing.T) {
deleteObjectClass(t, className)
})
}
}