git.delta.rocks / unique-network / refs/commits / 93c5da388d2d

difftreelog

test update property size calculation

Yaroslav Bolyukin2023-03-29parent: #c3e8cb0.patch.diff
in: master

5 files changed

modifiedtests/src/nesting/collectionProperties.seqtest.tsdiffbeforeafterboth
15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
1616
17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';
18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util';18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
1919
20describe('Integration Test: Collection Properties with sudo', () => {20describe('Integration Test: Collection Properties with sudo', () => {
21 let superuser: IKeyringPair;21 let superuser: IKeyringPair;
48 ];48 ];
49 const collection = await helper[testSuite.mode].mintCollection(alice, {properties});49 const collection = await helper[testSuite.mode].mintCollection(alice, {properties});
5050
51 const newProperty = ' '.repeat(4096);51 const newProperty = {key: 'space', value: ' '.repeat(4096)};
52 await collection.setProperties(alice, [{key: 'space', value: newProperty}]);52 await collection.setProperties(alice, [newProperty]);
53 const originalSpace = await collection.getPropertiesConsumedSpace();53 const originalSpace = await collection.getPropertiesConsumedSpace();
54 expect(originalSpace).to.be.equal(properties[0].value.length + properties[1].value.length + newProperty.length);54 expect(originalSpace).to.be.equal(sizeOfProperty(properties[0]) + sizeOfProperty(properties[1]) + sizeOfProperty(newProperty));
5555
56 await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true);56 await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true);
57 const recomputedSpace = await collection.getPropertiesConsumedSpace();57 const recomputedSpace = await collection.getPropertiesConsumedSpace();
modifiedtests/src/nesting/collectionProperties.test.tsdiffbeforeafterboth
15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
1616
17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';
18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util';18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
1919
20describe('Integration Test: Collection Properties', () => {20describe('Integration Test: Collection Properties', () => {
21 let alice: IKeyringPair;21 let alice: IKeyringPair;
134 return `${propDataChar}`.repeat(propDataSize);134 return `${propDataChar}`.repeat(propDataSize);
135 };135 };
136136
137 await collection.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);137 const property = {key: propKey, value: makeNewPropData()};
138 await collection.setProperties(alice, [property]);
138 const originalSpace = await collection.getPropertiesConsumedSpace();139 const originalSpace = await collection.getPropertiesConsumedSpace();
139 expect(originalSpace).to.be.equal(propDataSize);140 expect(originalSpace).to.be.equal(sizeOfProperty(property));
140141
141 const sameSizePropertiesPossibleNum = maxCollectionPropertiesSize / propDataSize;142 const sameSizePropertiesPossibleNum = maxCollectionPropertiesSize / propDataSize;
142143
158 const propDataSize = 4096;159 const propDataSize = 4096;
159 const propData = 'a'.repeat(propDataSize);160 const propData = 'a'.repeat(propDataSize);
160161
161 await collection.setProperties(alice, [{key: propKey, value: propData}]);162 const property = {key: propKey, value: propData};
163 await collection.setProperties(alice, [property]);
162 let consumedSpace = await collection.getPropertiesConsumedSpace();164 let consumedSpace = await collection.getPropertiesConsumedSpace();
163 expect(consumedSpace).to.be.equal(propDataSize);165 expect(consumedSpace).to.be.equal(sizeOfProperty(property));
164166
165 await collection.deleteProperties(alice, [propKey]);167 await collection.deleteProperties(alice, [propKey]);
166 consumedSpace = await collection.getPropertiesConsumedSpace();168 consumedSpace = await collection.getPropertiesConsumedSpace();
173 const collection = await helper[testSuite.mode].mintCollection(alice);175 const collection = await helper[testSuite.mode].mintCollection(alice);
174 const originalSpace = await collection.getPropertiesConsumedSpace();176 const originalSpace = await collection.getPropertiesConsumedSpace();
175
176 const initPropDataSize = 4096;
177 const biggerPropDataSize = 5000;
178 const smallerPropDataSize = 4000;
179177
180 const initPropData = 'a'.repeat(initPropDataSize);178 const initProp = {key: propKey, value: 'a'.repeat(4096)};
181 const biggerPropData = 'b'.repeat(biggerPropDataSize);179 const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
182 const smallerPropData = 'c'.repeat(smallerPropDataSize);180 const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
183181
184 let consumedSpace;182 let consumedSpace;
185 let expectedConsumedSpaceDiff;183 let expectedConsumedSpaceDiff;
186184
187 await collection.setProperties(alice, [{key: propKey, value: initPropData}]);185 await collection.setProperties(alice, [initProp]);
188 consumedSpace = await collection.getPropertiesConsumedSpace();186 consumedSpace = await collection.getPropertiesConsumedSpace();
189 expectedConsumedSpaceDiff = initPropDataSize - originalSpace;187 expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
190 expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);188 expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
191189
192 await collection.setProperties(alice, [{key: propKey, value: biggerPropData}]);190 await collection.setProperties(alice, [biggerProp]);
193 consumedSpace = await collection.getPropertiesConsumedSpace();191 consumedSpace = await collection.getPropertiesConsumedSpace();
194 expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize;192 expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
195 expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff);193 expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
196194
197 await collection.setProperties(alice, [{key: propKey, value: smallerPropData}]);195 await collection.setProperties(alice, [smallerProp]);
198 consumedSpace = await collection.getPropertiesConsumedSpace();196 consumedSpace = await collection.getPropertiesConsumedSpace();
199 expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize;197 expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
200 expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff);198 expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
201 });199 });
202 }));200 }));
203});201});
237 itSub('Fails to set properties that exceed the limits', async ({helper}) => {235 itSub('Fails to set properties that exceed the limits', async ({helper}) => {
238 const collection = await helper[testSuite.mode].mintCollection(alice);236 const collection = await helper[testSuite.mode].mintCollection(alice);
239237
240 const spaceLimit = (await (collection.helper!.api! as any).query.common.collectionProperties(collection.collectionId)).spaceLimit.toNumber();238 const spaceLimit = helper.getApi().consts.unique.maxCollectionPropertiesSize.toNumber();
241239
242 // Mute the general tx parsing error, too many bytes to process240 // Mute the general tx parsing error, too many bytes to process
243 {241 {
modifiedtests/src/nesting/tokenProperties.seqtest.tsdiffbeforeafterboth
15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
1616
17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';
18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip} from '../util';18import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util';
1919
20describe('Integration Test: Token Properties with sudo', () => {20describe('Integration Test: Token Properties with sudo', () => {
21 let superuser: IKeyringPair;21 let superuser: IKeyringPair;
57 : collection.mintToken(alice)57 : collection.mintToken(alice)
58 );58 );
5959
60 const propDataSize = 4096;
61 const propData = 'a'.repeat(propDataSize);60 const prop = {key: propKey, value: 'a'.repeat(4096)};
6261
63 await token.setProperties(alice, [{key: propKey, value: propData}]);62 await token.setProperties(alice, [prop]);
64 const originalSpace = await token.getTokenPropertiesConsumedSpace();63 const originalSpace = await token.getTokenPropertiesConsumedSpace();
65 expect(originalSpace).to.be.equal(propDataSize);64 expect(originalSpace).to.be.equal(sizeOfProperty(prop));
6665
67 await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true);66 await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true);
68 const recomputedSpace = await token.getTokenPropertiesConsumedSpace();67 const recomputedSpace = await token.getTokenPropertiesConsumedSpace();
modifiedtests/src/nesting/tokenProperties.test.tsdiffbeforeafterboth
15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
1616
17import {IKeyringPair} from '@polkadot/types/types';17import {IKeyringPair} from '@polkadot/types/types';
18import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect} from '../util';18import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../util';
19import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '../util/playgrounds/unique';19import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '../util/playgrounds/unique';
2020
21describe('Integration Test: Token Properties', () => {21describe('Integration Test: Token Properties', () => {
353 : collection.mintToken(alice)353 : collection.mintToken(alice)
354 );354 );
355355
356 await token.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);356 const property = {key: propKey, value: makeNewPropData()};
357 await token.setProperties(alice, [property]);
357 const originalSpace = await token.getTokenPropertiesConsumedSpace();358 const originalSpace = await token.getTokenPropertiesConsumedSpace();
358 expect(originalSpace).to.be.equal(propDataSize);359 expect(originalSpace).to.be.equal(sizeOfProperty(property));
359360
360 const sameSizePropertiesPossibleNum = maxTokenPropertiesSize / propDataSize;361 const sameSizePropertiesPossibleNum = maxTokenPropertiesSize / propDataSize;
361362
393 const propDataSize = 4096;394 const propDataSize = 4096;
394 const propData = 'a'.repeat(propDataSize);395 const propData = 'a'.repeat(propDataSize);
395396
396 await token.setProperties(alice, [{key: propKey, value: propData}]);397 const property = {key: propKey, value: propData};
398 await token.setProperties(alice, [property]);
397 let consumedSpace = await token.getTokenPropertiesConsumedSpace();399 let consumedSpace = await token.getTokenPropertiesConsumedSpace();
398 expect(consumedSpace).to.be.equal(propDataSize);400 expect(consumedSpace).to.be.equal(sizeOfProperty(property));
399401
400 await token.deleteProperties(alice, [propKey]);402 await token.deleteProperties(alice, [propKey]);
401 consumedSpace = await token.getTokenPropertiesConsumedSpace();403 consumedSpace = await token.getTokenPropertiesConsumedSpace();
424 );426 );
425 const originalSpace = await token.getTokenPropertiesConsumedSpace();427 const originalSpace = await token.getTokenPropertiesConsumedSpace();
426
427 const initPropDataSize = 4096;
428 const biggerPropDataSize = 5000;
429 const smallerPropDataSize = 4000;
430428
431 const initPropData = 'a'.repeat(initPropDataSize);429 const initProp = {key: propKey, value: 'a'.repeat(4096)};
432 const biggerPropData = 'b'.repeat(biggerPropDataSize);430 const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
433 const smallerPropData = 'c'.repeat(smallerPropDataSize);431 const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
434432
435 let consumedSpace;433 let consumedSpace;
436 let expectedConsumedSpaceDiff;434 let expectedConsumedSpaceDiff;
437435
438 await token.setProperties(alice, [{key: propKey, value: initPropData}]);436 await token.setProperties(alice, [initProp]);
439 consumedSpace = await token.getTokenPropertiesConsumedSpace();437 consumedSpace = await token.getTokenPropertiesConsumedSpace();
440 expectedConsumedSpaceDiff = initPropDataSize - originalSpace;438 expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
441 expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);439 expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
442440
443 await token.setProperties(alice, [{key: propKey, value: biggerPropData}]);441 await token.setProperties(alice, [biggerProp]);
444 consumedSpace = await token.getTokenPropertiesConsumedSpace();442 consumedSpace = await token.getTokenPropertiesConsumedSpace();
445 expectedConsumedSpaceDiff = biggerPropDataSize - initPropDataSize;443 expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
446 expect(consumedSpace).to.be.equal(initPropDataSize + expectedConsumedSpaceDiff);444 expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
447445
448 await token.setProperties(alice, [{key: propKey, value: smallerPropData}]);446 await token.setProperties(alice, [smallerProp]);
449 consumedSpace = await token.getTokenPropertiesConsumedSpace();447 consumedSpace = await token.getTokenPropertiesConsumedSpace();
450 expectedConsumedSpaceDiff = biggerPropDataSize - smallerPropDataSize;448 expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
451 expect(consumedSpace).to.be.equal(biggerPropDataSize - expectedConsumedSpaceDiff);449 expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
452 }));450 }));
453});451});
454452
modifiedtests/src/util/index.tsdiffbeforeafterboth
177177
178describeXCM.skip = (name: string, fn: (this: Mocha.Suite) => void) => describeXCM(name, fn, {skip: true});178describeXCM.skip = (name: string, fn: (this: Mocha.Suite) => void) => describeXCM(name, fn, {skip: true});
179
180export function sizeOfInt(i: number) {
181 if (i < 0 || i > 0xffffffff) throw new Error('out of range');
182 if(i < 0b11_1111) {
183 return 1;
184 } else if (i < 0b11_1111_1111_1111) {
185 return 2;
186 } else if (i < 0b11_1111_1111_1111_1111_1111_1111_1111) {
187 return 4;
188 } else {
189 return 5;
190 }
191}
192
193const UTF8_ENCODER = new TextEncoder();
194export function sizeOfEncodedStr(v: string) {
195 const encoded = UTF8_ENCODER.encode(v);
196 return sizeOfInt(encoded.length) + encoded.length;
197}
198
199export function sizeOfProperty(prop: {key: string, value: string}) {
200 return sizeOfEncodedStr(prop.key) + sizeOfEncodedStr(prop.value);
201}
179202