aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2018-08-04 11:49:31 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2018-08-04 11:49:31 +0300
commit76d311ad4690b9f88ae71ff097c6592190b65012 (patch)
treec4718bafe0bb6007a8fa76dd69a9b4fc05ffad81 /Software
parent40afcf1c6591abacfa1466dd4d865296bf687aa4 (diff)
downloadTango-76d311ad4690b9f88ae71ff097c6592190b65012.tar.gz
Tango-76d311ad4690b9f88ae71ff097c6592190b65012.zip
Implemented unit testing for SQLExaminer.
Diffstat (limited to 'Software')
-rw-r--r--Software/DB/SQLExaminer Projects/Override Tables.sdeproj166
-rw-r--r--Software/DB/SQLExaminer Projects/Provision Machine.sdeproj160
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin1835008 -> 1835008 bytes
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfiguration.cs2
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfigurationBuilder.cs28
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcess.cs74
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessExitCode.cs16
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessResult.cs14
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessType.cs14
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/Helper.cs16
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/Objects.cs3
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SOItem.cs15
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xmlbin28293 -> 76070 bytes
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xmlbin22603 -> 58066 bytes
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xmlbin7362 -> 6790 bytes
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/SynchronizationOrder.cs23
-rw-r--r--Software/Visual_Studio/Tango.SQLExaminer/Tango.SQLExaminer.csproj7
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/SQLExaminer_TST.cs74
-rw-r--r--Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj3
20 files changed, 567 insertions, 48 deletions
diff --git a/Software/DB/SQLExaminer Projects/Override Tables.sdeproj b/Software/DB/SQLExaminer Projects/Override Tables.sdeproj
index 6b27b8c9a..c97b84dda 100644
--- a/Software/DB/SQLExaminer Projects/Override Tables.sdeproj
+++ b/Software/DB/SQLExaminer Projects/Override Tables.sdeproj
@@ -5,15 +5,14 @@
<StorageType>LiveDb</StorageType>
<ServerName>localhost\sqlexpress</ServerName>
<Database>Tango</Database>
- <WinAuth>False</WinAuth>
+ <WinAuth>True</WinAuth>
<AzurePwd>False</AzurePwd>
- <Login>Synchronizer</Login>
</Source>
<Source id="2">
<EngineType>MsSqlServer</EngineType>
<StorageType>LiveDb</StorageType>
- <ServerName>twine.local\sqltwine</ServerName>
- <Database>Tango</Database>
+ <ServerName>localhost\sqlexpress</ServerName>
+ <Database>Test</Database>
<WinAuth>True</WinAuth>
<AzurePwd>False</AzurePwd>
</Source>
@@ -121,7 +120,7 @@
<Column name="NAME" />
</Columns>
</Item>
- <Item name="dbo.CATS" type="table" extracted="True">
+ <Item name="dbo.CATS" type="table">
<Columns>
<Column name="GUID" key="true" />
<Column name="ID" />
@@ -659,17 +658,6 @@
<Column name="DESCRIPTION" />
</Columns>
</Item>
- <Item name="dbo.MACHINES_EVENTS_VIEW" type="view">
- <Columns>
- <Column name="DATE" />
- <Column name="MACHINE" />
- <Column name="USER_NAME" />
- <Column name="GROUP" />
- <Column name="CATEGORY" />
- <Column name="TYPE" />
- <Column name="DESCRIPTION" />
- </Columns>
- </Item>
<Item name="dbo.MEDIA_COLORS" type="table" extracted="True">
<Columns>
<Column name="GUID" key="true" />
@@ -958,6 +946,152 @@
<Column name="DESCRIPTION" />
</Columns>
</Item>
+ <Item name="Machine_Versions_Configurations" type="query" extracted="True">
+ <Columns>
+ <Column name="GUID" key="true" />
+ <Column name="ID" />
+ <Column name="LAST_UPDATED" />
+ <Column name="NAME" />
+ <Column name="CREATION_DATE" />
+ <Column name="APPLICATION_VERSION_GUID" />
+ <Column name="APPLICATION_OS_VERSION_GUID" />
+ <Column name="APPLICATION_FIRMWARE_VERSION_GUID" />
+ <Column name="APPLICATION_DISPLAY_PANEL_VERSION_GUID" />
+ <Column name="EMBEDDED_FIRMWARE_VERSION_GUID" />
+ <Column name="EMBEDDED_SOFTWARE_VERSION_GUID" />
+ <Column name="HARDWARE_VERSION_GUID" />
+ </Columns>
+ <Queries>
+ <Query id="1">
+ <Text><![CDATA[SELECT CONFIGURATIONS.*
+
+FROM MACHINE_VERSIONS
+INNER JOIN CONFIGURATIONS ON CONFIGURATIONS.GUID = MACHINE_VERSIONS.DEFAULT_CONFIGURATION_GUID]]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="CONFIGURATIONS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="CREATION_DATE" />
+ <UpdateColumn name="APPLICATION_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_OS_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_FIRMWARE_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_DISPLAY_PANEL_VERSION_GUID" />
+ <UpdateColumn name="EMBEDDED_FIRMWARE_VERSION_GUID" />
+ <UpdateColumn name="EMBEDDED_SOFTWARE_VERSION_GUID" />
+ <UpdateColumn name="HARDWARE_VERSION_GUID" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ <Query id="2">
+ <Text><![CDATA[SELECT CONFIGURATIONS.*
+
+FROM MACHINE_VERSIONS
+INNER JOIN CONFIGURATIONS ON CONFIGURATIONS.GUID = MACHINE_VERSIONS.DEFAULT_CONFIGURATION_GUID]]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="CONFIGURATIONS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="CREATION_DATE" />
+ <UpdateColumn name="APPLICATION_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_OS_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_FIRMWARE_VERSION_GUID" />
+ <UpdateColumn name="APPLICATION_DISPLAY_PANEL_VERSION_GUID" />
+ <UpdateColumn name="EMBEDDED_FIRMWARE_VERSION_GUID" />
+ <UpdateColumn name="EMBEDDED_SOFTWARE_VERSION_GUID" />
+ <UpdateColumn name="HARDWARE_VERSION_GUID" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ </Queries>
+ </Item>
+ <Item name="Machine_Versions_Configurations_IdsPacks" type="query" extracted="True">
+ <Columns>
+ <Column name="GUID" key="true" />
+ <Column name="ID" />
+ <Column name="LAST_UPDATED" />
+ <Column name="CONFIGURATION_GUID" />
+ <Column name="DISPENSER_TYPE_GUID" />
+ <Column name="LIQUID_TYPE_GUID" />
+ <Column name="CARTRIDGE_TYPE_GUID" />
+ <Column name="MID_TANK_TYPE_GUID" />
+ <Column name="IDS_PACK_FORMULA_GUID" />
+ <Column name="NAME" />
+ <Column name="PACK_INDEX" />
+ <Column name="IS_EMPTY" />
+ </Columns>
+ <Queries>
+ <Query id="1">
+ <Text><![CDATA[SELECT IDS_PACKS.*
+
+FROM MACHINE_VERSIONS
+INNER JOIN CONFIGURATIONS ON CONFIGURATIONS.GUID = MACHINE_VERSIONS.DEFAULT_CONFIGURATION_GUID
+INNER JOIN IDS_PACKS ON IDS_PACKS.CONFIGURATION_GUID = CONFIGURATIONS.GUID]]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="IDS_PACKS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="CONFIGURATION_GUID" />
+ <UpdateColumn name="DISPENSER_TYPE_GUID" />
+ <UpdateColumn name="LIQUID_TYPE_GUID" />
+ <UpdateColumn name="CARTRIDGE_TYPE_GUID" />
+ <UpdateColumn name="MID_TANK_TYPE_GUID" />
+ <UpdateColumn name="IDS_PACK_FORMULA_GUID" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="PACK_INDEX" />
+ <UpdateColumn name="IS_EMPTY" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ <Query id="2">
+ <Text><![CDATA[SELECT IDS_PACKS.*
+
+FROM MACHINE_VERSIONS
+INNER JOIN CONFIGURATIONS ON CONFIGURATIONS.GUID = MACHINE_VERSIONS.DEFAULT_CONFIGURATION_GUID
+INNER JOIN IDS_PACKS ON IDS_PACKS.CONFIGURATION_GUID = CONFIGURATIONS.GUID]]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="IDS_PACKS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="CONFIGURATION_GUID" />
+ <UpdateColumn name="DISPENSER_TYPE_GUID" />
+ <UpdateColumn name="LIQUID_TYPE_GUID" />
+ <UpdateColumn name="CARTRIDGE_TYPE_GUID" />
+ <UpdateColumn name="MID_TANK_TYPE_GUID" />
+ <UpdateColumn name="IDS_PACK_FORMULA_GUID" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="PACK_INDEX" />
+ <UpdateColumn name="IS_EMPTY" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ </Queries>
+ </Item>
</Items>
<SchemaMapping>
<SMItem schema1="dbo" schema2="dbo" />
diff --git a/Software/DB/SQLExaminer Projects/Provision Machine.sdeproj b/Software/DB/SQLExaminer Projects/Provision Machine.sdeproj
index 1343686d3..ec457f2e3 100644
--- a/Software/DB/SQLExaminer Projects/Provision Machine.sdeproj
+++ b/Software/DB/SQLExaminer Projects/Provision Machine.sdeproj
@@ -5,17 +5,14 @@
<StorageType>LiveDb</StorageType>
<ServerName>localhost\sqlexpress</ServerName>
<Database>Tango</Database>
- <WinAuth>False</WinAuth>
+ <WinAuth>True</WinAuth>
<AzurePwd>False</AzurePwd>
- <Login>Synchronizer</Login>
- <Password>Aa123456</Password>
- <SavePasswords>true</SavePasswords>
</Source>
<Source id="2">
<EngineType>MsSqlServer</EngineType>
<StorageType>LiveDb</StorageType>
- <ServerName>twine.local\sqltwine</ServerName>
- <Database>Tango</Database>
+ <ServerName>localhost\sqlexpress</ServerName>
+ <Database>Test</Database>
<WinAuth>True</WinAuth>
<AzurePwd>False</AzurePwd>
</Source>
@@ -661,17 +658,6 @@
<Column name="DESCRIPTION" />
</Columns>
</Item>
- <Item name="dbo.MACHINES_EVENTS_VIEW" type="view">
- <Columns>
- <Column name="DATE" />
- <Column name="MACHINE" />
- <Column name="USER_NAME" />
- <Column name="GROUP" />
- <Column name="CATEGORY" />
- <Column name="TYPE" />
- <Column name="DESCRIPTION" />
- </Columns>
- </Item>
<Item name="dbo.MEDIA_COLORS" type="table">
<Columns>
<Column name="GUID" key="true" />
@@ -1039,6 +1025,72 @@ WHERE MACHINES.SERIAL_NUMBER = '@']]></Text>
</Query>
</Queries>
</Item>
+ <Item name="Sync_Cats" type="query" extracted="True">
+ <Columns>
+ <Column name="GUID" key="true" />
+ <Column name="ID" />
+ <Column name="LAST_UPDATED" />
+ <Column name="NAME" />
+ <Column name="MACHINE_GUID" />
+ <Column name="RML_GUID" />
+ <Column name="LIQUID_TYPE_GUID" />
+ <Column name="DATA" />
+ </Columns>
+ <Queries>
+ <Query id="1">
+ <Text><![CDATA[SELECT CATS.*
+
+FROM CATS
+
+INNER JOIN MACHINES ON MACHINES.GUID = CATS.MACHINE_GUID
+
+WHERE MACHINES.SERIAL_NUMBER = '1111']]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="CATS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="MACHINE_GUID" />
+ <UpdateColumn name="RML_GUID" />
+ <UpdateColumn name="LIQUID_TYPE_GUID" />
+ <UpdateColumn name="DATA" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ <Query id="2">
+ <Text><![CDATA[SELECT CATS.*
+
+FROM CATS
+
+INNER JOIN MACHINES ON MACHINES.GUID = CATS.MACHINE_GUID
+
+WHERE MACHINES.SERIAL_NUMBER = '1111']]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="CATS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="GUID" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="NAME" />
+ <UpdateColumn name="MACHINE_GUID" />
+ <UpdateColumn name="RML_GUID" />
+ <UpdateColumn name="LIQUID_TYPE_GUID" />
+ <UpdateColumn name="DATA" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ </Queries>
+ </Item>
<Item name="Sync_Configuration" type="query" extracted="True">
<Columns>
<Column name="GUID" key="true" />
@@ -1387,6 +1439,80 @@ WHERE MACHINES.SERIAL_NUMBER = '@']]></Text>
</Query>
</Queries>
</Item>
+ <Item name="Sync_Users" type="query" extracted="True">
+ <Columns>
+ <Column name="GUID" key="true" />
+ <Column name="ID" />
+ <Column name="LAST_UPDATED" />
+ <Column name="DELETED" />
+ <Column name="EMAIL" />
+ <Column name="PASSWORD" />
+ <Column name="ORGANIZATION_GUID" />
+ <Column name="CONTACT_GUID" />
+ <Column name="ADDRESS_GUID" />
+ <Column name="LAST_LOGIN" />
+ </Columns>
+ <Queries>
+ <Query id="1">
+ <Text><![CDATA[SELECT USERS.*
+
+FROM USERS
+
+INNER JOIN ORGANIZATIONS ON ORGANIZATIONS.GUID = USERS.ORGANIZATION_GUID
+INNER JOIN MACHINES ON MACHINES.ORGANIZATION_GUID = ORGANIZATIONS.GUID
+
+WHERE MACHINES.SERIAL_NUMBER = '@']]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="USERS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="EMAIL" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="DELETED" />
+ <UpdateColumn name="EMAIL" />
+ <UpdateColumn name="PASSWORD" />
+ <UpdateColumn name="ORGANIZATION_GUID" />
+ <UpdateColumn name="CONTACT_GUID" />
+ <UpdateColumn name="ADDRESS_GUID" />
+ <UpdateColumn name="LAST_LOGIN" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ <Query id="2">
+ <Text><![CDATA[SELECT USERS.*
+
+FROM USERS
+
+INNER JOIN ORGANIZATIONS ON ORGANIZATIONS.GUID = USERS.ORGANIZATION_GUID
+INNER JOIN MACHINES ON MACHINES.ORGANIZATION_GUID = ORGANIZATIONS.GUID
+
+WHERE MACHINES.SERIAL_NUMBER = '@']]></Text>
+ <UpdateTables>
+ <Table schema="dbo" name="USERS" allowDelete="True" allowInsert="True" allowUpdate="True">
+ <KeyColumns>
+ <KeyColumn name="EMAIL" />
+ </KeyColumns>
+ <UpdateColumns>
+ <UpdateColumn name="ID" />
+ <UpdateColumn name="GUID" />
+ <UpdateColumn name="LAST_UPDATED" />
+ <UpdateColumn name="DELETED" />
+ <UpdateColumn name="EMAIL" />
+ <UpdateColumn name="PASSWORD" />
+ <UpdateColumn name="ORGANIZATION_GUID" />
+ <UpdateColumn name="CONTACT_GUID" />
+ <UpdateColumn name="ADDRESS_GUID" />
+ <UpdateColumn name="LAST_LOGIN" />
+ </UpdateColumns>
+ </Table>
+ </UpdateTables>
+ </Query>
+ </Queries>
+ </Item>
<Item name="Sync_UsersRoles" type="query" extracted="True">
<Columns>
<Column name="GUID" key="true" />
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index f580b0942..79c01ad36 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index 507554baf..21e8e9f31 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfiguration.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfiguration.cs
index 37d9da0d0..70a03e122 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfiguration.cs
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfiguration.cs
@@ -59,7 +59,7 @@ namespace Tango.SQLExaminer
public void ToFile(String filePath)
{
- File.WriteAllText(filePath, ToXml());
+ File.WriteAllText(filePath, ToXml(), Encoding.Unicode);
}
public String ToXml()
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfigurationBuilder.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfigurationBuilder.cs
index e153c229b..e9116424c 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfigurationBuilder.cs
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerConfigurationBuilder.cs
@@ -11,18 +11,10 @@ namespace Tango.SQLExaminer
public class ExaminerConfigurationBuilder
{
private ExaminerConfiguration _config;
- private static String _sql_examiner_folder;
- private static String _sql_examiner_config_folder;
-
- static ExaminerConfigurationBuilder()
- {
- _sql_examiner_folder = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "SQLExaminer");
- _sql_examiner_config_folder = Path.Combine(_sql_examiner_folder, "Configurations");
- }
private String GetConfigurationFilePath(ExaminerConfigurationType type)
{
- return Path.Combine(_sql_examiner_config_folder, type.ToString() + ".xml");
+ return Path.Combine(Helper.SQL_EXAMINER_CONFIG_FOLDER, type.ToString() + ".xml");
}
public ExaminerConfigurationBuilder(ExaminerConfigurationType type)
@@ -81,6 +73,14 @@ namespace Tango.SQLExaminer
{
backup_action.Path = path;
}
+ else
+ {
+ _config.Actions.Insert(0, new Action()
+ {
+ Type = "backup",
+ Path = path,
+ });
+ }
return this;
}
@@ -92,6 +92,16 @@ namespace Tango.SQLExaminer
{
Report_action.Path = path;
}
+ else
+ {
+ _config.Actions.Add(new Action()
+ {
+ Type = "report",
+ Path = path,
+ ReportType = "xml",
+ ReportOn = "Different, Same, OnlyInDb1, OnlyInDb2"
+ });
+ }
return this;
}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcess.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcess.cs
new file mode 100644
index 000000000..5b4363c6e
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcess.cs
@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.SQLExaminer
+{
+ public class ExaminerProcess
+ {
+ public String ConfigurationFile { get; private set; }
+
+ public ExaminerProcessType ProcessType { get; set; }
+
+ public event EventHandler<String> Progress;
+
+ public ExaminerProcess(String configurationFile, ExaminerProcessType type)
+ {
+ ConfigurationFile = configurationFile;
+ ProcessType = type;
+ }
+
+ public Task<ExaminerProcessResult> Execute()
+ {
+ return Task.Factory.StartNew<ExaminerProcessResult>(() =>
+ {
+ Process p = new Process();
+
+ if (ProcessType == ExaminerProcessType.Schema)
+ {
+ p.StartInfo.FileName = Helper.SQL_EXAMINER_FOLDER + "\\SQLECmd.exe";
+ }
+ else
+ {
+ p.StartInfo.FileName = Helper.SQL_EXAMINER_FOLDER + "\\SQLDECmd.exe";
+ }
+
+ var sb = new StringBuilder();
+
+ p.StartInfo.RedirectStandardOutput = true;
+ p.StartInfo.RedirectStandardError = true;
+
+ p.OutputDataReceived += (sender, args) =>
+ {
+ sb.AppendLine(args.Data);
+ Progress?.Invoke(this, args.Data);
+ };
+ p.ErrorDataReceived += (sender, args) =>
+ {
+ sb.AppendLine(args.Data);
+ Progress?.Invoke(this, args.Data);
+ };
+
+ p.StartInfo.UseShellExecute = false;
+
+ p.StartInfo.Arguments = String.Format("/CONFIG:\"{0}\"", ConfigurationFile);
+
+ p.Start();
+
+ p.BeginOutputReadLine();
+ p.BeginErrorReadLine();
+
+ p.WaitForExit();
+
+ return new ExaminerProcessResult()
+ {
+ ExitCode = (ExaminerProcessExitCode)p.ExitCode,
+ Output = sb.ToString()
+ };
+ });
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessExitCode.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessExitCode.cs
new file mode 100644
index 000000000..98a4a5205
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessExitCode.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.SQLExaminer
+{
+ public enum ExaminerProcessExitCode
+ {
+ Success,
+ CompletedUnsuccessfully,
+ InvalidArguments,
+ UnspecifiedError
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessResult.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessResult.cs
new file mode 100644
index 000000000..dd031d68a
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessResult.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.SQLExaminer
+{
+ public class ExaminerProcessResult
+ {
+ public ExaminerProcessExitCode ExitCode { get; set; }
+ public String Output { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessType.cs b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessType.cs
new file mode 100644
index 000000000..cf5d9b94f
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/ExaminerProcessType.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.SQLExaminer
+{
+ public enum ExaminerProcessType
+ {
+ Schema,
+ Data
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/Helper.cs b/Software/Visual_Studio/Tango.SQLExaminer/Helper.cs
new file mode 100644
index 000000000..3b4e238a7
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/Helper.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Helpers;
+
+namespace Tango.SQLExaminer
+{
+ public static class Helper
+ {
+ public static String SQL_EXAMINER_FOLDER = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "SQLExaminer");
+ public static String SQL_EXAMINER_CONFIG_FOLDER = Path.Combine(SQL_EXAMINER_FOLDER, "Configurations");
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/Objects.cs b/Software/Visual_Studio/Tango.SQLExaminer/Objects.cs
index 8de85cdab..30ef06a56 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/Objects.cs
+++ b/Software/Visual_Studio/Tango.SQLExaminer/Objects.cs
@@ -14,11 +14,14 @@ namespace Tango.SQLExaminer
public Filter Filter { get; set; }
+ public SynchronizationOrder SynchronizationOrder { get; set; }
+
public Objects()
{
SchemaMapping = new SchemaMapping();
ObjectList = new ObjectList();
Filter = new Filter();
+ SynchronizationOrder = new SynchronizationOrder();
}
}
}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SOItem.cs b/Software/Visual_Studio/Tango.SQLExaminer/SOItem.cs
new file mode 100644
index 000000000..f95c43489
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SOItem.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace Tango.SQLExaminer
+{
+ public class SOItem
+ {
+ [XmlAttribute("name")]
+ public String Name { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
index f6f21dd98..1276c623e 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml
Binary files differ
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml
index 99f726462..76b48e19a 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml
Binary files differ
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml
index 8aab9ee1b..5ec16cbe9 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml
Binary files differ
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SynchronizationOrder.cs b/Software/Visual_Studio/Tango.SQLExaminer/SynchronizationOrder.cs
new file mode 100644
index 000000000..61ced00d8
--- /dev/null
+++ b/Software/Visual_Studio/Tango.SQLExaminer/SynchronizationOrder.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Serialization;
+
+namespace Tango.SQLExaminer
+{
+ public class SynchronizationOrder
+ {
+ [XmlAttribute("OnOperationLevel")]
+ public String OnOperationLevel { get; set; }
+
+ [XmlElement("")]
+ public List<SOItem> SOItem { get; set; }
+
+ public SynchronizationOrder()
+ {
+ SOItem = new List<SOItem>();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.SQLExaminer/Tango.SQLExaminer.csproj b/Software/Visual_Studio/Tango.SQLExaminer/Tango.SQLExaminer.csproj
index 95c7db110..0cdb6708b 100644
--- a/Software/Visual_Studio/Tango.SQLExaminer/Tango.SQLExaminer.csproj
+++ b/Software/Visual_Studio/Tango.SQLExaminer/Tango.SQLExaminer.csproj
@@ -51,7 +51,12 @@
<Compile Include="ExaminerConfiguration.cs" />
<Compile Include="ExaminerConfigurationBuilder.cs" />
<Compile Include="ExaminerConfigurationType.cs" />
+ <Compile Include="ExaminerProcess.cs" />
+ <Compile Include="ExaminerProcessExitCode.cs" />
+ <Compile Include="ExaminerProcessResult.cs" />
+ <Compile Include="ExaminerProcessType.cs" />
<Compile Include="Filter.cs" />
+ <Compile Include="Helper.cs" />
<Compile Include="IncludeItem.cs" />
<Compile Include="KeyColumn.cs" />
<Compile Include="Object.cs" />
@@ -63,6 +68,8 @@
<Compile Include="Query.cs" />
<Compile Include="SchemaMapping.cs" />
<Compile Include="SMItem.cs" />
+ <Compile Include="SOItem.cs" />
+ <Compile Include="SynchronizationOrder.cs" />
<Compile Include="SyncOption.cs" />
<Compile Include="Table.cs" />
<Compile Include="UpdateColumn.cs" />
diff --git a/Software/Visual_Studio/Tango.UnitTesting/SQLExaminer_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/SQLExaminer_TST.cs
index 3dd38c8e9..84a81035b 100644
--- a/Software/Visual_Studio/Tango.UnitTesting/SQLExaminer_TST.cs
+++ b/Software/Visual_Studio/Tango.UnitTesting/SQLExaminer_TST.cs
@@ -1,6 +1,8 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
+using System.Data.SqlClient;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
@@ -82,15 +84,21 @@ namespace Tango.UnitTesting
[TestMethod]
public void Synchronize_Schema()
{
+ SqlConnection connection = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated security=SSPI");
+
+ String command = @"CREATE DATABASE Test";
+
+ SqlCommand cmd = new SqlCommand(command, connection);
+ connection.Open();
+ cmd.ExecuteNonQuery();
+
ExaminerConfigurationBuilder builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.Schema);
var temp_folder = Helper.GetTempFolderPath();
builder.
SetSourceServer("localhost\\SQLEXPRESS", "Tango").
- SetTargetServer("localhost\\SQLEXPRESS", "Test").
- SetBackupFile(Path.Combine(temp_folder, "db.bak")).
- SetReportFile(Path.Combine(temp_folder, "report.xml"));
+ SetTargetServer("localhost\\SQLEXPRESS", "Test");
var config = builder.Build();
@@ -98,7 +106,65 @@ namespace Tango.UnitTesting
config.ToFile(config_path);
- Helper.ShowInExplorer(config_path);
+ ExaminerProcess process = new ExaminerProcess(config_path, ExaminerProcessType.Schema);
+ var result = process.Execute().Result;
+
+ Assert.AreEqual(result.ExitCode, ExaminerProcessExitCode.Success);
+ }
+
+ [TestMethod]
+ public void Override_Data()
+ {
+ ExaminerConfigurationBuilder builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.OverrideData);
+
+ var temp_folder = Helper.GetTempFolderPath();
+
+ builder.
+ SetSourceServer("localhost\\SQLEXPRESS", "Tango").
+ SetTargetServer("localhost\\SQLEXPRESS", "Test");
+
+ var config = builder.Build();
+
+ String config_path = Path.Combine(temp_folder, "data.xml");
+
+ config.ToFile(config_path);
+
+ ExaminerProcess process = new ExaminerProcess(config_path, ExaminerProcessType.Data);
+ process.Progress += (x, msg) =>
+ {
+ Debug.WriteLine(msg);
+ };
+ var result = process.Execute().Result;
+
+ Assert.AreEqual(result.ExitCode, ExaminerProcessExitCode.Success);
+ }
+
+ [TestMethod]
+ public void Provision_Machine()
+ {
+ ExaminerConfigurationBuilder builder = new ExaminerConfigurationBuilder(ExaminerConfigurationType.ProvisionMachine);
+
+ var temp_folder = Helper.GetTempFolderPath();
+
+ builder.
+ SetSourceServer("localhost\\SQLEXPRESS", "Tango").
+ SetTargetServer("localhost\\SQLEXPRESS", "Test").
+ SetMachineSerialNumber("1111");
+
+ var config = builder.Build();
+
+ String config_path = Path.Combine(temp_folder, "provision.xml");
+
+ config.ToFile(config_path);
+
+ ExaminerProcess process = new ExaminerProcess(config_path, ExaminerProcessType.Data);
+ process.Progress += (x, msg) =>
+ {
+ Debug.WriteLine(msg);
+ };
+ var result = process.Execute().Result;
+
+ Assert.AreEqual(result.ExitCode, ExaminerProcessExitCode.Success);
}
}
}
diff --git a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
index b5f1663b1..c2849f400 100644
--- a/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
+++ b/Software/Visual_Studio/Tango.UnitTesting/Tango.UnitTesting.csproj
@@ -69,6 +69,7 @@
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
+ <Reference Include="System.Data" />
<Reference Include="System.Data.Entity.Design" />
<Reference Include="System.Data.SQLite, Version=1.0.108.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
<HintPath>..\packages\System.Data.SQLite.Core.1.0.108.0\lib\net46\System.Data.SQLite.dll</HintPath>
@@ -201,7 +202,7 @@
<Import Project="..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\System.Data.SQLite.Core.targets')" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file