SemanticSearchPOC / usecases /objects /replication_test.go
KevinStephenson
Adding in weaviate code
b110593
raw
history blame
7.49 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package objects
import (
"testing"
"time"
"github.com/go-openapi/strfmt"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/schema/crossref"
"github.com/weaviate/weaviate/entities/storobj"
)
func Test_VObject_MarshalBinary(t *testing.T) {
now := time.Now()
vec := []float32{1, 2, 3, 4, 5}
obj := models.Object{
ID: strfmt.UUID("c6f85bf5-c3b7-4c1d-bd51-e899f9605336"),
Class: "SomeClass",
CreationTimeUnix: now.UnixMilli(),
LastUpdateTimeUnix: now.Add(time.Hour).UnixMilli(), // time-traveling ;)
Properties: map[string]interface{}{
"propA": "this is prop A",
"propB": "this is prop B",
"someDate": now.Format(time.RFC3339Nano),
"aNumber": 1e+06,
"crossRef": map[string]interface{}{
"beacon": "weaviate://localhost/OtherClass/c82d011c-f05a-43de-8a8a-ee9c814d4cfb",
},
},
Vector: vec,
Additional: map[string]interface{}{
"score": 0.055465422484,
},
}
t.Run("when object is present", func(t *testing.T) {
expected := VObject{
LatestObject: &obj,
StaleUpdateTime: now.UnixMilli(),
Version: 1,
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received VObject
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.EqualValues(t, expected, received)
})
t.Run("when object is present", func(t *testing.T) {
expected := VObject{
LatestObject: &obj,
StaleUpdateTime: now.UnixMilli(),
Version: 1,
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received VObject
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.EqualValues(t, expected, received)
})
t.Run("when object is nil", func(t *testing.T) {
expected := VObject{
LatestObject: nil,
StaleUpdateTime: now.UnixMilli(),
Version: 1,
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received VObject
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.EqualValues(t, expected, received)
})
}
func Test_Replica_MarshalBinary(t *testing.T) {
now := time.Now()
vec := []float32{1, 2, 3, 4, 5}
id := strfmt.UUID("c6f85bf5-c3b7-4c1d-bd51-e899f9605336")
obj := storobj.Object{
MarshallerVersion: 1,
Object: models.Object{
ID: id,
Class: "SomeClass",
CreationTimeUnix: now.UnixMilli(),
LastUpdateTimeUnix: now.Add(time.Hour).UnixMilli(), // time-traveling ;)
Properties: map[string]interface{}{
"propA": "this is prop A",
"propB": "this is prop B",
"someDate": now.Format(time.RFC3339Nano),
"aNumber": 1e+06,
"crossRef": models.MultipleRef{
crossref.NewLocalhost("OtherClass", id).
SingleRef(),
},
},
Additional: map[string]interface{}{
"score": 0.055465422484,
},
},
Vector: vec,
VectorLen: 5,
}
t.Run("when object is present", func(t *testing.T) {
expected := Replica{
Object: &obj,
ID: obj.ID(),
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received Replica
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.EqualValues(t, expected.Object, received.Object)
assert.EqualValues(t, expected.ID, received.ID)
assert.EqualValues(t, expected.Deleted, received.Deleted)
})
t.Run("when object is nil", func(t *testing.T) {
expected := Replica{
Object: nil,
ID: obj.ID(),
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received Replica
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.EqualValues(t, expected.Object, received.Object)
assert.EqualValues(t, expected.ID, received.ID)
assert.EqualValues(t, expected.Deleted, received.Deleted)
})
}
func Test_Replicas_MarshalBinary(t *testing.T) {
now := time.Now()
vec1 := []float32{1, 2, 3, 4, 5}
vec2 := []float32{10, 20, 30, 40, 50}
id1 := strfmt.UUID("c6f85bf5-c3b7-4c1d-bd51-e899f9605336")
id2 := strfmt.UUID("88750a99-a72d-46c2-a582-89f02654391d")
obj1 := storobj.Object{
MarshallerVersion: 1,
Object: models.Object{
ID: id1,
Class: "SomeClass",
CreationTimeUnix: now.UnixMilli(),
LastUpdateTimeUnix: now.Add(time.Hour).UnixMilli(), // time-traveling ;)
Properties: map[string]interface{}{
"propA": "this is prop A",
"propB": "this is prop B",
"someDate": now.Format(time.RFC3339Nano),
"aNumber": 1e+06,
"crossRef": models.MultipleRef{
crossref.NewLocalhost("OtherClass", id1).
SingleRef(),
},
},
Additional: map[string]interface{}{
"score": 0.055465422484,
},
},
Vector: vec1,
VectorLen: 5,
}
obj2 := storobj.Object{
MarshallerVersion: 1,
Object: models.Object{
ID: id2,
Class: "SomeClass",
CreationTimeUnix: now.UnixMilli(),
LastUpdateTimeUnix: now.Add(time.Hour).UnixMilli(), // time-traveling ;)
Properties: map[string]interface{}{
"propA": "this is prop A",
"propB": "this is prop B",
"someDate": now.Format(time.RFC3339Nano),
"aNumber": 1e+06,
"crossRef": models.MultipleRef{
crossref.NewLocalhost("OtherClass", id2).
SingleRef(),
},
},
Additional: map[string]interface{}{
"score": 0.055465422484,
},
},
Vector: vec2,
VectorLen: 5,
}
t.Run("when objects are present", func(t *testing.T) {
expected := Replicas{
{
Object: &obj1,
ID: obj1.ID(),
},
{
Object: &obj2,
ID: obj2.ID(),
},
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received Replicas
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.Len(t, received, 2)
assert.EqualValues(t, expected[0].Object, received[0].Object)
assert.EqualValues(t, expected[0].ID, received[0].ID)
assert.EqualValues(t, expected[0].Deleted, received[0].Deleted)
assert.EqualValues(t, expected[1].Object, received[1].Object)
assert.EqualValues(t, expected[1].ID, received[1].ID)
assert.EqualValues(t, expected[1].Deleted, received[1].Deleted)
})
t.Run("when there is a nil object", func(t *testing.T) {
expected := Replicas{
{
Object: &obj1,
ID: obj1.ID(),
},
{
Object: nil,
ID: obj2.ID(),
},
}
b, err := expected.MarshalBinary()
require.Nil(t, err)
var received Replicas
err = received.UnmarshalBinary(b)
require.Nil(t, err)
assert.Len(t, received, 2)
assert.EqualValues(t, expected[0].Object, received[0].Object)
assert.EqualValues(t, expected[0].ID, received[0].ID)
assert.EqualValues(t, expected[0].Deleted, received[0].Deleted)
assert.EqualValues(t, expected[1].Object, received[1].Object)
assert.EqualValues(t, expected[1].ID, received[1].ID)
assert.EqualValues(t, expected[1].Deleted, received[1].Deleted)
})
}