(t *testing.T)
| 1728 | } |
| 1729 | |
| 1730 | func TestDB_DataStructureListWriteRecordLimit(t *testing.T) { |
| 1731 | // Set options |
| 1732 | opts := DefaultOptions |
| 1733 | limitCount := int64(1000) |
| 1734 | opts.MaxWriteRecordCount = limitCount |
| 1735 | // Define bucket names |
| 1736 | bucket1 := "bucket1" |
| 1737 | bucket2 := "bucket2" |
| 1738 | // Iterate over EntryIdxMode options |
| 1739 | for _, idxMode := range []EntryIdxMode{HintKeyValAndRAMIdxMode, HintKeyAndRAMIdxMode} { |
| 1740 | |
| 1741 | opts.EntryIdxMode = idxMode |
| 1742 | runNutsDBTest(t, &opts, func(t *testing.T, db *DB) { |
| 1743 | txCreateBucket(t, db, DataStructureList, bucket1, nil) |
| 1744 | txCreateBucket(t, db, DataStructureList, bucket2, nil) |
| 1745 | // Add limitCount records |
| 1746 | err := db.Update(func(tx *Tx) error { |
| 1747 | for i := 0; i < int(limitCount); i++ { |
| 1748 | key := []byte("0") |
| 1749 | value := []byte(strconv.Itoa(i)) |
| 1750 | err = tx.LPush(bucket1, key, value) |
| 1751 | AssertErr(t, err, nil) |
| 1752 | } |
| 1753 | return nil |
| 1754 | }) |
| 1755 | require.NoError(t, err) |
| 1756 | // Trigger the limit |
| 1757 | txPush(t, db, bucket1, []byte("0"), []byte("value1"), false, nil, ErrTxnExceedWriteLimit) |
| 1758 | // Test LRem |
| 1759 | err = db.Update(func(tx *Tx) error { |
| 1760 | err := tx.LRem(bucket1, []byte("0"), 1, []byte("0")) |
| 1761 | AssertErr(t, err, nil) |
| 1762 | return nil |
| 1763 | }) |
| 1764 | require.NoError(t, err) |
| 1765 | txPush(t, db, bucket1, []byte("0"), []byte("value1"), true, nil, nil) |
| 1766 | txPush(t, db, bucket1, []byte("0"), []byte("value1"), false, nil, ErrTxnExceedWriteLimit) |
| 1767 | // Test for DataLPopFlag |
| 1768 | err = db.Update(func(tx *Tx) error { |
| 1769 | _, err := tx.LPop(bucket1, []byte("0")) |
| 1770 | AssertErr(t, err, nil) |
| 1771 | return nil |
| 1772 | }) |
| 1773 | require.NoError(t, err) |
| 1774 | txPush(t, db, bucket1, []byte("0"), []byte("value1"), false, nil, nil) |
| 1775 | txPush(t, db, bucket1, []byte("0"), []byte("value1"), false, nil, ErrTxnExceedWriteLimit) |
| 1776 | // Test for DataLTrimFlag |
| 1777 | err = db.Update(func(tx *Tx) error { |
| 1778 | err := tx.LTrim(bucket1, []byte("0"), 0, 0) |
| 1779 | AssertErr(t, err, nil) |
| 1780 | return nil |
| 1781 | }) |
| 1782 | require.NoError(t, err) |
| 1783 | err = db.Update(func(tx *Tx) error { |
| 1784 | for i := 0; i < int(limitCount)-2; i++ { |
| 1785 | key := []byte("0") |
| 1786 | value := []byte(strconv.Itoa(i)) |
| 1787 | err = tx.RPush(bucket1, key, value) |
nothing calls this directly
no test coverage detected