public FileRegistryService( monolith.Tracker.FileRegistry fileRegistry, monolith.Tracker.VersionRegistry fileVersionRegistry, monolith.Tracker.ChunkRegistry fileChunkRegistry, monolith.Tracker.NodeRegistry nodeRegistry, ILogger <FileRegistryService> logger ) { _logger = logger; this.fileRegistry = fileRegistry; this.fileVersionRegistry = fileVersionRegistry; this.fileChunkRegistry = fileChunkRegistry; this.nodeRegistry = nodeRegistry; }
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(); }