mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-14 01:25:40 -05:00
Use MemoryStream instead of stdout for outgoing messages during integration tests (#1696)
* filter * test * run all * Redirect to memorystream * revert temp changes
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
//
|
||||
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.SqlTools.Hosting.Protocol.Serializers;
|
||||
|
||||
@@ -33,7 +34,9 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
/// Starts the channel and initializes the MessageDispatcher.
|
||||
/// </summary>
|
||||
/// <param name="messageProtocolType">The type of message protocol used by the channel.</param>
|
||||
public void Start(MessageProtocolType messageProtocolType)
|
||||
/// <param name="inputStream">Optional stream to use for the input stream</param>
|
||||
/// <param name="outputStream">Optional stream to use for the output stream</param>
|
||||
public void Start(MessageProtocolType messageProtocolType, Stream? inputStream = null, Stream? outputStream = null)
|
||||
{
|
||||
IMessageSerializer messageSerializer = null;
|
||||
if (messageProtocolType == MessageProtocolType.LanguageServer)
|
||||
@@ -45,7 +48,7 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
messageSerializer = new V8MessageSerializer();
|
||||
}
|
||||
|
||||
this.Initialize(messageSerializer);
|
||||
this.Initialize(messageSerializer, inputStream, outputStream);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -70,7 +73,9 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
/// assignment of the MessageReader and MessageWriter properties.
|
||||
/// </summary>
|
||||
/// <param name="messageSerializer">The IMessageSerializer to use for message serialization.</param>
|
||||
protected abstract void Initialize(IMessageSerializer messageSerializer);
|
||||
/// <param name="inputStream">Optional stream to use for the input stream</param>
|
||||
/// <param name="outputStream">Optional stream to use for the output stream</param>
|
||||
protected abstract void Initialize(IMessageSerializer messageSerializer, Stream? inputStream = null, Stream? outputStream = null);
|
||||
|
||||
/// <summary>
|
||||
/// A method to be implemented by subclasses to handle shutdown
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Initialize(IMessageSerializer messageSerializer)
|
||||
protected override void Initialize(IMessageSerializer messageSerializer, Stream? inputStream = null, Stream? outputStream = null)
|
||||
{
|
||||
this.serviceProcess = new Process
|
||||
{
|
||||
@@ -73,8 +73,8 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
this.ProcessId = this.serviceProcess.Id;
|
||||
|
||||
// Open the standard input/output streams
|
||||
this.inputStream = this.serviceProcess.StandardOutput.BaseStream;
|
||||
this.outputStream = this.serviceProcess.StandardInput.BaseStream;
|
||||
this.inputStream = inputStream ?? this.serviceProcess.StandardOutput.BaseStream;
|
||||
this.outputStream = outputStream ?? this.serviceProcess.StandardInput.BaseStream;
|
||||
|
||||
// Set up the message reader and writer
|
||||
this.MessageReader =
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
private Stream inputStream;
|
||||
private Stream outputStream;
|
||||
|
||||
protected override void Initialize(IMessageSerializer messageSerializer)
|
||||
protected override void Initialize(IMessageSerializer messageSerializer, Stream? inputStream = null, Stream? outputStream = null)
|
||||
{
|
||||
#if !NanoServer
|
||||
// Ensure that the console is using UTF-8 encoding
|
||||
@@ -29,8 +29,8 @@ namespace Microsoft.SqlTools.Hosting.Protocol.Channel
|
||||
#endif
|
||||
|
||||
// Open the standard input/output streams
|
||||
this.inputStream = System.Console.OpenStandardInput();
|
||||
this.outputStream = System.Console.OpenStandardOutput();
|
||||
this.inputStream = inputStream ?? System.Console.OpenStandardInput();
|
||||
this.outputStream = outputStream ?? System.Console.OpenStandardOutput();
|
||||
|
||||
// Set up the reader and writer
|
||||
this.MessageReader =
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.SqlTools.Hosting.Protocol.Channel;
|
||||
@@ -68,12 +69,12 @@ namespace Microsoft.SqlTools.Hosting.Protocol
|
||||
/// <summary>
|
||||
/// Initializes
|
||||
/// </summary>
|
||||
public void Initialize()
|
||||
public void Initialize(Stream inputStream = null, Stream outputStream = null)
|
||||
{
|
||||
if (!this.isInitialized)
|
||||
{
|
||||
// Start the provided protocol channel
|
||||
this.protocolChannel.Start(this.messageProtocolType);
|
||||
this.protocolChannel.Start(this.messageProtocolType, inputStream, outputStream);
|
||||
|
||||
// Start the message dispatcher
|
||||
this.MessageDispatcher = new MessageDispatcher(this.protocolChannel);
|
||||
|
||||
@@ -40,6 +40,7 @@ using Microsoft.SqlTools.ServiceLayer.ModelManagement;
|
||||
using Microsoft.SqlTools.ServiceLayer.TableDesigner;
|
||||
using Microsoft.SqlTools.ServiceLayer.AzureBlob;
|
||||
using Microsoft.SqlTools.ServiceLayer.ExecutionPlan;
|
||||
using System.IO;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer
|
||||
{
|
||||
@@ -52,7 +53,7 @@ namespace Microsoft.SqlTools.ServiceLayer
|
||||
private static object lockObject = new object();
|
||||
private static bool isLoaded;
|
||||
|
||||
internal static ServiceHost CreateAndStartServiceHost(SqlToolsContext sqlToolsContext)
|
||||
internal static ServiceHost CreateAndStartServiceHost(SqlToolsContext sqlToolsContext, Stream? inputStream = null, Stream? outputStream = null)
|
||||
{
|
||||
ServiceHost serviceHost = ServiceHost.Instance;
|
||||
lock (lockObject)
|
||||
@@ -60,7 +61,7 @@ namespace Microsoft.SqlTools.ServiceLayer
|
||||
if (!isLoaded)
|
||||
{
|
||||
// Grab the instance of the service host
|
||||
serviceHost.Initialize();
|
||||
serviceHost.Initialize(inputStream, outputStream);
|
||||
|
||||
InitializeRequestHandlersAndServices(serviceHost, sqlToolsContext);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Threading.Tasks;
|
||||
@@ -188,8 +189,9 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common
|
||||
var hostDetails = new HostDetails(hostName, hostProfileId, hostVersion);
|
||||
SqlToolsContext sqlToolsContext = new SqlToolsContext(hostDetails);
|
||||
|
||||
// Grab the instance of the service host
|
||||
ServiceHost serviceHost = HostLoader.CreateAndStartServiceHost(sqlToolsContext);
|
||||
// Initialize the ServiceHost, using a MemoryStream for the output stream so that we don't fill up the logs
|
||||
// with a bunch of outgoing messages (which aren't used for anything during tests)
|
||||
ServiceHost serviceHost = HostLoader.CreateAndStartServiceHost(sqlToolsContext, null, new MemoryStream());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user