@@ -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