blob: 26d8faf26435c386190bfa7ec6c30927ca6c3994 [file] [log] [blame]
Jan Tattermusch85030e32016-05-31 12:48:35 -07001#region Copyright notice and license
2
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003// Copyright 2015 gRPC authors.
Jan Tattermusch85030e32016-05-31 12:48:35 -07004//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
Jan Tattermusch85030e32016-05-31 12:48:35 -07008//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009// http://www.apache.org/licenses/LICENSE-2.0
Jan Tattermusch85030e32016-05-31 12:48:35 -070010//
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
Jan Tattermusch85030e32016-05-31 12:48:35 -070016
17#endregion
18
19using System;
20using System.Diagnostics;
21using System.Linq;
22using System.Threading;
23using System.Threading.Tasks;
24using Grpc.Core;
25using Grpc.Core.Internal;
26using Grpc.Core.Utils;
27using NUnit.Framework;
28
29namespace Grpc.Core.Tests
30{
Jan Tattermusch018cfb82016-06-01 14:44:09 -070031 public class ShutdownHookPendingCallTest
Jan Tattermusch85030e32016-05-31 12:48:35 -070032 {
33 const string Host = "127.0.0.1";
34
Jan Tattermusch85030e32016-05-31 12:48:35 -070035 [Test]
Jan Tattermusch018cfb82016-06-01 14:44:09 -070036 public void ProcessExitHookCanCleanupAbandonedCall()
Jan Tattermusch85030e32016-05-31 12:48:35 -070037 {
Jan Tattermusch018cfb82016-06-01 14:44:09 -070038 var helper = new MockServiceHelper(Host);
39 var server = helper.GetServer();
40 server.Start();
41 var channel = helper.GetChannel();
42
43 var readyToShutdown = new TaskCompletionSource<object>();
44 helper.DuplexStreamingHandler = new DuplexStreamingServerMethod<string, string>(async (requestStream, responseStream, context) =>
45 {
46 readyToShutdown.SetResult(null);
47 await requestStream.ToListAsync();
48 });
49
50 var call = Calls.AsyncDuplexStreamingCall(helper.CreateDuplexStreamingCall());
51 readyToShutdown.Task.Wait(); // make sure handler is running
Jan Tattermusch85030e32016-05-31 12:48:35 -070052 }
Jan Tattermusch85030e32016-05-31 12:48:35 -070053 }
54}