| 437 | } |
| 438 | |
| 439 | static void t_table_read_write_seek(int index, enum reftable_hash hash_id) |
| 440 | { |
| 441 | char **names; |
| 442 | struct reftable_buf buf = REFTABLE_BUF_INIT; |
| 443 | int N = 50; |
| 444 | struct reftable_table *table; |
| 445 | struct reftable_block_source source = { 0 }; |
| 446 | int err; |
| 447 | int i = 0; |
| 448 | |
| 449 | struct reftable_iterator it = { 0 }; |
| 450 | struct reftable_buf pastLast = REFTABLE_BUF_INIT; |
| 451 | struct reftable_ref_record ref = { 0 }; |
| 452 | |
| 453 | write_table(&names, &buf, N, 256, hash_id); |
| 454 | |
| 455 | block_source_from_buf(&source, &buf); |
| 456 | |
| 457 | err = reftable_table_new(&table, &source, "file.ref"); |
| 458 | cl_assert(!err); |
| 459 | cl_assert_equal_i(hash_id, reftable_table_hash_id(table)); |
| 460 | |
| 461 | if (!index) { |
| 462 | table->ref_offsets.index_offset = 0; |
| 463 | } else { |
| 464 | cl_assert(table->ref_offsets.index_offset > 0); |
| 465 | } |
| 466 | |
| 467 | for (i = 1; i < N; i++) { |
| 468 | err = reftable_table_init_ref_iterator(table, &it); |
| 469 | cl_assert(!err); |
| 470 | err = reftable_iterator_seek_ref(&it, names[i]); |
| 471 | cl_assert(!err); |
| 472 | err = reftable_iterator_next_ref(&it, &ref); |
| 473 | cl_assert(!err); |
| 474 | cl_assert_equal_s(names[i], ref.refname); |
| 475 | cl_assert_equal_i(REFTABLE_REF_VAL1, ref.value_type); |
| 476 | cl_assert_equal_i(i, ref.value.val1[0]); |
| 477 | |
| 478 | reftable_ref_record_release(&ref); |
| 479 | reftable_iterator_destroy(&it); |
| 480 | } |
| 481 | |
| 482 | cl_assert_equal_i(reftable_buf_addstr(&pastLast, names[N - 1]), |
| 483 | 0); |
| 484 | cl_assert_equal_i(reftable_buf_addstr(&pastLast, "/"), 0); |
| 485 | |
| 486 | err = reftable_table_init_ref_iterator(table, &it); |
| 487 | cl_assert(!err); |
| 488 | err = reftable_iterator_seek_ref(&it, pastLast.buf); |
| 489 | if (err == 0) { |
| 490 | struct reftable_ref_record ref = { 0 }; |
| 491 | int err = reftable_iterator_next_ref(&it, &ref); |
| 492 | cl_assert(err > 0); |
| 493 | } else { |
| 494 | cl_assert(err > 0); |
| 495 | } |
| 496 | |