1+ // This source code is dual-licensed under the Apache License, version
2+ // 2.0, and the Mozilla Public License, version 1.1.
3+ //
4+ // The APL v2.0:
5+ //
6+ //---------------------------------------------------------------------------
7+ // Copyright (c) 2007-2016 Pivotal Software, Inc.
8+ //
9+ // Licensed under the Apache License, Version 2.0 (the "License");
10+ // you may not use this file except in compliance with the License.
11+ // You may obtain a copy of the License at
12+ //
13+ // http://www.apache.org/licenses/LICENSE-2.0
14+ //
15+ // Unless required by applicable law or agreed to in writing, software
16+ // distributed under the License is distributed on an "AS IS" BASIS,
17+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18+ // See the License for the specific language governing permissions and
19+ // limitations under the License.
20+ //---------------------------------------------------------------------------
21+ //
22+ // The MPL v1.1:
23+ //
24+ //---------------------------------------------------------------------------
25+ // The contents of this file are subject to the Mozilla Public License
26+ // Version 1.1 (the "License"); you may not use this file except in
27+ // compliance with the License. You may obtain a copy of the License
28+ // at http://www.mozilla.org/MPL/
29+ //
30+ // Software distributed under the License is distributed on an "AS IS"
31+ // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
32+ // the License for the specific language governing rights and
33+ // limitations under the License.
34+ //
35+ // The Original Code is RabbitMQ.
36+ //
37+ // The Initial Developer of the Original Code is Pivotal Software, Inc.
38+ // Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved.
39+ //---------------------------------------------------------------------------
40+
41+ using NUnit . Framework ;
42+ using System ;
43+ using System . Collections . Generic ;
44+ using System . Threading ;
45+
46+ namespace RabbitMQ . Client . Unit
47+ {
48+ public class TestEndpointResolver : IEndpointResolver
49+ {
50+ private IEnumerable < AmqpTcpEndpoint > endpoints ;
51+ public TestEndpointResolver ( IEnumerable < AmqpTcpEndpoint > endpoints )
52+ {
53+ this . endpoints = endpoints ;
54+ }
55+
56+ public IEnumerable < AmqpTcpEndpoint > All ( )
57+ {
58+ return endpoints ;
59+ }
60+ }
61+
62+ class TestEndpointException : Exception
63+ {
64+ public TestEndpointException ( string message ) : base ( message )
65+ {
66+ }
67+ }
68+
69+ public class TestIEndpointResolverExtensions
70+ {
71+ [ Test ]
72+ public void SelectOneShouldReturnDefaultWhenThereAreNoEndpoints ( )
73+ {
74+ var ep = new TestEndpointResolver ( new List < AmqpTcpEndpoint > ( ) ) ;
75+ Assert . IsNull ( ep . SelectOne < AmqpTcpEndpoint > ( ( x ) => null ) ) ;
76+ }
77+
78+ [ Test ]
79+ public void SelectOneShouldRaiseThrownExceptionWhenThereAreOnlyInaccessibleEndpoints ( )
80+ {
81+ var ep = new TestEndpointResolver ( new List < AmqpTcpEndpoint > { new AmqpTcpEndpoint ( ) } ) ;
82+ Assert . Throws < TestEndpointException > ( ( ) => ep . SelectOne < AmqpTcpEndpoint > ( ( x ) => { throw new TestEndpointException ( "bananas" ) ; } ) ) ;
83+ }
84+
85+ [ Test ]
86+ public void SelectOneShouldReturnFoundEndpoint ( )
87+ {
88+ var ep = new TestEndpointResolver ( new List < AmqpTcpEndpoint > { new AmqpTcpEndpoint ( ) } ) ;
89+ Assert . IsNotNull ( ep . SelectOne < AmqpTcpEndpoint > ( ( e ) => e ) ) ;
90+ }
91+ }
92+ }
0 commit comments