1/* 2 * Copyright 2020, Andrew Lindesay <apl@lindesay.co.nz>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#include "TarArchiveServiceTest.h" 6 7#include <stdlib.h> 8 9#include <AutoDeleter.h> 10#include <File.h> 11#include <String.h> 12 13#include <cppunit/TestCaller.h> 14#include <cppunit/TestSuite.h> 15 16#include "TarArchiveHeader.h" 17#include "TarArchiveService.h" 18 19#include "TarArchiveServiceTestSample.h" 20 21 22TarArchiveServiceTest::TarArchiveServiceTest() 23{ 24} 25 26 27TarArchiveServiceTest::~TarArchiveServiceTest() 28{ 29} 30 31 32void 33TarArchiveServiceTest::TestReadHeader() 34{ 35 BString tarPath; 36 if (CreateSampleFile(tarPath) != B_OK) { 37 printf("! unable to setup the sample tar --> exit"); 38 exit(1); 39 } 40 41 BFile *tarFile = new BFile(tarPath, O_RDONLY); 42 tarFile->Seek(2048, SEEK_SET); 43 // known offset in the same data 44 45 TarArchiveHeader header; 46 47// ---------------------- 48 status_t result = TarArchiveService::GetEntry(*tarFile, header); 49// ---------------------- 50 51 CPPUNIT_ASSERT_EQUAL(B_OK, result); 52 CPPUNIT_ASSERT_EQUAL(BString("hicn/somepkg/16.png"), header.FileName()); 53 CPPUNIT_ASSERT_EQUAL(657, header.Length()); 54 CPPUNIT_ASSERT_EQUAL(TAR_FILE_TYPE_NORMAL, header.FileType()); 55 56 delete tarFile; 57 58 DeleteSampleFile(tarPath); 59} 60 61 62/*! This method will store the tar file sample into a temporary file and will 63 return the pathname to that file. 64*/ 65 66status_t 67TarArchiveServiceTest::CreateSampleFile(BString& path) 68{ 69 path.SetTo(tmpnam(NULL)); 70 BFile* file = new BFile(path, O_WRONLY | O_CREAT); 71 ObjectDeleter<BFile> tarIoDeleter(file); 72 status_t result = file->WriteExactly(kSampleTarPayload, kSampleTarLength); 73 74 if (result != B_OK) { 75 printf("! unable to write the sample data to [%s]\n", path.String()); 76 } 77 78 return result; 79} 80 81 82status_t 83TarArchiveServiceTest::DeleteSampleFile(const BString& path) 84{ 85 if (remove(path.String()) != 0) 86 return B_ERROR; 87 return B_OK; 88} 89 90 91/*static*/ void 92TarArchiveServiceTest::AddTests(BTestSuite& parent) 93{ 94 CppUnit::TestSuite& suite = *new CppUnit::TestSuite("TarArchiveServiceTest"); 95 96 suite.addTest( 97 new CppUnit::TestCaller<TarArchiveServiceTest>( 98 "TarArchiveServiceTest::TestReadHeader", 99 &TarArchiveServiceTest::TestReadHeader)); 100 101 parent.addTest("TarArchiveServiceTest", &suite); 102}