|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using System.Threading;
- using Dapper;
- using Microsoft.EntityFrameworkCore;
-
- namespace DotNetCore.CAP.PostgreSql.Test
- {
- public abstract class DatabaseTestHost : TestHost
- {
- private static bool _sqlObjectInstalled;
- public static object _lock = new object();
-
- protected override void PostBuildServices()
- {
- base.PostBuildServices();
- lock (_lock)
- {
- if (!_sqlObjectInstalled)
- {
- InitializeDatabase();
- }
- }
- }
-
- public override void Dispose()
- {
- DeleteAllData();
- base.Dispose();
- }
-
- private void InitializeDatabase()
- {
- using (CreateScope())
- {
- var storage = GetService<PostgreSqlStorage>();
- var token = new CancellationTokenSource().Token;
- CreateDatabase();
- storage.InitializeAsync(token).GetAwaiter().GetResult();
- _sqlObjectInstalled = true;
- }
- }
-
- private void CreateDatabase()
- {
- var masterConn = ConnectionUtil.GetMasterConnectionString();
- var databaseName = ConnectionUtil.GetDatabaseName();
- using (var connection = ConnectionUtil.CreateConnection(masterConn))
- {
- connection.Execute($@"
- DROP DATABASE IF EXISTS ""{databaseName}"";
- CREATE DATABASE ""{databaseName}"";");
- }
- }
-
- private void DeleteAllData()
- {
- var conn = ConnectionUtil.GetConnectionString();
-
- using (var connection = ConnectionUtil.CreateConnection(conn))
- {
- connection.Execute($@"
- TRUNCATE TABLE ""cap"".""published"";
- TRUNCATE TABLE ""cap"".""received"";");
- }
- }
- }
- }
|