|
1 | 1 | package pool_test |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "bytes" |
4 | 5 | "context" |
| 6 | + "errors" |
5 | 7 | "strings" |
6 | 8 | "testing" |
7 | 9 |
|
@@ -295,3 +297,66 @@ func TestMessageETag(t *testing.T) { |
295 | 297 | require.NoError(t, err) |
296 | 298 | require.Equal(t, etag, value) |
297 | 299 | } |
| 300 | + |
| 301 | +type malFuncSeeker struct{} |
| 302 | + |
| 303 | +func (m malFuncSeeker) Read(p []byte) (n int, err error) { |
| 304 | + return 0, nil |
| 305 | +} |
| 306 | + |
| 307 | +func (m malFuncSeeker) Seek(offset int64, whence int) (int64, error) { |
| 308 | + return 0, errors.New("seek error") |
| 309 | +} |
| 310 | + |
| 311 | +type malFuncReader struct{} |
| 312 | + |
| 313 | +func (m malFuncReader) Read(p []byte) (n int, err error) { |
| 314 | + return 0, errors.New("read error") |
| 315 | +} |
| 316 | + |
| 317 | +func (m malFuncReader) Seek(offset int64, whence int) (int64, error) { |
| 318 | + return 0, nil |
| 319 | +} |
| 320 | + |
| 321 | +func TestMessageClone(t *testing.T) { |
| 322 | + original := pool.NewMessage(context.Background()) |
| 323 | + original.SetMessageID(1) |
| 324 | + original.SetType(message.Confirmable) |
| 325 | + err := original.SetPath("/test") |
| 326 | + require.NoError(t, err) |
| 327 | + original.AddQuery("q1") |
| 328 | + original.AddQuery("q2") |
| 329 | + original.SetBody(bytes.NewReader([]byte("test body"))) |
| 330 | + |
| 331 | + cloned := pool.NewMessage(original.Context()) |
| 332 | + err = original.Clone(cloned) |
| 333 | + require.NoError(t, err) |
| 334 | + |
| 335 | + require.Equal(t, original.MessageID(), cloned.MessageID()) |
| 336 | + require.Equal(t, original.Type(), cloned.Type()) |
| 337 | + originalPath, err := original.Path() |
| 338 | + require.NoError(t, err) |
| 339 | + clonedPath, err := cloned.Path() |
| 340 | + require.NoError(t, err) |
| 341 | + require.Equal(t, originalPath, clonedPath) |
| 342 | + originalQueries, err := original.Queries() |
| 343 | + require.NoError(t, err) |
| 344 | + clonedQueries, err := cloned.Queries() |
| 345 | + require.NoError(t, err) |
| 346 | + require.Equal(t, originalQueries, clonedQueries) |
| 347 | + originalBody, err := original.ReadBody() |
| 348 | + require.NoError(t, err) |
| 349 | + clonedBody, err := cloned.ReadBody() |
| 350 | + require.NoError(t, err) |
| 351 | + require.Equal(t, originalBody, clonedBody) |
| 352 | + |
| 353 | + original.SetBody(malFuncSeeker{}) |
| 354 | + err = original.Clone(cloned) |
| 355 | + require.Error(t, err) |
| 356 | + require.Equal(t, err.Error(), "seek error") |
| 357 | + |
| 358 | + original.SetBody(malFuncReader{}) |
| 359 | + err = original.Clone(cloned) |
| 360 | + require.Error(t, err) |
| 361 | + require.Contains(t, err.Error(), "read error") |
| 362 | +} |
0 commit comments