public ContainerRegistryService(
     monolith.Tracker.FileRegistry fileRegistry,
     monolith.Tracker.NodeRegistry nodeRegistry,
     monolith.Tracker.ContainerRegistry containerRegistry,
     ILogger <ContainerRegistryService> logger
     )
 {
     _logger                = logger;
     this.fileRegistry      = fileRegistry;
     this.nodeRegistry      = nodeRegistry;
     this.containerRegistry = containerRegistry;
 }
Пример #2
0
        public async Task TestDatabaseSaving()
        {
            //TODO make this somehow singleton (with await xD)
            PostgresProvider datahoarderMainUserProvider = new monolith.PostgresProvider("10.13.37.81", "datahoarder_superuser", "datahoarder_superuser", "postgres");

            using var conn = await datahoarderMainUserProvider.NewConnection();

            await conn.ExecuteAsync("SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'datahoarder_test' OR datname = 'datahoarder_template';"); // Drop Old Database Connections

            await conn.ExecuteAsync("DROP DATABASE IF EXISTS datahoarder_test;");

            await conn.ExecuteAsync("CREATE DATABASE datahoarder_test TEMPLATE datahoarder_template;");

            NpgsqlConnection.ClearAllPools();


            PostgresProvider postgresProvider = new monolith.PostgresProvider("10.13.37.81", "datahoarderfs", "datahoarderfs", "datahoarder_test");

            monolith.Tracker.ContainerRegistry containerRegistry   = new monolith.Tracker.ContainerRegistry(postgresProvider);
            monolith.Tracker.FileRegistry      fileRegistry        = new monolith.Tracker.FileRegistry(postgresProvider);
            monolith.Tracker.ChunkRegistry     fileChunkRegistry   = new monolith.Tracker.ChunkRegistry(postgresProvider);
            monolith.Tracker.VersionRegistry   fileVersionRegistry = new monolith.Tracker.VersionRegistry(postgresProvider);

            var testContainer = new monolith.Tracker.Container {
                Name    = "alt.binaries.pictures.erotica.furry",
                Creator = Guid.NewGuid().ToString(),
            };
            var registeredContainer = await containerRegistry.Register(testContainer);

            var testFile = new monolith.Tracker.File {
                ContainerId = registeredContainer,
                Filename    = $"testFile{ Guid.NewGuid() }.txt",
                Owner       = Guid.NewGuid().ToString(),
            };
            var registeredFile = await fileRegistry.Register(testFile);

            var fetchedFile = await fileRegistry.Get(registeredFile);

            Assert.Equal(testFile.ContainerId, fetchedFile.ContainerId);
            Assert.Equal(testFile.Filename, fetchedFile.Filename);
            Assert.Equal(testFile.Owner, fetchedFile.Owner);

            // Testing Chunking Saving
            const int testSizeMB  = 10;
            var       testVersion = new monolith.Tracker.Version {
                FileId = fetchedFile.Id,
                Date   = DateTime.Now,
                Size   = 1024 * 1024 * testSizeMB, // 10 MB
            };
            var registredVersion = await fileVersionRegistry.Register(testVersion);

            System.Diagnostics.Trace.WriteLine("registred Version" + registredVersion.ToString());

            var fetchedVersion = await fileVersionRegistry.Get(registredVersion);

            Assert.Equal(testVersion.FileId, fetchedVersion.FileId);
            Assert.Equal(testVersion.Date, fetchedVersion.Date, TimeSpan.FromMilliseconds(5));
            Assert.Equal(testVersion.Size, fetchedVersion.Size);

            for (int i = 0; i < testSizeMB; i++)
            {
                var testChunk = new monolith.Tracker.Chunk {
                    FileId = fetchedVersion.FileId,
                    Order  = i,
                    Size   = 1024 * 1024 * 1 // 1 MB
                };
                var registredChunk = await fileChunkRegistry.Register(testChunk);

                var fetchedChunk = await fileChunkRegistry.Get(registredChunk);

                Assert.Equal(fetchedChunk.FileId, testChunk.FileId);
                Assert.Equal(fetchedChunk.Order, testChunk.Order);
                Assert.Equal(fetchedChunk.Size, testChunk.Size);
            }

            //NpgsqlConnection.ClearAllPools();
        }