(t *testing.T)
| 1830 | } |
| 1831 | |
| 1832 | func 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 |
nothing calls this directly
no test coverage detected