@@ -584,26 +584,70 @@ TEST_F(FileTest3, stack_files) {
584584 cout << " merging RO layers as " << fn_merged << endl;
585585 auto merged = lfs->open (fn_merged, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);
586586 merge_files_ro (files, FLAGS_layers, merged);
587- /* auto mergedro =*/ ::open_file_ro (merged, true );
587+ auto mergedro =::open_file_ro (merged, true );
588588 cout << " verifying merged RO layers file" << endl;
589+ verify_file (mergedro);
590+ delete mergedro;
589591 cout << " verifying stacked RO layers file" << endl;
590592 auto lower = open_files_ro (files, FLAGS_layers);
591593 verify_file (lower);
592594 ((LSMTReadOnlyFile *)lower)->m_index =
593595 create_level_index (lower->index ()->buffer (), lower->index ()->size (), 0 , UINT64_MAX, false );
594596 EXPECT_EQ (((LSMTReadOnlyFile *)lower)->close_seal (), -1 );
595597 CommitArgs _ (nullptr );
596- EXPECT_EQ (((LSMTReadOnlyFile *)lower)->commit (_), -1 );
597598 auto stat = ((LSMTReadOnlyFile *)lower)->data_stat ();
598599 LOG_INFO (" RO valid data: `" , stat.valid_data_size );
600+ merged = lfs->open (fn_merged, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);
601+ EXPECT_EQ (lower->flatten (merged), 0 );
602+ cout << " verifying flattened layer of lowers" << endl;
603+ verify_file (fn_merged);
604+ delete merged;
605+ cout << " generating a RW layer by randwrite()" << endl;
606+ auto upper = create_file_rw ();
607+ auto file = stack_files (upper, lower, 0 , true );
608+ randwrite (file, FLAGS_nwrites);
609+ verify_file (file);
610+ cout << " verifying flattened layer of stacked layers" << endl;
611+
612+ merged = lfs->open (fn_merged, O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);
613+ file->flatten (merged);
614+ verify_file (fn_merged);
615+ delete file;
616+ }
617+
618+ TEST_F (FileTest3, seek_data) {
619+ CleanUp ();
620+ cout << " generating " << FLAGS_layers << " RO layers by randwrite()" << endl;
621+ for (int i = 0 ; i < FLAGS_layers; ++i) {
622+ files[i] = create_commit_layer (0 , ut_io_engine);
623+ }
624+
625+ auto lower = open_files_ro (files, FLAGS_layers);
626+ verify_file (lower);
627+ ((LSMTReadOnlyFile *)lower)->m_index =
628+ create_level_index (lower->index ()->buffer (), lower->index ()->size (), 0 , UINT64_MAX, false );
599629 cout << " generating a RW layer by randwrite()" << endl;
600630 auto upper = create_file_rw ();
601631 auto file = stack_files (upper, lower, 0 , true );
602632 randwrite (file, FLAGS_nwrites);
603633 verify_file (file);
634+
635+ auto fmerged = create_file_rw ();
636+ vector<Segment> segs;
637+ auto data = new char [8 <<20 ];
638+ file->seek_data (0 , vsize, segs);
639+ LOG_INFO (" flattern segments count: `" , segs.size ());
640+ for (auto m : segs) {
641+ auto readn = file->pread (data, m.length *ALIGNMENT, m.offset * ALIGNMENT);
642+ EXPECT_EQ (readn, fmerged->pwrite (data, readn, m.offset * ALIGNMENT));
643+ }
644+ verify_file (fmerged);
604645 delete file;
646+ delete fmerged;
647+ delete[] data;
605648}
606649
650+
607651TEST_F (FileTest3, sparsefile_close_seal) {
608652 CleanUp ();
609653 cout << " generating " << FLAGS_layers << " RO layers by randwrite()" << endl;
0 commit comments