mirror of https://github.com/milvus-io/milvus.git
155 lines
6.1 KiB
Go
155 lines
6.1 KiB
Go
package dao
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/milvus-io/milvus/internal/metastore/db/dbmodel"
|
|
"github.com/milvus-io/milvus/internal/util/typeutil"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestPartition_GetByCollID(t *testing.T) {
|
|
var partitions = []*dbmodel.Partition{
|
|
{
|
|
TenantID: tenantID,
|
|
PartitionID: fieldID1,
|
|
PartitionName: "test_field_1",
|
|
PartitionCreatedTimestamp: typeutil.Timestamp(1000),
|
|
CollectionID: collID1,
|
|
Ts: ts,
|
|
},
|
|
}
|
|
|
|
// expectation
|
|
mock.ExpectQuery("SELECT * FROM `partitions` WHERE tenant_id = ? AND collection_id = ? AND ts = ? AND is_deleted = false").
|
|
WithArgs(tenantID, collID1, ts).
|
|
WillReturnRows(
|
|
sqlmock.NewRows([]string{"tenant_id", "partition_id", "partition_name", "partition_created_timestamp", "collection_id", "ts"}).
|
|
AddRow(partitions[0].TenantID, partitions[0].PartitionID, partitions[0].PartitionName, partitions[0].PartitionCreatedTimestamp, partitions[0].CollectionID, partitions[0].Ts))
|
|
|
|
// actual
|
|
res, err := partitionTestDb.GetByCollectionID(tenantID, collID1, ts)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, partitions, res)
|
|
}
|
|
|
|
func TestPartition_GetByCollID_Error(t *testing.T) {
|
|
// expectation
|
|
mock.ExpectQuery("SELECT * FROM `partitions` WHERE tenant_id = ? AND collection_id = ? AND ts = ? AND is_deleted = false").
|
|
WithArgs(tenantID, collID1, ts).
|
|
WillReturnError(errors.New("test error"))
|
|
|
|
// actual
|
|
res, err := partitionTestDb.GetByCollectionID(tenantID, collID1, ts)
|
|
assert.Nil(t, res)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestPartition_Insert(t *testing.T) {
|
|
var partitions = []*dbmodel.Partition{
|
|
{
|
|
TenantID: tenantID,
|
|
PartitionID: fieldID1,
|
|
PartitionName: "test_field_1",
|
|
PartitionCreatedTimestamp: typeutil.Timestamp(1000),
|
|
CollectionID: collID1,
|
|
Ts: ts,
|
|
IsDeleted: false,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
}
|
|
|
|
// expectation
|
|
mock.ExpectBegin()
|
|
mock.ExpectExec("INSERT INTO `partitions` (`tenant_id`,`partition_id`,`partition_name`,`partition_created_timestamp`,`collection_id`,`status`,`ts`,`is_deleted`,`created_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?)").
|
|
WithArgs(partitions[0].TenantID, partitions[0].PartitionID, partitions[0].PartitionName, partitions[0].PartitionCreatedTimestamp, partitions[0].CollectionID, partitions[0].Status, partitions[0].Ts, partitions[0].IsDeleted, partitions[0].CreatedAt, partitions[0].UpdatedAt).
|
|
WillReturnResult(sqlmock.NewResult(1, 1))
|
|
mock.ExpectCommit()
|
|
|
|
// actual
|
|
err := partitionTestDb.Insert(partitions)
|
|
assert.Nil(t, err)
|
|
}
|
|
|
|
func TestPartition_Insert_Error(t *testing.T) {
|
|
var partitions = []*dbmodel.Partition{
|
|
{
|
|
TenantID: tenantID,
|
|
PartitionID: fieldID1,
|
|
PartitionName: "test_field_1",
|
|
PartitionCreatedTimestamp: typeutil.Timestamp(1000),
|
|
CollectionID: collID1,
|
|
Ts: ts,
|
|
IsDeleted: false,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
}
|
|
|
|
// expectation
|
|
mock.ExpectBegin()
|
|
mock.ExpectExec("INSERT INTO `partitions` (`tenant_id`,`partition_id`,`partition_name`,`partition_created_timestamp`,`collection_id`,`ts`,`is_deleted`,`created_at`,`updated_at`) VALUES (?,?,?,?,?,?,?,?,?)").
|
|
WithArgs(partitions[0].TenantID, partitions[0].PartitionID, partitions[0].PartitionName, partitions[0].PartitionCreatedTimestamp, partitions[0].CollectionID, partitions[0].Ts, partitions[0].IsDeleted, partitions[0].CreatedAt, partitions[0].UpdatedAt).
|
|
WillReturnError(errors.New("test error"))
|
|
mock.ExpectRollback()
|
|
|
|
// actual
|
|
err := partitionTestDb.Insert(partitions)
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func Test_partitionDb_Update(t *testing.T) {
|
|
t.Run("normal case", func(t *testing.T) {
|
|
partition := &dbmodel.Partition{
|
|
ID: 100,
|
|
TenantID: tenantID,
|
|
PartitionID: fieldID1,
|
|
PartitionName: "test_field_1",
|
|
PartitionCreatedTimestamp: typeutil.Timestamp(1000),
|
|
CollectionID: collID1,
|
|
Ts: ts,
|
|
IsDeleted: false,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
mock.ExpectBegin()
|
|
mock.ExpectExec("UPDATE `partitions` SET `collection_id`=?,`created_at`=?,`is_deleted`=?,`partition_created_timestamp`=?,`partition_id`=?,`partition_name`=?,`status`=?,`tenant_id`=?,`ts`=?,`updated_at`=? WHERE id = ?").
|
|
WithArgs(partition.CollectionID, partition.CreatedAt, partition.IsDeleted, partition.PartitionCreatedTimestamp, partition.PartitionID, partition.PartitionName, partition.Status, partition.TenantID, partition.Ts, partition.UpdatedAt, partition.ID).
|
|
WillReturnResult(sqlmock.NewResult(1, 1))
|
|
mock.ExpectCommit()
|
|
|
|
err := partitionTestDb.Update(partition)
|
|
assert.NoError(t, err)
|
|
})
|
|
|
|
t.Run("error case", func(t *testing.T) {
|
|
partition := &dbmodel.Partition{
|
|
ID: 100,
|
|
TenantID: tenantID,
|
|
PartitionID: fieldID1,
|
|
PartitionName: "test_field_1",
|
|
PartitionCreatedTimestamp: typeutil.Timestamp(1000),
|
|
CollectionID: collID1,
|
|
Ts: ts,
|
|
IsDeleted: false,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
mock.ExpectBegin()
|
|
mock.ExpectExec("UPDATE `partitions` SET `collection_id`=?,`created_at`=?,`is_deleted`=?,`partition_created_timestamp`=?,`partition_id`=?,`partition_name`=?,`status`=?,`tenant_id`=?,`ts`=?,`updated_at`=? WHERE id = ?").
|
|
WithArgs(partition.CollectionID, partition.CreatedAt, partition.IsDeleted, partition.PartitionCreatedTimestamp, partition.PartitionID, partition.PartitionName, partition.Status, partition.TenantID, partition.Ts, partition.UpdatedAt, partition.ID).
|
|
WillReturnError(errors.New("error mock Update Partition"))
|
|
mock.ExpectRollback()
|
|
|
|
err := partitionTestDb.Update(partition)
|
|
assert.Error(t, err)
|
|
})
|
|
|
|
}
|