package meta

import (
	"testing"

	"github.com/nspcc-dev/neofs-api-go/pkg/object"
	"github.com/stretchr/testify/require"
)

func BenchmarkDB_Delete(b *testing.B) {
	db := newDB(b)

	defer releaseDB(db)

	var existingAddr *object.Address

	for i := 0; i < 10; i++ {
		obj := generateObject(b, testPrm{})

		existingAddr = obj.Address()

		require.NoError(b, db.Put(obj))
	}

	b.Run("existing address", func(b *testing.B) {
		b.ReportAllocs()
		b.ResetTimer()

		for i := 0; i < b.N; i++ {
			err := db.Delete(existingAddr)

			b.StopTimer()
			require.NoError(b, err)
			b.StartTimer()
		}
	})

	b.Run("non-existing address", func(b *testing.B) {
		b.ReportAllocs()
		b.ResetTimer()

		for i := 0; i < b.N; i++ {
			b.StopTimer()
			addr := object.NewAddress()
			addr.SetContainerID(testCID())
			addr.SetObjectID(testOID())
			b.StartTimer()

			err := db.Delete(addr)

			b.StopTimer()
			require.NoError(b, err)
			b.StartTimer()
		}
	})
}

func TestDB_DeleteObjects(t *testing.T) {
	db := newDB(t)
	defer releaseDB(db)

	o1 := generateObject(t, testPrm{})
	o2 := generateObject(t, testPrm{})

	require.NoError(t, db.Put(o1))
	require.NoError(t, db.Put(o2))

	db.DeleteObjects(o1.Address(), o2.Address())

	testSelect(t, db, object.SearchFilters{})
}