Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ 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) | |
}) | |
} | |