public async Task ToObject_CollectionBytes_VerifyFailure(bool isFunctionDataCacheEnabled) { ILogger <RpcSharedMemory> logger = NullLogger <RpcSharedMemory> .Instance; string invocationId = Guid.NewGuid().ToString(); long contentSize = 16 * 1024; // 16KB, enough to try out the functionality we need to test using (SharedMemoryManager manager = new SharedMemoryManager(_loggerFactory, _mapAccessor)) { // Create a SharedMemoryMap string mapName = Guid.NewGuid().ToString(); SharedMemoryMap sharedMemoryMap = CreateSharedMemoryMap(mapName, contentSize); // Wite content into it byte[] content = TestUtils.GetRandomBytesInArray((int)contentSize); long bytesWritten = await sharedMemoryMap.PutBytesAsync(content); Assert.Equal(contentSize, bytesWritten); // Create a RpcSharedMemory object pointing to the shared memory region we created earlier // Although the type is not correct, instead of Bytes it is CollectionBytes (unsupported) RpcSharedMemory rpcSharedMemory = new RpcSharedMemory { Name = mapName, Count = contentSize, Offset = 0, Type = RpcDataType.CollectionBytes }; // Try to convert the object but this should fail since the type we are requested is unsupported await Assert.ThrowsAsync <InvalidDataException>(async() => await rpcSharedMemory.ToObjectAsync(logger, invocationId, manager, isFunctionDataCacheEnabled)); // Dispose off the created resources sharedMemoryMap.Dispose(); } }
public async Task ToObject_Bytes_FunctionDataCacheEnabled_VerifySuccess() { ILogger <RpcSharedMemory> logger = NullLogger <RpcSharedMemory> .Instance; string invocationId = Guid.NewGuid().ToString(); long contentSize = 16 * 1024; // 16KB, enough to try out the functionality we need to test using (SharedMemoryManager manager = new SharedMemoryManager(_loggerFactory, _mapAccessor)) { // Create a SharedMemoryMap string mapName = Guid.NewGuid().ToString(); SharedMemoryMap sharedMemoryMap = CreateSharedMemoryMap(mapName, contentSize); // Wite content into it byte[] content = TestUtils.GetRandomBytesInArray((int)contentSize); long bytesWritten = await sharedMemoryMap.PutBytesAsync(content); Assert.Equal(contentSize, bytesWritten); // Create a RpcSharedMemory object pointing to the shared memory region we created earlier RpcSharedMemory rpcSharedMemory = new RpcSharedMemory { Name = mapName, Count = contentSize, Offset = 0, Type = RpcDataType.Bytes }; // Convert RpcSharedMemory object into byte[] object rpcObj = await rpcSharedMemory.ToObjectAsync(logger, invocationId, manager, isFunctionDataCacheEnabled : true); Assert.NotNull(rpcObj); // Since the FunctionDataCache is enabled, the object should be a SharedMemoryObject Assert.IsType <SharedMemoryObject>(rpcObj); SharedMemoryObject sharedMemoryObject = rpcObj as SharedMemoryObject; // Verify that the read object is correct Assert.Equal(mapName, sharedMemoryObject.MemoryMapName); Assert.Equal(contentSize, sharedMemoryObject.Count); // Since the FunctionDataCache is enabled, ensure that the SharedMemoryManager is tracking the object that was read Assert.Equal(1, manager.AllocatedSharedMemoryMaps.Count); Assert.True(manager.AllocatedSharedMemoryMaps.TryGetValue(mapName, out _)); // Dispose off the created resources sharedMemoryMap.Dispose(); } }