byte[] ProcessMessage(Message message, TestEngine.MessageSpoiler spoiler) { MemoryStream originalStream = new MemoryStream(); baseEncoder.WriteMessage(message, originalStream); byte[] originalMessage = originalStream.GetBuffer(); string content = Encoding.GetEncoding(factory.CharSet).GetString(originalMessage); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(content); System.Diagnostics.Debug.WriteLine("Content before spoiling: "); System.Diagnostics.Debug.WriteLine(content); if (spoiler.NodesToReplace != null) { XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable); foreach (string key in spoiler.Namespaces.Keys) { manager.AddNamespace(key, spoiler.Namespaces[key]); } foreach (string nodePath in spoiler.NodesToReplace.Keys) { XmlNode node = xmlDoc.SelectSingleNode(nodePath, manager); if (node != null) { node.InnerText = spoiler.NodesToReplace[nodePath]; } } } MemoryStream stream = new MemoryStream(); Encoding encoding; if (factory.CharSet.ToUpper() == "UTF-8") { encoding = new UTF8Encoding(false); } else { encoding = Encoding.GetEncoding(factory.CharSet); } XmlWriter writer = new XmlTextWriter(stream, encoding); xmlDoc.WriteTo(writer); writer.Close(); byte[] messageBytes = stream.GetBuffer(); return(messageBytes); }
public override ArraySegment <byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset) { ArraySegment <byte> byteArray; string content; TestEngine.MessageSpoiler spoiler = null; if (_bindingElement != null) { spoiler = _bindingElement.Spoiler; } if (spoiler == null) { byteArray = baseEncoder.WriteMessage(message, maxMessageSize, bufferManager); byte[] messageBytes = byteArray.Array; content = Encoding.GetEncoding(factory.CharSet).GetString(messageBytes, byteArray.Offset, byteArray.Count); } else { byte[] messageBytes = ProcessMessage(message, spoiler); int messageLength = messageBytes.Length; int totalLength = messageLength + messageOffset; byte[] totalBytes = bufferManager.TakeBuffer(totalLength); Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength); byteArray = new ArraySegment <byte>(totalBytes, messageOffset, messageLength); content = Encoding.GetEncoding(factory.CharSet).GetString(messageBytes); System.Diagnostics.Debug.WriteLine("Content after spoiling: "); System.Diagnostics.Debug.WriteLine(content); } foreach (ITrafficListener listener in _listeners) { listener.LogRequest(content); } return(byteArray); }
public void AddBreakingBehaviour(TestEngine.MessageSpoiler spoiler) { _behaviourContainer.Spoiler = spoiler; }