1- using System ;
2- using System . Collections . Generic ;
3- using System . Net ;
4- using System . Net . Http ;
5- using System . Net . Http . Json ;
61using System . Threading ;
72using System . Threading . Tasks ;
3+ using NServiceBus ;
4+ using NServiceBus . Transport . RabbitMQ ;
85using NServiceBus . Transport . RabbitMQ . ManagementApi ;
96using NUnit . Framework ;
107
118[ TestFixture ]
129public class ManagementClientApiUrlTests
1310{
14- TestHttpHandler handler = null ! ;
15- ManagementClient client = null ! ;
11+ TestableManagementClient client = null ! ;
1612
1713 [ SetUp ]
18- public void Setup ( )
19- {
20- handler = new TestHttpHandler ( ) ;
21- var httpClient = new HttpClient ( handler ) { BaseAddress = new Uri ( "http://localhost/xxx/" ) } ;
22- client = new ManagementClient ( httpClient ) ;
23- }
14+ public void Setup ( ) => client = new TestableManagementClient ( ) ;
2415
2516 [ TearDown ]
26- public void Teardown ( )
27- {
28- client . Dispose ( ) ;
29- handler . Dispose ( ) ;
30- }
17+ public void Teardown ( ) => client . Dispose ( ) ;
3118
3219 [ Test ]
3320 public async Task CreatePolicy_PutsToCorrectUrl ( )
3421 {
35- handler . Expect ( HttpMethod . Put , "/xxx/api/policies/%2Fvhosttest/my-policy" ) ;
36-
3722 await client . CreatePolicy ( "my-policy" , new Policy
3823 {
3924 Pattern = "my-pattern" ,
@@ -42,165 +27,127 @@ public async Task CreatePolicy_PutsToCorrectUrl()
4227
4328 } ) ;
4429
45- handler . Verify ( ) ;
30+ client . VerifyPut ( "api/policies/%2Fvhosttest/my-policy" ) ;
4631 }
4732
4833 [ Test ]
4934 public async Task GetBindingsForExchange_GetsFromCorrectUrl ( )
5035 {
51- handler . Expect ( HttpMethod . Get , "/xxx/api/exchanges/%2Fvhosttest/my-exchange/bindings/destination" )
52- . Returns ( new List < Binding > ( ) ) ;
53-
5436 await client . GetBindingsForExchange ( "my-exchange" ) ;
5537
56- handler . Verify ( ) ;
38+ client . VerifyGet ( "api/exchanges/%2Fvhosttest/my-exchange/bindings/destination" ) ;
5739 }
5840
5941 [ Test ]
6042 public async Task GetBindingsForQueue_GetsFromCorrectUrl ( )
6143 {
62- handler . Expect ( HttpMethod . Get , "/xxx/api/queues/%2Fvhosttest/my-queue/bindings" )
63- . Returns ( new List < Binding > ( ) ) ;
64-
6544 await client . GetBindingsForQueue ( "my-queue" ) ;
6645
67- handler . Verify ( ) ;
46+ client . VerifyGet ( "api/queues/%2Fvhosttest/my-queue/bindings" ) ;
6847 }
6948
7049 [ Test ]
7150 public async Task GetFeatureFlags_GetsFromCorrectUrl ( )
7251 {
73- handler . Expect ( HttpMethod . Get , "/xxx/api/feature-flags" )
74- . Returns ( new List < FeatureFlag > ( ) ) ;
75-
7652 await client . GetFeatureFlags ( ) ;
7753
78- handler . Verify ( ) ;
54+ client . VerifyGet ( "api/feature-flags" ) ;
7955 }
8056
8157 [ Test ]
8258 public async Task GetOverview_GetsFromCorrectUrl ( )
8359 {
84- handler . Expect ( HttpMethod . Get , "/xxx/api/overview" )
85- . Returns ( new Overview
86- {
87- BrokerVersion = "1.2.3" ,
88- DisableStats = false ,
89- } ) ;
90-
9160 await client . GetOverview ( ) ;
9261
93- handler . Verify ( ) ;
62+ client . VerifyGet ( "api/overview" ) ;
9463 }
9564
9665 [ Test ]
9766 public async Task GetQueue_GetsFromCorrectUrl ( )
9867 {
99- handler . Expect ( HttpMethod . Get , "/xxx/api/queues/%2Fvhosttest/my-queue" )
100- . Returns ( new Queue
101- {
102- Name = "my-queue" ,
103- Arguments = new QueueArguments ( )
104- } ) ;
105-
106- var result = await client . GetQueue ( "my-queue" ) ;
68+ await client . GetQueue ( "my-queue" ) ;
10769
108- Assert . That ( result . Name , Is . EqualTo ( "my-queue" ) ) ;
109- handler . Verify ( ) ;
70+ client . VerifyGet ( "api/queues/%2Fvhosttest/my-queue" ) ;
11071 }
11172
11273 [ Test ]
11374 public async Task GetQueues_GetsFromCorrectUrlWithPagination ( )
11475 {
115- handler . Expect ( HttpMethod . Get , "/xxx/api/queues/%2Fvhosttest/?page=2&page_size=100" )
116- . Returns ( new GetQueuesResult
117- {
118- Items = [ ] ,
119- Page = 2 ,
120- PageCount = 5
121- } ) ;
122-
123- var ( _, morePages ) = await client . GetQueues ( page : 2 , pageSize : 100 ) ;
76+ await client . GetQueues ( page : 2 , pageSize : 100 ) ;
12477
125- Assert . That ( morePages , Is . True ) ;
126- handler . Verify ( ) ;
78+ client . VerifyGet ( "api/queues/%2Fvhosttest/?page=2&page_size=100" ) ;
12779 }
12880
12981 [ Test ]
13082 public async Task GetQueues_LastPage_ReturnsMorePagesFalse ( )
13183 {
132- handler . Expect ( HttpMethod . Get , "/xxx/api/queues/%2Fvhosttest/?page=5&page_size=100" )
133- . Returns ( new GetQueuesResult
134- {
135- Items = [ ] ,
136- Page = 5 ,
137- PageCount = 5
138- } ) ;
84+ client . SetupGetResult ( new GetQueuesResult
85+ {
86+ Items = [ ] ,
87+ Page = 5 ,
88+ PageCount = 5
89+ } ) ;
13990
140- var ( _ , morePages ) = await client . GetQueues ( page : 5 , pageSize : 100 ) ;
91+ await client . GetQueues ( page : 5 , pageSize : 100 ) ;
14192
142- Assert . That ( morePages , Is . False ) ;
143- handler . Verify ( ) ;
93+ client . VerifyGet ( "api/queues/%2Fvhosttest/?page=5&page_size=100" ) ;
14494 }
14595
14696 [ Test ]
14797 public async Task GetQueue_WithSpecialCharacters_EscapesCorrectly ( )
14898 {
149- handler . Expect ( HttpMethod . Get , "/xxx/api/queues/%2Fvhosttest/queue%2Fwith%2Fslashes" )
150- . Returns ( new Queue
151- {
152- Name = "queue/with/slashes" ,
153- Arguments = new QueueArguments ( )
154- } ) ;
155-
15699 await client . GetQueue ( "queue/with/slashes" ) ;
157100
158- handler . Verify ( ) ;
101+ client . VerifyGet ( "api/queues/%2Fvhosttest/queue%2Fwith%2Fslashes" ) ;
159102 }
160103
161- class TestHttpHandler : HttpMessageHandler
104+ class TestableManagementClient ( )
105+ : ManagementClient (
106+ ConnectionConfiguration . Create ( "host=.;virtualHost=/vhosttest;username=u;password=p;port=12345" ) ,
107+ new ManagementApiConfiguration ( "http://localhost:12345/xxx" , "u" , "p" )
108+ )
162109 {
163- HttpMethod expectedMethod ;
164- string expectedPath ;
165- object responseObject ;
166- bool requestMade ;
110+ string capturedGetUrl ;
111+ string capturedPutUrl ;
112+ object getResult ;
113+
114+ public void SetupGetResult < T > ( T result ) => getResult = result ;
167115
168- public TestHttpHandler Expect ( HttpMethod method , string path )
116+ protected override Task < T > Get < T > ( string url , CancellationToken cancellationToken = default )
169117 {
170- expectedMethod = method ;
171- expectedPath = path ;
172- return this ;
118+ capturedGetUrl = url ;
119+
120+ if ( getResult is T typedResult )
121+ {
122+ return Task . FromResult ( typedResult ) ;
123+ }
124+
125+ return Task . FromResult ( CreateDefaultResult < T > ( ) ) ;
173126 }
174127
175- public TestHttpHandler Returns ( object obj )
128+ protected override Task Put < T > ( string url , T value , CancellationToken cancellationToken = default )
176129 {
177- responseObject = obj ;
178- return this ;
130+ capturedPutUrl = url ;
131+ return Task . CompletedTask ;
179132 }
180133
181- protected override Task < HttpResponseMessage > SendAsync (
182- HttpRequestMessage request ,
183- #pragma warning disable PS0003
184- CancellationToken cancellationToken
185- #pragma warning restore PS0003
186- )
187- {
188- requestMade = true ;
134+ public void VerifyGet ( string expectedUrl ) => Assert . That ( capturedGetUrl , Is . EqualTo ( expectedUrl ) , $ "Expected GET to { expectedUrl } , but got { capturedGetUrl } ") ;
189135
190- Assert . That ( request . Method , Is . EqualTo ( expectedMethod ) ,
191- $ "Expected { expectedMethod } , got { request . Method } ") ;
192- Assert . That ( request . RequestUri ? . PathAndQuery , Is . EqualTo ( expectedPath ) ,
193- $ "Expected { expectedPath } , got { request . RequestUri ? . PathAndQuery } ") ;
136+ public void VerifyPut ( string expectedUrl ) => Assert . That ( capturedPutUrl , Is . EqualTo ( expectedUrl ) , $ "Expected PUT to { expectedUrl } , but got { capturedPutUrl } ") ;
194137
195- var response = new HttpResponseMessage ( HttpStatusCode . OK ) ;
196- if ( responseObject is not null )
138+ static T CreateDefaultResult < T > ( )
139+ {
140+ if ( typeof ( T ) == typeof ( GetQueuesResult ) )
197141 {
198- response . Content = JsonContent . Create ( responseObject ) ;
142+ return ( T ) ( object ) new GetQueuesResult
143+ {
144+ Items = [ ] ,
145+ Page = 1 ,
146+ PageCount = 1
147+ } ;
199148 }
200149
201- return Task . FromResult ( response ) ;
150+ return default ;
202151 }
203-
204- public void Verify ( ) => Assert . That ( requestMade , Is . True , "Expected HTTP request was not made" ) ;
205152 }
206153}
0 commit comments