/* Try to create, open, and close a multi-page file */ void testMultiPageContent(void) { SM_FileHandle fh; SM_PageHandle ph; int i; testName = "test multi-page content"; ph = (SM_PageHandle) malloc(PAGE_SIZE); // create a new page file TEST_CHECK(createPageFile (TESTPF)); TEST_CHECK(openPageFile (TESTPF, &fh)); printf("created and opened file\n"); //ensure the capacity of the file with 4 pages TEST_CHECK(ensureCapacity(4,&fh)); // read the current page into handle TEST_CHECK(readCurrentBlock(&fh, ph)); // the page should be empty (zero bytes) for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 0), "expected zero byte in current page of freshly initialized page"); printf("current block was empty with the page number =%d\n", getBlockPos(&fh)); // read the next page into handle TEST_CHECK(readNextBlock(&fh, ph)); // the page should be empty (zero bytes) for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 0), "expected zero byte in next page of freshly initialized page"); printf("the next block was empty\n"); printf("the updated page number is =%d\n",getBlockPos(&fh)); // change ph to be a string and write that one to disk for (i=0; i < PAGE_SIZE; i++) ph[i] = (i % 10) + '0'; TEST_CHECK(writeCurrentBlock(&fh, ph)); printf("writing current block with the page number =%d\n", getBlockPos(&fh)); // read back the page containing the string and check that it is correct TEST_CHECK(readCurrentBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); printf("reading back current block into memory with page number =%d\n", getBlockPos(&fh)); // read the last page into handle TEST_CHECK(readLastBlock(&fh, ph)); // the page should be empty (zero bytes) for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 0), "expected zero byte in last page of freshly initialized page"); printf("last block was empty with the page number =%d\n", getBlockPos(&fh)); // change ph to be a string and write that one to disk for (i=0; i < PAGE_SIZE; i++) ph[i] = (i % 10) + '0'; TEST_CHECK(writeCurrentBlock(&fh, ph)); printf("writing current block with the page number =%d\n", getBlockPos(&fh)); // read back the page containing the string and check that it is correct TEST_CHECK(readCurrentBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); printf("reading back current block into memory with page number =%d\n", getBlockPos(&fh)); // destroy new page file TEST_CHECK(destroyPageFile (TESTPF)); TEST_DONE(); }
/**************************************************************** * Function Name: myTestAssign1 * * Description: Additional tests for Storage Manager. * * Parameter: void * * Return: void * * Author: Dhruvit Modi ([email protected]) * Monika Priyadarshani ([email protected]) ****************************************************************/ void myTestAssign1(void) { SM_FileHandle fh; SM_PageHandle ph; int i; ph = (SM_PageHandle) malloc(PAGE_SIZE); // create a new page file TEST_CHECK(createPageFile (TESTPF)); TEST_CHECK(openPageFile (TESTPF, &fh)); printf("created and opened file\n"); for (i=0; i < PAGE_SIZE; i++) ph[i] = (i % 10) + '0'; // write on the first block TEST_CHECK(writeCurrentBlock (&fh, ph)); printf("writing first block\n"); // append empty block TEST_CHECK(appendEmptyBlock(&fh)); printf("append Empty block\n"); // write on the second block TEST_CHECK(writeBlock (1, &fh, ph)); printf("writing second block\n"); TEST_CHECK(appendEmptyBlock(&fh)); printf("append Empty block\n"); // write to the third block TEST_CHECK(writeBlock (2, &fh, ph)); printf("writing third block\n"); // read back the page containing the string and check that it is correct printf("reading first block\n"); TEST_CHECK(readFirstBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); // read back the page containing the string and check that it is correct printf("reading last block\n"); TEST_CHECK(readLastBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); // read back the page containing the string and check that it is correct printf("reading previous block\n"); TEST_CHECK(readPreviousBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); // read back the page containing the string and check that it is correct printf("reading current block\n"); TEST_CHECK(readCurrentBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); // read back the page containing the string and check that it is correct printf("reading next block\n"); TEST_CHECK(readNextBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == (i % 10) + '0'), "character in page read from disk is the one we expected."); // append empty block TEST_CHECK(appendEmptyBlock(&fh)); printf("append Empty block\n"); // ensure capacity TEST_CHECK(ensureCapacity(6, &fh)); printf("ensure capacity\n"); // destroy new page file TEST_CHECK(destroyPageFile (TESTPF)); TEST_DONE(); }
//Read Block RC readBlock (int pageNum, SM_FileHandle *fHandle, SM_PageHandle memPage) { readCurrentBlock(fHandle,memPage); }
//first block RC readFirstBlock (SM_FileHandle *fHandle, SM_PageHandle memPage) { readCurrentBlock(fHandle, memPage); }
void testReadWrite(void) { SM_FileHandle fh; SM_PageHandle ph; int i; ph = (SM_PageHandle) malloc(PAGE_SIZE); testName = "test read and write methods"; TEST_CHECK(createPageFile (TESTPF)); TEST_CHECK(openPageFile (TESTPF, &fh)); ASSERT_TRUE(strcmp(fh.fileName, TESTPF) == 0, "filename correct"); ASSERT_TRUE((fh.totalNumPages == 1), "expect 1 page in new file"); ASSERT_TRUE((fh.curPagePos == 0), "freshly opened file's page position should be 0"); //Writes A, B, C, D, E, F, G, H from 0th page to 7th page for(i = 0; i < 8; i ++) { memset(ph, 'A' + i, PAGE_SIZE); TEST_CHECK(writeBlock (i, &fh, ph)); printf("writing %d th block\n", fh.curPagePos); } // read first page into handle i.e. A TEST_CHECK(readFirstBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 'A'), "expected A"); printf("first block contains A\n"); // read last page into handle i.e. H TEST_CHECK(readLastBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 'H'), "expected H"); printf("last block contains H\n"); // read first page into handle i.e. A readFirstBlock (&fh, ph); // read next page into handle i.e. B TEST_CHECK(readNextBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 'B'), "expected B"); printf("block contains B\n"); readNextBlock (&fh, ph); //C readNextBlock (&fh, ph); //D // read previous page into handle i.e. C TEST_CHECK(readPreviousBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 'C'), "expected C"); printf("block contains C\n"); readNextBlock (&fh, ph); //D readNextBlock (&fh, ph); //E // read current page into handle i.e. E TEST_CHECK(readCurrentBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++) ASSERT_TRUE((ph[i] == 'E'), "expected E"); printf("block contains E\n"); readPreviousBlock (&fh, ph); //D //Replace D with Z memset(ph, 'Z', PAGE_SIZE); TEST_CHECK(writeCurrentBlock (&fh, ph)); printf("writing D with Z\n"); // read current page into handle i.e. Z TEST_CHECK(readCurrentBlock (&fh, ph)); for (i=0; i < PAGE_SIZE; i++){ ASSERT_TRUE((ph[i] == 'Z'), "expected Z"); } printf("block contains Z\n"); TEST_CHECK(closePageFile (&fh)); TEST_CHECK(destroyPageFile (TESTPF)); free(ph); TEST_DONE(); }