Index: Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs
===================================================================
diff -u -rf54cec4a09c4f049ce5d40a5c0fca1c52f516178 -rc230da5631e073c87657dd0f32aa7c3651c427df
--- Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs (.../HydraRingSettingsDatabaseReader.cs) (revision f54cec4a09c4f049ce5d40a5c0fca1c52f516178)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseReader.cs (.../HydraRingSettingsDatabaseReader.cs) (revision c230da5631e073c87657dd0f32aa7c3651c427df)
@@ -31,7 +31,6 @@
using Ringtoets.Common.IO.Properties;
using Ringtoets.HydraRing.Calculation.Data;
using Ringtoets.HydraRing.Calculation.Data.Settings;
-using Ringtoets.HydraRing.Calculation.Readers;
namespace Ringtoets.Common.IO.HydraRing
{
Index: Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseValidator.cs
===================================================================
diff -u -re4c8b63e26051b6bd120260482a565a06635743e -rc230da5631e073c87657dd0f32aa7c3651c427df
--- Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseValidator.cs (.../HydraRingSettingsDatabaseValidator.cs) (revision e4c8b63e26051b6bd120260482a565a06635743e)
+++ Ringtoets/Common/src/Ringtoets.Common.IO/HydraRing/HydraRingSettingsDatabaseValidator.cs (.../HydraRingSettingsDatabaseValidator.cs) (revision c230da5631e073c87657dd0f32aa7c3651c427df)
@@ -19,8 +19,14 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.SQLite;
+using System.Linq;
using Core.Common.Base.IO;
using Core.Common.IO.Readers;
+using Ringtoets.Common.IO.Properties;
namespace Ringtoets.Common.IO.HydraRing
{
@@ -41,5 +47,48 @@
///
///
public HydraRingSettingsDatabaseValidator(string databaseFilePath) : base(databaseFilePath) {}
+
+ ///
+ /// Verifies that the schema of the opened settings database is valid.
+ ///
+ /// true when the schema is valid; false otherwise.
+ public bool ValidateSchema()
+ {
+ return ContainsRequiredTables(GetColumnDefinitions(Connection));
+ }
+
+ private static bool ContainsRequiredTables(List> definitions)
+ {
+ return GetValidSchema().All(definitions.Contains);
+ }
+
+ private static List> GetValidSchema()
+ {
+ using (var validSchemaConnection = new SQLiteConnection("Data Source=:memory:"))
+ using (SQLiteCommand command = validSchemaConnection.CreateCommand())
+ {
+ validSchemaConnection.Open();
+ command.CommandText = Resources.settings_schema;
+ command.ExecuteNonQuery();
+ return GetColumnDefinitions(validSchemaConnection);
+ }
+ }
+
+ private static List> GetColumnDefinitions(SQLiteConnection connection)
+ {
+ DataTable columns = connection.GetSchema("COLUMNS");
+
+ var definitions = new List>();
+ for (var i = 0; i < columns.Rows.Count; i++)
+ {
+ DataRow dataRow = columns.Rows[i];
+ definitions.Add(
+ Tuple.Create(
+ ((string) dataRow["TABLE_NAME"]).ToLower(),
+ ((string) dataRow["COLUMN_NAME"]).ToLower()
+ ));
+ }
+ return definitions;
+ }
}
-}
+}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseReaderTest.cs
===================================================================
diff -u -r9b1164ba0edcb2b6cfaf5e1271db2ae864f1c7d2 -rc230da5631e073c87657dd0f32aa7c3651c427df
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseReaderTest.cs (.../HydraRingSettingsDatabaseReaderTest.cs) (revision 9b1164ba0edcb2b6cfaf5e1271db2ae864f1c7d2)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseReaderTest.cs (.../HydraRingSettingsDatabaseReaderTest.cs) (revision c230da5631e073c87657dd0f32aa7c3651c427df)
@@ -30,7 +30,6 @@
using Ringtoets.Common.IO.HydraRing;
using Ringtoets.HydraRing.Calculation.Data;
using Ringtoets.HydraRing.Calculation.Data.Settings;
-using Ringtoets.HydraRing.Calculation.Readers;
namespace Ringtoets.Common.IO.Test.HydraRing
{
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseValidatorTest.cs
===================================================================
diff -u -re4c8b63e26051b6bd120260482a565a06635743e -rc230da5631e073c87657dd0f32aa7c3651c427df
--- Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseValidatorTest.cs (.../HydraRingSettingsDatabaseValidatorTest.cs) (revision e4c8b63e26051b6bd120260482a565a06635743e)
+++ Ringtoets/Common/test/Ringtoets.Common.IO.Test/HydraRing/HydraRingSettingsDatabaseValidatorTest.cs (.../HydraRingSettingsDatabaseValidatorTest.cs) (revision c230da5631e073c87657dd0f32aa7c3651c427df)
@@ -48,5 +48,37 @@
Assert.IsInstanceOf(validator);
}
}
+
+ [Test]
+ public void ValidateSchema_ValidDatabase_ReturnTrue()
+ {
+ // Setup
+ string completeDatabasePath = Path.Combine(directoryPath, "withoutPreprocessor.config.sqlite");
+
+ using (var validator = new HydraRingSettingsDatabaseValidator(completeDatabasePath))
+ {
+ // Call
+ bool valid = validator.ValidateSchema();
+
+ // Assert
+ Assert.IsTrue(valid);
+ }
+ }
+
+ [Test]
+ public void ValidateSchema_InvalidDatabase_ReturnFalse()
+ {
+ // Setup
+ string completeDatabasePath = Path.Combine(directoryPath, "invalid-settings-schema.config.sqlite");
+
+ using (var validator = new HydraRingSettingsDatabaseValidator(completeDatabasePath))
+ {
+ // Call
+ bool valid = validator.ValidateSchema();
+
+ // Assert
+ Assert.IsFalse(valid);
+ }
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.IO.Test/test-data/HydraRingSettingsDatabaseValidator/invalid-settings-schema.config.sqlite
===================================================================
diff -u
Binary files differ