diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2018-08-04 11:49:31 +0300 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2018-08-04 11:49:31 +0300 |
| commit | 76d311ad4690b9f88ae71ff097c6592190b65012 (patch) | |
| tree | c4718bafe0bb6007a8fa76dd69a9b4fc05ffad81 /Software | |
| parent | 40afcf1c6591abacfa1466dd4d865296bf687aa4 (diff) | |
| download | Tango-76d311ad4690b9f88ae71ff097c6592190b65012.tar.gz Tango-76d311ad4690b9f88ae71ff097c6592190b65012.zip | |
Implemented unit testing for SQLExaminer.
Diffstat (limited to 'Software')
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 Binary files differindex f580b0942..79c01ad36 100644 --- a/Software/DB/Tango.mdf +++ b/Software/DB/Tango.mdf diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf Binary files differindex 507554baf..21e8e9f31 100644 --- a/Software/DB/Tango_log.ldf +++ b/Software/DB/Tango_log.ldf 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 Binary files differindex f6f21dd98..1276c623e 100644 --- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml +++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/OverrideData.xml diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml Binary files differindex 99f726462..76b48e19a 100644 --- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml +++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/ProvisionMachine.xml diff --git a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml Binary files differindex 8aab9ee1b..5ec16cbe9 100644 --- a/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml +++ b/Software/Visual_Studio/Tango.SQLExaminer/SQLExaminer/Configurations/Schema.xml 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 |
