|
4 | 4 | "context"
|
5 | 5 | "errors"
|
6 | 6 | "testing"
|
| 7 | + |
| 8 | + "github.com/stretchr/testify/require" |
7 | 9 | )
|
8 | 10 |
|
9 | 11 | func TestIf(t *testing.T) {
|
@@ -299,3 +301,46 @@ func TestIsMethod(t *testing.T) {
|
299 | 301 | })
|
300 | 302 | }
|
301 | 303 | }
|
| 304 | + |
| 305 | +func TestSingleton(t *testing.T) { |
| 306 | + name := "FullMethod" |
| 307 | + |
| 308 | + initCount := 0 |
| 309 | + callCount := 0 |
| 310 | + |
| 311 | + // Create a mock invoker function |
| 312 | + initFn := func() Interceptor { |
| 313 | + initCount++ |
| 314 | + return func(ctx context.Context, info CallInfo, req, reply []interface{}, invoker HandleFunc) error { |
| 315 | + callCount++ |
| 316 | + return nil |
| 317 | + } |
| 318 | + } |
| 319 | + |
| 320 | + // Create the singleton interceptor using the test case input |
| 321 | + singletonInterceptor := SingletonByFullMethod(initFn) |
| 322 | + |
| 323 | + err := singletonInterceptor(context.Background(), CallInfo{ |
| 324 | + FullMethod: name, |
| 325 | + }, nil, nil, nil) |
| 326 | + |
| 327 | + require.Nil(t, err) |
| 328 | + require.Equal(t, 1, initCount) |
| 329 | + require.Equal(t, 1, callCount) |
| 330 | + |
| 331 | + err = singletonInterceptor(context.Background(), CallInfo{ |
| 332 | + FullMethod: name, |
| 333 | + }, nil, nil, nil) |
| 334 | + |
| 335 | + require.Nil(t, err) |
| 336 | + require.Equal(t, 1, initCount) |
| 337 | + require.Equal(t, 2, callCount) |
| 338 | + |
| 339 | + err = singletonInterceptor(context.Background(), CallInfo{ |
| 340 | + FullMethod: "no cache", |
| 341 | + }, nil, nil, nil) |
| 342 | + |
| 343 | + require.Nil(t, err) |
| 344 | + require.Equal(t, 2, initCount) |
| 345 | + require.Equal(t, 3, callCount) |
| 346 | +} |
0 commit comments