не удается получить значение каскадного DDS для SharedObjectSequence

#fluid-framework

#жидкая среда

Вопрос:

У меня есть такой тест, но я не могу получить ‘sharedMap‘ в значении ‘sharedSeq1‘, я не знаю, как получить значение ‘remoteFluidObjectHandle‘.

 import {MockContainerRuntimeFactory, MockFluidDataStoreRuntime, MockStorage} from "@fluidframework/test-runtime-utils";
import {SharedObjectSequence, SharedObjectSequenceFactory} from "@fluidframework/sequence";
import * as mocks from "@fluidframework/test-runtime-utils";
import {SharedMap} from "@fluidframework/map";
import {IFluidHandle} from "@fluidframework/core-interfaces";

const mockRuntime: mocks.MockFluidDataStoreRuntime = new mocks.MockFluidDataStoreRuntime();

describe('ShredObjectSequence', function () {
    it('should get synchronization data from another shared object', async function () {
        const dataStoreRuntime1 = new MockFluidDataStoreRuntime();
        const sharedSeq1: SharedObjectSequence<IFluidHandle<SharedMap>> = new SharedObjectSequence(mockRuntime, 'shareObjectSeq1', SharedObjectSequenceFactory.Attributes,)
        const containerRuntimeFactory = new MockContainerRuntimeFactory();

        dataStoreRuntime1.local = false;
        const containerRuntime1 = containerRuntimeFactory.createContainerRuntime(
            dataStoreRuntime1,
        );
        const services1 = {
            deltaConnection: containerRuntime1.createDeltaConnection(),
            objectStorage: new MockStorage(),
        };
        sharedSeq1.initializeLocal();
        sharedSeq1.connect(services1);

        const dataStoreRuntime2 = new MockFluidDataStoreRuntime();
        const containerRuntime2 = containerRuntimeFactory.createContainerRuntime(
            dataStoreRuntime2,
        );
        const services2 = {
            deltaConnection: containerRuntime2.createDeltaConnection(),
            objectStorage: new MockStorage(),
        };
        
        const sharedSeq2: SharedObjectSequence<IFluidHandle<SharedMap>> = new SharedObjectSequence(mockRuntime, 'shareObjectSeq2', SharedObjectSequenceFactory.Attributes,)
        sharedSeq2.initializeLocal();
        sharedSeq2.connect(services2);

        // insert a node into sharedSeq2, it will sync to sharedSeq1
        sharedSeq2.insert(0, [<IFluidHandle<SharedMap>>new SharedMap('sharedMapId', mockRuntime, SharedMap.getFactory().attributes).handle])
        containerRuntimeFactory.processAllMessages();

        // next case is passed, it show we got the sharedSeq2 changed
        expect(sharedSeq1.getLength()).toBe(1)

        const remoteFluidObjectHandle = await sharedSeq1.getRange(0, 1)[0];

        // at here, i get error: Cannot read property 'mimeType' of null, it cause by remoteFluidObjectHandle.ts:51:30
        const sharedMap = await remoteFluidObjectHandle.get()
        expect(sharedMap).not.toBeUndefined()
    });
});
  

при запуске этого теста будет получена ошибка ‘Не удается прочитать свойство ‘mimeType’ из null‘, вызванная ‘remoteFluidObjectHandle.ts:51:30

Ответ №1:

Модели fluid имеют очень ограниченное и специфическое поведение, похоже, вы выходите за их пределы. Вам больше повезет с сквозным тестированием, см. packages test end-to-end-tests . Они используют тот же сервер в памяти, что и наш, что и игровая площадка на fluidframework dot com. Сервер в памяти использует тот же код, что и tinylicious, наш сервер с одним процессом, и routerlicious, наша эталонная реализация на основе docker.

Комментарии:

1. да, я проверяю тестовую папку e2e и нахожу много полезного демонстрационного кода