Files
sqltoolsservice/test/Microsoft.SqlTools.Hosting.UnitTests/ProtocolTests/RequestContextTests.cs
Kevin Cunnane 71195869e1 Add v2 of the Hosting Service and build nuget packages for it (#675)
* Port v2 of Hosting service to SqlToolsService
- Renamed project to .v2 so that existing hosted service isn't impacted
- Copied over the CoreServices project which contains ConnectionServiceCore and other reusable services for anything interacting with MSSQL
- Ported unit test project across and verified tests run.

* Nuget package support for reusable DLLs

* Use 1.1 version per Karl's suggestion

* Use correct license URL and project URL

* Use new SMO packages
2018-08-07 12:59:57 -07:00

97 lines
3.9 KiB
C#

//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
using System;
using System.Collections.Concurrent;
using Microsoft.SqlTools.Hosting.Contracts.Internal;
using Microsoft.SqlTools.Hosting.Protocol;
using Xunit;
namespace Microsoft.SqlTools.Hosting.UnitTests.ProtocolTests
{
public class RequestContextTests
{
#region Send Tests
[Fact]
public void SendResult()
{
// Setup: Create a blocking collection to collect the output
var bc = new BlockingCollection<Message>(new ConcurrentQueue<Message>());
// If: I write a response with the request context
var rc = new RequestContext<CommonObjects.TestMessageContents>(CommonObjects.RequestMessage, bc);
rc.SendResult(CommonObjects.TestMessageContents.DefaultInstance);
// Then: The message writer should have sent a response
Assert.Equal(1, bc.ToArray().Length);
Assert.Equal(MessageType.Response, bc.ToArray()[0].MessageType);
}
[Fact]
public void SendEvent()
{
// Setup: Create a blocking collection to collect the output
var bc = new BlockingCollection<Message>(new ConcurrentQueue<Message>());
// If: I write an event with the request context
var rc = new RequestContext<CommonObjects.TestMessageContents>(CommonObjects.RequestMessage, bc);
rc.SendEvent(CommonObjects.EventType, CommonObjects.TestMessageContents.DefaultInstance);
// Then: The message writer should have sent an event
Assert.Equal(1, bc.ToArray().Length);
Assert.Equal(MessageType.Event, bc.ToArray()[0].MessageType);
}
[Fact]
public void SendError()
{
// Setup: Create a blocking collection to collect the output
const string errorMessage = "error";
const int errorCode = 123;
var bc = new BlockingCollection<Message>(new ConcurrentQueue<Message>());
// If: I write an error with the request context
var rc = new RequestContext<CommonObjects.TestMessageContents>(CommonObjects.RequestMessage, bc);
rc.SendError(errorMessage, errorCode);
// Then:
// ... The message writer should have sent an error
Assert.Equal(1, bc.ToArray().Length);
Assert.Equal(MessageType.ResponseError, bc.ToArray()[0].MessageType);
// ... The error object it built should have the reuired fields set
var contents = bc.ToArray()[0].GetTypedContents<Error>();
Assert.Equal(errorCode, contents.Code);
Assert.Equal(errorMessage, contents.Message);
}
[Fact]
public void SendException()
{
// Setup: Create a blocking collection to collect the output
var bc = new BlockingCollection<Message>(new ConcurrentQueue<Message>());
// If: I write an error as an exception with the request context
const string errorMessage = "error";
var e = new Exception(errorMessage);
var rc = new RequestContext<CommonObjects.TestMessageContents>(CommonObjects.RequestMessage, bc);
rc.SendError(e);
// Then:
// ... The message writer should have sent an error
Assert.Equal(1, bc.ToArray().Length);
Assert.Equal(MessageType.ResponseError, bc.ToArray()[0].MessageType);
// ... The error object it built should have the reuired fields set
var contents = bc.ToArray()[0].GetTypedContents<Error>();
Assert.Equal(e.HResult, contents.Code);
Assert.Equal(errorMessage, contents.Message);
}
#endregion
}
}