SemanticSearchPOC / test /acceptance /grpc /grpc_test_deprecated.go
KevinStephenson
Adding in weaviate code
b110593
raw
history blame
5.18 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package test
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
pb "github.com/weaviate/weaviate/grpc/generated/protocol/v1"
"github.com/weaviate/weaviate/test/helper"
"github.com/weaviate/weaviate/test/helper/sample-schema/books"
"google.golang.org/grpc/health/grpc_health_v1"
)
func TestGRPCDeprecated(t *testing.T) {
conn, err := helper.CreateGrpcConnectionClient(":50051")
require.NoError(t, err)
require.NotNil(t, conn)
grpcClient := helper.CreateGrpcWeaviateClient(conn)
require.NotNil(t, grpcClient)
// create Books class
booksClass := books.ClassContextionaryVectorizer()
helper.CreateClass(t, booksClass)
defer helper.DeleteClass(t, booksClass.Class)
t.Run("Health Check", func(t *testing.T) {
client := grpc_health_v1.NewHealthClient(conn)
check, err := client.Check(context.TODO(), &grpc_health_v1.HealthCheckRequest{})
require.NoError(t, err)
require.NotNil(t, check)
assert.Equal(t, grpc_health_v1.HealthCheckResponse_SERVING.Enum().Number(), check.Status.Number())
})
t.Run("Batch import", func(t *testing.T) {
resp, err := grpcClient.BatchObjects(context.TODO(), &pb.BatchObjectsRequest{
Objects: books.BatchObjects(),
})
require.NoError(t, err)
require.NotNil(t, resp)
})
tests := []struct {
name string
req *pb.SearchRequest
}{
{
name: "Search with props",
req: &pb.SearchRequest{
Collection: booksClass.Class,
Properties: &pb.PropertiesRequest{
NonRefProperties: []string{"title"},
ObjectProperties: []*pb.ObjectPropertiesRequest{
{
PropName: "meta",
PrimitiveProperties: []string{"isbn"},
ObjectProperties: []*pb.ObjectPropertiesRequest{
{
PropName: "obj",
PrimitiveProperties: []string{"text"},
},
{
PropName: "objs",
PrimitiveProperties: []string{"text"},
},
},
},
{PropName: "reviews", PrimitiveProperties: []string{"tags"}},
},
},
Metadata: &pb.MetadataRequest{
Uuid: true,
},
Uses_123Api: false,
},
},
{
name: "Search without props",
req: &pb.SearchRequest{
Collection: booksClass.Class,
Metadata: &pb.MetadataRequest{
Uuid: true,
},
Uses_123Api: false,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
scifi := "sci-fi"
resp, err := grpcClient.Search(context.TODO(), tt.req)
require.NoError(t, err)
require.NotNil(t, resp)
require.NotNil(t, resp.Results)
assert.Equal(t, len(books.BatchObjects()), len(resp.Results))
for i := range resp.Results {
res := resp.Results[i]
id := res.Metadata.Id
assert.True(t, id == books.Dune.String() || id == books.ProjectHailMary.String() || id == books.TheLordOfTheIceGarden.String())
title, ok := res.Properties.NonRefProperties.AsMap()["title"]
require.True(t, ok)
objProps := res.Properties.ObjectProperties
require.Len(t, objProps, 1)
isbn, ok := objProps[0].Value.NonRefProperties.AsMap()["isbn"]
require.True(t, ok)
nestedObjProps := objProps[0].Value.ObjectProperties
require.Len(t, nestedObjProps, 1)
nestedObj := nestedObjProps[0].Value.NonRefProperties.AsMap()
nestedObjArrayProps := objProps[0].Value.ObjectArrayProperties
require.Len(t, nestedObjArrayProps, 1)
nestedObjEntry := nestedObjArrayProps[0].Values[0].NonRefProperties.AsMap()
objArrayProps := res.Properties.ObjectArrayProperties
require.Len(t, objArrayProps, 1)
tags := objArrayProps[0].Values[0].TextArrayProperties[0].Values
require.True(t, ok)
expectedTitle := ""
expectedIsbn := ""
expectedTags := []string{}
if id == books.Dune.String() {
expectedTitle = "Dune"
expectedIsbn = "978-0593099322"
expectedTags = []string{scifi, "epic"}
}
if id == books.ProjectHailMary.String() {
expectedTitle = "Project Hail Mary"
expectedIsbn = "978-0593135204"
expectedTags = []string{scifi}
}
if id == books.TheLordOfTheIceGarden.String() {
expectedTitle = "The Lord of the Ice Garden"
expectedIsbn = "978-8374812962"
expectedTags = []string{scifi, "fantasy"}
}
assert.Equal(t, expectedTitle, title)
assert.Equal(t, expectedIsbn, isbn)
assert.Equal(t, expectedTags, tags)
assert.Equal(t, map[string]interface{}{"text": "some text"}, nestedObj)
assert.Equal(t, map[string]interface{}{"text": "some text"}, nestedObjEntry)
}
})
}
t.Run("gRPC Search removed", func(t *testing.T) {
_, err := grpcClient.Search(context.TODO(), &pb.SearchRequest{})
require.NotNil(t, err)
})
}