github.com/lirm/aeron-go@v0.0.0-20230415210743-920325491dc4/aeron/clientconductor_test.go (about) 1 // Copyright 2022 Steven Stern 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package aeron 16 17 import ( 18 "fmt" 19 "github.com/lirm/aeron-go/aeron/atomic" 20 "github.com/lirm/aeron-go/aeron/counters" 21 "github.com/lirm/aeron-go/aeron/testdata" 22 "github.com/stretchr/testify/mock" 23 "github.com/stretchr/testify/suite" 24 "testing" 25 "time" 26 ) 27 28 const ( 29 StreamId1 = int32(1002) 30 CorrelationId1 = int64(2000) 31 SessionId1 = int32(13) 32 SourceInfo = "127.0.0.1:40789" 33 SubscriptionPositionId = int32(2) 34 SubscriptionPositionRegistrationId = int64(4001) 35 CounterTypeId = int32(102) 36 CounterLabel = "counter label" 37 CounterRegId = int64(42) 38 CounterRegId2 = int64(43) 39 CounterId = int32(3) 40 ) 41 42 type ClientConductorTestSuite struct { 43 suite.Suite 44 cc ClientConductor 45 driverProxy *MockDriverProxy 46 } 47 48 func (c *ClientConductorTestSuite) SetupTest() { 49 metaBuf := atomic.MakeBuffer(make([]byte, 256*1024)) 50 meta := counters.InitAndWrapMetaData(metaBuf, 0, 0, 0, 24*1024, 24*1024, 0) 51 c.driverProxy = new(MockDriverProxy) 52 c.cc.Init(c.driverProxy, nil, time.Millisecond*100, time.Millisecond*100, 53 time.Millisecond*100, time.Millisecond*100, meta) 54 c.driverProxy.On("NextCorrelationID").Return(int64(123)) 55 } 56 57 func (c *ClientConductorTestSuite) TestAddPublicationShouldNotifyMediaDriver() { 58 c.driverProxy.On("AddPublication", Channel, StreamId1). 59 Return(CorrelationId1, nil) 60 reg, err := c.cc.AddPublication(Channel, StreamId1) 61 c.Assert().NoError(err) 62 c.Assert().Equal(reg, CorrelationId1) 63 } 64 65 func (c *ClientConductorTestSuite) TestAddPublicationShouldTimeoutWithoutReadyMessage() { 66 c.driverProxy.On("AddPublication", Channel, StreamId1). 67 Return(CorrelationId1, nil) 68 reg, err := c.cc.AddPublication(Channel, StreamId1) 69 c.Require().NoError(err) 70 c.Require().Equal(reg, CorrelationId1) 71 72 // First a temporary error. 73 pub, err := c.cc.FindPublication(CorrelationId1) 74 c.Require().NoError(err) 75 c.Assert().Nil(pub) 76 77 // Then a permanent error. 78 oldTimeout := c.cc.driverTimeoutNs 79 c.cc.driverTimeoutNs = 1 80 defer func() { c.cc.driverTimeoutNs = oldTimeout }() 81 pub, err = c.cc.FindPublication(CorrelationId1) 82 c.Assert().Error(err) 83 c.Assert().Nil(pub) 84 } 85 86 func (c *ClientConductorTestSuite) TestShouldFailToAddPublicationOnMediaDriverError() { 87 c.driverProxy.On("AddPublication", Channel, StreamId1). 88 Return(CorrelationId1, nil) 89 reg, err := c.cc.AddPublication(Channel, StreamId1) 90 c.Require().NoError(err) 91 c.Require().Equal(reg, CorrelationId1) 92 93 c.cc.OnErrorResponse(CorrelationId1, 1, "error") 94 pub, err := c.cc.FindPublication(CorrelationId1) 95 c.Assert().Nil(pub) 96 c.Assert().Error(err) 97 } 98 99 func (c *ClientConductorTestSuite) TestAddSubscriptionShouldNotifyMediaDriver() { 100 c.driverProxy.On("AddSubscription", Channel, StreamId1). 101 Return(CorrelationId1, nil) 102 reg, err := c.cc.AddSubscription(Channel, StreamId1) 103 c.Assert().NoError(err) 104 c.Assert().Equal(reg, CorrelationId1) 105 } 106 107 func (c *ClientConductorTestSuite) TestAddSubscriptionShouldTimeoutWithoutOperationSuccessful() { 108 c.driverProxy.On("AddSubscription", Channel, StreamId1). 109 Return(CorrelationId1, nil) 110 reg, err := c.cc.AddSubscription(Channel, StreamId1) 111 c.Require().NoError(err) 112 c.Require().Equal(reg, CorrelationId1) 113 114 // First a temporary error. 115 sub, err := c.cc.FindSubscription(CorrelationId1) 116 c.Assert().NoError(err) 117 c.Assert().Nil(sub) 118 119 // Then a permanent error. 120 oldTimeout := c.cc.driverTimeoutNs 121 c.cc.driverTimeoutNs = 1 122 defer func() { c.cc.driverTimeoutNs = oldTimeout }() 123 sub, err = c.cc.FindSubscription(CorrelationId1) 124 c.Assert().Error(err) 125 c.Assert().Nil(sub) 126 } 127 128 func (c *ClientConductorTestSuite) TestShouldFailToAddSubscriptionOnMediaDriverError() { 129 c.driverProxy.On("AddSubscription", Channel, StreamId1). 130 Return(CorrelationId1, nil) 131 reg, err := c.cc.AddSubscription(Channel, StreamId1) 132 c.Require().NoError(err) 133 c.Require().Equal(reg, CorrelationId1) 134 135 c.cc.OnErrorResponse(CorrelationId1, 1, "error") 136 sub, err := c.cc.FindSubscription(CorrelationId1) 137 c.Assert().Nil(sub) 138 c.Assert().Error(err) 139 } 140 141 func (c *ClientConductorTestSuite) TestClientNotifiedOfNewAndInactiveImagesWithDefaultHandler() { 142 var availableHandler = FakeImageHandler{} 143 var unavailableHandler = FakeImageHandler{} 144 c.cc.onAvailableImageHandler = availableHandler.Handle 145 c.cc.onUnavailableImageHandler = unavailableHandler.Handle 146 c.driverProxy.On("AddSubscription", Channel, StreamId1). 147 Return(CorrelationId1, nil) 148 reg, err := c.cc.AddSubscription(Channel, StreamId1) 149 c.Require().NoError(err) 150 c.Require().Equal(reg, CorrelationId1) 151 152 c.cc.OnSubscriptionReady(CorrelationId1, -1) 153 sub, err := c.cc.FindSubscription(CorrelationId1) 154 c.Require().NoError(err) 155 c.Require().NotNil(sub) 156 157 var image MockImage 158 c.cc.imageFactory = func(_ int32, _ int64, _ string, _ int64, _ string, _ *atomic.Buffer, _ int32) Image { 159 return &image 160 } 161 162 c.Require().Equal(sub.ImageCount(), 0) 163 c.cc.OnAvailableImage(StreamId1, SessionId1, fmt.Sprintf("%d-log", SessionId1), SourceInfo, 164 SubscriptionPositionId, CorrelationId1, CorrelationId1) 165 c.Require().Equal(sub.ImageCount(), 1) 166 c.Require().Equal(availableHandler.GetHandledImage(), &image) 167 c.Require().Nil(availableHandler.GetHandledImage()) 168 c.Require().Nil(unavailableHandler.GetHandledImage()) 169 170 image.On("CorrelationID").Return(CorrelationId1) 171 c.cc.OnUnavailableImage(CorrelationId1, sub.RegistrationID()) 172 c.Require().Equal(sub.ImageCount(), 0) 173 c.Require().Equal(unavailableHandler.GetHandledImage(), &image) 174 c.Require().Nil(unavailableHandler.GetHandledImage()) 175 c.Require().Nil(availableHandler.GetHandledImage()) 176 } 177 178 func (c *ClientConductorTestSuite) TestClientNotifiedOfNewAndInactiveImagesWithSpecificHandler() { 179 var failHandler = func(_ Image) { 180 c.Fail("Default handler called instead of specified handler") 181 } 182 c.cc.onAvailableImageHandler = failHandler 183 c.cc.onUnavailableImageHandler = failHandler 184 185 var availableHandler = FakeImageHandler{} 186 var unavailableHandler = FakeImageHandler{} 187 188 c.driverProxy.On("AddSubscription", Channel, StreamId1). 189 Return(CorrelationId1, nil) 190 reg, err := c.cc.AddSubscriptionWithHandlers(Channel, StreamId1, availableHandler.Handle, unavailableHandler.Handle) 191 c.Require().NoError(err) 192 c.Require().Equal(reg, CorrelationId1) 193 194 c.cc.OnSubscriptionReady(CorrelationId1, -1) 195 sub, err := c.cc.FindSubscription(CorrelationId1) 196 c.Require().NoError(err) 197 c.Require().NotNil(sub) 198 199 var image MockImage 200 c.cc.imageFactory = func(_ int32, _ int64, _ string, _ int64, _ string, _ *atomic.Buffer, _ int32) Image { 201 return &image 202 } 203 204 c.Require().Equal(sub.ImageCount(), 0) 205 c.cc.OnAvailableImage(StreamId1, SessionId1, fmt.Sprintf("%d-log", SessionId1), SourceInfo, 206 SubscriptionPositionId, CorrelationId1, CorrelationId1) 207 c.Require().Equal(sub.ImageCount(), 1) 208 c.Require().Equal(availableHandler.GetHandledImage(), &image) 209 c.Require().Nil(availableHandler.GetHandledImage()) 210 c.Require().Nil(unavailableHandler.GetHandledImage()) 211 212 image.On("CorrelationID").Return(CorrelationId1) 213 c.cc.OnUnavailableImage(CorrelationId1, sub.RegistrationID()) 214 c.Require().Equal(sub.ImageCount(), 0) 215 c.Require().Equal(unavailableHandler.GetHandledImage(), &image) 216 c.Require().Nil(unavailableHandler.GetHandledImage()) 217 c.Require().Nil(availableHandler.GetHandledImage()) 218 } 219 220 func (c *ClientConductorTestSuite) TestShouldIgnoreUnknownNewImage() { 221 var failHandler = func(_ Image) { 222 c.Fail("Unknown image should not trigger any handler") 223 } 224 c.cc.onAvailableImageHandler = failHandler 225 c.cc.onUnavailableImageHandler = failHandler 226 227 c.cc.OnAvailableImage(StreamId1, SessionId1, fmt.Sprintf("%d-log", SessionId1), SourceInfo, 228 SubscriptionPositionId, SubscriptionPositionRegistrationId, CorrelationId1) 229 } 230 231 func (c *ClientConductorTestSuite) TestShouldIgnoreUnknownInactiveImage() { 232 var failHandler = func(_ Image) { 233 c.Fail("Unknown image should not trigger any handler") 234 } 235 c.cc.onAvailableImageHandler = failHandler 236 c.cc.onUnavailableImageHandler = failHandler 237 238 c.cc.OnUnavailableImage(CorrelationId1, SubscriptionPositionRegistrationId) 239 } 240 241 func (c *ClientConductorTestSuite) TestShouldReturnNullForUnknownCounter() { 242 counter, err := c.cc.FindCounter(100) 243 c.Assert().Nil(counter) 244 c.Assert().Error(err) 245 } 246 247 // Also indirectly tests C++'s shouldSendAddCounterToDriver. We mock out driverProxy. They check that driverProxy 248 // wrote the correct data to a test ring buffer. 249 func (c *ClientConductorTestSuite) TestShouldReturnNullForCounterWithoutOnAvailableCounter() { 250 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 251 Return(CounterRegId, nil) 252 253 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 254 c.Require().NoError(err) 255 c.Require().Equal(id, CounterRegId) 256 257 counter, err := c.cc.FindCounter(id) 258 c.Assert().Nil(counter) 259 c.Assert().NoError(err) 260 } 261 262 func (c *ClientConductorTestSuite) TestShouldReturnCounterAfterOnAvailableCounter() { 263 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 264 Return(CounterRegId, nil) 265 handler := testdata.NewMockAvailableCounterHandler(c.T()) 266 handler.On("Handle", mock.Anything, CounterRegId, CounterId).Once() 267 c.cc.AddAvailableCounterHandler(handler) 268 269 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 270 c.Require().NoError(err) 271 c.Require().Equal(id, CounterRegId) 272 273 c.cc.OnAvailableCounter(CounterRegId, CounterId) 274 275 counter, err := c.cc.FindCounter(id) 276 c.Require().NotNil(counter) 277 c.Require().NoError(err) 278 c.Assert().Equal(counter.RegistrationId(), CounterRegId) 279 c.Assert().Equal(counter.counterId, CounterId) 280 } 281 282 // C++ uses a shared_ptr's implicit destructor to call Close(). Here we just call Close() manually. 283 func (c *ClientConductorTestSuite) TestShouldReleaseCounterAfterGoingOutOfScope() { 284 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 285 Return(CounterRegId, nil) 286 287 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 288 c.Require().NoError(err) 289 c.Require().Equal(id, CounterRegId) 290 291 c.cc.OnAvailableCounter(CounterRegId, CounterId) 292 293 counter, err := c.cc.FindCounter(id) 294 c.Require().NotNil(counter) 295 c.Require().NoError(err) 296 297 c.driverProxy.On("RemoveCounter", CounterRegId). 298 Return(int64(123), nil) 299 counter.Close() 300 301 counter, err = c.cc.FindCounter(id) 302 c.Require().Nil(counter) 303 c.Require().Error(err) 304 } 305 306 func (c *ClientConductorTestSuite) TestShouldReturnDifferentIdsForDuplicateAddCounter() { 307 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 308 Once().Return(CounterRegId, nil) 309 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 310 c.Require().NoError(err) 311 c.Require().Equal(id, CounterRegId) 312 313 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 314 Once().Return(CounterRegId2, nil) 315 id, err = c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 316 c.Require().NoError(err) 317 c.Require().Equal(id, CounterRegId2) 318 } 319 320 func (c *ClientConductorTestSuite) TestShouldReturnSameFindCounterAfterOnAvailableCounter() { 321 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 322 Return(CounterRegId, nil) 323 324 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 325 326 c.cc.OnAvailableCounter(CounterRegId, CounterId) 327 328 counter1, err := c.cc.FindCounter(id) 329 c.Require().NotNil(counter1) 330 c.Require().NoError(err) 331 counter2, err := c.cc.FindCounter(id) 332 c.Require().NotNil(counter2) 333 c.Require().NoError(err) 334 c.Require().Equal(counter1, counter2) 335 } 336 337 func (c *ClientConductorTestSuite) TestShouldReturnDifferentCounterAfterOnAvailableCounter() { 338 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 339 Once().Return(CounterRegId, nil) 340 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 341 Once().Return(CounterRegId2, nil) 342 handler := testdata.NewMockAvailableCounterHandler(c.T()) 343 handler.On("Handle", mock.Anything, CounterRegId, CounterId).Once() 344 handler.On("Handle", mock.Anything, CounterRegId2, CounterId).Once() 345 c.cc.AddAvailableCounterHandler(handler) 346 347 id1, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 348 c.Require().Equal(id1, CounterRegId) 349 id2, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 350 c.Require().Equal(id2, CounterRegId2) 351 352 c.cc.OnAvailableCounter(CounterRegId, CounterId) 353 c.cc.OnAvailableCounter(CounterRegId2, CounterId) 354 355 counter1, err := c.cc.FindCounter(id1) 356 c.Require().NotNil(counter1) 357 c.Require().NoError(err) 358 counter2, err := c.cc.FindCounter(id2) 359 c.Require().NotNil(counter2) 360 c.Require().NoError(err) 361 c.Require().NotEqual(counter1, counter2) 362 } 363 364 func (c *ClientConductorTestSuite) TestShouldNotFindCounterOnAvailableCounterForUnknownCorrelationId() { 365 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 366 Return(CounterRegId, nil) 367 handler := testdata.NewMockAvailableCounterHandler(c.T()) 368 handler.On("Handle", mock.Anything, CounterRegId2, CounterId).Once() 369 c.cc.AddAvailableCounterHandler(handler) 370 371 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 372 373 c.cc.OnAvailableCounter(CounterRegId2, CounterId) 374 375 counter1, err := c.cc.FindCounter(id) 376 c.Require().Nil(counter1) 377 c.Require().NoError(err) 378 } 379 380 func (c *ClientConductorTestSuite) TestShouldTimeoutAddCounterWithoutOnAvailableCounter() { 381 c.cc.driverTimeoutNs = 1 382 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 383 Return(CounterRegId, nil) 384 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 385 386 counter, err := c.cc.FindCounter(id) 387 c.Require().Nil(counter) 388 c.Require().Error(err) 389 } 390 391 func (c *ClientConductorTestSuite) TestShouldErrorOnFindWhenReceivingErrorResponseOnAddCounter() { 392 c.driverProxy.On("AddCounterByLabel", CounterTypeId, CounterLabel). 393 Return(CounterRegId, nil) 394 id, err := c.cc.AddCounterByLabel(CounterTypeId, CounterLabel) 395 396 c.cc.OnErrorResponse(id, 123, "can't add counter") 397 398 counter, err := c.cc.FindCounter(id) 399 c.Require().Nil(counter) 400 c.Require().ErrorContains(err, "can't add counter") 401 } 402 403 func (c *ClientConductorTestSuite) TestShouldCallOnUnavailableCounter() { 404 id := int64(101) 405 handler := testdata.NewMockUnavailableCounterHandler(c.T()) 406 handler.On("Handle", mock.Anything, id, CounterId).Once() 407 c.cc.AddUnavailableCounterHandler(handler) 408 409 c.cc.OnUnavailableCounter(id, CounterId) 410 } 411 412 func TestClientConductor(t *testing.T) { 413 suite.Run(t, new(ClientConductorTestSuite)) 414 } 415 416 type FakeImageHandler struct { 417 images []Image 418 } 419 420 func (f *FakeImageHandler) Handle(image Image) { 421 if f.images == nil { 422 f.images = make([]Image, 0) 423 } 424 f.images = append(f.images, image) 425 } 426 427 func (f *FakeImageHandler) GetHandledImage() Image { 428 if len(f.images) == 0 { 429 return nil 430 } 431 ret := f.images[0] 432 f.images = f.images[1:] 433 return ret 434 } 435 436 // Everything below is auto generated by mockery using this command: 437 // mockery --name=DriverProxy --inpackage --structname=MockDriverProxy --print 438 439 // Code generated by mockery v2.14.0. DO NOT EDIT. 440 441 // MockDriverProxy is an autogenerated mock type for the DriverProxy type 442 type MockDriverProxy struct { 443 mock.Mock 444 } 445 446 // AddCounter provides a mock function with given fields: typeId, keyBuffer, keyOffset, keyLength, labelBuffer, labelOffset, labelLength 447 func (_m *MockDriverProxy) AddCounter(typeId int32, keyBuffer *atomic.Buffer, keyOffset int32, keyLength int32, labelBuffer *atomic.Buffer, labelOffset int32, labelLength int32) (int64, error) { 448 ret := _m.Called(typeId, keyBuffer, keyOffset, keyLength, labelBuffer, labelOffset, labelLength) 449 450 var r0 int64 451 if rf, ok := ret.Get(0).(func(int32, *atomic.Buffer, int32, int32, *atomic.Buffer, int32, int32) int64); ok { 452 r0 = rf(typeId, keyBuffer, keyOffset, keyLength, labelBuffer, labelOffset, labelLength) 453 } else { 454 r0 = ret.Get(0).(int64) 455 } 456 457 var r1 error 458 if rf, ok := ret.Get(1).(func(int32, *atomic.Buffer, int32, int32, *atomic.Buffer, int32, int32) error); ok { 459 r1 = rf(typeId, keyBuffer, keyOffset, keyLength, labelBuffer, labelOffset, labelLength) 460 } else { 461 r1 = ret.Error(1) 462 } 463 464 return r0, r1 465 } 466 467 // AddCounterByLabel provides a mock function with given fields: typeId, label 468 func (_m *MockDriverProxy) AddCounterByLabel(typeId int32, label string) (int64, error) { 469 ret := _m.Called(typeId, label) 470 471 var r0 int64 472 if rf, ok := ret.Get(0).(func(int32, string) int64); ok { 473 r0 = rf(typeId, label) 474 } else { 475 r0 = ret.Get(0).(int64) 476 } 477 478 var r1 error 479 if rf, ok := ret.Get(1).(func(int32, string) error); ok { 480 r1 = rf(typeId, label) 481 } else { 482 r1 = ret.Error(1) 483 } 484 485 return r0, r1 486 } 487 488 // AddDestination provides a mock function with given fields: registrationID, channel 489 func (_m *MockDriverProxy) AddDestination(registrationID int64, channel string) (int64, error) { 490 ret := _m.Called(registrationID, channel) 491 492 var r0 int64 493 if rf, ok := ret.Get(0).(func(int64, string) int64); ok { 494 r0 = rf(registrationID, channel) 495 } else { 496 r0 = ret.Get(0).(int64) 497 } 498 499 var r1 error 500 if rf, ok := ret.Get(1).(func(int64, string) error); ok { 501 r1 = rf(registrationID, channel) 502 } else { 503 r1 = ret.Error(1) 504 } 505 506 return r0, r1 507 } 508 509 // AddExclusivePublication provides a mock function with given fields: channel, streamID 510 func (_m *MockDriverProxy) AddExclusivePublication(channel string, streamID int32) (int64, error) { 511 ret := _m.Called(channel, streamID) 512 513 var r0 int64 514 if rf, ok := ret.Get(0).(func(string, int32) int64); ok { 515 r0 = rf(channel, streamID) 516 } else { 517 r0 = ret.Get(0).(int64) 518 } 519 520 var r1 error 521 if rf, ok := ret.Get(1).(func(string, int32) error); ok { 522 r1 = rf(channel, streamID) 523 } else { 524 r1 = ret.Error(1) 525 } 526 527 return r0, r1 528 } 529 530 // AddPublication provides a mock function with given fields: channel, streamID 531 func (_m *MockDriverProxy) AddPublication(channel string, streamID int32) (int64, error) { 532 ret := _m.Called(channel, streamID) 533 534 var r0 int64 535 if rf, ok := ret.Get(0).(func(string, int32) int64); ok { 536 r0 = rf(channel, streamID) 537 } else { 538 r0 = ret.Get(0).(int64) 539 } 540 541 var r1 error 542 if rf, ok := ret.Get(1).(func(string, int32) error); ok { 543 r1 = rf(channel, streamID) 544 } else { 545 r1 = ret.Error(1) 546 } 547 548 return r0, r1 549 } 550 551 // AddRcvDestination provides a mock function with given fields: registrationID, channel 552 func (_m *MockDriverProxy) AddRcvDestination(registrationID int64, channel string) (int64, error) { 553 ret := _m.Called(registrationID, channel) 554 555 var r0 int64 556 if rf, ok := ret.Get(0).(func(int64, string) int64); ok { 557 r0 = rf(registrationID, channel) 558 } else { 559 r0 = ret.Get(0).(int64) 560 } 561 562 var r1 error 563 if rf, ok := ret.Get(1).(func(int64, string) error); ok { 564 r1 = rf(registrationID, channel) 565 } else { 566 r1 = ret.Error(1) 567 } 568 569 return r0, r1 570 } 571 572 // AddSubscription provides a mock function with given fields: channel, streamID 573 func (_m *MockDriverProxy) AddSubscription(channel string, streamID int32) (int64, error) { 574 ret := _m.Called(channel, streamID) 575 576 var r0 int64 577 if rf, ok := ret.Get(0).(func(string, int32) int64); ok { 578 r0 = rf(channel, streamID) 579 } else { 580 r0 = ret.Get(0).(int64) 581 } 582 583 var r1 error 584 if rf, ok := ret.Get(1).(func(string, int32) error); ok { 585 r1 = rf(channel, streamID) 586 } else { 587 r1 = ret.Error(1) 588 } 589 590 return r0, r1 591 } 592 593 // ClientClose provides a mock function with given fields: 594 func (_m *MockDriverProxy) ClientClose() error { 595 ret := _m.Called() 596 597 var r0 error 598 if rf, ok := ret.Get(0).(func() error); ok { 599 r0 = rf() 600 } else { 601 r0 = ret.Error(0) 602 } 603 604 return r0 605 } 606 607 // ClientID provides a mock function with given fields: 608 func (_m *MockDriverProxy) ClientID() int64 { 609 ret := _m.Called() 610 611 var r0 int64 612 if rf, ok := ret.Get(0).(func() int64); ok { 613 r0 = rf() 614 } else { 615 r0 = ret.Get(0).(int64) 616 } 617 618 return r0 619 } 620 621 // NextCorrelationID provides a mock function with given fields: 622 func (_m *MockDriverProxy) NextCorrelationID() int64 { 623 ret := _m.Called() 624 625 var r0 int64 626 if rf, ok := ret.Get(0).(func() int64); ok { 627 r0 = rf() 628 } else { 629 r0 = ret.Get(0).(int64) 630 } 631 632 return r0 633 } 634 635 // RemoveCounter provides a mock function with given fields: registrationId 636 func (_m *MockDriverProxy) RemoveCounter(registrationId int64) (int64, error) { 637 ret := _m.Called(registrationId) 638 639 var r0 int64 640 if rf, ok := ret.Get(0).(func(int64) int64); ok { 641 r0 = rf(registrationId) 642 } else { 643 r0 = ret.Get(0).(int64) 644 } 645 646 var r1 error 647 if rf, ok := ret.Get(1).(func(int64) error); ok { 648 r1 = rf(registrationId) 649 } else { 650 r1 = ret.Error(1) 651 } 652 653 return r0, r1 654 } 655 656 // RemoveDestination provides a mock function with given fields: registrationID, channel 657 func (_m *MockDriverProxy) RemoveDestination(registrationID int64, channel string) (int64, error) { 658 ret := _m.Called(registrationID, channel) 659 660 var r0 int64 661 if rf, ok := ret.Get(0).(func(int64, string) int64); ok { 662 r0 = rf(registrationID, channel) 663 } else { 664 r0 = ret.Get(0).(int64) 665 } 666 667 var r1 error 668 if rf, ok := ret.Get(1).(func(int64, string) error); ok { 669 r1 = rf(registrationID, channel) 670 } else { 671 r1 = ret.Error(1) 672 } 673 674 return r0, r1 675 } 676 677 // RemovePublication provides a mock function with given fields: registrationID 678 func (_m *MockDriverProxy) RemovePublication(registrationID int64) error { 679 ret := _m.Called(registrationID) 680 681 var r0 error 682 if rf, ok := ret.Get(0).(func(int64) error); ok { 683 r0 = rf(registrationID) 684 } else { 685 r0 = ret.Error(0) 686 } 687 688 return r0 689 } 690 691 // RemoveRcvDestination provides a mock function with given fields: registrationID, channel 692 func (_m *MockDriverProxy) RemoveRcvDestination(registrationID int64, channel string) (int64, error) { 693 ret := _m.Called(registrationID, channel) 694 695 var r0 int64 696 if rf, ok := ret.Get(0).(func(int64, string) int64); ok { 697 r0 = rf(registrationID, channel) 698 } else { 699 r0 = ret.Get(0).(int64) 700 } 701 702 var r1 error 703 if rf, ok := ret.Get(1).(func(int64, string) error); ok { 704 r1 = rf(registrationID, channel) 705 } else { 706 r1 = ret.Error(1) 707 } 708 709 return r0, r1 710 } 711 712 // RemoveSubscription provides a mock function with given fields: registrationID 713 func (_m *MockDriverProxy) RemoveSubscription(registrationID int64) error { 714 ret := _m.Called(registrationID) 715 716 var r0 error 717 if rf, ok := ret.Get(0).(func(int64) error); ok { 718 r0 = rf(registrationID) 719 } else { 720 r0 = ret.Error(0) 721 } 722 723 return r0 724 } 725 726 // TimeOfLastDriverKeepalive provides a mock function with given fields: 727 func (_m *MockDriverProxy) TimeOfLastDriverKeepalive() int64 { 728 ret := _m.Called() 729 730 var r0 int64 731 if rf, ok := ret.Get(0).(func() int64); ok { 732 r0 = rf() 733 } else { 734 r0 = ret.Get(0).(int64) 735 } 736 737 return r0 738 } 739 740 type mockConstructorTestingTNewMockDriverProxy interface { 741 mock.TestingT 742 Cleanup(func()) 743 } 744 745 // NewMockDriverProxy creates a new instance of MockDriverProxy. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. 746 func NewMockDriverProxy(t mockConstructorTestingTNewMockDriverProxy) *MockDriverProxy { 747 mock := &MockDriverProxy{} 748 mock.Mock.Test(t) 749 750 t.Cleanup(func() { mock.AssertExpectations(t) }) 751 752 return mock 753 }