Skip to content

Commit 3176175

Browse files
committed
tests for reqeust sender
1 parent cbca05a commit 3176175

2 files changed

Lines changed: 167 additions & 1 deletion

File tree

src/Microsoft.TestPlatform.VsTestConsole.TranslationLayer/VsTestConsoleRequestSender.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,6 @@ private async Task SendMessageAndListenAndReportFinalizationResultAsync(ICollect
782782
// Also, connection termination might not kill the process which could result in files being locked by testhost.
783783
}
784784

785-
// TODO: do we need events?
786785
this.testPlatformEventSource.TranslationLayerMultiTestRunFinalizationStop();
787786
}
788787

test/TranslationLayer.UnitTests/VsTestConsoleRequestSenderTests.cs

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1899,6 +1899,173 @@ public async Task StartTestRunAsyncShouldLogErrorOnProcessExited()
18991899

19001900
#endregion
19011901

1902+
#region Finalization Tests
1903+
1904+
[TestMethod]
1905+
public async Task FinalizeTestsShouldCompleteWithZeroAttachments()
1906+
{
1907+
await this.InitializeCommunicationAsync();
1908+
1909+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
1910+
1911+
var payload = new MultiTestRunFinalizationCompletePayload() { Attachments = new AttachmentSet[0] };
1912+
var finalizationComplete = new Message()
1913+
{
1914+
MessageType = MessageType.MultiTestRunFinalizationComplete,
1915+
Payload = JToken.FromObject(payload)
1916+
};
1917+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(finalizationComplete));
1918+
1919+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "a") }, mockHandler.Object, CancellationToken.None);
1920+
1921+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>()));
1922+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationCancel), Times.Never);
1923+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(It.Is<ICollection<AttachmentSet>>(a => a.Count == 0)), Times.Once, "Discovery Complete must be called");
1924+
mockHandler.Verify(mh => mh.HandleLogMessage(It.IsAny<TestMessageLevel>(), It.IsAny<string>()), Times.Never, "TestMessage event must not be called");
1925+
}
1926+
1927+
[TestMethod]
1928+
public async Task FinalizeTestsShouldCompleteWithOneAttachment()
1929+
{
1930+
await this.InitializeCommunicationAsync();
1931+
1932+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
1933+
1934+
var payload = new MultiTestRunFinalizationCompletePayload()
1935+
{
1936+
Attachments = new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "out") }
1937+
};
1938+
var finalizationComplete = new Message()
1939+
{
1940+
MessageType = MessageType.MultiTestRunFinalizationComplete,
1941+
Payload = JToken.FromObject(payload)
1942+
};
1943+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(finalizationComplete));
1944+
1945+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "a") }, mockHandler.Object, CancellationToken.None);
1946+
1947+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>()));
1948+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationCancel), Times.Never);
1949+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(It.Is<ICollection<AttachmentSet>>(a => a.Count == 1)), Times.Once, "Discovery Complete must be called");
1950+
mockHandler.Verify(mh => mh.HandleLogMessage(It.IsAny<TestMessageLevel>(), It.IsAny<string>()), Times.Never, "TestMessage event must not be called");
1951+
}
1952+
1953+
[TestMethod]
1954+
public async Task FinalizeTestsShouldCompleteWithOneAttachmentAndTestMessage()
1955+
{
1956+
await this.InitializeCommunicationAsync();
1957+
1958+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
1959+
1960+
var payload = new MultiTestRunFinalizationCompletePayload()
1961+
{
1962+
Attachments = new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "out") }
1963+
};
1964+
var finalizationComplete = new Message()
1965+
{
1966+
MessageType = MessageType.MultiTestRunFinalizationComplete,
1967+
Payload = JToken.FromObject(payload)
1968+
};
1969+
1970+
var mpayload = new TestMessagePayload() { MessageLevel = TestMessageLevel.Informational, Message = "Hello" };
1971+
var message = CreateMessage(MessageType.TestMessage, mpayload);
1972+
1973+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(message));
1974+
mockHandler.Setup(mh => mh.HandleLogMessage(It.IsAny<TestMessageLevel>(), It.IsAny<string>())).Callback(
1975+
() => this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(finalizationComplete)));
1976+
1977+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "a") }, mockHandler.Object, CancellationToken.None);
1978+
1979+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>()));
1980+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationCancel), Times.Never);
1981+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(It.Is<ICollection<AttachmentSet>>(a => a.Count == 1)), Times.Once, "Discovery Complete must be called");
1982+
mockHandler.Verify(mh => mh.HandleLogMessage(TestMessageLevel.Informational, "Hello"), Times.Once, "TestMessage event must be called");
1983+
}
1984+
1985+
[TestMethod]
1986+
public async Task FinalizeTestsShouldSendCancelMessageIfCancellationTokenCancelled()
1987+
{
1988+
await this.InitializeCommunicationAsync();
1989+
1990+
var cts = new CancellationTokenSource();
1991+
1992+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
1993+
1994+
var payload = new MultiTestRunFinalizationCompletePayload()
1995+
{
1996+
Attachments = new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "out") }
1997+
};
1998+
var finalizationComplete = new Message()
1999+
{
2000+
MessageType = MessageType.MultiTestRunFinalizationComplete,
2001+
Payload = JToken.FromObject(payload)
2002+
};
2003+
2004+
var mpayload = new TestMessagePayload() { MessageLevel = TestMessageLevel.Informational, Message = "Hello" };
2005+
var message = CreateMessage(MessageType.TestMessage, mpayload);
2006+
2007+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(message));
2008+
mockHandler.Setup(mh => mh.HandleLogMessage(It.IsAny<TestMessageLevel>(), It.IsAny<string>())).Callback(() =>
2009+
{
2010+
cts.Cancel();
2011+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(finalizationComplete));
2012+
});
2013+
2014+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "a") }, mockHandler.Object, cts.Token);
2015+
2016+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>()));
2017+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationCancel));
2018+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(It.Is<ICollection<AttachmentSet>>(a => a.Count == 1)), Times.Once, "Discovery Complete must be called");
2019+
mockHandler.Verify(mh => mh.HandleLogMessage(TestMessageLevel.Informational, "Hello"), Times.Once, "TestMessage event must be called");
2020+
}
2021+
2022+
[TestMethod]
2023+
public async Task FinalizeTestsShouldSendCancelMessageIfCancellationTokenCancelledAtTheBeginning()
2024+
{
2025+
await this.InitializeCommunicationAsync();
2026+
2027+
var cts = new CancellationTokenSource();
2028+
cts.Cancel();
2029+
2030+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
2031+
2032+
var payload = new MultiTestRunFinalizationCompletePayload()
2033+
{
2034+
Attachments = new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "out") }
2035+
};
2036+
var finalizationComplete = new Message()
2037+
{
2038+
MessageType = MessageType.MultiTestRunFinalizationComplete,
2039+
Payload = JToken.FromObject(payload)
2040+
};
2041+
2042+
this.mockCommunicationManager.Setup(cm => cm.ReceiveMessageAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(finalizationComplete));
2043+
2044+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "a") }, mockHandler.Object, cts.Token);
2045+
2046+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>()));
2047+
mockCommunicationManager.Verify(c => c.SendMessage(MessageType.MultiTestRunFinalizationCancel));
2048+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(It.Is<ICollection<AttachmentSet>>(a => a.Count == 1)), Times.Once, "Discovery Complete must be called");
2049+
mockHandler.Verify(mh => mh.HandleLogMessage(TestMessageLevel.Informational, "Hello"), Times.Never, "TestMessage event must be called");
2050+
}
2051+
2052+
[TestMethod]
2053+
public async Task FinalizeTestsShouldAbortOnExceptionInSendMessage()
2054+
{
2055+
var mockHandler = new Mock<IMultiTestRunFinalizationEventsHandler>();
2056+
this.mockCommunicationManager.Setup(cm => cm.SendMessage(MessageType.MultiTestRunFinalizationStart, It.IsAny<object>())).Throws(new IOException());
2057+
2058+
await this.requestSenderAsync.FinalizeMultiTestRunAsync(new List<AttachmentSet> { new AttachmentSet(new Uri("http://www.bing.com"), "out") }, mockHandler.Object, CancellationToken.None);
2059+
2060+
mockHandler.Verify(mh => mh.HandleMultiTestRunFinalizationComplete(null), Times.Once, "Discovery Complete must be called");
2061+
mockHandler.Verify(mh => mh.HandleLogMessage(TestMessageLevel.Error, It.IsAny<string>()), Times.Once, "TestMessage event must be called");
2062+
this.mockCommunicationManager.Verify(cm => cm.StopServer(), Times.Never);
2063+
}
2064+
2065+
#endregion
2066+
2067+
2068+
19022069
#region Private Methods
19032070

19042071
/// <summary>

0 commit comments

Comments
 (0)