Exemplo n.º 1
0
        public void Verify_Multiple_AllowedDirectories_Via_AppSetting_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger      = NullLogger <MemoryMappedFileAccessor> .Instance;
            MemoryMappedFileAccessorUnix       mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            List <string> directories = new List <string>()
            {
                "/tmp/shm1",
                "/tmp/shm2",
                "/tmp/shm3",
            };

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, string.Join(",", directories));

            List <string> allowedDirectories = mapAccessor.GetAllowedDirectories();

            Assert.All(allowedDirectories, (x) => allowedDirectories.Contains(x));
            Assert.Equal(directories.Count, allowedDirectories.Count);

            // Test with a list that does not have the right delimiter; it will be returned as a single directory
            string directory = "/tmp/shm-/tmp/shm";

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, directory);

            allowedDirectories = mapAccessor.GetAllowedDirectories();
            Assert.Contains(directory, allowedDirectories);
            Assert.Equal(1, allowedDirectories.Count);
        }
Exemplo n.º 2
0
        public void Verify_AllowedDirectory_Default_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger      = NullLogger <MemoryMappedFileAccessor> .Instance;
            MemoryMappedFileAccessorUnix       mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            List <string> allowedDirectories = mapAccessor.GetAllowedDirectories();

            Assert.Equal(SharedMemoryConstants.TempDirs, allowedDirectories);
        }
Exemplo n.º 3
0
        public void Verify_Single_AllowedDirectory_Via_AppSetting_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger      = NullLogger <MemoryMappedFileAccessor> .Instance;
            MemoryMappedFileAccessorUnix       mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            string directory = "/tmp/shm";

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, directory);

            List <string> allowedDirectories = mapAccessor.GetAllowedDirectories();

            Assert.Contains(directory, allowedDirectories);
            Assert.Equal(1, allowedDirectories.Count);
        }
Exemplo n.º 4
0
        public void Use_AppSetting_Directory_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger = NullLogger <MemoryMappedFileAccessor> .Instance;

            string directory = "/tmp/shm";

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, directory);

            MemoryMappedFileAccessorUnix mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            string expectedDirectory = $"/tmp/shm/{SharedMemoryConstants.TempDirSuffix}";

            Assert.Single(mapAccessor.ValidDirectories);
            Assert.Contains(expectedDirectory, mapAccessor.ValidDirectories);
        }
Exemplo n.º 5
0
        public void Verify_Single_AlreadyExistent_ValidDirectory_Via_AppSetting_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger      = NullLogger <MemoryMappedFileAccessor> .Instance;
            MemoryMappedFileAccessorUnix       mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            string directory = "/tmp/shm1";

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, directory);

            // The directory should already be there before MemoryMappedFileAccessor checks for it
            string        directoryWithSuffix = $"{directory}/{SharedMemoryConstants.TempDirSuffix}";
            DirectoryInfo dirInfo             = Directory.CreateDirectory(directoryWithSuffix);
            DateTime      oldCreationTime     = dirInfo.CreationTimeUtc;

            // Sleep for 10ms so that the timestamp on when we created the directory above and when MemoryMappedFileAccessor creates the directory has significant difference.
            // This will make it possible to check if the directory was created again by MemoryMappedFileAccessor by comparing the timestamps.
            Thread.Sleep(10);

            List <string> validDirectories = mapAccessor.GetValidDirectories();

            Assert.Contains(directoryWithSuffix, validDirectories);
            Assert.Equal(1, validDirectories.Count);

            // Now check if MemoryMappedFileAccessor had cleaned and created the directory again
            DateTime newCreationTime = new DirectoryInfo(directory).CreationTimeUtc;

            Assert.True(newCreationTime > oldCreationTime);

            // Cleanup
            Directory.Delete(directoryWithSuffix, recursive: true);
        }
Exemplo n.º 6
0
        public void Verify_Single_NonExistent_ValidDirectory_Via_AppSetting_Unix()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                return;
            }

            IEnvironment testEnv = new TestEnvironment();
            ILogger <MemoryMappedFileAccessor> logger      = NullLogger <MemoryMappedFileAccessor> .Instance;
            MemoryMappedFileAccessorUnix       mapAccessor = new MemoryMappedFileAccessorUnix(logger, testEnv);

            string directory = "/tmp/shm";

            testEnv.SetEnvironmentVariable(RpcWorkerConstants.FunctionsUnixSharedMemoryDirectories, directory);

            List <string> validDirectories  = mapAccessor.GetValidDirectories();
            string        expectedDirectory = $"{directory}/{SharedMemoryConstants.TempDirSuffix}";

            Assert.Contains(expectedDirectory, validDirectories);
            Assert.Equal(1, validDirectories.Count);

            // Cleanup
            Directory.Delete(expectedDirectory, recursive: true);
        }