You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.Data.Tests/CreateDatabaseTest.cs

144 lines
4.9 KiB
C#

using System;
using System.Data;
using System.Data.Common;
using System.Data.Odbc;
using System.Data.OleDb;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace EntityFrameworkCore.Jet.Data.Tests
{
[TestClass]
public class CreateDatabaseTest
{
private const string StoreName = nameof(CreateDatabaseTest) + ".accdb";
[TestInitialize]
public void Setup()
{
Helpers.DeleteDatabase(StoreName);
}
[TestCleanup]
public void TearDown()
{
Helpers.DeleteDatabase(StoreName);
}
[TestMethod]
public void CreateAndDropDatabaseFromConnection()
{
using var connection = new JetConnection(StoreName, Helpers.DataAccessProviderFactory);
connection.CreateDatabase();
Assert.IsTrue(File.Exists(StoreName));
connection.DropDatabase();
Assert.IsFalse(File.Exists(StoreName));
}
[TestMethod]
public void CreateAndDropDatabaseWithUnsetConnection()
{
using var connection = new JetConnection(Helpers.DataAccessProviderFactory);
var command = connection.CreateCommand();
command.CommandText = $"CREATE DATABASE '{StoreName}'";
command.ExecuteNonQuery();
Assert.IsTrue(File.Exists(StoreName));
command.CommandText = $"DROP DATABASE '{StoreName}'";
command.ExecuteNonQuery();
Assert.IsFalse(File.Exists(StoreName));
}
[TestMethod]
public void CreateAndDropDatabaseWithUnsetConnectionWithoutDataAccessProviderFactoryThrows()
{
using var connection = new JetConnection();
Assert.ThrowsException<InvalidOperationException>(
() => { using var command = connection.CreateCommand(); });
}
[TestMethod]
public void CreateAndDropDatabaseWithSingleQuotedConnectionString()
{
var connectionString = Helpers.DataAccessProviderFactory is OdbcFactory
? $"DBQ='{StoreName}'"
: $"Data Source='{StoreName}'";
using var connection = new JetConnection(connectionString, Helpers.DataAccessProviderFactory);
connection.CreateDatabase();
Assert.IsTrue(File.Exists(StoreName));
connection.DropDatabase();
Assert.IsFalse(File.Exists(StoreName));
}
[TestMethod]
public void CreateAndDropDatabaseWithDoubleQuotedConnectionString()
{
var connectionString = Helpers.DataAccessProviderFactory is OdbcFactory
? $"DBQ=\"{StoreName}\""
: $"Data Source=\"{StoreName}\"";
using var connection = new JetConnection(connectionString, Helpers.DataAccessProviderFactory);
connection.CreateDatabase();
Assert.IsTrue(File.Exists(StoreName));
connection.DropDatabase();
Assert.IsFalse(File.Exists(StoreName));
}
[TestMethod]
public void CreateDatabaseWithPassword()
{
var password = "Joe's password";
var escapedPassword = password.Replace("'", "''");
using var connection = new JetConnection(Helpers.DataAccessProviderFactory);
var command = connection.CreateCommand();
command.CommandText = $"CREATE DATABASE '{StoreName}' PASSWORD '{escapedPassword}'";
command.ExecuteNonQuery();
Assert.IsTrue(File.Exists(StoreName));
var csb = Helpers.DataAccessProviderFactory.CreateConnectionStringBuilder();
csb.SetDataSource(StoreName);
csb.SetDatabasePassword(password);
connection.ConnectionString = csb.ConnectionString;
connection.Open();
Assert.IsTrue(connection.State == ConnectionState.Open);
}
[TestMethod]
public void CreateDatabaseWithWrongPassword()
{
using var connection = new JetConnection(Helpers.DataAccessProviderFactory);
var command = connection.CreateCommand();
command.CommandText = $"CREATE DATABASE '{StoreName}' PASSWORD 'wrong password'";
command.ExecuteNonQuery();
Assert.IsTrue(File.Exists(StoreName));
var csb = Helpers.DataAccessProviderFactory.CreateConnectionStringBuilder();
csb.SetDataSource(StoreName);
csb.SetDatabasePassword("right password");
connection.ConnectionString = csb.ConnectionString;
try
{
connection.Open();
}
catch (Exception e)
{
Assert.IsInstanceOfType(e, typeof(DbException));
}
}
}
}