private static void brrbrrrr() { ISerializeData sd = new SerializeDataInMemory(); var data = new DBTableData <int, SqlConnection>(sd) { ConnectionString = @"Server=(local)\SQL2016;Database=DatePtAndrei;Trusted_Connection=True;", FieldNameToMark = "id", TableName = "active_slowquery_test" }; IReceive r = new ReceiverTableSQLServerInt(data); ISend esExport = new SenderToElasticSearch(@"http://localhost:9200", "ix004", "type007", "id"); ISimpleJob job = new SimpleJob(); job.Receivers.Add(0, r); job.Senders.Add(0, esExport); job.Execute().Wait(); }
public async Task TestSimpleJobReceiverDBExecuteStoredProcedureToSenderElasticSearch() { string connectionString = GetSqlServerConnectionString(); string commandText = "dbo.TestReiceverDBExecuteStoredProcedure2"; string url = "http://localhost:9200"; string indexName = "ixtestsenderelasticsearch2"; string typeName = "Person"; string id = "PersonID"; string fileNameSerilizeLastRow = "TestExecStoredProcedure2.txt"; #region arange //Arange receiver using (var conn = new SqlConnection(connectionString)) { await conn.OpenAsync(); using (var cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = "IF OBJECT_ID('dbo.TestReiceverDBExecuteStoredProcedure2') IS NOT NULL DROP PROCEDURE dbo.TestReiceverDBExecuteStoredProcedure2;"; await cmd.ExecuteNonQueryAsync(); cmd.CommandText = "CREATE PROCEDURE dbo.TestReiceverDBExecuteStoredProcedure2 AS SELECT 1 AS PersonID, 'John' AS FirstName , 'Doe' AS LastName UNION ALL SELECT 11, 'Joanna', 'Doe' ORDER BY PersonID"; await cmd.ExecuteNonQueryAsync(); } } ReceiverStmtSqlServer rcvr = new ReceiverStmtSqlServer(connectionString, commandType, commandText, fileNameSerilizeLastRow); //Arange sender var settings = new ConnectionSettings(new Uri(url)); var client = new ElasticClient(settings); if (client.IndexExists(indexName).Exists) { client.DeleteIndex(indexName); } //Arange simple job ISend snd = new SenderToElasticSearch(url, indexName, typeName, id); ISimpleJob job = new SimpleJob(); job.Receivers.Add(0, rcvr); job.Senders.Add(0, snd); #endregion #region act job.Execute().Wait(-1); await Task.Delay(5000); //Missing of await keyword is intentional (Thread.Sleep(5000)). 5s shoudl be more than enough to insert 2 documents. #endregion #region assert //Same count ? var responseAll = client.Search <Dictionary <string, string> >(s => s.Size(10).Index(indexName).Type(typeName)); int countAll = responseAll.Documents.Count; Assert.AreEqual(countAll, 2, $"Inserted documents: 2, Read documents {countAll}"); //Same values ? (assuption: [1] both count are equals, [2] rows is already sorted by id) Dictionary <string, object>[] valuesReadFromESOrdered = (new List <Dictionary <string, string> >(responseAll.Documents)).OrderBy(ord => ord[id]).ToList <Dictionary <string, string> >().ToDictionaryStringObject().ToArray(); Assert.IsTrue(Utils.CompareDictionary(rcvr.valuesRead[0].Values, valuesReadFromESOrdered[0])); Assert.IsTrue(Utils.CompareDictionary(rcvr.valuesRead[1].Values, valuesReadFromESOrdered[1])); #endregion }
public async Task TestSendElasticSearchData() { const string url = "http://localhost:9200"; const string indexName = "ixtestsenderelasticsearch"; const string typeName = "Person"; const string id = "PersonID"; #region arange //Clean ES test index var settings = new ConnectionSettings(new Uri(url)); var client = new ElasticClient(settings); if (client.IndexExists(indexName).Exists) { client.DeleteIndex(indexName); } //Prepare source data: 4 rows {ID, FirstName, LastName} + 5th row {ID, FirstName} var m = new Mock <IRow>(); var rows = new List <IRow>(); int nrRows = 4; for (int i = 0; i < nrRows; i++) { var row = new Mock <IRow>(); row.SetupProperty ( obj => obj.Values, new Dictionary <string, object>() { ["PersonID"] = i, ["FirstName"] = "John " + i, ["LastName"] = "Doe " + i } ); rows.Add(row.Object); } //5th row (no LastName) { int i = 4; var row = new Mock <IRow>(); row.SetupProperty ( obj => obj.Values, new Dictionary <string, object>() { ["PersonID"] = i, ["FirstName"] = "John " + i } ); rows.Add(row.Object); } #endregion #region act ISend esExport = new SenderToElasticSearch(url, indexName, typeName, id); esExport.valuesToBeSent = rows.ToArray(); await esExport.Send(); await Task.Delay(5000); //Missing of await keyword is indentional (Thread.Sleep(5000)). 5s shoudl be more than enough to insert 5 documents. #endregion #region assert //Same count ? var responseAll = client.Search <Dictionary <string, string> >(s => s.Size(10).Index(indexName).Type(typeName)); int countAll = responseAll.Documents.Count; Assert.AreEqual(countAll, 5, $"Inserted documents: 5, Read documents {countAll}"); //Same values ? (assuption: [1] both count are equals, [2] rows is already sorted by id) var itemsReadFromESOrdered = (new List <Dictionary <string, string> >(responseAll.Documents)).OrderBy(ord => ord[id]).ToList <Dictionary <string, string> >(); for (int i = 0; i < countAll; i++) { var r1 = rows[i].Values; var r2 = itemsReadFromESOrdered[i].ToDictionary(k => k.Key, v => (object)v.Value); Assert.IsTrue(Utils.CompareDictionary(r1, r2)); } #endregion }