Skip to content

Commit 3cd8d5e

Browse files
Merge pull request #1863 from RedisInsight/fe/bugfix/RI-4310_Turn_off_decompression_by_checkbox
#RI-4310, #RI-4274
2 parents 98d8f64 + 502f3f6 commit 3cd8d5e

File tree

5 files changed

+44
-16
lines changed

5 files changed

+44
-16
lines changed

redisinsight/ui/src/pages/browser/components/hash-details/HashDetails.spec.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react'
22
import { instance, mock } from 'ts-mockito'
3-
import { TEXT_DISABLED_COMPRESSED_VALUE } from 'uiSrc/constants'
3+
import { KeyValueCompressor, TEXT_DISABLED_COMPRESSED_VALUE } from 'uiSrc/constants'
44
import { hashDataSelector } from 'uiSrc/slices/browser/hash'
5+
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
56
import { RedisResponseBufferType } from 'uiSrc/slices/interfaces'
67
import { anyToBuffer, bufferToString } from 'uiSrc/utils'
78
import { act, fireEvent, render, screen, waitForEuiToolTipVisible } from 'uiSrc/utils/test-utils'
@@ -31,6 +32,13 @@ jest.mock('uiSrc/slices/browser/hash', () => {
3132
})
3233
})
3334

35+
jest.mock('uiSrc/slices/instances/instances', () => ({
36+
...jest.requireActual('uiSrc/slices/instances/instances'),
37+
connectedInstanceSelector: jest.fn().mockReturnValue({
38+
compressor: null,
39+
}),
40+
}))
41+
3442
describe('HashDetails', () => {
3543
it('should render', () => {
3644
expect(render(<HashDetails {...instance(mockedProps)} />)).toBeTruthy()
@@ -106,6 +114,11 @@ describe('HashDetails', () => {
106114
]
107115
})
108116
hashDataSelector.mockImplementation(hashDataSelectorMock)
117+
118+
connectedInstanceSelector.mockImplementation(() => ({
119+
compressor: KeyValueCompressor.GZIP,
120+
}))
121+
109122
const { queryByTestId } = render(<HashDetails {...instance(mockedProps)} />)
110123
const editBtn = queryByTestId(/edit-hash-button/)
111124

redisinsight/ui/src/pages/browser/components/list-details/ListDetails.spec.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import React from 'react'
22
import { mock } from 'ts-mockito'
3-
import { TEXT_DISABLED_COMPRESSED_VALUE } from 'uiSrc/constants'
3+
import { KeyValueCompressor, TEXT_DISABLED_COMPRESSED_VALUE } from 'uiSrc/constants'
44
import { listDataSelector } from 'uiSrc/slices/browser/list'
5+
import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
56
import { anyToBuffer } from 'uiSrc/utils'
67
import { act, fireEvent, render, screen, waitForEuiToolTipVisible } from 'uiSrc/utils/test-utils'
78
import { GZIP_COMPRESSED_VALUE_1, DECOMPRESSED_VALUE_STR_1 } from 'uiSrc/utils/tests/decompressors'
@@ -35,6 +36,13 @@ jest.mock('uiSrc/slices/browser/list', () => {
3536
}
3637
})
3738

39+
jest.mock('uiSrc/slices/instances/instances', () => ({
40+
...jest.requireActual('uiSrc/slices/instances/instances'),
41+
connectedInstanceSelector: jest.fn().mockReturnValue({
42+
compressor: null,
43+
}),
44+
}))
45+
3846
describe('ListDetails', () => {
3947
it('should render', () => {
4048
expect(render(<ListDetails {...mockedProps} />)).toBeTruthy()
@@ -102,6 +110,10 @@ describe('ListDetails', () => {
102110
})
103111
listDataSelector.mockImplementation(listDataSelectorMock)
104112

113+
connectedInstanceSelector.mockImplementation(() => ({
114+
compressor: KeyValueCompressor.GZIP,
115+
}))
116+
105117
const { queryByTestId } = render(<ListDetails {...(mockedProps)} />)
106118
const editBtn = queryByTestId(/edit-list-button-/)
107119

redisinsight/ui/src/pages/home/components/AddInstanceForm/InstanceForm/form-components/DbCompressor.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const DbCompressor = (props: Props) => {
5252
const isChecked = e.target.checked
5353
if (!isChecked) {
5454
// Reset db field to initial value
55-
formik.setFieldValue('compressor', null)
55+
formik.setFieldValue('compressor', NONE)
5656
}
5757
formik.handleChange(e)
5858
}

redisinsight/ui/src/utils/decompressors/decompressors.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { forIn, isUndefined } from 'lodash'
1+
import { forIn } from 'lodash'
22
import { unzip } from 'gzip-js'
33
import { decompress as decompressFzstd } from 'fzstd'
44
import { decompress as decompressLz4 } from 'lz4js'
55
import { decompress as decompressSnappy } from '@stablelib/snappy'
66
import { COMPRESSOR_MAGIC_SYMBOLS, ICompressorMagicSymbols, KeyValueCompressor } from 'uiSrc/constants'
77
import { RedisResponseBuffer, RedisString } from 'uiSrc/slices/interfaces'
8-
import { anyToBuffer, Nullable } from 'uiSrc/utils'
8+
import { anyToBuffer, isEqualBuffers, Nullable } from 'uiSrc/utils'
99

1010
const decompressingBuffer = (
1111
reply: RedisResponseBuffer,
@@ -24,7 +24,7 @@ const decompressingBuffer = (
2424

2525
return {
2626
compressor,
27-
isCompressed: !!compressorByValue,
27+
isCompressed: compressor === compressorByValue,
2828
value: anyToBuffer(value),
2929
}
3030
}
@@ -33,28 +33,31 @@ const decompressingBuffer = (
3333

3434
return {
3535
compressor,
36-
isCompressed: !!compressorByValue,
36+
isCompressed: compressor === compressorByValue,
3737
value: anyToBuffer(value),
3838
}
3939
}
4040
case KeyValueCompressor.LZ4: {
4141
const value = decompressLz4(Buffer.from(reply))
4242
return {
4343
compressor,
44-
isCompressed: !!compressorByValue,
44+
isCompressed: compressor === compressorByValue,
4545
value: anyToBuffer(value),
4646
}
4747
}
4848
case KeyValueCompressor.SNAPPY: {
49-
const value = decompressSnappy(Buffer.from(reply))
49+
const value = anyToBuffer(decompressSnappy(Buffer.from(reply)))
50+
5051
return {
52+
value,
5153
compressor,
52-
isCompressed: !!compressorByValue,
53-
value: anyToBuffer(value),
54+
// SNAPPY compressor don't have "magic numbers"
55+
// for detect is value was compressed we should compare reply and decompressed value
56+
isCompressed: !isEqualBuffers(value, reply),
5457
}
5558
}
5659
default: {
57-
return { value: reply, compressor: null, isCompressed: !!compressorByValue }
60+
return { value: reply, compressor: null, isCompressed: false }
5861
}
5962
}
6063
} catch (error) {

redisinsight/ui/src/utils/tests/decompressors/decompressors.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ const defaultValues = [
8383
compressorInit: KeyValueCompressor.SNAPPY,
8484
output: DECOMPRESSED_VALUE_1,
8585
outputStr: DECOMPRESSED_VALUE_STR_1,
86-
isCompressed: false,
86+
isCompressed: true,
8787
},
8888
{
8989
input: SNAPPY_COMPRESSED_VALUE_2,
9090
compressor: KeyValueCompressor.SNAPPY,
9191
compressorInit: KeyValueCompressor.SNAPPY,
9292
output: DECOMPRESSED_VALUE_2,
9393
outputStr: DECOMPRESSED_VALUE_STR_2,
94-
isCompressed: false,
94+
isCompressed: true,
9595
},
9696
{
9797
input: GZIP_COMPRESSED_VALUE_1,
@@ -100,7 +100,7 @@ const defaultValues = [
100100
outputStr: DECOMPRESSED_VALUE_STR_1,
101101
compressorInit: KeyValueCompressor.LZ4,
102102
compressorByValue: KeyValueCompressor.GZIP,
103-
isCompressed: true,
103+
isCompressed: false,
104104
},
105105
{
106106
input: ZSTD_COMPRESSED_VALUE_1,
@@ -109,7 +109,7 @@ const defaultValues = [
109109
compressorByValue: KeyValueCompressor.ZSTD,
110110
output: ZSTD_COMPRESSED_VALUE_1,
111111
outputStr: DECOMPRESSED_VALUE_STR_1,
112-
isCompressed: true,
112+
isCompressed: false,
113113
},
114114
].map((value) => ({
115115
...value,

0 commit comments

Comments
 (0)