MCPcopy Create free account
hub / github.com/nutsdb/nutsdb / TestDB_DataStructureSetWriteRecordLimit

Function TestDB_DataStructureSetWriteRecordLimit

db_test.go:1832–1896  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1830}
1831
1832func TestDB_DataStructureSetWriteRecordLimit(t *testing.T) {
1833 // Set default options and limitCount.
1834 opts := DefaultOptions
1835 limitCount := int64(1000)
1836 opts.MaxWriteRecordCount = limitCount
1837 // Define bucket names.
1838 bucket1 := "bucket1"
1839 bucket2 := "bucket2"
1840 // Loop through EntryIdxModes.
1841 for _, idxMode := range []EntryIdxMode{HintKeyValAndRAMIdxMode, HintKeyAndRAMIdxMode} {
1842 opts.EntryIdxMode = idxMode
1843 runNutsDBTest(t, &opts, func(t *testing.T, db *DB) {
1844 txCreateBucket(t, db, DataStructureSet, bucket1, nil)
1845 txCreateBucket(t, db, DataStructureSet, bucket2, nil)
1846
1847 // Add limitCount records to bucket1.
1848 err := db.Update(func(tx *Tx) error {
1849 for i := 0; i < int(limitCount); i++ {
1850 key := []byte("0")
1851 value := []byte(strconv.Itoa(i))
1852 err := tx.SAdd(bucket1, key, value)
1853 AssertErr(t, err, nil)
1854 }
1855 return nil
1856 })
1857 require.NoError(t, err)
1858 // Try to add one more item to bucket1 and check for ErrTxnExceedWriteLimit.
1859 txSAdd(t, db, bucket1, []byte("key1"), []byte("value1"), nil, ErrTxnExceedWriteLimit)
1860 // Remove one item and add another item to bucket1.
1861 txSRem(t, db, bucket1, []byte("0"), []byte("0"), nil)
1862 txSAdd(t, db, bucket1, []byte("key1"), []byte("value1"), nil, nil)
1863 // Add two more items to bucket1 and check for ErrTxnExceedWriteLimit.
1864 txSAdd(t, db, bucket1, []byte("key1"), []byte("value1"), nil, nil)
1865 txSAdd(t, db, bucket1, []byte("key11"), []byte("value11"), nil, ErrTxnExceedWriteLimit)
1866 // Test for SPOP, SPOP two items from bucket1.
1867 err = db.Update(func(tx *Tx) error {
1868 _, err := tx.SPop(bucket1, []byte("0"))
1869 AssertErr(t, err, nil)
1870 _, err = tx.SPop(bucket1, []byte("key1"))
1871 AssertErr(t, err, nil)
1872 return nil
1873 })
1874 require.NoError(t, err)
1875 // Add two items to bucket1 and check for ErrTxnExceedWriteLimit.
1876 txSAdd(t, db, bucket1, []byte("1"), []byte("value1"), nil, nil)
1877 txSAdd(t, db, bucket1, []byte("1"), []byte("value2"), nil, nil)
1878 txSAdd(t, db, bucket1, []byte("1"), []byte("value3"), nil, ErrTxnExceedWriteLimit)
1879 // Delete bucket1.
1880 txDeleteBucket(t, db, DataStructureSet, bucket1, nil)
1881 // Add data to bucket2.
1882 txSAdd(t, db, bucket2, []byte("key1"), []byte("value1"), nil, nil)
1883 err = db.Update(func(tx *Tx) error {
1884 for i := 0; i < int(limitCount)-1; i++ {
1885 value := []byte(strconv.Itoa(i))
1886 err = tx.SAdd(bucket2, []byte("2"), value)
1887 AssertErr(t, err, nil)
1888 }
1889 return nil

Callers

nothing calls this directly

Calls 9

runNutsDBTestFunction · 0.85
txCreateBucketFunction · 0.85
txSAddFunction · 0.85
txSRemFunction · 0.85
txDeleteBucketFunction · 0.85
UpdateMethod · 0.80
AssertErrFunction · 0.70
SAddMethod · 0.45
SPopMethod · 0.45

Tested by

no test coverage detected