protected void AssertDataRow(int columnCount, DataRow[] rows) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is DataRowMessage); var dataMessage = (DataRowMessage)message; // If used to generate test code, verify the data against known // values from wireshark or the like. //var description = string.Join(",\n", dataMessage.Rows.Select(t => // $"new DataRow({t.Length}, new byte[] {{{string.Join(",", t.Data.Select(q => $"0x{q:X2}"))}}})")); Assert.AreEqual(columnCount, dataMessage.ColumnCount); Assert.AreEqual(columnCount, rows.Length); for (var i = 0; i < columnCount; ++i) { var expected = rows[i]; var actual = dataMessage.Rows[i]; Assert.AreEqual(expected.Length, actual.Length); AssertArray(expected.Data, actual.Data, actual.Length); } }
private bool PostgresMessageRead(out IPostgresMessage message) { while (true) { var foundMessage = PostgresMessage.ReadMessage( _buffer, ref _bufferOffset, ref _bufferCount, ref _readState, ref ClientState, out message); if (foundMessage) { // https://www.postgresql.org/docs/10/static/protocol-flow.html#PROTOCOL-ASYNC // TODO: Handle 'LISTEN' switch (message) { case ErrorResponseMessage errorMessage: throw new PostgresErrorException(errorMessage); case NoticeResponseMessage noticeMessage: NoticeResponse?.Invoke( this, noticeMessage.PublicCloneNotices()); continue; case ParameterStatusMessage paramMessage: ClientState.SetParameter(paramMessage); continue; } } return(foundMessage); } }
protected void AssertReadNeedsMoreData() { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsFalse(found); }
protected void AssertBindComplete() { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is BindCompleteMessage); }
protected void AssertReadyForQuery(TransactionIndicatorType type) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is ReadyForQueryMessage); var dataMessage = (ReadyForQueryMessage)message; Assert.AreEqual(type, dataMessage.TransactionIndicatorType); }
protected void AssertCommandComplete(string tag) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is CommandCompleteMessage); var dataMessage = (CommandCompleteMessage)message; Assert.AreEqual(tag, dataMessage.Tag); }
protected void FastForwardDataRow(int count) { for (var i = 0; i < count; ++i) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is DataRowMessage); } }
protected void AssertBackendKeyData(int pid, int key) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is BackendKeyDataMessage); var dataMessage = (BackendKeyDataMessage)message; Assert.AreEqual(pid, dataMessage.ProcessId); Assert.AreEqual(key, dataMessage.SecretKey); }
protected void AssertParameterStatus(string name, string key) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is ParameterStatusMessage); var parameterMessage = (ParameterStatusMessage)message; Assert.AreEqual(name, parameterMessage.ParameterName); Assert.AreEqual(key, parameterMessage.Value); }
protected void AssertAuthorizationOk() { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is AuthenticationMessage); using (var authMessage = (AuthenticationMessage)message) { Assert.AreEqual(AuthenticationMessageType.Ok, authMessage.AuthenticationMessageType); Assert.IsNull(authMessage.MD5PasswordSalt); Assert.IsNull(authMessage.GSSAuthenticationData); } }
protected void AssertRowDescription( int fieldCount, ColumnDescription[] descriptions) { var found = PostgresMessage.ReadMessage( Buffer, ref Offset, ref Length, ref ReadState, ref ClientState, out var message); Assert.IsTrue(found); Assert.IsTrue(message is RowDescriptionMessage); var dataMessage = (RowDescriptionMessage)message; // If used to generate test code, verify the data against known // values from wireshark or the like. var fields = string.Join(", ", dataMessage.Fields.Select(t => $@"new RowDescriptionField {{ Name = ""{t.Name}"", TableObjectId = {t.TableObjectId}, AttributeNumber = {t.ColumnIndex}, DataTypeObjectId = {t.DataTypeObjectId}, DataTypeSize = {t.DataTypeSize}, TypeModifier = {t.TypeModifier}, FormatCode = {t.FormatCode} }}")); Assert.AreEqual(fieldCount, dataMessage.FieldCount); for (var i = 0; i < fieldCount; ++i) { var expected = descriptions[i]; var actual = dataMessage.Fields[i]; Assert.AreEqual(expected.Name, actual.Name); Assert.AreEqual(expected.TableObjectId, actual.TableObjectId); Assert.AreEqual(expected.ColumnIndex, actual.ColumnIndex); Assert.AreEqual(expected.DataTypeObjectId, actual.DataTypeObjectId); Assert.AreEqual(expected.DataTypeSize, actual.DataTypeSize); Assert.AreEqual(expected.TypeModifier, actual.TypeModifier); Assert.AreEqual(expected.FormatCode, actual.FormatCode); } }
public async Task <JsonResult> ReadWebTrafficByClientID() { try { List <PostgresMessage> postgresMessages = new List <PostgresMessage>(); using (var sqlCon = new NpgsqlConnection(ConfigVars.Instance.PostgresDBConnectionString)) { sqlCon.Open(); using (NpgsqlCommand cmd = new NpgsqlCommand(string.Format("select \"Offset\",\"Message\",\"Topic\",\"Partition\" from fxvip where \"Message\" like '%{0}%';", ConfigVars.Instance.clientID), sqlCon)) { using (NpgsqlDataReader reader = cmd.ExecuteReader()) { while (reader.HasRows) { while (reader.Read()) { PostgresMessage kafkaMessage = new PostgresMessage(); kafkaMessage.offset = (int)reader["offset"]; kafkaMessage.partition = (int)reader["partition"]; kafkaMessage.topic = (string)reader["topic"]; kafkaMessage.message = (string)reader["message"]; postgresMessages.Add(kafkaMessage); } if (reader.NextResult() == false) { break; } } } } return(Json(postgresMessages)); } } catch (Exception exception) { return(Json(null)); } }