(t *testing.T)
| 1896 | } |
| 1897 | |
| 1898 | func TestDB_DataStructureSortedSetWriteRecordLimit(t *testing.T) { |
| 1899 | // Set up options |
| 1900 | opts := DefaultOptions |
| 1901 | limitCount := int64(1000) |
| 1902 | opts.MaxWriteRecordCount = limitCount |
| 1903 | // Set up bucket names and score |
| 1904 | bucket1 := "bucket1" |
| 1905 | bucket2 := "bucket2" |
| 1906 | score := 1.0 |
| 1907 | // Iterate over EntryIdxMode options |
| 1908 | for _, idxMode := range []EntryIdxMode{HintKeyValAndRAMIdxMode, HintKeyAndRAMIdxMode} { |
| 1909 | opts.EntryIdxMode = idxMode |
| 1910 | runNutsDBTest(t, &opts, func(t *testing.T, db *DB) { |
| 1911 | txCreateBucket(t, db, DataStructureSortedSet, bucket1, nil) |
| 1912 | // Add limitCount records |
| 1913 | err := db.Update(func(tx *Tx) error { |
| 1914 | for i := 0; i < int(limitCount); i++ { |
| 1915 | key := []byte("0") |
| 1916 | value := []byte(strconv.Itoa(i)) |
| 1917 | err := tx.ZAdd(bucket1, key, score+float64(i), value) |
| 1918 | AssertErr(t, err, nil) |
| 1919 | } |
| 1920 | return nil |
| 1921 | }) |
| 1922 | require.NoError(t, err) |
| 1923 | // Trigger the limit |
| 1924 | txZAdd(t, db, bucket1, []byte("key1"), []byte("value1"), score, nil, ErrTxnExceedWriteLimit) |
| 1925 | // Delete and add one item |
| 1926 | txZRem(t, db, bucket1, []byte("0"), []byte("0"), nil) |
| 1927 | txZAdd(t, db, bucket1, []byte("key1"), []byte("value1"), score, nil, nil) |
| 1928 | // Add some data is ok |
| 1929 | txZAdd(t, db, bucket1, []byte("key1"), []byte("value1"), score, nil, nil) |
| 1930 | // Trigger the limit |
| 1931 | txZAdd(t, db, bucket1, []byte("key2"), []byte("value2"), score, nil, ErrTxnExceedWriteLimit) |
| 1932 | // Test for ZRemRangeByRank |
| 1933 | err = db.Update(func(tx *Tx) error { |
| 1934 | err := tx.ZRemRangeByRank(bucket1, []byte("0"), 1, 3) |
| 1935 | assert.NoError(t, err) |
| 1936 | return nil |
| 1937 | }) |
| 1938 | assert.NoError(t, err) |
| 1939 | txZAdd(t, db, bucket1, []byte("0"), []byte("value1"), score, nil, nil) |
| 1940 | txZAdd(t, db, bucket1, []byte("0"), []byte("value2"), score, nil, nil) |
| 1941 | txZAdd(t, db, bucket1, []byte("0"), []byte("value3"), score+float64(1000), nil, nil) |
| 1942 | // Trigger the limit |
| 1943 | txZAdd(t, db, bucket1, []byte("0"), []byte("value4"), score, nil, ErrTxnExceedWriteLimit) |
| 1944 | // Test for ZPop |
| 1945 | txZPop(t, db, bucket1, []byte("0"), true, []byte("value3"), score+float64(1000), nil) |
| 1946 | txZAdd(t, db, bucket1, []byte("key3"), []byte("value3"), score, nil, nil) |
| 1947 | // Delete bucket |
| 1948 | txDeleteBucket(t, db, DataStructureSortedSet, bucket1, nil) |
| 1949 | // Add data to another bucket |
| 1950 | txCreateBucket(t, db, DataStructureSortedSet, bucket1, nil) |
| 1951 | txCreateBucket(t, db, DataStructureSortedSet, bucket2, nil) |
| 1952 | txZAdd(t, db, bucket2, []byte("key1"), []byte("value1"), score, nil, nil) |
| 1953 | // Add data to bucket1 |
| 1954 | err = db.Update(func(tx *Tx) error { |
| 1955 | for i := 0; i < int(limitCount)-1; i++ { |
nothing calls this directly
no test coverage detected